Fixes for application 1lev, defaults, precdescr.

stopcriterion
Salvatore Filippone 7 years ago
parent 79f098c466
commit 079af357ed

@ -135,15 +135,17 @@ subroutine mld_cfile_prec_descr(prec,iout,root)
if (is_symgs) then
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
nswps = prec%precv(1)%parms%sweeps_pre
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
@ -154,11 +156,14 @@ subroutine mld_cfile_prec_descr(prec,iout,root)
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details

@ -482,7 +482,7 @@ contains
integer(psb_ipk_) :: sweeps_post, sweeps_pre
! Local variables
integer(psb_ipk_) :: ictxt,np,me
integer(psb_ipk_) :: i, err_act
integer(psb_ipk_) :: i, err_act, k
integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_ipk_) :: nlev, ilev, sweeps
logical :: pre, post
@ -515,11 +515,31 @@ contains
goto 9999
end if
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(cone,&
& mlprec_wrk(level)%vx2l,czero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
if (allocated(p%precv(level)%sm2a)) then
call psb_geaxpby(cone,&
& mlprec_wrk(level)%vx2l,czero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc,info)
sweeps = max(p%precv(level)%parms%sweeps_pre,p%precv(level)%parms%sweeps_post)
do k=1, sweeps
call p%precv(level)%sm%apply(cone,&
& mlprec_wrk(level)%vy2l,czero,mlprec_wrk(level)%vtx,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
call p%precv(level)%sm2a%apply(cone,&
& mlprec_wrk(level)%vtx,czero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
end do
else
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(cone,&
& mlprec_wrk(level)%vx2l,czero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
end if
if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during ADD smoother_apply')

@ -143,8 +143,8 @@ subroutine mld_cprecaply(prec,x,y,desc_data,info,trans,work)
!
! Number of levels = 1: apply the base preconditioner
!
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (allocated(prec%precv(1)%sm2a)) then
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
!
! This is a kludge for handling the symmetrized GS case.
! Will need some rethinking.
@ -179,6 +179,7 @@ subroutine mld_cprecaply(prec,x,y,desc_data,info,trans,work)
call psb_gefree(w2,desc_data,info)
else
nswps = prec%precv(1)%parms%sweeps_pre
call prec%precv(1)%sm%apply(cone,x,czero,y,desc_data,trans_,&
& nswps, work_,info)
end if

@ -161,16 +161,6 @@ subroutine mld_cprecinit(prec,ptype,info)
ilev_ = 1
allocate(prec%precv(nlev_),stat=info)
call prec%set('SMOOTHER_TYPE','FBGS',info)
!!$
!!$ fbgs: block
!!$ type(mld_c_jac_smoother_type) :: mld_c_jac_smoother_mold
!!$ type(mld_c_gs_solver_type) :: mld_c_gs_solver_mold
!!$ type(mld_c_bwgs_solver_type) :: mld_c_bwgs_solver_mold
!!$ call prec%precv(nlev_)%set(mld_c_jac_smoother_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_c_gs_solver_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_c_jac_smoother_mold,info,pos='post')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_c_bwgs_solver_mold,info,pos='post')
!!$ end block fbgs
call prec%precv(ilev_)%default()
case ('BJAC')

@ -135,15 +135,17 @@ subroutine mld_dfile_prec_descr(prec,iout,root)
if (is_symgs) then
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
nswps = prec%precv(1)%parms%sweeps_pre
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
@ -154,11 +156,14 @@ subroutine mld_dfile_prec_descr(prec,iout,root)
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details

@ -482,7 +482,7 @@ contains
integer(psb_ipk_) :: sweeps_post, sweeps_pre
! Local variables
integer(psb_ipk_) :: ictxt,np,me
integer(psb_ipk_) :: i, err_act
integer(psb_ipk_) :: i, err_act, k
integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_ipk_) :: nlev, ilev, sweeps
logical :: pre, post
@ -515,11 +515,31 @@ contains
goto 9999
end if
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(done,&
& mlprec_wrk(level)%vx2l,dzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
if (allocated(p%precv(level)%sm2a)) then
call psb_geaxpby(done,&
& mlprec_wrk(level)%vx2l,dzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc,info)
sweeps = max(p%precv(level)%parms%sweeps_pre,p%precv(level)%parms%sweeps_post)
do k=1, sweeps
call p%precv(level)%sm%apply(done,&
& mlprec_wrk(level)%vy2l,dzero,mlprec_wrk(level)%vtx,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
call p%precv(level)%sm2a%apply(done,&
& mlprec_wrk(level)%vtx,dzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
end do
else
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(done,&
& mlprec_wrk(level)%vx2l,dzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
end if
if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during ADD smoother_apply')

@ -143,8 +143,8 @@ subroutine mld_dprecaply(prec,x,y,desc_data,info,trans,work)
!
! Number of levels = 1: apply the base preconditioner
!
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (allocated(prec%precv(1)%sm2a)) then
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
!
! This is a kludge for handling the symmetrized GS case.
! Will need some rethinking.
@ -179,6 +179,7 @@ subroutine mld_dprecaply(prec,x,y,desc_data,info,trans,work)
call psb_gefree(w2,desc_data,info)
else
nswps = prec%precv(1)%parms%sweeps_pre
call prec%precv(1)%sm%apply(done,x,dzero,y,desc_data,trans_,&
& nswps, work_,info)
end if

@ -164,16 +164,6 @@ subroutine mld_dprecinit(prec,ptype,info)
ilev_ = 1
allocate(prec%precv(nlev_),stat=info)
call prec%set('SMOOTHER_TYPE','FBGS',info)
!!$
!!$ fbgs: block
!!$ type(mld_d_jac_smoother_type) :: mld_d_jac_smoother_mold
!!$ type(mld_d_gs_solver_type) :: mld_d_gs_solver_mold
!!$ type(mld_d_bwgs_solver_type) :: mld_d_bwgs_solver_mold
!!$ call prec%precv(nlev_)%set(mld_d_jac_smoother_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_d_gs_solver_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_d_jac_smoother_mold,info,pos='post')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_d_bwgs_solver_mold,info,pos='post')
!!$ end block fbgs
call prec%precv(ilev_)%default()
case ('BJAC')

@ -135,15 +135,17 @@ subroutine mld_sfile_prec_descr(prec,iout,root)
if (is_symgs) then
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
nswps = prec%precv(1)%parms%sweeps_pre
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
@ -154,11 +156,14 @@ subroutine mld_sfile_prec_descr(prec,iout,root)
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details

@ -482,7 +482,7 @@ contains
integer(psb_ipk_) :: sweeps_post, sweeps_pre
! Local variables
integer(psb_ipk_) :: ictxt,np,me
integer(psb_ipk_) :: i, err_act
integer(psb_ipk_) :: i, err_act, k
integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_ipk_) :: nlev, ilev, sweeps
logical :: pre, post
@ -515,11 +515,31 @@ contains
goto 9999
end if
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(sone,&
& mlprec_wrk(level)%vx2l,szero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
if (allocated(p%precv(level)%sm2a)) then
call psb_geaxpby(sone,&
& mlprec_wrk(level)%vx2l,szero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc,info)
sweeps = max(p%precv(level)%parms%sweeps_pre,p%precv(level)%parms%sweeps_post)
do k=1, sweeps
call p%precv(level)%sm%apply(sone,&
& mlprec_wrk(level)%vy2l,szero,mlprec_wrk(level)%vtx,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
call p%precv(level)%sm2a%apply(sone,&
& mlprec_wrk(level)%vtx,szero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
end do
else
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(sone,&
& mlprec_wrk(level)%vx2l,szero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
end if
if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during ADD smoother_apply')

@ -143,8 +143,8 @@ subroutine mld_sprecaply(prec,x,y,desc_data,info,trans,work)
!
! Number of levels = 1: apply the base preconditioner
!
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (allocated(prec%precv(1)%sm2a)) then
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
!
! This is a kludge for handling the symmetrized GS case.
! Will need some rethinking.
@ -179,6 +179,7 @@ subroutine mld_sprecaply(prec,x,y,desc_data,info,trans,work)
call psb_gefree(w2,desc_data,info)
else
nswps = prec%precv(1)%parms%sweeps_pre
call prec%precv(1)%sm%apply(sone,x,szero,y,desc_data,trans_,&
& nswps, work_,info)
end if

@ -161,16 +161,6 @@ subroutine mld_sprecinit(prec,ptype,info)
ilev_ = 1
allocate(prec%precv(nlev_),stat=info)
call prec%set('SMOOTHER_TYPE','FBGS',info)
!!$
!!$ fbgs: block
!!$ type(mld_s_jac_smoother_type) :: mld_s_jac_smoother_mold
!!$ type(mld_s_gs_solver_type) :: mld_s_gs_solver_mold
!!$ type(mld_s_bwgs_solver_type) :: mld_s_bwgs_solver_mold
!!$ call prec%precv(nlev_)%set(mld_s_jac_smoother_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_s_gs_solver_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_s_jac_smoother_mold,info,pos='post')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_s_bwgs_solver_mold,info,pos='post')
!!$ end block fbgs
call prec%precv(ilev_)%default()
case ('BJAC')

@ -135,15 +135,17 @@ subroutine mld_zfile_prec_descr(prec,iout,root)
if (is_symgs) then
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
nswps = prec%precv(1)%parms%sweeps_pre
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
@ -154,11 +156,14 @@ subroutine mld_zfile_prec_descr(prec,iout,root)
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details

@ -482,7 +482,7 @@ contains
integer(psb_ipk_) :: sweeps_post, sweeps_pre
! Local variables
integer(psb_ipk_) :: ictxt,np,me
integer(psb_ipk_) :: i, err_act
integer(psb_ipk_) :: i, err_act, k
integer(psb_ipk_) :: debug_level, debug_unit
integer(psb_ipk_) :: nlev, ilev, sweeps
logical :: pre, post
@ -515,11 +515,31 @@ contains
goto 9999
end if
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(zone,&
& mlprec_wrk(level)%vx2l,zzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
if (allocated(p%precv(level)%sm2a)) then
call psb_geaxpby(zone,&
& mlprec_wrk(level)%vx2l,zzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc,info)
sweeps = max(p%precv(level)%parms%sweeps_pre,p%precv(level)%parms%sweeps_post)
do k=1, sweeps
call p%precv(level)%sm%apply(zone,&
& mlprec_wrk(level)%vy2l,zzero,mlprec_wrk(level)%vtx,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
call p%precv(level)%sm2a%apply(zone,&
& mlprec_wrk(level)%vtx,zzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& ione,work,info,init='Z')
end do
else
sweeps = p%precv(level)%parms%sweeps_pre
call p%precv(level)%sm%apply(zone,&
& mlprec_wrk(level)%vx2l,zzero,mlprec_wrk(level)%vy2l,&
& p%precv(level)%base_desc, trans,&
& sweeps,work,info,init='Z')
end if
if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,&
& a_err='Error during ADD smoother_apply')

@ -143,8 +143,8 @@ subroutine mld_zprecaply(prec,x,y,desc_data,info,trans,work)
!
! Number of levels = 1: apply the base preconditioner
!
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
if (allocated(prec%precv(1)%sm2a)) then
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
!
! This is a kludge for handling the symmetrized GS case.
! Will need some rethinking.
@ -179,6 +179,7 @@ subroutine mld_zprecaply(prec,x,y,desc_data,info,trans,work)
call psb_gefree(w2,desc_data,info)
else
nswps = prec%precv(1)%parms%sweeps_pre
call prec%precv(1)%sm%apply(zone,x,zzero,y,desc_data,trans_,&
& nswps, work_,info)
end if

@ -164,16 +164,6 @@ subroutine mld_zprecinit(prec,ptype,info)
ilev_ = 1
allocate(prec%precv(nlev_),stat=info)
call prec%set('SMOOTHER_TYPE','FBGS',info)
!!$
!!$ fbgs: block
!!$ type(mld_z_jac_smoother_type) :: mld_z_jac_smoother_mold
!!$ type(mld_z_gs_solver_type) :: mld_z_gs_solver_mold
!!$ type(mld_z_bwgs_solver_type) :: mld_z_bwgs_solver_mold
!!$ call prec%precv(nlev_)%set(mld_z_jac_smoother_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_z_gs_solver_mold,info,pos='pre')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_z_jac_smoother_mold,info,pos='post')
!!$ if (info == 0) call prec%precv(nlev_)%set(mld_z_bwgs_solver_mold,info,pos='post')
!!$ end block fbgs
call prec%precv(ilev_)%default()
case ('BJAC')

Loading…
Cancel
Save