|
|
@ -34,7 +34,7 @@
|
|
|
|
!!$ POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
!!$ POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
!!$
|
|
|
|
!!$
|
|
|
|
!!$
|
|
|
|
!!$
|
|
|
|
subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
subroutine mld_dmlprec_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Compute Y <- beta*Y + alpha*K^-1 X
|
|
|
|
! Compute Y <- beta*Y + alpha*K^-1 X
|
|
|
|
! where K is a multilevel preconditioner stored in baseprecv
|
|
|
|
! where K is a multilevel preconditioner stored in baseprecv
|
|
|
@ -55,7 +55,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
! as many subdomains as there are processes (except for the coarsest level where
|
|
|
|
! as many subdomains as there are processes (except for the coarsest level where
|
|
|
|
! we might have a replicated index space). Thus the sum apparently disappears
|
|
|
|
! we might have a replicated index space). Thus the sum apparently disappears
|
|
|
|
! from our code, but only apparently, because it is implicit in the call
|
|
|
|
! from our code, but only apparently, because it is implicit in the call
|
|
|
|
! to psb_baseprc_aply.
|
|
|
|
! to mld_baseprec_aply.
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! A bit of description of the baseprecv(:) data structure:
|
|
|
|
! A bit of description of the baseprecv(:) data structure:
|
|
|
|
! 1. Number of levels = NLEV = size(baseprecv(:))
|
|
|
|
! 1. Number of levels = NLEV = size(baseprecv(:))
|
|
|
@ -84,7 +84,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
!
|
|
|
|
!
|
|
|
|
|
|
|
|
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_base_mod
|
|
|
|
use psb_prec_mod, mld_protect_name => psb_dmlprc_aply
|
|
|
|
use psb_prec_mod, mld_protect_name => mld_dmlprec_aply
|
|
|
|
implicit none
|
|
|
|
implicit none
|
|
|
|
|
|
|
|
|
|
|
|
type(psb_desc_type),intent(in) :: desc_data
|
|
|
|
type(psb_desc_type),intent(in) :: desc_data
|
|
|
@ -112,11 +112,10 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
end type psb_mlprec_wrk_type
|
|
|
|
end type psb_mlprec_wrk_type
|
|
|
|
type(psb_mlprec_wrk_type), allocatable :: mlprec_wrk(:)
|
|
|
|
type(psb_mlprec_wrk_type), allocatable :: mlprec_wrk(:)
|
|
|
|
|
|
|
|
|
|
|
|
name='psb_dmlprc_aply'
|
|
|
|
name='mld_dmlprec_aply'
|
|
|
|
info = 0
|
|
|
|
info = 0
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
call psb_erractionsave(err_act)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ictxt = psb_cd_get_context(desc_data)
|
|
|
|
ictxt = psb_cd_get_context(desc_data)
|
|
|
|
call psb_info(ictxt, me, np)
|
|
|
|
call psb_info(ictxt, me, np)
|
|
|
|
|
|
|
|
|
|
|
@ -156,10 +155,17 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
! 1..NLEV <=> (j) <-> 0
|
|
|
|
! 1..NLEV <=> (j) <-> 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(alpha,baseprecv(1),x,beta,y,&
|
|
|
|
call mld_baseprec_aply(alpha,baseprecv(1),x,beta,y,&
|
|
|
|
& baseprecv(1)%base_desc,trans,work,info)
|
|
|
|
& baseprecv(1)%base_desc,trans,work,info)
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
allocate(mlprec_wrk(1)%x2l(size(x)),mlprec_wrk(1)%y2l(size(y)))
|
|
|
|
allocate(mlprec_wrk(1)%x2l(size(x)),mlprec_wrk(1)%y2l(size(y)), stat=info)
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/size(x)+size(y),0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
mlprec_wrk(1)%x2l(:) = x(:)
|
|
|
|
mlprec_wrk(1)%x2l(:) = x(:)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -172,7 +178,9 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
& mlprec_wrk(ilev)%tx(max(n_row,n_col)),&
|
|
|
|
& mlprec_wrk(ilev)%tx(max(n_row,n_col)),&
|
|
|
|
& mlprec_wrk(ilev)%ty(max(n_row,n_col)), stat=info)
|
|
|
|
& mlprec_wrk(ilev)%ty(max(n_row,n_col)), stat=info)
|
|
|
|
if (info /= 0) then
|
|
|
|
if (info /= 0) then
|
|
|
|
call psb_errpush(4010,name,a_err='Allocate')
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/2*(nc2l+max(n_row,n_col)),0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
goto 9999
|
|
|
|
goto 9999
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
@ -214,7 +222,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',icm
|
|
|
|
write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',icm
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(ilev),&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(ilev),&
|
|
|
|
& mlprec_wrk(ilev)%x2l,dzero,mlprec_wrk(ilev)%y2l,&
|
|
|
|
& mlprec_wrk(ilev)%x2l,dzero,mlprec_wrk(ilev)%y2l,&
|
|
|
|
& baseprecv(ilev)%desc_data, 'N',work,info)
|
|
|
|
& baseprecv(ilev)%desc_data, 'N',work,info)
|
|
|
|
|
|
|
|
|
|
|
@ -260,7 +268,6 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
|
|
|
|
|
|
|
|
case(post_smooth_)
|
|
|
|
case(post_smooth_)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Post smoothing.
|
|
|
|
! Post smoothing.
|
|
|
|
! 1. X(1) = Xext
|
|
|
|
! 1. X(1) = Xext
|
|
|
@ -288,7 +295,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
& mlprec_wrk(1)%tx(nc2l), stat=info)
|
|
|
|
& mlprec_wrk(1)%tx(nc2l), stat=info)
|
|
|
|
mlprec_wrk(1)%x2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%x2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%tx(:) = dzero
|
|
|
|
mlprec_wrk(1)%tx(:) = dzero
|
|
|
|
|
|
|
|
|
|
|
|
call psb_geaxpby(done,x,dzero,mlprec_wrk(1)%tx,&
|
|
|
|
call psb_geaxpby(done,x,dzero,mlprec_wrk(1)%tx,&
|
|
|
|
& baseprecv(1)%base_desc,info)
|
|
|
|
& baseprecv(1)%base_desc,info)
|
|
|
@ -313,7 +320,9 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
& mlprec_wrk(ilev)%x2l(nc2l), stat=info)
|
|
|
|
& mlprec_wrk(ilev)%x2l(nc2l), stat=info)
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
if (info /= 0) then
|
|
|
|
call psb_errpush(4010,name,a_err='Allocate')
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/4*nc2l,0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
goto 9999
|
|
|
|
goto 9999
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
@ -370,7 +379,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
enddo
|
|
|
|
enddo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(nlev),mlprec_wrk(nlev)%x2l, &
|
|
|
|
call mld_baseprec_aply(done,baseprecv(nlev),mlprec_wrk(nlev)%x2l, &
|
|
|
|
& dzero, mlprec_wrk(nlev)%y2l,baseprecv(nlev)%desc_data,'N',work,info)
|
|
|
|
& dzero, mlprec_wrk(nlev)%y2l,baseprecv(nlev)%desc_data,'N',work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
@ -405,7 +414,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%tx,&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%tx,&
|
|
|
|
& done,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info)
|
|
|
|
& done,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
@ -419,7 +428,6 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
|
|
|
|
|
|
|
|
case(pre_smooth_)
|
|
|
|
case(pre_smooth_)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Pre smoothing.
|
|
|
|
! Pre smoothing.
|
|
|
|
! 1. X(1) = Xext
|
|
|
|
! 1. X(1) = Xext
|
|
|
@ -444,14 +452,16 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
allocate(mlprec_wrk(1)%x2l(nc2l),mlprec_wrk(1)%y2l(nc2l), &
|
|
|
|
allocate(mlprec_wrk(1)%x2l(nc2l),mlprec_wrk(1)%y2l(nc2l), &
|
|
|
|
& mlprec_wrk(1)%tx(nc2l), stat=info)
|
|
|
|
& mlprec_wrk(1)%tx(nc2l), stat=info)
|
|
|
|
if (info /= 0) then
|
|
|
|
if (info /= 0) then
|
|
|
|
call psb_errpush(4010,name,a_err='Allocate')
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/4*nc2l,0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
goto 9999
|
|
|
|
goto 9999
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
mlprec_wrk(1)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%x2l(:) = x
|
|
|
|
mlprec_wrk(1)%x2l(:) = x
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(1),mlprec_wrk(1)%x2l,&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(1),mlprec_wrk(1)%x2l,&
|
|
|
|
& dzero,mlprec_wrk(1)%y2l,&
|
|
|
|
& dzero,mlprec_wrk(1)%y2l,&
|
|
|
|
& baseprecv(1)%base_desc,&
|
|
|
|
& baseprecv(1)%base_desc,&
|
|
|
|
& trans,work,info)
|
|
|
|
& trans,work,info)
|
|
|
@ -474,10 +484,10 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
|
|
|
|
|
|
|
|
allocate(mlprec_wrk(ilev)%tx(nc2l),mlprec_wrk(ilev)%y2l(nc2l),&
|
|
|
|
allocate(mlprec_wrk(ilev)%tx(nc2l),mlprec_wrk(ilev)%y2l(nc2l),&
|
|
|
|
& mlprec_wrk(ilev)%x2l(nc2l), stat=info)
|
|
|
|
& mlprec_wrk(ilev)%x2l(nc2l), stat=info)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
if (info /= 0) then
|
|
|
|
call psb_errpush(4010,name,a_err='Allocate')
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/4*nc2l,0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
goto 9999
|
|
|
|
goto 9999
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
@ -517,7 +527,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%x2l,&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%x2l,&
|
|
|
|
& dzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info)
|
|
|
|
& dzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
@ -590,22 +600,24 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
allocate(mlprec_wrk(1)%x2l(nc2l),mlprec_wrk(1)%y2l(nc2l), &
|
|
|
|
allocate(mlprec_wrk(1)%x2l(nc2l),mlprec_wrk(1)%y2l(nc2l), &
|
|
|
|
& mlprec_wrk(1)%ty(nc2l), mlprec_wrk(1)%tx(nc2l), stat=info)
|
|
|
|
& mlprec_wrk(1)%ty(nc2l), mlprec_wrk(1)%tx(nc2l), stat=info)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/4*nc2l,0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
mlprec_wrk(1)%x2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%x2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(1)%tx(:) = dzero
|
|
|
|
mlprec_wrk(1)%tx(:) = dzero
|
|
|
|
mlprec_wrk(1)%ty(:) = dzero
|
|
|
|
mlprec_wrk(1)%ty(:) = dzero
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
|
|
|
|
call psb_errpush(4010,name,a_err='Allocate')
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
call psb_geaxpby(done,x,dzero,mlprec_wrk(1)%x2l,&
|
|
|
|
call psb_geaxpby(done,x,dzero,mlprec_wrk(1)%x2l,&
|
|
|
|
& baseprecv(1)%base_desc,info)
|
|
|
|
& baseprecv(1)%base_desc,info)
|
|
|
|
call psb_geaxpby(done,x,dzero,mlprec_wrk(1)%tx,&
|
|
|
|
call psb_geaxpby(done,x,dzero,mlprec_wrk(1)%tx,&
|
|
|
|
& baseprecv(1)%base_desc,info)
|
|
|
|
& baseprecv(1)%base_desc,info)
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(1),mlprec_wrk(1)%x2l,&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(1),mlprec_wrk(1)%x2l,&
|
|
|
|
& dzero,mlprec_wrk(1)%y2l,&
|
|
|
|
& dzero,mlprec_wrk(1)%y2l,&
|
|
|
|
& baseprecv(1)%base_desc,&
|
|
|
|
& baseprecv(1)%base_desc,&
|
|
|
|
& trans,work,info)
|
|
|
|
& trans,work,info)
|
|
|
@ -628,18 +640,19 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
allocate(mlprec_wrk(ilev)%ty(nc2l),mlprec_wrk(ilev)%y2l(nc2l),&
|
|
|
|
allocate(mlprec_wrk(ilev)%ty(nc2l),mlprec_wrk(ilev)%y2l(nc2l),&
|
|
|
|
& mlprec_wrk(ilev)%x2l(nc2l), stat=info)
|
|
|
|
& mlprec_wrk(ilev)%x2l(nc2l), stat=info)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
|
|
|
|
info=4025
|
|
|
|
|
|
|
|
call psb_errpush(info,name,i_err=(/4*nc2l,0,0,0,0/),&
|
|
|
|
|
|
|
|
& a_err='real(kind(1.d0))')
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
mlprec_wrk(ilev)%x2l(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%x2l(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%y2l(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%tx(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%tx(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%ty(:) = dzero
|
|
|
|
mlprec_wrk(ilev)%ty(:) = dzero
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
|
|
|
|
call psb_errpush(4010,name,a_err='Allocate')
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ismth /= no_smth_) then
|
|
|
|
if (ismth /= no_smth_) then
|
|
|
|
!
|
|
|
|
!
|
|
|
|
!Smoothed Aggregation
|
|
|
|
!Smoothed Aggregation
|
|
|
@ -674,7 +687,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
& baseprecv(ilev)%base_desc,info)
|
|
|
|
& baseprecv(ilev)%base_desc,info)
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%x2l,&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%x2l,&
|
|
|
|
& dzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info)
|
|
|
|
& dzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
@ -715,7 +728,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
|
|
|
|
|
|
|
|
call psb_baseprc_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%tx,&
|
|
|
|
call mld_baseprec_aply(done,baseprecv(ilev),mlprec_wrk(ilev)%tx,&
|
|
|
|
& done,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info)
|
|
|
|
& done,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info)
|
|
|
|
|
|
|
|
|
|
|
|
if(info /=0) goto 9999
|
|
|
|
if(info /=0) goto 9999
|
|
|
@ -775,5 +788,5 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
|
|
|
|
!!$ end do
|
|
|
|
!!$ end do
|
|
|
|
!!$ end subroutine mlprec_wrk_free
|
|
|
|
!!$ end subroutine mlprec_wrk_free
|
|
|
|
|
|
|
|
|
|
|
|
end subroutine psb_dmlprc_aply
|
|
|
|
end subroutine mld_dmlprec_aply
|
|
|
|
|
|
|
|
|
|
|
|