|
|
@ -391,17 +391,17 @@ subroutine mld_cprecaply2_vect(prec,x,y,desc_data,info,trans,work)
|
|
|
|
select case(trans_)
|
|
|
|
select case(trans_)
|
|
|
|
case ('N')
|
|
|
|
case ('N')
|
|
|
|
do k=1, nswps
|
|
|
|
do k=1, nswps
|
|
|
|
call prec%precv(1)%sm%apply(cone,w1,czero,w2,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm%apply(cone,w1,czero,w2,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
call prec%precv(1)%sm2a%apply(cone,w2,czero,w1,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm2a%apply(cone,w2,czero,w1,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
end do
|
|
|
|
end do
|
|
|
|
|
|
|
|
|
|
|
|
case('T','C')
|
|
|
|
case('T','C')
|
|
|
|
do k=1, nswps
|
|
|
|
do k=1, nswps
|
|
|
|
call prec%precv(1)%sm2a%apply(cone,w1,czero,w2,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm2a%apply(cone,w1,czero,w2,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
call prec%precv(1)%sm%apply(cone,w2,czero,w1,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm%apply(cone,w2,czero,w1,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
end do
|
|
|
|
end do
|
|
|
|
case default
|
|
|
|
case default
|
|
|
@ -409,12 +409,19 @@ subroutine mld_cprecaply2_vect(prec,x,y,desc_data,info,trans,work)
|
|
|
|
call psb_errpush(info,name,a_err='Invalid trans')
|
|
|
|
call psb_errpush(info,name,a_err='Invalid trans')
|
|
|
|
goto 9999
|
|
|
|
goto 9999
|
|
|
|
end select
|
|
|
|
end select
|
|
|
|
call psb_geaxpby(cone,w1,czero,y,desc_data,info)
|
|
|
|
if (info == 0) call psb_geaxpby(cone,w1,czero,y,desc_data,info)
|
|
|
|
else
|
|
|
|
else
|
|
|
|
call prec%precv(1)%sm%apply(cone,x,czero,y,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm%apply(cone,x,czero,y,desc_data,trans_,&
|
|
|
|
& nswps,work_,wv,info)
|
|
|
|
& nswps,work_,wv,info)
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end associate
|
|
|
|
end associate
|
|
|
|
|
|
|
|
if (psb_get_errstatus() /=0) info = psb_err_internal_error_
|
|
|
|
|
|
|
|
if (info /= 0) then
|
|
|
|
|
|
|
|
info = psb_err_from_subroutine_ai_
|
|
|
|
|
|
|
|
call psb_errpush(info,name,a_err='Smoother application',&
|
|
|
|
|
|
|
|
& i_Err=(/ione*size(prec%precv),izero,izero,izero,izero/))
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
|
@ -530,16 +537,16 @@ subroutine mld_cprecaply1_vect(prec,x,desc_data,info,trans,work)
|
|
|
|
select case(trans_)
|
|
|
|
select case(trans_)
|
|
|
|
case ('N')
|
|
|
|
case ('N')
|
|
|
|
do k=1, nswps
|
|
|
|
do k=1, nswps
|
|
|
|
call prec%precv(1)%sm%apply(cone,x,czero,ww,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm%apply(cone,x,czero,ww,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
call prec%precv(1)%sm2a%apply(cone,ww,czero,x,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm2a%apply(cone,ww,czero,x,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
end do
|
|
|
|
end do
|
|
|
|
case('T','C')
|
|
|
|
case('T','C')
|
|
|
|
do k=1, nswps
|
|
|
|
do k=1, nswps
|
|
|
|
call prec%precv(1)%sm2a%apply(cone,x,czero,ww,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm2a%apply(cone,x,czero,ww,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
call prec%precv(1)%sm%apply(cone,ww,czero,x,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm%apply(cone,ww,czero,x,desc_data,trans_,&
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
& ione, work_,wv,info)
|
|
|
|
end do
|
|
|
|
end do
|
|
|
|
case default
|
|
|
|
case default
|
|
|
@ -549,10 +556,19 @@ subroutine mld_cprecaply1_vect(prec,x,desc_data,info,trans,work)
|
|
|
|
end select
|
|
|
|
end select
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
call prec%precv(1)%sm%apply(cone,x,czero,ww,desc_data,trans_,&
|
|
|
|
if (info == 0) call prec%precv(1)%sm%apply(cone,x,czero,ww,desc_data,trans_,&
|
|
|
|
& nswps, work_,wv,info)
|
|
|
|
& nswps, work_,wv,info)
|
|
|
|
if (info == 0) call psb_geaxpby(cone,ww,czero,x,desc_data,info)
|
|
|
|
if (info == 0) call psb_geaxpby(cone,ww,czero,x,desc_data,info)
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (psb_get_errstatus() /=0) info = psb_err_internal_error_
|
|
|
|
|
|
|
|
if (info /=0) then
|
|
|
|
|
|
|
|
info = psb_err_internal_error_
|
|
|
|
|
|
|
|
call psb_errpush(info,name,a_err='Smoother application',&
|
|
|
|
|
|
|
|
& i_Err=(/ione*size(prec%precv),izero,izero,izero,izero/))
|
|
|
|
|
|
|
|
goto 9999
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
|
|
info = psb_err_from_subroutine_ai_
|
|
|
|
info = psb_err_from_subroutine_ai_
|
|
|
|