mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-19 20:32:12 +00:00
Implementatino of abgd_xyz
This commit is contained in:
@@ -99,6 +99,19 @@ module psi_c_serial_mod
|
||||
end subroutine psi_caxpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_cabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_spk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
complex(psb_spk_), intent (in) :: x(:)
|
||||
complex(psb_spk_), intent (inout) :: y(:)
|
||||
complex(psb_spk_), intent (inout) :: z(:)
|
||||
complex(psb_spk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_cabgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_cgthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_spk_
|
||||
|
||||
@@ -99,6 +99,19 @@ module psi_d_serial_mod
|
||||
end subroutine psi_daxpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_dabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_dpk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
real(psb_dpk_), intent (in) :: x(:)
|
||||
real(psb_dpk_), intent (inout) :: y(:)
|
||||
real(psb_dpk_), intent (inout) :: z(:)
|
||||
real(psb_dpk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_dabgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_dgthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_dpk_
|
||||
|
||||
@@ -99,6 +99,19 @@ module psi_e_serial_mod
|
||||
end subroutine psi_eaxpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_eabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_lpk_,psb_mpk_, psb_epk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
integer(psb_epk_), intent (in) :: x(:)
|
||||
integer(psb_epk_), intent (inout) :: y(:)
|
||||
integer(psb_epk_), intent (inout) :: z(:)
|
||||
integer(psb_epk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_eabgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_egthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_lpk_,psb_mpk_, psb_epk_
|
||||
|
||||
@@ -99,6 +99,19 @@ module psi_i2_serial_mod
|
||||
end subroutine psi_i2axpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_i2abgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_lpk_,psb_mpk_, psb_epk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
integer(psb_i2pk_), intent (in) :: x(:)
|
||||
integer(psb_i2pk_), intent (inout) :: y(:)
|
||||
integer(psb_i2pk_), intent (inout) :: z(:)
|
||||
integer(psb_i2pk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_i2abgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_i2gthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_lpk_,psb_mpk_, psb_epk_
|
||||
|
||||
@@ -99,6 +99,19 @@ module psi_m_serial_mod
|
||||
end subroutine psi_maxpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_mabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_lpk_,psb_mpk_, psb_epk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
integer(psb_mpk_), intent (in) :: x(:)
|
||||
integer(psb_mpk_), intent (inout) :: y(:)
|
||||
integer(psb_mpk_), intent (inout) :: z(:)
|
||||
integer(psb_mpk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_mabgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_mgthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_lpk_,psb_mpk_, psb_epk_
|
||||
|
||||
@@ -99,6 +99,19 @@ module psi_s_serial_mod
|
||||
end subroutine psi_saxpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_sabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_spk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
real(psb_spk_), intent (in) :: x(:)
|
||||
real(psb_spk_), intent (inout) :: y(:)
|
||||
real(psb_spk_), intent (inout) :: z(:)
|
||||
real(psb_spk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_sabgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_sgthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_spk_
|
||||
|
||||
@@ -99,6 +99,19 @@ module psi_z_serial_mod
|
||||
end subroutine psi_zaxpbyv2
|
||||
end interface psb_geaxpby
|
||||
|
||||
interface psi_abgdxyz
|
||||
subroutine psi_zabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
import :: psb_ipk_, psb_dpk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
complex(psb_dpk_), intent (in) :: x(:)
|
||||
complex(psb_dpk_), intent (inout) :: y(:)
|
||||
complex(psb_dpk_), intent (inout) :: z(:)
|
||||
complex(psb_dpk_), intent (in) :: alpha, beta,gamma,delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
end subroutine psi_zabgdxyz
|
||||
end interface psi_abgdxyz
|
||||
|
||||
interface psi_gth
|
||||
subroutine psi_zgthmv(n,k,idx,alpha,x,beta,y)
|
||||
import :: psb_ipk_, psb_dpk_
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine caxpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine caxpbyv2
|
||||
|
||||
subroutine psi_cabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
complex(psb_spk_), intent (in) :: x(:)
|
||||
complex(psb_spk_), intent (inout) :: y(:)
|
||||
complex(psb_spk_), intent (inout) :: z(:)
|
||||
complex(psb_spk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='cabgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == czero) then
|
||||
if (gamma == czero) then
|
||||
if (alpha == czero) then
|
||||
if (delta == czero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = czero
|
||||
z(i) = czero
|
||||
end do
|
||||
else if (delta /= czero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = czero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= czero) then
|
||||
if (delta == czero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = czero
|
||||
end do
|
||||
else if (delta /= czero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= czero) then
|
||||
|
||||
if (alpha == czero) then
|
||||
|
||||
if (delta == czero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = czero
|
||||
z(i) = czero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= czero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = czero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= czero) then
|
||||
|
||||
if (delta == czero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= czero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= czero) then
|
||||
|
||||
if (gamma == czero) then
|
||||
if (alpha == czero) then
|
||||
if (delta == czero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = czero
|
||||
end do
|
||||
|
||||
else if (delta /= czero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= czero) then
|
||||
if (delta == czero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = czero
|
||||
end do
|
||||
|
||||
else if (delta /= czero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= czero) then
|
||||
if (alpha == czero) then
|
||||
if (delta == czero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= czero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= czero) then
|
||||
if (delta == czero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= czero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_cabgdxyz
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine daxpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine daxpbyv2
|
||||
|
||||
subroutine psi_dabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
real(psb_dpk_), intent (in) :: x(:)
|
||||
real(psb_dpk_), intent (inout) :: y(:)
|
||||
real(psb_dpk_), intent (inout) :: z(:)
|
||||
real(psb_dpk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='dabgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == dzero) then
|
||||
if (gamma == dzero) then
|
||||
if (alpha == dzero) then
|
||||
if (delta == dzero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = dzero
|
||||
z(i) = dzero
|
||||
end do
|
||||
else if (delta /= dzero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = dzero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= dzero) then
|
||||
if (delta == dzero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = dzero
|
||||
end do
|
||||
else if (delta /= dzero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= dzero) then
|
||||
|
||||
if (alpha == dzero) then
|
||||
|
||||
if (delta == dzero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = dzero
|
||||
z(i) = dzero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= dzero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = dzero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= dzero) then
|
||||
|
||||
if (delta == dzero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= dzero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= dzero) then
|
||||
|
||||
if (gamma == dzero) then
|
||||
if (alpha == dzero) then
|
||||
if (delta == dzero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = dzero
|
||||
end do
|
||||
|
||||
else if (delta /= dzero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= dzero) then
|
||||
if (delta == dzero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = dzero
|
||||
end do
|
||||
|
||||
else if (delta /= dzero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= dzero) then
|
||||
if (alpha == dzero) then
|
||||
if (delta == dzero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= dzero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= dzero) then
|
||||
if (delta == dzero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= dzero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_dabgdxyz
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine eaxpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine eaxpbyv2
|
||||
|
||||
subroutine psi_eabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
integer(psb_epk_), intent (in) :: x(:)
|
||||
integer(psb_epk_), intent (inout) :: y(:)
|
||||
integer(psb_epk_), intent (inout) :: z(:)
|
||||
integer(psb_epk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='eabgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == ezero) then
|
||||
if (gamma == ezero) then
|
||||
if (alpha == ezero) then
|
||||
if (delta == ezero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = ezero
|
||||
z(i) = ezero
|
||||
end do
|
||||
else if (delta /= ezero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = ezero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= ezero) then
|
||||
if (delta == ezero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = ezero
|
||||
end do
|
||||
else if (delta /= ezero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= ezero) then
|
||||
|
||||
if (alpha == ezero) then
|
||||
|
||||
if (delta == ezero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = ezero
|
||||
z(i) = ezero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= ezero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = ezero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= ezero) then
|
||||
|
||||
if (delta == ezero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= ezero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= ezero) then
|
||||
|
||||
if (gamma == ezero) then
|
||||
if (alpha == ezero) then
|
||||
if (delta == ezero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = ezero
|
||||
end do
|
||||
|
||||
else if (delta /= ezero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= ezero) then
|
||||
if (delta == ezero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = ezero
|
||||
end do
|
||||
|
||||
else if (delta /= ezero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= ezero) then
|
||||
if (alpha == ezero) then
|
||||
if (delta == ezero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= ezero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= ezero) then
|
||||
if (delta == ezero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= ezero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_eabgdxyz
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine i2axpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine i2axpbyv2
|
||||
|
||||
subroutine psi_i2abgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
integer(psb_i2pk_), intent (in) :: x(:)
|
||||
integer(psb_i2pk_), intent (inout) :: y(:)
|
||||
integer(psb_i2pk_), intent (inout) :: z(:)
|
||||
integer(psb_i2pk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='i2abgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == i2zero) then
|
||||
if (gamma == i2zero) then
|
||||
if (alpha == i2zero) then
|
||||
if (delta == i2zero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = i2zero
|
||||
z(i) = i2zero
|
||||
end do
|
||||
else if (delta /= i2zero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = i2zero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= i2zero) then
|
||||
if (delta == i2zero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = i2zero
|
||||
end do
|
||||
else if (delta /= i2zero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= i2zero) then
|
||||
|
||||
if (alpha == i2zero) then
|
||||
|
||||
if (delta == i2zero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = i2zero
|
||||
z(i) = i2zero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= i2zero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = i2zero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= i2zero) then
|
||||
|
||||
if (delta == i2zero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= i2zero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= i2zero) then
|
||||
|
||||
if (gamma == i2zero) then
|
||||
if (alpha == i2zero) then
|
||||
if (delta == i2zero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = i2zero
|
||||
end do
|
||||
|
||||
else if (delta /= i2zero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= i2zero) then
|
||||
if (delta == i2zero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = i2zero
|
||||
end do
|
||||
|
||||
else if (delta /= i2zero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= i2zero) then
|
||||
if (alpha == i2zero) then
|
||||
if (delta == i2zero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= i2zero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= i2zero) then
|
||||
if (delta == i2zero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= i2zero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_i2abgdxyz
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine maxpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine maxpbyv2
|
||||
|
||||
subroutine psi_mabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
integer(psb_mpk_), intent (in) :: x(:)
|
||||
integer(psb_mpk_), intent (inout) :: y(:)
|
||||
integer(psb_mpk_), intent (inout) :: z(:)
|
||||
integer(psb_mpk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='mabgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == mzero) then
|
||||
if (gamma == mzero) then
|
||||
if (alpha == mzero) then
|
||||
if (delta == mzero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = mzero
|
||||
z(i) = mzero
|
||||
end do
|
||||
else if (delta /= mzero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = mzero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= mzero) then
|
||||
if (delta == mzero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = mzero
|
||||
end do
|
||||
else if (delta /= mzero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= mzero) then
|
||||
|
||||
if (alpha == mzero) then
|
||||
|
||||
if (delta == mzero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = mzero
|
||||
z(i) = mzero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= mzero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = mzero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= mzero) then
|
||||
|
||||
if (delta == mzero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= mzero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= mzero) then
|
||||
|
||||
if (gamma == mzero) then
|
||||
if (alpha == mzero) then
|
||||
if (delta == mzero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = mzero
|
||||
end do
|
||||
|
||||
else if (delta /= mzero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= mzero) then
|
||||
if (delta == mzero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = mzero
|
||||
end do
|
||||
|
||||
else if (delta /= mzero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= mzero) then
|
||||
if (alpha == mzero) then
|
||||
if (delta == mzero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= mzero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= mzero) then
|
||||
if (delta == mzero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= mzero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_mabgdxyz
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine saxpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine saxpbyv2
|
||||
|
||||
subroutine psi_sabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
real(psb_spk_), intent (in) :: x(:)
|
||||
real(psb_spk_), intent (inout) :: y(:)
|
||||
real(psb_spk_), intent (inout) :: z(:)
|
||||
real(psb_spk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='sabgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == szero) then
|
||||
if (gamma == szero) then
|
||||
if (alpha == szero) then
|
||||
if (delta == szero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = szero
|
||||
z(i) = szero
|
||||
end do
|
||||
else if (delta /= szero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = szero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= szero) then
|
||||
if (delta == szero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = szero
|
||||
end do
|
||||
else if (delta /= szero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= szero) then
|
||||
|
||||
if (alpha == szero) then
|
||||
|
||||
if (delta == szero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = szero
|
||||
z(i) = szero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= szero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = szero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= szero) then
|
||||
|
||||
if (delta == szero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= szero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= szero) then
|
||||
|
||||
if (gamma == szero) then
|
||||
if (alpha == szero) then
|
||||
if (delta == szero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = szero
|
||||
end do
|
||||
|
||||
else if (delta /= szero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= szero) then
|
||||
if (delta == szero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = szero
|
||||
end do
|
||||
|
||||
else if (delta /= szero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= szero) then
|
||||
if (alpha == szero) then
|
||||
if (delta == szero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= szero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= szero) then
|
||||
if (delta == szero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= szero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_sabgdxyz
|
||||
|
||||
@@ -1567,3 +1567,228 @@ subroutine zaxpbyv2(m, n, alpha, X, lldx, beta, Y, lldy, Z, lldz, info)
|
||||
return
|
||||
|
||||
end subroutine zaxpbyv2
|
||||
|
||||
subroutine psi_zabgdxyz(m,alpha, beta, gamma,delta,x, y, z, info)
|
||||
use psb_const_mod
|
||||
use psb_error_mod
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: m
|
||||
complex(psb_dpk_), intent (in) :: x(:)
|
||||
complex(psb_dpk_), intent (inout) :: y(:)
|
||||
complex(psb_dpk_), intent (inout) :: z(:)
|
||||
complex(psb_dpk_), intent (in) :: alpha, beta, gamma, delta
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
|
||||
integer(psb_ipk_) :: i
|
||||
integer(psb_ipk_) :: int_err(5)
|
||||
character name*20
|
||||
name='zabgdxyz'
|
||||
|
||||
info = psb_success_
|
||||
if (m.lt.0) then
|
||||
info=psb_err_iarg_neg_
|
||||
int_err(1)=1
|
||||
int_err(2)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(x).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=6
|
||||
int_err(2)=1
|
||||
int_err(3)=size(x)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(y).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=7
|
||||
int_err(2)=1
|
||||
int_err(3)=size(y)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
else if (size(z).lt.max(1,m)) then
|
||||
info=psb_err_iarg_not_gtia_ii_
|
||||
int_err(1)=8
|
||||
int_err(2)=1
|
||||
int_err(3)=size(z)
|
||||
int_err(4)=m
|
||||
call fcpsb_errpush(info,name,int_err)
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
if (beta == zzero) then
|
||||
if (gamma == zzero) then
|
||||
if (alpha == zzero) then
|
||||
if (delta == zzero) then
|
||||
! a 0 b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = zzero
|
||||
z(i) = zzero
|
||||
end do
|
||||
else if (delta /= zzero) then
|
||||
! a 0 b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = zzero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
end if
|
||||
else if (alpha /= zzero) then
|
||||
if (delta == zzero) then
|
||||
! a n b 0 g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = zzero
|
||||
end do
|
||||
else if (delta /= zzero) then
|
||||
! a n b 0 g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (gamma /= zzero) then
|
||||
|
||||
if (alpha == zzero) then
|
||||
|
||||
if (delta == zzero) then
|
||||
! a 0 b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = zzero
|
||||
z(i) = zzero ! gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= zzero) then
|
||||
! a 0 b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = zzero
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= zzero) then
|
||||
|
||||
if (delta == zzero) then
|
||||
! a n b 0 g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= zzero) then
|
||||
! a n b 0 g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
else if (beta /= zzero) then
|
||||
|
||||
if (gamma == zzero) then
|
||||
if (alpha == zzero) then
|
||||
if (delta == zzero) then
|
||||
! a 0 b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = zzero
|
||||
end do
|
||||
|
||||
else if (delta /= zzero) then
|
||||
! a 0 b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= zzero) then
|
||||
if (delta == zzero) then
|
||||
! a n b n g 0 d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = zzero
|
||||
end do
|
||||
|
||||
else if (delta /= zzero) then
|
||||
! a n b n g 0 d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
else if (gamma /= zzero) then
|
||||
if (alpha == zzero) then
|
||||
if (delta == zzero) then
|
||||
! a 0 b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= zzero) then
|
||||
! a 0 b n g n d n
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
else if (alpha /= zzero) then
|
||||
if (delta == zzero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)
|
||||
end do
|
||||
|
||||
else if (delta /= zzero) then
|
||||
! a n b n g n d 0
|
||||
!$omp parallel do private(i)
|
||||
do i=1,m
|
||||
y(i) = alpha*x(i)+beta*y(i)
|
||||
z(i) = gamma*y(i)+delta*z(i)
|
||||
end do
|
||||
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
9999 continue
|
||||
call fcpsb_serror()
|
||||
return
|
||||
|
||||
end subroutine psi_zabgdxyz
|
||||
|
||||
Reference in New Issue
Block a user