New timings

l1aggregation
sfilippone 8 months ago
parent 83d435b49e
commit e83bde6896

@ -326,6 +326,7 @@ module amg_base_prec_type
integer(psb_ipk_), parameter :: amg_poly_lottes_ = 0 integer(psb_ipk_), parameter :: amg_poly_lottes_ = 0
integer(psb_ipk_), parameter :: amg_poly_lottes_beta_ = 1 integer(psb_ipk_), parameter :: amg_poly_lottes_beta_ = 1
integer(psb_ipk_), parameter :: amg_poly_new_ = 2 integer(psb_ipk_), parameter :: amg_poly_new_ = 2
integer(psb_ipk_), parameter :: amg_poly_dbg_ = 8
integer(psb_ipk_), parameter :: amg_poly_rho_est_power_ = 0 integer(psb_ipk_), parameter :: amg_poly_rho_est_power_ = 0
@ -575,6 +576,8 @@ contains
val = amg_poly_lottes_beta_ val = amg_poly_lottes_beta_
case('POLY_NEW') case('POLY_NEW')
val = amg_poly_new_ val = amg_poly_new_
case('POLY_DBG')
val = amg_poly_dbg_
case('POLY_RHO_EST_POWER') case('POLY_RHO_EST_POWER')
val = amg_poly_rho_est_power_ val = amg_poly_rho_est_power_
case('A_NORMI') case('A_NORMI')

@ -145,7 +145,7 @@ contains
logical, parameter :: dump=.false., debug=.false., dump_mate=.false., & logical, parameter :: dump=.false., debug=.false., dump_mate=.false., &
& debug_ilaggr=.false., debug_sync=.false., debug_mate=.false. & debug_ilaggr=.false., debug_sync=.false., debug_mate=.false.
integer(psb_ipk_), save :: idx_bldmtc=-1, idx_phase1=-1, idx_phase2=-1, idx_phase3=-1 integer(psb_ipk_), save :: idx_bldmtc=-1, idx_phase1=-1, idx_phase2=-1, idx_phase3=-1
logical, parameter :: do_timings=.true. logical, parameter :: do_timings=.false.
integer, parameter :: ilaggr_neginit=-1, ilaggr_nonlocal=-2 integer, parameter :: ilaggr_neginit=-1, ilaggr_nonlocal=-2
ictxt = desc_a%get_ctxt() ictxt = desc_a%get_ctxt()
@ -608,7 +608,7 @@ contains
logical, parameter :: old_style=.false., sort_minp=.true. logical, parameter :: old_style=.false., sort_minp=.true.
character(len=40) :: name='build_matching', fname character(len=40) :: name='build_matching', fname
integer(psb_ipk_), save :: idx_cmboxp=-1, idx_bldahat=-1, idx_phase2=-1, idx_phase3=-1 integer(psb_ipk_), save :: idx_cmboxp=-1, idx_bldahat=-1, idx_phase2=-1, idx_phase3=-1
logical, parameter :: do_timings=.true. logical, parameter :: do_timings=.false.
ictxt = desc_a%get_ctxt() ictxt = desc_a%get_ctxt()
call psb_info(ictxt,iam,np) call psb_info(ictxt,iam,np)
@ -810,7 +810,7 @@ contains
character(len=80) :: aname character(len=80) :: aname
real(psb_dpk_), parameter :: eps=epsilon(1.d0) real(psb_dpk_), parameter :: eps=epsilon(1.d0)
integer(psb_ipk_), save :: idx_glbt=-1, idx_phase1=-1, idx_phase2=-1 integer(psb_ipk_), save :: idx_glbt=-1, idx_phase1=-1, idx_phase2=-1
logical, parameter :: do_timings=.true. logical, parameter :: do_timings=.false.
logical, parameter :: debug_symmetry = .false., check_size=.false. logical, parameter :: debug_symmetry = .false., check_size=.false.
logical, parameter :: unroll_logtrans=.false. logical, parameter :: unroll_logtrans=.false.

@ -88,7 +88,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,&
type(psb_ldspmat_type) :: tmp_prol, tmp_pg, tmp_restr type(psb_ldspmat_type) :: tmp_prol, tmp_pg, tmp_restr
type(psb_desc_type) :: tmp_desc_ac, tmp_desc_ax, tmp_desc_p type(psb_desc_type) :: tmp_desc_ac, tmp_desc_ax, tmp_desc_p
integer(psb_ipk_), save :: idx_mboxp=-1, idx_spmmbld=-1, idx_sweeps_mult=-1 integer(psb_ipk_), save :: idx_mboxp=-1, idx_spmmbld=-1, idx_sweeps_mult=-1
logical, parameter :: dump=.false., do_timings=.true., debug=.false., & logical, parameter :: dump=.false., do_timings=.false., debug=.false., &
& dump_prol_restr=.false. & dump_prol_restr=.false.
name='d_parmatch_tprol' name='d_parmatch_tprol'

@ -131,7 +131,7 @@ subroutine amg_d_parmatch_spmm_bld_inner(a_csr,desc_a,ilaggr,nlaggr,parms,&
& nzt, naggrm1, naggrp1, i, k & nzt, naggrm1, naggrp1, i, k
integer(psb_lpk_), allocatable :: ia(:),ja(:) integer(psb_lpk_), allocatable :: ia(:),ja(:)
!integer(psb_lpk_) :: nrsave, ncsave, nzsave, nza, nrpsave, ncpsave, nzpsave !integer(psb_lpk_) :: nrsave, ncsave, nzsave, nza, nrpsave, ncpsave, nzpsave
logical, parameter :: do_timings=.true., oldstyle=.false., debug=.false. logical, parameter :: do_timings=.false., oldstyle=.false., debug=.false.
integer(psb_ipk_), save :: idx_spspmm=-1, idx_prolcnv=-1, idx_proltrans=-1, idx_asb=-1 integer(psb_ipk_), save :: idx_spspmm=-1, idx_prolcnv=-1, idx_proltrans=-1, idx_asb=-1
name='amg_parmatch_spmm_bld_inner' name='amg_parmatch_spmm_bld_inner'

@ -486,7 +486,7 @@ subroutine amg_ld_ptap_bld(a_csr,desc_a,nlaggr,parms,ac,&
integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nrl, nzl, ip, & integer(psb_lpk_) :: nrow, nglob, ncol, ntaggr, nrl, nzl, ip, &
& nzt, naggrm1, naggrp1, i, k & nzt, naggrm1, naggrp1, i, k
integer(psb_lpk_) :: nrsave, ncsave, nzsave, nza integer(psb_lpk_) :: nrsave, ncsave, nzsave, nza
logical, parameter :: do_timings=.true., oldstyle=.false., debug=.false. logical, parameter :: do_timings=.false., oldstyle=.false., debug=.false.
integer(psb_ipk_), save :: idx_spspmm=-1 integer(psb_ipk_), save :: idx_spspmm=-1
name='amg_ptap_bld' name='amg_ptap_bld'

@ -104,7 +104,7 @@ subroutine amg_d_soc2_map_bld(iorder,theta,clean_zeros,a,desc_a,nlaggr,ilaggr,in
character(len=20) :: name, ch_err character(len=20) :: name, ch_err
integer(psb_ipk_), save :: idx_soc2_p1=-1, idx_soc2_p2=-1, idx_soc2_p3=-1 integer(psb_ipk_), save :: idx_soc2_p1=-1, idx_soc2_p2=-1, idx_soc2_p3=-1
integer(psb_ipk_), save :: idx_soc2_p0=-1 integer(psb_ipk_), save :: idx_soc2_p0=-1
logical, parameter :: do_timings=.true. logical, parameter :: do_timings=.false.
info=psb_success_ info=psb_success_
name = 'amg_soc2_map_bld' name = 'amg_soc2_map_bld'

@ -591,6 +591,8 @@ contains
integer(psb_ipk_) :: nlev, ilev, sweeps integer(psb_ipk_) :: nlev, ilev, sweeps
logical :: pre, post logical :: pre, post
character(len=20) :: name character(len=20) :: name
logical, parameter :: do_timings=.true.
integer(psb_ipk_), save :: ml_mlt_smth=-1, ml_mlt_rp=-1, ml_mlt_rsd=-1
name = 'inner_inner_mult' name = 'inner_inner_mult'
info = psb_success_ info = psb_success_
@ -608,6 +610,12 @@ contains
if(debug_level > 1) then if(debug_level > 1) then
write(debug_unit,*) me,' inner_mult at level ',level write(debug_unit,*) me,' inner_mult at level ',level
end if end if
if ((do_timings).and.(ml_mlt_smth==-1)) &
& ml_mlt_smth = psb_get_timer_idx("ML-MLT: smoother ")
if ((do_timings).and.(ml_mlt_rp==-1)) &
& ml_mlt_rp = psb_get_timer_idx("ML-MLT: RestProl")
if ((do_timings).and.(ml_mlt_rsd==-1)) &
& ml_mlt_rsd = psb_get_timer_idx("ML-MLT: Residual")
sweeps_post = p%precv(level)%parms%sweeps_post sweeps_post = p%precv(level)%parms%sweeps_post
sweeps_pre = p%precv(level)%parms%sweeps_pre sweeps_pre = p%precv(level)%parms%sweeps_pre
@ -623,7 +631,7 @@ contains
! Apply the first smoother ! Apply the first smoother
! The residual has been prepared before the recursive call. ! The residual has been prepared before the recursive call.
! !
if (do_timings) call psb_tic(ml_mlt_smth)
if (pre) then if (pre) then
if (me >=0) then if (me >=0) then
!!$ write(0,*) me,'Applying smoother pre ', level !!$ write(0,*) me,'Applying smoother pre ', level
@ -646,10 +654,13 @@ contains
end if end if
end if end if
endif endif
if (do_timings) call psb_toc(ml_mlt_smth)
! !
! Compute the residual for next level and call recursively ! Compute the residual for next level and call recursively
! !
if (pre) then if (pre) then
if (do_timings) call psb_tic(ml_mlt_rsd)
call psb_geaxpby(done,vx2l,& call psb_geaxpby(done,vx2l,&
& dzero,vty,& & dzero,vty,&
& base_desc,info) & base_desc,info)
@ -657,6 +668,9 @@ contains
if (info == psb_success_) call psb_spmm(-done,base_a,& if (info == psb_success_) call psb_spmm(-done,base_a,&
& vy2l,done,vty,& & vy2l,done,vty,&
& base_desc,info,work=work,trans=trans) & base_desc,info,work=work,trans=trans)
if (do_timings) call psb_toc(ml_mlt_rsd)
if (do_timings) call psb_tic(ml_mlt_rp)
if (info /= psb_success_) then if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during residue') & a_err='Error during residue')
@ -671,7 +685,9 @@ contains
& a_err='Error during restriction') & a_err='Error during restriction')
goto 9999 goto 9999
end if end if
if (do_timings) call psb_toc(ml_mlt_rp)
else else
if (do_timings) call psb_tic(ml_mlt_rp)
! Shortcut: just transfer x2l. ! Shortcut: just transfer x2l.
call p%precv(level+1)%map_rstr(done,vx2l,& call p%precv(level+1)%map_rstr(done,vx2l,&
& dzero,p%precv(level+1)%wrk%vx2l,& & dzero,p%precv(level+1)%wrk%vx2l,&
@ -682,6 +698,7 @@ contains
& a_err='Error during restriction') & a_err='Error during restriction')
goto 9999 goto 9999
end if end if
if (do_timings) call psb_toc(ml_mlt_rp)
endif endif
call inner_ml_aply(level+1,p,trans,work,info) call inner_ml_aply(level+1,p,trans,work,info)
@ -689,10 +706,12 @@ contains
! !
! Apply the prolongator ! Apply the prolongator
! !
if (do_timings) call psb_tic(ml_mlt_rp)
call p%precv(level+1)%map_prol(done,& call p%precv(level+1)%map_prol(done,&
& p%precv(level+1)%wrk%vy2l,done,vy2l,& & p%precv(level+1)%wrk%vy2l,done,vy2l,&
& info,work=work,& & info,work=work,&
& vtx=p%precv(level+1)%wrk%wv(1),vty=wv(1)) & vtx=p%precv(level+1)%wrk%wv(1),vty=wv(1))
if (do_timings) call psb_toc(ml_mlt_rp)
if (info /= psb_success_) then if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during prolongation') & a_err='Error during prolongation')
@ -700,7 +719,7 @@ contains
end if end if
if (p%precv(level)%parms%ml_cycle == amg_wcycle_ml_) then if (p%precv(level)%parms%ml_cycle == amg_wcycle_ml_) then
if (do_timings) call psb_tic(ml_mlt_rsd)
if (me >=0) then if (me >=0) then
call psb_geaxpby(done,vx2l, dzero,vty,& call psb_geaxpby(done,vx2l, dzero,vty,&
& base_desc,info) & base_desc,info)
@ -708,10 +727,13 @@ contains
& vy2l,done,vty,& & vy2l,done,vty,&
& base_desc,info,work=work,trans=trans) & base_desc,info,work=work,trans=trans)
end if end if
if (do_timings) call psb_toc(ml_mlt_rsd)
if (do_timings) call psb_tic(ml_mlt_rp)
if (info == psb_success_) & if (info == psb_success_) &
& call p%precv(level+1)%map_rstr(done,vty,& & call p%precv(level+1)%map_rstr(done,vty,&
& dzero,p%precv(level+1)%wrk%vx2l,info,work=work,& & dzero,p%precv(level+1)%wrk%vx2l,info,work=work,&
& vtx=wv(1),vty=p%precv(level+1)%wrk%wv(1)) & vtx=wv(1),vty=p%precv(level+1)%wrk%wv(1))
if (do_timings) call psb_toc(ml_mlt_rp)
if (info /= psb_success_) then if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during W-cycle restriction') & a_err='Error during W-cycle restriction')
@ -720,10 +742,12 @@ contains
call inner_ml_aply(level+1,p,trans,work,info) call inner_ml_aply(level+1,p,trans,work,info)
if (do_timings) call psb_tic(ml_mlt_rp)
if (info == psb_success_) call p%precv(level+1)%map_prol(done, & if (info == psb_success_) call p%precv(level+1)%map_prol(done, &
& p%precv(level+1)%wrk%vy2l,done,vy2l,& & p%precv(level+1)%wrk%vy2l,done,vy2l,&
& info,work=work,& & info,work=work,&
& vtx=p%precv(level+1)%wrk%wv(1),vty=wv(1)) & vtx=p%precv(level+1)%wrk%wv(1),vty=wv(1))
if (do_timings) call psb_toc(ml_mlt_rp)
if (info /= psb_success_) then if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& call psb_errpush(psb_err_internal_error_,name,&
@ -736,6 +760,7 @@ contains
if (post) then if (post) then
if (me >=0) then if (me >=0) then
if (do_timings) call psb_tic(ml_mlt_rsd)
call psb_geaxpby(done,vx2l,& call psb_geaxpby(done,vx2l,&
& dzero,vty,& & dzero,vty,&
& base_desc,info) & base_desc,info)
@ -747,7 +772,9 @@ contains
& a_err='Error during residue') & a_err='Error during residue')
goto 9999 goto 9999
end if end if
if (do_timings) call psb_toc(ml_mlt_rsd)
if (do_timings) call psb_tic(ml_mlt_smth)
! !
! Apply the second smoother ! Apply the second smoother
! !
@ -762,6 +789,7 @@ contains
& vty,done,vy2l, base_desc, trans,& & vty,done,vy2l, base_desc, trans,&
& sweeps,work,wv,info,init='Z') & sweeps,work,wv,info,init='Z')
end if end if
if (do_timings) call psb_toc(ml_mlt_smth)
end if end if
if (info /= psb_success_) then if (info /= psb_success_) then
@ -774,12 +802,14 @@ contains
else if (level == nlev) then else if (level == nlev) then
!!$ write(0,*) me,'Applying smoother at top level ',psb_errstatus_fatal() !!$ write(0,*) me,'Applying smoother at top level ',psb_errstatus_fatal()
if (do_timings) call psb_tic(ml_mlt_smth)
if (me >=0) then if (me >=0) then
sweeps = p%precv(level)%parms%sweeps_pre sweeps = p%precv(level)%parms%sweeps_pre
if (info == psb_success_) call p%precv(level)%sm%apply(done,& if (info == psb_success_) call p%precv(level)%sm%apply(done,&
& vx2l,dzero,vy2l,base_desc, trans,& & vx2l,dzero,vy2l,base_desc, trans,&
& sweeps,work,wv,info) & sweeps,work,wv,info)
end if end if
if (do_timings) call psb_toc(ml_mlt_smth)
!!$ write(0,*) me,' Done applying smoother at top level ',psb_errstatus_fatal() !!$ write(0,*) me,' Done applying smoother at top level ',psb_errstatus_fatal()
else else

@ -64,6 +64,9 @@ subroutine amg_d_poly_smoother_apply_vect(alpha,sm,x,beta,y,desc_data,trans,&
character :: trans_, init_ character :: trans_, init_
real(psb_dpk_) :: res, resdenum real(psb_dpk_) :: res, resdenum
character(len=20) :: name='d_poly_smoother_apply_v' character(len=20) :: name='d_poly_smoother_apply_v'
logical, parameter :: do_timings=.true.
integer(psb_ipk_), save :: poly_1=-1, poly_2=-1, poly_3=-1
integer(psb_ipk_), save :: poly_mv=-1, poly_sv=-1, poly_vect=-1
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
@ -93,6 +96,18 @@ subroutine amg_d_poly_smoother_apply_vect(alpha,sm,x,beta,y,desc_data,trans,&
goto 9999 goto 9999
end if end if
if ((do_timings).and.(poly_1==-1)) &
& poly_1 = psb_get_timer_idx("POLY: Chebychev4")
if ((do_timings).and.(poly_2==-1)) &
& poly_2 = psb_get_timer_idx("POLY: OptChebychev4")
if ((do_timings).and.(poly_3==-1)) &
& poly_3 = psb_get_timer_idx("POLY: OptChebychev1")
if ((do_timings).and.(poly_mv==-1)) &
& poly_mv = psb_get_timer_idx("POLY: spMV")
if ((do_timings).and.(poly_vect==-1)) &
& poly_vect = psb_get_timer_idx("POLY: Vectors")
if ((do_timings).and.(poly_sv==-1)) &
& poly_sv = psb_get_timer_idx("POLY: solver")
n_row = desc_data%get_local_rows() n_row = desc_data%get_local_rows()
n_col = desc_data%get_local_cols() n_col = desc_data%get_local_cols()
@ -125,6 +140,7 @@ subroutine amg_d_poly_smoother_apply_vect(alpha,sm,x,beta,y,desc_data,trans,&
select case(sm%variant) select case(sm%variant)
case(amg_poly_lottes_) case(amg_poly_lottes_)
if (do_timings) call psb_tic(poly_1)
block block
real(psb_dpk_) :: cz, cr real(psb_dpk_) :: cz, cr
! b == x ! b == x
@ -154,8 +170,10 @@ subroutine amg_d_poly_smoother_apply_vect(alpha,sm,x,beta,y,desc_data,trans,&
! x_k = x_{k-1} + z_k ! x_k = x_{k-1} + z_k
end do end do
end block end block
if (do_timings) call psb_toc(poly_1)
case(amg_poly_lottes_beta_) case(amg_poly_lottes_beta_)
if (do_timings) call psb_tic(poly_2)
block block
real(psb_dpk_) :: cz, cr real(psb_dpk_) :: cz, cr
@ -194,34 +212,51 @@ subroutine amg_d_poly_smoother_apply_vect(alpha,sm,x,beta,y,desc_data,trans,&
! x_k = x_{k-1} + z_k ! x_k = x_{k-1} + z_k
end do end do
end block end block
if (do_timings) call psb_toc(poly_2)
case(amg_poly_new_) case(amg_poly_new_)
if (do_timings) call psb_tic(poly_3)
block block
real(psb_dpk_) :: sigma, theta, delta, rho_old, rho real(psb_dpk_) :: sigma, theta, delta, rho_old, rho
! b == x ! b == x
! x == tx ! x == tx
! !
sm%rho_ba = 1.12d0
!write(0,*) 'Parameter: ',sm%cf_a,sm%rho_ba
theta = (done+sm%cf_a)/2 theta = (done+sm%cf_a)/2
delta = (done-sm%cf_a)/2 delta = (done-sm%cf_a)/2
sigma = theta/delta sigma = theta/delta
rho_old = done/sigma rho_old = done/sigma
if (do_timings) call psb_tic(poly_sv)
call sm%sv%apply(done,r,dzero,ty,desc_data,trans_,aux,wv(5:),info,init='Z') call sm%sv%apply(done,r,dzero,ty,desc_data,trans_,aux,wv(5:),info,init='Z')
if (do_timings) call psb_toc(poly_sv)
if (do_timings) call psb_tic(poly_vect)
call psb_geaxpby((done/sm%rho_ba),ty,dzero,r,desc_data,info) call psb_geaxpby((done/sm%rho_ba),ty,dzero,r,desc_data,info)
!write(0,*) 'POLY_NEW Iteration',0,' :',psb_genrm2(r,desc_data,info)
if (.false.) then if (.false.) then
call psb_geaxpby((done/theta),r,dzero,tz,desc_data,info) call psb_geaxpby((done/theta),r,dzero,tz,desc_data,info)
call psb_geaxpby(done,tz,done,tx,desc_data,info) call psb_geaxpby(done,tz,done,tx,desc_data,info)
else else
call psb_abgdxyz((done/theta),dzero,done,done,r,tz,tx,desc_data,info) call psb_abgdxyz((done/theta),dzero,done,done,r,tz,tx,desc_data,info)
end if end if
if (do_timings) call psb_toc(poly_vect)
! tz == d ! tz == d
do i=1, sm%pdegree-1 do i=1, sm%pdegree-1
! !
! !
! r_{k-1} = r_k - (1/rho(BA)) B A d_k ! r_{k-1} = r_k - (1/rho(BA)) B A d_k
if (do_timings) call psb_tic(poly_mv)
call psb_spmm(done,sm%pa,tz,dzero,ty,desc_data,info,work=aux,trans=trans_) call psb_spmm(done,sm%pa,tz,dzero,ty,desc_data,info,work=aux,trans=trans_)
if (do_timings) call psb_toc(poly_mv)
if (do_timings) call psb_tic(poly_sv)
call sm%sv%apply(-(done/sm%rho_ba),ty,done,r,desc_data,trans_,aux,wv(5:),info,init='Z') call sm%sv%apply(-(done/sm%rho_ba),ty,done,r,desc_data,trans_,aux,wv(5:),info,init='Z')
if (do_timings) call psb_toc(poly_sv)
if (do_timings) call psb_tic(poly_vect)
!write(0,*) 'POLY_NEW Iteration',i,' :',psb_genrm2(r,desc_data,info)
! !
! d_{k+1} = (rho rho_old) d_k + 2(rho/delta) r_{k+1} ! d_{k+1} = (rho rho_old) d_k + 2(rho/delta) r_{k+1}
@ -236,9 +271,36 @@ subroutine amg_d_poly_smoother_apply_vect(alpha,sm,x,beta,y,desc_data,trans,&
!!$ write(0,*) 'Polynomial smoother NEW ',i,res !!$ write(0,*) 'Polynomial smoother NEW ',i,res
! x_k = x_{k-1} + z_k ! x_k = x_{k-1} + z_k
rho_old = rho rho_old = rho
if (do_timings) call psb_toc(poly_vect)
end do
end block
if (do_timings) call psb_toc(poly_3)
case(amg_poly_dbg_)
block
real(psb_dpk_) :: sigma, theta, delta, rho_old, rho
! b == x
! x == tx
!
write(0,*) 'Parameter: ',sm%cf_a
theta = (done+sm%cf_a)/2
delta = (done-sm%cf_a)/2
sigma = theta/delta
rho_old = done/sigma
call sm%sv%apply(done,r,dzero,ty,desc_data,trans_,aux,wv(5:),info,init='Z')
call psb_geaxpby(done,ty,dzero,r,desc_data,info)
call psb_geaxpby(done/theta,r,dzero,tz,desc_data,info)
write(0,*) 'POLY_DBG Iteration',0,' :',psb_genrm2(r,desc_data,info)
do i=1, sm%pdegree
call psb_geaxpby(done,tz,done,tx,desc_data,info)
call psb_spmm(done,sm%pa,tz,dzero,ty,desc_data,info,work=aux,trans=trans_)
call sm%sv%apply(-(done),ty,done,r,desc_data,trans_,aux,wv(5:),info,init='Z')
write(0,*) 'POLY_DBG Iteration',i,' :',psb_genrm2(r,desc_data,info)
rho = done/(2*sigma - rho_old)
call psb_geaxpby((2*rho/delta),r,rho*rho_old,tz,desc_data,info)
rho_old = rho
end do end do
end block end block
case default case default
info=psb_err_internal_error_ info=psb_err_internal_error_

@ -87,10 +87,14 @@ subroutine amg_d_poly_smoother_bld(a,desc_a,sm,info,amold,vmold,imold)
& a_err='invalid sm%degree for poly_beta') & a_err='invalid sm%degree for poly_beta')
goto 9999 goto 9999
end if end if
case(amg_poly_new_) case(amg_poly_new_, amg_poly_dbg_)
if ((1<=sm%pdegree).and.(sm%pdegree<=30)) then if ((1<=sm%pdegree).and.(sm%pdegree<=30)) then
!Ok !Ok
!!$ write(0,*) 'Vector: '
!!$ do i=1,size(amg_d_poly_a_vect)
!!$ write(0,*) i,amg_d_poly_a_vect(i)
!!$ end do
sm%cf_a = amg_d_poly_a_vect(sm%pdegree) sm%cf_a = amg_d_poly_a_vect(sm%pdegree)
else else
info = psb_err_internal_error_ info = psb_err_internal_error_

@ -58,7 +58,7 @@ subroutine amg_d_poly_smoother_cseti(sm,what,val,info,idx)
sm%pdegree = val sm%pdegree = val
case('POLY_VARIANT') case('POLY_VARIANT')
select case(val) select case(val)
case(amg_poly_lottes_,amg_poly_lottes_beta_,amg_poly_new_) case(amg_poly_lottes_,amg_poly_lottes_beta_,amg_poly_new_,amg_poly_dbg_)
sm%variant = val sm%variant = val
case default case default
write(0,*) 'Invalid choice for POLY_VARIANT, defaulting to amg_poly_lottes_',val write(0,*) 'Invalid choice for POLY_VARIANT, defaulting to amg_poly_lottes_',val

Loading…
Cancel
Save