Merge branch 'maint-3.9.0' into merge-maint-par

merge-maint-par
sfilippone 3 weeks ago
commit fffc8dbc00

@ -27,7 +27,7 @@ contains
function psb_c_PrintSolverOptions(options)& function psb_c_PrintSolverOptions(options)&
& bind(c,name='psb_c_PrintSolverOptions') result(res) & bind(c,name='psb_c_PrintSolverOptions') result(res)
implicit none implicit none
type(solveroptions) :: options type(solveroptions), value :: options
integer(psb_c_ipk_) :: res integer(psb_c_ipk_) :: res
write(*,*) 'PSBLAS C Interface Solver Options ' write(*,*) 'PSBLAS C Interface Solver Options '

@ -31,6 +31,7 @@ contains
function psb_c_ckrylov_opt(methd,& function psb_c_ckrylov_opt(methd,&
& ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res)
use psb_base_mod use psb_base_mod
use psb_error_mod
use psb_prec_mod use psb_prec_mod
use psb_linsolve_mod use psb_linsolve_mod
use psb_objhandle_mod use psb_objhandle_mod
@ -51,7 +52,7 @@ contains
type(psb_cprec_type), pointer :: precp type(psb_cprec_type), pointer :: precp
type(psb_c_vect_type), pointer :: xp, bp type(psb_c_vect_type), pointer :: xp, bp
integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter,err_act
character(len=20) :: fmethd character(len=20) :: fmethd
real(psb_spk_) :: feps,ferr real(psb_spk_) :: feps,ferr
@ -89,7 +90,8 @@ contains
fitrace = itrace fitrace = itrace
first = irst first = irst
fistop = istop fistop = istop
err_act = psb_act_abort_
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
call psb_krylov(fmethd, ap, precp, bp, xp, feps, & call psb_krylov(fmethd, ap, precp, bp, xp, feps, &
& descp, info,& & descp, info,&
& itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,&
@ -97,6 +99,7 @@ contains
iter = fiter iter = fiter
err = ferr err = ferr
res = info res = info
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
end function psb_c_ckrylov_opt end function psb_c_ckrylov_opt

@ -31,6 +31,7 @@ contains
function psb_c_dkrylov_opt(methd,& function psb_c_dkrylov_opt(methd,&
& ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res)
use psb_base_mod use psb_base_mod
use psb_error_mod
use psb_prec_mod use psb_prec_mod
use psb_linsolve_mod use psb_linsolve_mod
use psb_objhandle_mod use psb_objhandle_mod
@ -51,7 +52,7 @@ contains
type(psb_dprec_type), pointer :: precp type(psb_dprec_type), pointer :: precp
type(psb_d_vect_type), pointer :: xp, bp type(psb_d_vect_type), pointer :: xp, bp
integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter,err_act
character(len=20) :: fmethd character(len=20) :: fmethd
real(psb_dpk_) :: feps,ferr real(psb_dpk_) :: feps,ferr
@ -89,7 +90,8 @@ contains
fitrace = itrace fitrace = itrace
first = irst first = irst
fistop = istop fistop = istop
err_act = psb_act_abort_
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
call psb_krylov(fmethd, ap, precp, bp, xp, feps, & call psb_krylov(fmethd, ap, precp, bp, xp, feps, &
& descp, info,& & descp, info,&
& itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,&
@ -97,6 +99,7 @@ contains
iter = fiter iter = fiter
err = ferr err = ferr
res = info res = info
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
end function psb_c_dkrylov_opt end function psb_c_dkrylov_opt

@ -24,8 +24,8 @@ typedef struct psb_c_solveroptions {
double err; /* Convergence indicator on exit */ double err; /* Convergence indicator on exit */
} psb_c_SolverOptions; } psb_c_SolverOptions;
psb_c_i_t psb_c_DefaultSolverOptions(psb_c_SolverOptions *opt); int psb_c_DefaultSolverOptions(psb_c_SolverOptions *opt);
psb_c_i_t psb_c_PrintSolverOptions(psb_c_SolverOptions *opt); int psb_c_PrintSolverOptions(psb_c_SolverOptions opt);
psb_c_i_t psb_c_skrylov(const char *method, psb_c_sspmat *ah, psb_c_sprec *ph, psb_c_i_t psb_c_skrylov(const char *method, psb_c_sspmat *ah, psb_c_sprec *ph,
psb_c_svector *bh, psb_c_svector *xh, psb_c_svector *bh, psb_c_svector *xh,

@ -31,6 +31,7 @@ contains
function psb_c_skrylov_opt(methd,& function psb_c_skrylov_opt(methd,&
& ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res)
use psb_base_mod use psb_base_mod
use psb_error_mod
use psb_prec_mod use psb_prec_mod
use psb_linsolve_mod use psb_linsolve_mod
use psb_objhandle_mod use psb_objhandle_mod
@ -51,7 +52,7 @@ contains
type(psb_sprec_type), pointer :: precp type(psb_sprec_type), pointer :: precp
type(psb_s_vect_type), pointer :: xp, bp type(psb_s_vect_type), pointer :: xp, bp
integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter,err_act
character(len=20) :: fmethd character(len=20) :: fmethd
real(psb_spk_) :: feps,ferr real(psb_spk_) :: feps,ferr
@ -89,7 +90,8 @@ contains
fitrace = itrace fitrace = itrace
first = irst first = irst
fistop = istop fistop = istop
err_act = psb_act_abort_
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
call psb_krylov(fmethd, ap, precp, bp, xp, feps, & call psb_krylov(fmethd, ap, precp, bp, xp, feps, &
& descp, info,& & descp, info,&
& itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,&
@ -97,6 +99,7 @@ contains
iter = fiter iter = fiter
err = ferr err = ferr
res = info res = info
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
end function psb_c_skrylov_opt end function psb_c_skrylov_opt

@ -31,6 +31,7 @@ contains
function psb_c_zkrylov_opt(methd,& function psb_c_zkrylov_opt(methd,&
& ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res)
use psb_base_mod use psb_base_mod
use psb_error_mod
use psb_prec_mod use psb_prec_mod
use psb_linsolve_mod use psb_linsolve_mod
use psb_objhandle_mod use psb_objhandle_mod
@ -51,7 +52,7 @@ contains
type(psb_zprec_type), pointer :: precp type(psb_zprec_type), pointer :: precp
type(psb_z_vect_type), pointer :: xp, bp type(psb_z_vect_type), pointer :: xp, bp
integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter,err_act
character(len=20) :: fmethd character(len=20) :: fmethd
real(psb_dpk_) :: feps,ferr real(psb_dpk_) :: feps,ferr
@ -89,7 +90,8 @@ contains
fitrace = itrace fitrace = itrace
first = irst first = irst
fistop = istop fistop = istop
err_act = psb_act_abort_
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
call psb_krylov(fmethd, ap, precp, bp, xp, feps, & call psb_krylov(fmethd, ap, precp, bp, xp, feps, &
& descp, info,& & descp, info,&
& itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,&
@ -97,6 +99,7 @@ contains
iter = fiter iter = fiter
err = ferr err = ferr
res = info res = info
if (psb_errstatus_fatal()) call psb_error_handler(err_act)
end function psb_c_zkrylov_opt end function psb_c_zkrylov_opt

@ -644,6 +644,10 @@ subroutine psb_c_bjac_precbld(a,desc_a,prec,info,amold,vmold,imold)
enddo enddo
deallocate(prec%av,stat=info) deallocate(prec%av,stat=info)
endif endif
if (allocated (prec%dv)) then
call prec%dv%free(info)
if (info == 0) deallocate(prec%dv)
end if
end if end if
if (.not.allocated(prec%av)) then if (.not.allocated(prec%av)) then
allocate(prec%av(psb_max_avsz),stat=info) allocate(prec%av(psb_max_avsz),stat=info)

@ -270,7 +270,7 @@ subroutine psb_c_diag_precbld(a,desc_a,prec,info,amold,vmold,imold)
prec%d(i) = cone prec%d(i) = cone
end do end do
allocate(prec%dv,stat=info) if (.not.allocated(prec%dv)) allocate(prec%dv,stat=info)
if (info == 0) then if (info == 0) then
if (present(vmold)) then if (present(vmold)) then
allocate(prec%dv%v,mold=vmold,stat=info) allocate(prec%dv%v,mold=vmold,stat=info)

@ -644,6 +644,10 @@ subroutine psb_d_bjac_precbld(a,desc_a,prec,info,amold,vmold,imold)
enddo enddo
deallocate(prec%av,stat=info) deallocate(prec%av,stat=info)
endif endif
if (allocated (prec%dv)) then
call prec%dv%free(info)
if (info == 0) deallocate(prec%dv)
end if
end if end if
if (.not.allocated(prec%av)) then if (.not.allocated(prec%av)) then
allocate(prec%av(psb_max_avsz),stat=info) allocate(prec%av(psb_max_avsz),stat=info)

@ -270,7 +270,7 @@ subroutine psb_d_diag_precbld(a,desc_a,prec,info,amold,vmold,imold)
prec%d(i) = done prec%d(i) = done
end do end do
allocate(prec%dv,stat=info) if (.not.allocated(prec%dv)) allocate(prec%dv,stat=info)
if (info == 0) then if (info == 0) then
if (present(vmold)) then if (present(vmold)) then
allocate(prec%dv%v,mold=vmold,stat=info) allocate(prec%dv%v,mold=vmold,stat=info)

@ -644,6 +644,10 @@ subroutine psb_s_bjac_precbld(a,desc_a,prec,info,amold,vmold,imold)
enddo enddo
deallocate(prec%av,stat=info) deallocate(prec%av,stat=info)
endif endif
if (allocated (prec%dv)) then
call prec%dv%free(info)
if (info == 0) deallocate(prec%dv)
end if
end if end if
if (.not.allocated(prec%av)) then if (.not.allocated(prec%av)) then
allocate(prec%av(psb_max_avsz),stat=info) allocate(prec%av(psb_max_avsz),stat=info)

@ -270,7 +270,7 @@ subroutine psb_s_diag_precbld(a,desc_a,prec,info,amold,vmold,imold)
prec%d(i) = sone prec%d(i) = sone
end do end do
allocate(prec%dv,stat=info) if (.not.allocated(prec%dv)) allocate(prec%dv,stat=info)
if (info == 0) then if (info == 0) then
if (present(vmold)) then if (present(vmold)) then
allocate(prec%dv%v,mold=vmold,stat=info) allocate(prec%dv%v,mold=vmold,stat=info)

@ -644,6 +644,10 @@ subroutine psb_z_bjac_precbld(a,desc_a,prec,info,amold,vmold,imold)
enddo enddo
deallocate(prec%av,stat=info) deallocate(prec%av,stat=info)
endif endif
if (allocated (prec%dv)) then
call prec%dv%free(info)
if (info == 0) deallocate(prec%dv)
end if
end if end if
if (.not.allocated(prec%av)) then if (.not.allocated(prec%av)) then
allocate(prec%av(psb_max_avsz),stat=info) allocate(prec%av(psb_max_avsz),stat=info)

@ -270,7 +270,7 @@ subroutine psb_z_diag_precbld(a,desc_a,prec,info,amold,vmold,imold)
prec%d(i) = zone prec%d(i) = zone
end do end do
allocate(prec%dv,stat=info) if (.not.allocated(prec%dv)) allocate(prec%dv,stat=info)
if (info == 0) then if (info == 0) then
if (present(vmold)) then if (present(vmold)) then
allocate(prec%dv%v,mold=vmold,stat=info) allocate(prec%dv%v,mold=vmold,stat=info)

Loading…
Cancel
Save