From c8d065fa5559f2ab9d2ffde1566cf3465bb739dd Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 15 Apr 2026 10:19:50 +0200 Subject: [PATCH] Fix double allocation in DDIAG%BLD --- amgprec/impl/solver/amg_c_diag_solver_bld.f90 | 8 ++++++++ amgprec/impl/solver/amg_d_diag_solver_bld.f90 | 8 ++++++++ amgprec/impl/solver/amg_s_diag_solver_bld.f90 | 8 ++++++++ amgprec/impl/solver/amg_z_diag_solver_bld.f90 | 8 ++++++++ 4 files changed, 32 insertions(+) diff --git a/amgprec/impl/solver/amg_c_diag_solver_bld.f90 b/amgprec/impl/solver/amg_c_diag_solver_bld.f90 index ed294460..e33c2952 100644 --- a/amgprec/impl/solver/amg_c_diag_solver_bld.f90 +++ b/amgprec/impl/solver/amg_c_diag_solver_bld.f90 @@ -91,6 +91,10 @@ subroutine amg_c_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = cone/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) @@ -172,6 +176,10 @@ subroutine amg_c_l1_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = cone/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) diff --git a/amgprec/impl/solver/amg_d_diag_solver_bld.f90 b/amgprec/impl/solver/amg_d_diag_solver_bld.f90 index 507fe825..3c357e15 100644 --- a/amgprec/impl/solver/amg_d_diag_solver_bld.f90 +++ b/amgprec/impl/solver/amg_d_diag_solver_bld.f90 @@ -91,6 +91,10 @@ subroutine amg_d_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = done/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) @@ -172,6 +176,10 @@ subroutine amg_d_l1_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = done/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) diff --git a/amgprec/impl/solver/amg_s_diag_solver_bld.f90 b/amgprec/impl/solver/amg_s_diag_solver_bld.f90 index c1421dc9..7561bca2 100644 --- a/amgprec/impl/solver/amg_s_diag_solver_bld.f90 +++ b/amgprec/impl/solver/amg_s_diag_solver_bld.f90 @@ -91,6 +91,10 @@ subroutine amg_s_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = sone/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) @@ -172,6 +176,10 @@ subroutine amg_s_l1_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = sone/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) diff --git a/amgprec/impl/solver/amg_z_diag_solver_bld.f90 b/amgprec/impl/solver/amg_z_diag_solver_bld.f90 index 6029fe71..43d23e41 100644 --- a/amgprec/impl/solver/amg_z_diag_solver_bld.f90 +++ b/amgprec/impl/solver/amg_z_diag_solver_bld.f90 @@ -91,6 +91,10 @@ subroutine amg_z_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = zone/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d) @@ -172,6 +176,10 @@ subroutine amg_z_l1_diag_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold) sv%d(i) = zone/sv%d(i) end if end do + if (allocated(sv%dv)) then + call sv%dv%free(info) + deallocate(sv%dv) + end if allocate(sv%dv,stat=info) if (info == psb_success_) then call sv%dv%bld(sv%d)