Completed reworking to use @X@ wherever possible in place of @LX@

unify_aggr_bld
Salvatore Filippone 4 years ago
parent 56b5d53a86
commit 6fcd8710c8

@ -99,8 +99,6 @@ subroutine mld_c_dec_aggregator_mat_asb(ag,parms,a,desc_a,&
! !
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
type(psb_lc_coo_sparse_mat) :: tmpcoo type(psb_lc_coo_sparse_mat) :: tmpcoo
type(psb_c_coo_sparse_mat) :: acoo
type(psb_lc_csr_sparse_mat) :: acsr1
type(psb_lcspmat_type) :: tmp_ac type(psb_lcspmat_type) :: tmp_ac
integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl
integer(psb_lpk_) :: ntaggr integer(psb_lpk_) :: ntaggr

@ -253,7 +253,7 @@ subroutine mld_c_lc_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_c_inner_mod use mld_c_inner_mod
use mld_c_base_aggregator_mod, mld_protect_name => mld_c_lc_ptap use mld_c_base_aggregator_mod !, mld_protect_name => mld_c_lc_ptap
implicit none implicit none
! Arguments ! Arguments
@ -470,7 +470,7 @@ subroutine mld_lc_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_c_inner_mod use mld_c_inner_mod
use mld_c_base_aggregator_mod, mld_protect_name => mld_lc_ptap use mld_c_base_aggregator_mod!, mld_protect_name => mld_lc_ptap
implicit none implicit none
! Arguments ! Arguments

@ -97,7 +97,7 @@
! !
! !
subroutine mld_caggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_caggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_c_inner_mod, mld_protect_name => mld_caggrmat_nosmth_bld use mld_c_inner_mod, mld_protect_name => mld_caggrmat_nosmth_bld
@ -109,8 +109,8 @@ subroutine mld_caggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms type(mld_sml_parms), intent(inout) :: parms
type(psb_lcspmat_type), intent(inout) :: op_prol type(psb_cspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_lcspmat_type), intent(out) :: ac,op_restr type(psb_lcspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -118,10 +118,9 @@ subroutine mld_caggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
integer(psb_ipk_) :: ictxt, np, me, icomm, minfo integer(psb_ipk_) :: ictxt, np, me, icomm, minfo
character(len=20) :: name character(len=20) :: name
integer(psb_ipk_) :: ierr(5) type(psb_lc_coo_sparse_mat) :: lcoo_prol
type(psb_lcspmat_type) :: la type(psb_c_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_lc_coo_sparse_mat) :: ac_coo, tmpcoo, coo_prol, coo_restr type(psb_c_csr_sparse_mat) :: acsr
type(psb_lc_csr_sparse_mat) :: acsr1, acsr2, acsr
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, & integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, &
& naggr, nzt, naggrm1, naggrp1, i, k & naggr, nzt, naggrm1, naggrp1, i, k
@ -148,13 +147,14 @@ subroutine mld_caggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
naggrp1 = sum(nlaggr(1:me+1)) naggrp1 = sum(nlaggr(1:me+1))
call a%cp_to(acsr) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol) call t_prol%mv_to(lcoo_prol)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = lcoo_prol%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(lcoo_prol%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call lcoo_prol%set_ncols(desc_ac%get_local_cols())
call lcoo_prol%cp_to_icoo(coo_prol,info)
if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol) if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
@ -184,7 +184,7 @@ contains
subroutine check_coo(me,string,coo) subroutine check_coo(me,string,coo)
implicit none implicit none
integer(psb_ipk_) :: me integer(psb_ipk_) :: me
type(psb_lc_coo_sparse_mat) :: coo type(psb_c_coo_sparse_mat) :: coo
character(len=*) :: string character(len=*) :: string
integer(psb_lpk_) :: nr,nc,nz integer(psb_lpk_) :: nr,nc,nz
nr = coo%get_nrows() nr = coo%get_nrows()

@ -103,7 +103,7 @@
! Error code. ! Error code.
! !
subroutine mld_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_c_inner_mod, mld_protect_name => mld_caggrmat_smth_bld use mld_c_inner_mod, mld_protect_name => mld_caggrmat_smth_bld
@ -116,8 +116,8 @@ subroutine mld_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms type(mld_sml_parms), intent(inout) :: parms
type(psb_lcspmat_type), intent(inout) :: op_prol type(psb_cspmat_type), intent(out) :: op_prol,ac,op_restr
type(psb_lcspmat_type), intent(out) :: ac,op_restr type(psb_lcspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -127,8 +127,9 @@ subroutine mld_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: inaggr, nzlp integer(psb_ipk_) :: inaggr, nzlp
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
character(len=20) :: name character(len=20) :: name
type(psb_lc_coo_sparse_mat) :: coo_prol, coo_restr, tmpcoo type(psb_lc_coo_sparse_mat) :: tmpcoo
type(psb_lc_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr type(psb_c_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_c_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr
complex(psb_spk_), allocatable :: adiag(:) complex(psb_spk_), allocatable :: adiag(:)
real(psb_spk_), allocatable :: arwsum(:) real(psb_spk_), allocatable :: arwsum(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
@ -177,7 +178,6 @@ subroutine mld_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
if (info == psb_success_) & if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to(acsr) if (info == psb_success_) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol)
if(info /= psb_success_) then if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
@ -256,19 +256,21 @@ subroutine mld_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
call acsrf%scal(adiag,info) call acsrf%scal(adiag,info)
if (info /= psb_success_) goto 9999 if (info /= psb_success_) goto 9999
call t_prol%mv_to(tmpcoo)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = tmpcoo%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(tmpcoo%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call tmpcoo%set_ncols(desc_ac%get_local_cols())
call coo_prol%mv_to_fmt(csr_prol,info) call tmpcoo%mv_to_ifmt(csr_prol,info)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
call psb_cd_reinit(desc_ac,info) call psb_cd_reinit(desc_ac,info)
! !
! Build the smoothed prolongator using either A or Af ! Build the smoothed prolongator using either A or Af
! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol ! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol
! This is always done through the variable acsrf which ! This is always done through the variable acsrf which
! is a bit less readable, butsaves space and one extra matrix copy ! is a bit less readable, but saves space and one matrix copy
! !
call omega_smooth(omega,acsrf) call omega_smooth(omega,acsrf)
call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info) call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info)
@ -306,7 +308,7 @@ contains
subroutine omega_smooth(omega,acsr) subroutine omega_smooth(omega,acsr)
implicit none implicit none
real(psb_spk_),intent(in) :: omega real(psb_spk_),intent(in) :: omega
type(psb_lc_csr_sparse_mat), intent(inout) :: acsr type(psb_c_csr_sparse_mat), intent(inout) :: acsr
! !
integer(psb_lpk_) :: i,j integer(psb_lpk_) :: i,j
do i=1,acsr%get_nrows() do i=1,acsr%get_nrows()

@ -99,8 +99,6 @@ subroutine mld_d_dec_aggregator_mat_asb(ag,parms,a,desc_a,&
! !
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
type(psb_ld_coo_sparse_mat) :: tmpcoo type(psb_ld_coo_sparse_mat) :: tmpcoo
type(psb_d_coo_sparse_mat) :: acoo
type(psb_ld_csr_sparse_mat) :: acsr1
type(psb_ldspmat_type) :: tmp_ac type(psb_ldspmat_type) :: tmp_ac
integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl
integer(psb_lpk_) :: ntaggr integer(psb_lpk_) :: ntaggr

@ -253,7 +253,7 @@ subroutine mld_d_ld_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_d_inner_mod use mld_d_inner_mod
use mld_d_base_aggregator_mod, mld_protect_name => mld_d_ld_ptap use mld_d_base_aggregator_mod !, mld_protect_name => mld_d_ld_ptap
implicit none implicit none
! Arguments ! Arguments
@ -470,7 +470,7 @@ subroutine mld_ld_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_d_inner_mod use mld_d_inner_mod
use mld_d_base_aggregator_mod, mld_protect_name => mld_ld_ptap use mld_d_base_aggregator_mod!, mld_protect_name => mld_ld_ptap
implicit none implicit none
! Arguments ! Arguments

@ -97,7 +97,7 @@
! !
! !
subroutine mld_daggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_daggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_d_inner_mod, mld_protect_name => mld_daggrmat_nosmth_bld use mld_d_inner_mod, mld_protect_name => mld_daggrmat_nosmth_bld
@ -109,8 +109,8 @@ subroutine mld_daggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms type(mld_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: op_prol type(psb_dspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_ldspmat_type), intent(out) :: ac,op_restr type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -118,10 +118,9 @@ subroutine mld_daggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
integer(psb_ipk_) :: ictxt, np, me, icomm, minfo integer(psb_ipk_) :: ictxt, np, me, icomm, minfo
character(len=20) :: name character(len=20) :: name
integer(psb_ipk_) :: ierr(5) type(psb_ld_coo_sparse_mat) :: lcoo_prol
type(psb_ldspmat_type) :: la type(psb_d_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_ld_coo_sparse_mat) :: ac_coo, tmpcoo, coo_prol, coo_restr type(psb_d_csr_sparse_mat) :: acsr
type(psb_ld_csr_sparse_mat) :: acsr1, acsr2, acsr
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, & integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, &
& naggr, nzt, naggrm1, naggrp1, i, k & naggr, nzt, naggrm1, naggrp1, i, k
@ -148,13 +147,14 @@ subroutine mld_daggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
naggrp1 = sum(nlaggr(1:me+1)) naggrp1 = sum(nlaggr(1:me+1))
call a%cp_to(acsr) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol) call t_prol%mv_to(lcoo_prol)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = lcoo_prol%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(lcoo_prol%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call lcoo_prol%set_ncols(desc_ac%get_local_cols())
call lcoo_prol%cp_to_icoo(coo_prol,info)
if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol) if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
@ -184,7 +184,7 @@ contains
subroutine check_coo(me,string,coo) subroutine check_coo(me,string,coo)
implicit none implicit none
integer(psb_ipk_) :: me integer(psb_ipk_) :: me
type(psb_ld_coo_sparse_mat) :: coo type(psb_d_coo_sparse_mat) :: coo
character(len=*) :: string character(len=*) :: string
integer(psb_lpk_) :: nr,nc,nz integer(psb_lpk_) :: nr,nc,nz
nr = coo%get_nrows() nr = coo%get_nrows()
@ -193,6 +193,5 @@ contains
write(0,*) me,string,nr,nc,& write(0,*) me,string,nr,nc,&
& minval(coo%ia(1:nz)),maxval(coo%ia(1:nz)),& & minval(coo%ia(1:nz)),maxval(coo%ia(1:nz)),&
& minval(coo%ja(1:nz)),maxval(coo%ja(1:nz)) & minval(coo%ja(1:nz)),maxval(coo%ja(1:nz))
end subroutine check_coo end subroutine check_coo
end subroutine mld_daggrmat_nosmth_bld end subroutine mld_daggrmat_nosmth_bld

@ -103,7 +103,7 @@
! Error code. ! Error code.
! !
subroutine mld_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_d_inner_mod, mld_protect_name => mld_daggrmat_smth_bld use mld_d_inner_mod, mld_protect_name => mld_daggrmat_smth_bld
@ -116,8 +116,8 @@ subroutine mld_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms type(mld_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: op_prol type(psb_dspmat_type), intent(out) :: op_prol,ac,op_restr
type(psb_ldspmat_type), intent(out) :: ac,op_restr type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -127,8 +127,9 @@ subroutine mld_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: inaggr, nzlp integer(psb_ipk_) :: inaggr, nzlp
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
character(len=20) :: name character(len=20) :: name
type(psb_ld_coo_sparse_mat) :: coo_prol, coo_restr, tmpcoo type(psb_ld_coo_sparse_mat) :: tmpcoo
type(psb_ld_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr type(psb_d_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_d_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr
real(psb_dpk_), allocatable :: adiag(:) real(psb_dpk_), allocatable :: adiag(:)
real(psb_dpk_), allocatable :: arwsum(:) real(psb_dpk_), allocatable :: arwsum(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
@ -177,7 +178,6 @@ subroutine mld_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
if (info == psb_success_) & if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to(acsr) if (info == psb_success_) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol)
if(info /= psb_success_) then if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
@ -256,19 +256,21 @@ subroutine mld_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
call acsrf%scal(adiag,info) call acsrf%scal(adiag,info)
if (info /= psb_success_) goto 9999 if (info /= psb_success_) goto 9999
call t_prol%mv_to(tmpcoo)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = tmpcoo%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(tmpcoo%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call tmpcoo%set_ncols(desc_ac%get_local_cols())
call coo_prol%mv_to_fmt(csr_prol,info) call tmpcoo%mv_to_ifmt(csr_prol,info)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
call psb_cd_reinit(desc_ac,info) call psb_cd_reinit(desc_ac,info)
! !
! Build the smoothed prolongator using either A or Af ! Build the smoothed prolongator using either A or Af
! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol ! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol
! This is always done through the variable acsrf which ! This is always done through the variable acsrf which
! is a bit less readable, butsaves space and one extra matrix copy ! is a bit less readable, but saves space and one matrix copy
! !
call omega_smooth(omega,acsrf) call omega_smooth(omega,acsrf)
call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info) call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info)
@ -306,7 +308,7 @@ contains
subroutine omega_smooth(omega,acsr) subroutine omega_smooth(omega,acsr)
implicit none implicit none
real(psb_dpk_),intent(in) :: omega real(psb_dpk_),intent(in) :: omega
type(psb_ld_csr_sparse_mat), intent(inout) :: acsr type(psb_d_csr_sparse_mat), intent(inout) :: acsr
! !
integer(psb_lpk_) :: i,j integer(psb_lpk_) :: i,j
do i=1,acsr%get_nrows() do i=1,acsr%get_nrows()

@ -99,8 +99,6 @@ subroutine mld_s_dec_aggregator_mat_asb(ag,parms,a,desc_a,&
! !
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
type(psb_ls_coo_sparse_mat) :: tmpcoo type(psb_ls_coo_sparse_mat) :: tmpcoo
type(psb_s_coo_sparse_mat) :: acoo
type(psb_ls_csr_sparse_mat) :: acsr1
type(psb_lsspmat_type) :: tmp_ac type(psb_lsspmat_type) :: tmp_ac
integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl
integer(psb_lpk_) :: ntaggr integer(psb_lpk_) :: ntaggr

@ -253,7 +253,7 @@ subroutine mld_s_ls_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_s_inner_mod use mld_s_inner_mod
use mld_s_base_aggregator_mod, mld_protect_name => mld_s_ls_ptap use mld_s_base_aggregator_mod !, mld_protect_name => mld_s_ls_ptap
implicit none implicit none
! Arguments ! Arguments
@ -470,7 +470,7 @@ subroutine mld_ls_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_s_inner_mod use mld_s_inner_mod
use mld_s_base_aggregator_mod, mld_protect_name => mld_ls_ptap use mld_s_base_aggregator_mod!, mld_protect_name => mld_ls_ptap
implicit none implicit none
! Arguments ! Arguments

@ -97,7 +97,7 @@
! !
! !
subroutine mld_saggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_saggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_s_inner_mod, mld_protect_name => mld_saggrmat_nosmth_bld use mld_s_inner_mod, mld_protect_name => mld_saggrmat_nosmth_bld
@ -109,8 +109,8 @@ subroutine mld_saggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms type(mld_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: op_prol type(psb_sspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_lsspmat_type), intent(out) :: ac,op_restr type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -118,10 +118,9 @@ subroutine mld_saggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
integer(psb_ipk_) :: ictxt, np, me, icomm, minfo integer(psb_ipk_) :: ictxt, np, me, icomm, minfo
character(len=20) :: name character(len=20) :: name
integer(psb_ipk_) :: ierr(5) type(psb_ls_coo_sparse_mat) :: lcoo_prol
type(psb_lsspmat_type) :: la type(psb_s_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_ls_coo_sparse_mat) :: ac_coo, tmpcoo, coo_prol, coo_restr type(psb_s_csr_sparse_mat) :: acsr
type(psb_ls_csr_sparse_mat) :: acsr1, acsr2, acsr
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, & integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, &
& naggr, nzt, naggrm1, naggrp1, i, k & naggr, nzt, naggrm1, naggrp1, i, k
@ -148,13 +147,14 @@ subroutine mld_saggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
naggrp1 = sum(nlaggr(1:me+1)) naggrp1 = sum(nlaggr(1:me+1))
call a%cp_to(acsr) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol) call t_prol%mv_to(lcoo_prol)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = lcoo_prol%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(lcoo_prol%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call lcoo_prol%set_ncols(desc_ac%get_local_cols())
call lcoo_prol%cp_to_icoo(coo_prol,info)
if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol) if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
@ -184,7 +184,7 @@ contains
subroutine check_coo(me,string,coo) subroutine check_coo(me,string,coo)
implicit none implicit none
integer(psb_ipk_) :: me integer(psb_ipk_) :: me
type(psb_ls_coo_sparse_mat) :: coo type(psb_s_coo_sparse_mat) :: coo
character(len=*) :: string character(len=*) :: string
integer(psb_lpk_) :: nr,nc,nz integer(psb_lpk_) :: nr,nc,nz
nr = coo%get_nrows() nr = coo%get_nrows()

@ -103,7 +103,7 @@
! Error code. ! Error code.
! !
subroutine mld_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_s_inner_mod, mld_protect_name => mld_saggrmat_smth_bld use mld_s_inner_mod, mld_protect_name => mld_saggrmat_smth_bld
@ -116,8 +116,8 @@ subroutine mld_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms type(mld_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: op_prol type(psb_sspmat_type), intent(out) :: op_prol,ac,op_restr
type(psb_lsspmat_type), intent(out) :: ac,op_restr type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -127,8 +127,9 @@ subroutine mld_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: inaggr, nzlp integer(psb_ipk_) :: inaggr, nzlp
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
character(len=20) :: name character(len=20) :: name
type(psb_ls_coo_sparse_mat) :: coo_prol, coo_restr, tmpcoo type(psb_ls_coo_sparse_mat) :: tmpcoo
type(psb_ls_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr type(psb_s_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_s_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr
real(psb_spk_), allocatable :: adiag(:) real(psb_spk_), allocatable :: adiag(:)
real(psb_spk_), allocatable :: arwsum(:) real(psb_spk_), allocatable :: arwsum(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
@ -177,7 +178,6 @@ subroutine mld_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
if (info == psb_success_) & if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to(acsr) if (info == psb_success_) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol)
if(info /= psb_success_) then if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
@ -256,19 +256,21 @@ subroutine mld_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
call acsrf%scal(adiag,info) call acsrf%scal(adiag,info)
if (info /= psb_success_) goto 9999 if (info /= psb_success_) goto 9999
call t_prol%mv_to(tmpcoo)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = tmpcoo%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(tmpcoo%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call tmpcoo%set_ncols(desc_ac%get_local_cols())
call coo_prol%mv_to_fmt(csr_prol,info) call tmpcoo%mv_to_ifmt(csr_prol,info)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
call psb_cd_reinit(desc_ac,info) call psb_cd_reinit(desc_ac,info)
! !
! Build the smoothed prolongator using either A or Af ! Build the smoothed prolongator using either A or Af
! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol ! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol
! This is always done through the variable acsrf which ! This is always done through the variable acsrf which
! is a bit less readable, butsaves space and one extra matrix copy ! is a bit less readable, but saves space and one matrix copy
! !
call omega_smooth(omega,acsrf) call omega_smooth(omega,acsrf)
call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info) call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info)
@ -306,7 +308,7 @@ contains
subroutine omega_smooth(omega,acsr) subroutine omega_smooth(omega,acsr)
implicit none implicit none
real(psb_spk_),intent(in) :: omega real(psb_spk_),intent(in) :: omega
type(psb_ls_csr_sparse_mat), intent(inout) :: acsr type(psb_s_csr_sparse_mat), intent(inout) :: acsr
! !
integer(psb_lpk_) :: i,j integer(psb_lpk_) :: i,j
do i=1,acsr%get_nrows() do i=1,acsr%get_nrows()

@ -99,8 +99,6 @@ subroutine mld_z_dec_aggregator_mat_asb(ag,parms,a,desc_a,&
! !
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
type(psb_lz_coo_sparse_mat) :: tmpcoo type(psb_lz_coo_sparse_mat) :: tmpcoo
type(psb_z_coo_sparse_mat) :: acoo
type(psb_lz_csr_sparse_mat) :: acsr1
type(psb_lzspmat_type) :: tmp_ac type(psb_lzspmat_type) :: tmp_ac
integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl integer(psb_ipk_) :: i_nr, i_nc, i_nl, nzl
integer(psb_lpk_) :: ntaggr integer(psb_lpk_) :: ntaggr

@ -253,7 +253,7 @@ subroutine mld_z_lz_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_z_inner_mod use mld_z_inner_mod
use mld_z_base_aggregator_mod, mld_protect_name => mld_z_lz_ptap use mld_z_base_aggregator_mod !, mld_protect_name => mld_z_lz_ptap
implicit none implicit none
! Arguments ! Arguments
@ -470,7 +470,7 @@ subroutine mld_lz_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_ac,coo_restr,info,desc_ax) & coo_prol,desc_ac,coo_restr,info,desc_ax)
use psb_base_mod use psb_base_mod
use mld_z_inner_mod use mld_z_inner_mod
use mld_z_base_aggregator_mod, mld_protect_name => mld_lz_ptap use mld_z_base_aggregator_mod!, mld_protect_name => mld_lz_ptap
implicit none implicit none
! Arguments ! Arguments

@ -97,7 +97,7 @@
! !
! !
subroutine mld_zaggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_zaggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_z_inner_mod, mld_protect_name => mld_zaggrmat_nosmth_bld use mld_z_inner_mod, mld_protect_name => mld_zaggrmat_nosmth_bld
@ -109,8 +109,8 @@ subroutine mld_zaggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms type(mld_dml_parms), intent(inout) :: parms
type(psb_lzspmat_type), intent(inout) :: op_prol type(psb_zspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_lzspmat_type), intent(out) :: ac,op_restr type(psb_lzspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -118,10 +118,9 @@ subroutine mld_zaggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
integer(psb_ipk_) :: ictxt, np, me, icomm, minfo integer(psb_ipk_) :: ictxt, np, me, icomm, minfo
character(len=20) :: name character(len=20) :: name
integer(psb_ipk_) :: ierr(5) type(psb_lz_coo_sparse_mat) :: lcoo_prol
type(psb_lzspmat_type) :: la type(psb_z_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_lz_coo_sparse_mat) :: ac_coo, tmpcoo, coo_prol, coo_restr type(psb_z_csr_sparse_mat) :: acsr
type(psb_lz_csr_sparse_mat) :: acsr1, acsr2, acsr
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, & integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nzl, ip, &
& naggr, nzt, naggrm1, naggrp1, i, k & naggr, nzt, naggrm1, naggrp1, i, k
@ -148,13 +147,14 @@ subroutine mld_zaggrmat_nosmth_bld(a,desc_a,ilaggr,nlaggr,parms,&
naggrp1 = sum(nlaggr(1:me+1)) naggrp1 = sum(nlaggr(1:me+1))
call a%cp_to(acsr) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol) call t_prol%mv_to(lcoo_prol)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = lcoo_prol%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(lcoo_prol%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call lcoo_prol%set_ncols(desc_ac%get_local_cols())
call lcoo_prol%cp_to_icoo(coo_prol,info)
if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol) if (debug) call check_coo(me,trim(name)//' Check 1 on coo_prol:',coo_prol)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
@ -184,7 +184,7 @@ contains
subroutine check_coo(me,string,coo) subroutine check_coo(me,string,coo)
implicit none implicit none
integer(psb_ipk_) :: me integer(psb_ipk_) :: me
type(psb_lz_coo_sparse_mat) :: coo type(psb_z_coo_sparse_mat) :: coo
character(len=*) :: string character(len=*) :: string
integer(psb_lpk_) :: nr,nc,nz integer(psb_lpk_) :: nr,nc,nz
nr = coo%get_nrows() nr = coo%get_nrows()

@ -103,7 +103,7 @@
! Error code. ! Error code.
! !
subroutine mld_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine mld_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use mld_base_prec_type use mld_base_prec_type
use mld_z_inner_mod, mld_protect_name => mld_zaggrmat_smth_bld use mld_z_inner_mod, mld_protect_name => mld_zaggrmat_smth_bld
@ -116,8 +116,8 @@ subroutine mld_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms type(mld_dml_parms), intent(inout) :: parms
type(psb_lzspmat_type), intent(inout) :: op_prol type(psb_zspmat_type), intent(out) :: op_prol,ac,op_restr
type(psb_lzspmat_type), intent(out) :: ac,op_restr type(psb_lzspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -127,8 +127,9 @@ subroutine mld_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_ipk_) :: inaggr, nzlp integer(psb_ipk_) :: inaggr, nzlp
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
character(len=20) :: name character(len=20) :: name
type(psb_lz_coo_sparse_mat) :: coo_prol, coo_restr, tmpcoo type(psb_lz_coo_sparse_mat) :: tmpcoo
type(psb_lz_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr type(psb_z_coo_sparse_mat) :: coo_prol, coo_restr
type(psb_z_csr_sparse_mat) :: acsr1, acsrf, csr_prol, acsr
complex(psb_dpk_), allocatable :: adiag(:) complex(psb_dpk_), allocatable :: adiag(:)
real(psb_dpk_), allocatable :: arwsum(:) real(psb_dpk_), allocatable :: arwsum(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
@ -177,7 +178,6 @@ subroutine mld_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
if (info == psb_success_) & if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to(acsr) if (info == psb_success_) call a%cp_to(acsr)
call op_prol%mv_to(coo_prol)
if(info /= psb_success_) then if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
@ -256,19 +256,21 @@ subroutine mld_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
call acsrf%scal(adiag,info) call acsrf%scal(adiag,info)
if (info /= psb_success_) goto 9999 if (info /= psb_success_) goto 9999
call t_prol%mv_to(tmpcoo)
inaggr = naggr inaggr = naggr
call psb_cdall(ictxt,desc_ac,info,nl=inaggr) call psb_cdall(ictxt,desc_ac,info,nl=inaggr)
nzlp = coo_prol%get_nzeros() nzlp = tmpcoo%get_nzeros()
call desc_ac%indxmap%g2lip_ins(coo_prol%ja(1:nzlp),info) call desc_ac%indxmap%g2lip_ins(tmpcoo%ja(1:nzlp),info)
call coo_prol%set_ncols(desc_ac%get_local_cols()) call tmpcoo%set_ncols(desc_ac%get_local_cols())
call coo_prol%mv_to_fmt(csr_prol,info) call tmpcoo%mv_to_ifmt(csr_prol,info)
call psb_cdasb(desc_ac,info) call psb_cdasb(desc_ac,info)
call psb_cd_reinit(desc_ac,info) call psb_cd_reinit(desc_ac,info)
! !
! Build the smoothed prolongator using either A or Af ! Build the smoothed prolongator using either A or Af
! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol ! acsr1 = (I-w*D*A) Prol acsr1 = (I-w*D*Af) Prol
! This is always done through the variable acsrf which ! This is always done through the variable acsrf which
! is a bit less readable, butsaves space and one extra matrix copy ! is a bit less readable, but saves space and one matrix copy
! !
call omega_smooth(omega,acsrf) call omega_smooth(omega,acsrf)
call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info) call psb_par_spspmm(acsrf,desc_a,csr_prol,acsr1,desc_ac,info)
@ -306,7 +308,7 @@ contains
subroutine omega_smooth(omega,acsr) subroutine omega_smooth(omega,acsr)
implicit none implicit none
real(psb_dpk_),intent(in) :: omega real(psb_dpk_),intent(in) :: omega
type(psb_lz_csr_sparse_mat), intent(inout) :: acsr type(psb_z_csr_sparse_mat), intent(inout) :: acsr
! !
integer(psb_lpk_) :: i,j integer(psb_lpk_) :: i,j
do i=1,acsr%get_nrows() do i=1,acsr%get_nrows()

@ -102,11 +102,11 @@ subroutine mld_c_base_onelev_mat_asb(lv,a,desc_a,ilaggr,nlaggr,t_prol,info)
! Local variables ! Local variables
character(len=24) :: name character(len=24) :: name
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
type(psb_cspmat_type) :: ac, op_restr, op_prol type(psb_cspmat_type) :: ac, op_restr, op_prol
integer(psb_ipk_) :: nzl, inl integer(psb_ipk_) :: nzl, inl
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
name='mld_c_onelev_mat_asb' name='mld_c_onelev_mat_asb'

@ -102,11 +102,11 @@ subroutine mld_d_base_onelev_mat_asb(lv,a,desc_a,ilaggr,nlaggr,t_prol,info)
! Local variables ! Local variables
character(len=24) :: name character(len=24) :: name
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
type(psb_dspmat_type) :: ac, op_restr, op_prol type(psb_dspmat_type) :: ac, op_restr, op_prol
integer(psb_ipk_) :: nzl, inl integer(psb_ipk_) :: nzl, inl
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
name='mld_d_onelev_mat_asb' name='mld_d_onelev_mat_asb'

@ -102,11 +102,11 @@ subroutine mld_s_base_onelev_mat_asb(lv,a,desc_a,ilaggr,nlaggr,t_prol,info)
! Local variables ! Local variables
character(len=24) :: name character(len=24) :: name
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
type(psb_sspmat_type) :: ac, op_restr, op_prol type(psb_sspmat_type) :: ac, op_restr, op_prol
integer(psb_ipk_) :: nzl, inl integer(psb_ipk_) :: nzl, inl
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
name='mld_s_onelev_mat_asb' name='mld_s_onelev_mat_asb'

@ -102,11 +102,11 @@ subroutine mld_z_base_onelev_mat_asb(lv,a,desc_a,ilaggr,nlaggr,t_prol,info)
! Local variables ! Local variables
character(len=24) :: name character(len=24) :: name
integer(psb_ipk_) :: ictxt, np, me integer(psb_ipk_) :: ictxt, np, me
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
type(psb_zspmat_type) :: ac, op_restr, op_prol type(psb_zspmat_type) :: ac, op_restr, op_prol
integer(psb_ipk_) :: nzl, inl integer(psb_ipk_) :: nzl, inl
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
name='mld_z_onelev_mat_asb' name='mld_z_onelev_mat_asb'

@ -135,36 +135,36 @@ module mld_c_base_aggregator_mod
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_c_ptap end subroutine mld_c_ptap
subroutine mld_c_lc_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_c_lc_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_c_csr_sparse_mat, psb_lcspmat_type, psb_desc_type, & !!$ import :: psb_c_csr_sparse_mat, psb_lcspmat_type, psb_desc_type, &
& psb_lc_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ !!$ & psb_lc_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_c_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_c_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms !!$ type(mld_sml_parms), intent(inout) :: parms
type(psb_lc_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_lc_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_lcspmat_type), intent(out) :: ac !!$ type(psb_lcspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_c_lc_ptap !!$ end subroutine mld_c_lc_ptap
subroutine mld_lc_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_lc_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_lc_csr_sparse_mat, psb_lcspmat_type, psb_desc_type, & !!$ import :: psb_lc_csr_sparse_mat, psb_lcspmat_type, psb_desc_type, &
& psb_lc_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ !!$ & psb_lc_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_lc_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_lc_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms !!$ type(mld_sml_parms), intent(inout) :: parms
type(psb_lc_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_lc_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_lcspmat_type), intent(out) :: ac !!$ type(psb_lcspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_lc_ptap !!$ end subroutine mld_lc_ptap
end interface mld_ptap end interface mld_ptap
contains contains
@ -489,7 +489,6 @@ contains
type(psb_cspmat_type), intent(inout) :: op_restr, op_prol type(psb_cspmat_type), intent(inout) :: op_restr, op_prol
type(psb_clinmap_type), intent(out) :: map type(psb_clinmap_type), intent(out) :: map
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_cspmat_type) :: iop_restr, iop_prol
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20) :: name='c_base_aggregator_bld_map' character(len=20) :: name='c_base_aggregator_bld_map'
@ -506,13 +505,7 @@ contains
! pointers in the map structure. ! pointers in the map structure.
! !
map = psb_linmap(psb_map_aggr_,desc_a,& map = psb_linmap(psb_map_aggr_,desc_a,&
& desc_ac,iop_restr,iop_prol,ilaggr,nlaggr) & desc_ac,op_restr,op_prol,ilaggr,nlaggr)
if (info == psb_success_) call iop_prol%free()
if (info == psb_success_) call iop_restr%free()
if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_Free')
goto 9999
end if
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return

@ -135,36 +135,36 @@ module mld_d_base_aggregator_mod
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_d_ptap end subroutine mld_d_ptap
subroutine mld_d_ld_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_d_ld_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_d_csr_sparse_mat, psb_ldspmat_type, psb_desc_type, & !!$ import :: psb_d_csr_sparse_mat, psb_ldspmat_type, psb_desc_type, &
& psb_ld_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ !!$ & psb_ld_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_d_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_d_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms !!$ type(mld_dml_parms), intent(inout) :: parms
type(psb_ld_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_ld_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_ldspmat_type), intent(out) :: ac !!$ type(psb_ldspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_d_ld_ptap !!$ end subroutine mld_d_ld_ptap
subroutine mld_ld_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_ld_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_ld_csr_sparse_mat, psb_ldspmat_type, psb_desc_type, & !!$ import :: psb_ld_csr_sparse_mat, psb_ldspmat_type, psb_desc_type, &
& psb_ld_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ !!$ & psb_ld_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_ld_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_ld_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms !!$ type(mld_dml_parms), intent(inout) :: parms
type(psb_ld_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_ld_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_ldspmat_type), intent(out) :: ac !!$ type(psb_ldspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_ld_ptap !!$ end subroutine mld_ld_ptap
end interface mld_ptap end interface mld_ptap
contains contains
@ -489,7 +489,6 @@ contains
type(psb_dspmat_type), intent(inout) :: op_restr, op_prol type(psb_dspmat_type), intent(inout) :: op_restr, op_prol
type(psb_dlinmap_type), intent(out) :: map type(psb_dlinmap_type), intent(out) :: map
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_dspmat_type) :: iop_restr, iop_prol
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20) :: name='d_base_aggregator_bld_map' character(len=20) :: name='d_base_aggregator_bld_map'
@ -506,13 +505,7 @@ contains
! pointers in the map structure. ! pointers in the map structure.
! !
map = psb_linmap(psb_map_aggr_,desc_a,& map = psb_linmap(psb_map_aggr_,desc_a,&
& desc_ac,iop_restr,iop_prol,ilaggr,nlaggr) & desc_ac,op_restr,op_prol,ilaggr,nlaggr)
if (info == psb_success_) call iop_prol%free()
if (info == psb_success_) call iop_restr%free()
if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_Free')
goto 9999
end if
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return

@ -135,36 +135,36 @@ module mld_s_base_aggregator_mod
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_s_ptap end subroutine mld_s_ptap
subroutine mld_s_ls_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_s_ls_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_s_csr_sparse_mat, psb_lsspmat_type, psb_desc_type, & !!$ import :: psb_s_csr_sparse_mat, psb_lsspmat_type, psb_desc_type, &
& psb_ls_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ !!$ & psb_ls_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_s_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_s_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms !!$ type(mld_sml_parms), intent(inout) :: parms
type(psb_ls_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_ls_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_lsspmat_type), intent(out) :: ac !!$ type(psb_lsspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_s_ls_ptap !!$ end subroutine mld_s_ls_ptap
subroutine mld_ls_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_ls_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_ls_csr_sparse_mat, psb_lsspmat_type, psb_desc_type, & !!$ import :: psb_ls_csr_sparse_mat, psb_lsspmat_type, psb_desc_type, &
& psb_ls_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ !!$ & psb_ls_coo_sparse_mat, mld_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_ls_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_ls_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_sml_parms), intent(inout) :: parms !!$ type(mld_sml_parms), intent(inout) :: parms
type(psb_ls_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_ls_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_lsspmat_type), intent(out) :: ac !!$ type(psb_lsspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_ls_ptap !!$ end subroutine mld_ls_ptap
end interface mld_ptap end interface mld_ptap
contains contains
@ -489,7 +489,6 @@ contains
type(psb_sspmat_type), intent(inout) :: op_restr, op_prol type(psb_sspmat_type), intent(inout) :: op_restr, op_prol
type(psb_slinmap_type), intent(out) :: map type(psb_slinmap_type), intent(out) :: map
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_sspmat_type) :: iop_restr, iop_prol
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20) :: name='s_base_aggregator_bld_map' character(len=20) :: name='s_base_aggregator_bld_map'
@ -506,13 +505,7 @@ contains
! pointers in the map structure. ! pointers in the map structure.
! !
map = psb_linmap(psb_map_aggr_,desc_a,& map = psb_linmap(psb_map_aggr_,desc_a,&
& desc_ac,iop_restr,iop_prol,ilaggr,nlaggr) & desc_ac,op_restr,op_prol,ilaggr,nlaggr)
if (info == psb_success_) call iop_prol%free()
if (info == psb_success_) call iop_restr%free()
if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_Free')
goto 9999
end if
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return

@ -135,36 +135,36 @@ module mld_z_base_aggregator_mod
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_z_ptap end subroutine mld_z_ptap
subroutine mld_z_lz_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_z_lz_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_z_csr_sparse_mat, psb_lzspmat_type, psb_desc_type, & !!$ import :: psb_z_csr_sparse_mat, psb_lzspmat_type, psb_desc_type, &
& psb_lz_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ !!$ & psb_lz_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_z_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_z_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms !!$ type(mld_dml_parms), intent(inout) :: parms
type(psb_lz_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_lz_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_lzspmat_type), intent(out) :: ac !!$ type(psb_lzspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_z_lz_ptap !!$ end subroutine mld_z_lz_ptap
subroutine mld_lz_ptap(a_csr,desc_a,nlaggr,parms,ac,& !!$ subroutine mld_lz_ptap(a_csr,desc_a,nlaggr,parms,ac,&
& coo_prol,desc_cprol,coo_restr,info,desc_ax) !!$ & coo_prol,desc_cprol,coo_restr,info,desc_ax)
import :: psb_lz_csr_sparse_mat, psb_lzspmat_type, psb_desc_type, & !!$ import :: psb_lz_csr_sparse_mat, psb_lzspmat_type, psb_desc_type, &
& psb_lz_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ !!$ & psb_lz_coo_sparse_mat, mld_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none !!$ implicit none
type(psb_lz_csr_sparse_mat), intent(inout) :: a_csr !!$ type(psb_lz_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a !!$ type(psb_desc_type), intent(in) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) !!$ integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(mld_dml_parms), intent(inout) :: parms !!$ type(mld_dml_parms), intent(inout) :: parms
type(psb_lz_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr !!$ type(psb_lz_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
type(psb_desc_type), intent(inout) :: desc_cprol !!$ type(psb_desc_type), intent(inout) :: desc_cprol
type(psb_lzspmat_type), intent(out) :: ac !!$ type(psb_lzspmat_type), intent(out) :: ac
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
type(psb_desc_type), intent(inout), optional :: desc_ax !!$ type(psb_desc_type), intent(inout), optional :: desc_ax
end subroutine mld_lz_ptap !!$ end subroutine mld_lz_ptap
end interface mld_ptap end interface mld_ptap
contains contains
@ -489,7 +489,6 @@ contains
type(psb_zspmat_type), intent(inout) :: op_restr, op_prol type(psb_zspmat_type), intent(inout) :: op_restr, op_prol
type(psb_zlinmap_type), intent(out) :: map type(psb_zlinmap_type), intent(out) :: map
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_zspmat_type) :: iop_restr, iop_prol
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20) :: name='z_base_aggregator_bld_map' character(len=20) :: name='z_base_aggregator_bld_map'
@ -506,13 +505,7 @@ contains
! pointers in the map structure. ! pointers in the map structure.
! !
map = psb_linmap(psb_map_aggr_,desc_a,& map = psb_linmap(psb_map_aggr_,desc_a,&
& desc_ac,iop_restr,iop_prol,ilaggr,nlaggr) & desc_ac,op_restr,op_prol,ilaggr,nlaggr)
if (info == psb_success_) call iop_prol%free()
if (info == psb_success_) call iop_restr%free()
if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_Free')
goto 9999
end if
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return

Loading…
Cancel
Save