From da3f16ba56f5bc82efc8afbaf3649493cf105dd3 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 9 Jul 2025 11:30:41 +0200 Subject: [PATCH] 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 73324073..904bc6e7 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 7d8f477b..952bb1e9 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 a0cce83d..f384ef33 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 784b78f6..dd4be13a 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 7dd65789..0f8c18ab 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 a1b59467..d647d270 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 3b5a41af..d76b48ea 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 5cbffb11..9c31b0e7 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