From 04d7122380323c4ee986eec81a401c11a51353cd Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 2 Apr 2026 13:53:40 +0200 Subject: [PATCH] Improved error handling in _bld --- amgprec/impl/amg_c_hierarchy_bld.F90 | 16 ++++++++++------ amgprec/impl/amg_c_smoothers_bld.f90 | 5 +++-- amgprec/impl/amg_d_hierarchy_bld.F90 | 17 +++++++++++------ amgprec/impl/amg_d_smoothers_bld.f90 | 5 +++-- amgprec/impl/amg_s_hierarchy_bld.F90 | 16 ++++++++++------ amgprec/impl/amg_s_smoothers_bld.f90 | 5 +++-- amgprec/impl/amg_z_hierarchy_bld.F90 | 16 ++++++++++------ amgprec/impl/amg_z_smoothers_bld.f90 | 5 +++-- 8 files changed, 53 insertions(+), 32 deletions(-) diff --git a/amgprec/impl/amg_c_hierarchy_bld.F90 b/amgprec/impl/amg_c_hierarchy_bld.F90 index 8b04b474..37e009ea 100644 --- a/amgprec/impl/amg_c_hierarchy_bld.F90 +++ b/amgprec/impl/amg_c_hierarchy_bld.F90 @@ -94,7 +94,8 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info,cpymat) type(amg_c_onelev_type), allocatable :: tprecv(:) logical :: cpymat_ integer(psb_ipk_) :: debug_level, debug_unit - character(len=20) :: name, ch_err + character(len=20) :: name + character(len=40) :: ch_err integer(psb_ipk_), save :: idx_bldtp=-1, idx_matasb=-1 logical, parameter :: do_timings=.false. @@ -333,9 +334,10 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info,cpymat) & prec%precv(i-1)%base_desc,& & ilaggr,nlaggr,op_prol,prec%ag_data,info) if (do_timings) call psb_toc(idx_bldtp) - if (info /= psb_success_) then + if (info /= psb_success_) then + write(ch_err,'(a,i7)') 'Map bld fail @ level ',i call psb_errpush(psb_err_internal_error_,name,& - & a_err='Map build') + & a_err=ch_err) goto 9999 endif @@ -406,7 +408,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info,cpymat) & coarse_sm,coarse_sm2,info) if (newsz < i) then ! - ! We are going back and revisit a previous leve; + ! We are going back and revisit a previous level; ! recover the aggregation. ! ilaggr = prec%precv(newsz)%linmap%iaggr @@ -419,8 +421,9 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info,cpymat) & ilaggr,nlaggr,op_prol,info) if (do_timings) call psb_toc(idx_matasb) if (info /= 0) then + write(ch_err,'(a,i7)') 'Mat asb fail @ level ',newsz call psb_errpush(psb_err_internal_error_,name,& - & a_err='Mat asb') + & a_err=ch_err) goto 9999 endif exit array_build_loop @@ -432,8 +435,9 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info,cpymat) if (do_timings) call psb_toc(idx_matasb) end if if (info /= psb_success_) then + write(ch_err,'(a,i7)') 'Mat asb fail @ level ',i call psb_errpush(psb_err_internal_error_,name,& - & a_err='Map build') + & a_err=ch_err) goto 9999 endif if (i