mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-20 04:42:08 +00:00
Merged MixedI8 in new branch (to be later merged into development)
This commit is contained in:
@@ -33,61 +33,93 @@
|
||||
module psb_const_mod
|
||||
#if defined(HAVE_ISO_FORTRAN_ENV)
|
||||
use iso_fortran_env
|
||||
! This is the default PSBLAS integer, can be 4 or 8 bytes.
|
||||
#if defined(LONG_INTEGERS)
|
||||
integer, parameter :: psb_ipk_ = int64
|
||||
#else
|
||||
integer, parameter :: psb_ipk_ = int32
|
||||
#endif
|
||||
! This is always an 8-byte integer.
|
||||
integer, parameter :: psb_long_int_k_ = int64
|
||||
integer, parameter :: psb_lpk_ = psb_long_int_k_
|
||||
! This is a 2-byte integer, just in case
|
||||
integer, parameter :: psb_i2pk_ = int16
|
||||
! This is always a 4-byte integer, for MPI-related stuff
|
||||
integer, parameter :: psb_mpik_ = int32
|
||||
integer, parameter :: psb_mpk_ = int32
|
||||
! This is always an 8-byte integer.
|
||||
integer, parameter :: psb_epk_ = int64
|
||||
!
|
||||
! These must be the kind parameter corresponding to psb_mpi_r_dpk_
|
||||
! and psb_mpi_r_spk_
|
||||
!
|
||||
integer(psb_mpik_), parameter :: psb_spk_ = real32
|
||||
integer(psb_mpik_), parameter :: psb_dpk_ = real64
|
||||
integer, parameter :: psb_spk_ = real32
|
||||
integer, parameter :: psb_dpk_ = real64
|
||||
|
||||
#else
|
||||
! This is the default PSBLAS integer, can be 4 or 8 bytes.
|
||||
#if defined(LONG_INTEGERS)
|
||||
integer, parameter :: ndig=12
|
||||
#else
|
||||
integer, parameter :: ndig=8
|
||||
#endif
|
||||
integer, parameter :: psb_ipk_ = selected_int_kind(ndig)
|
||||
! This is always an 8-byte integer.
|
||||
integer, parameter :: longndig=12
|
||||
integer, parameter :: psb_long_int_k_ = selected_int_kind(longndig)
|
||||
integer, parameter :: psb_lpk_ = psb_long_int_k_
|
||||
|
||||
! This is a 2-byte integer, just in case
|
||||
integer, parameter :: i2ndig=4
|
||||
integer, parameter :: psb_i2pk_ = selected_int_kind(i2ndig)
|
||||
! This is always a 4-byte integer, for MPI-related stuff
|
||||
integer, parameter :: psb_mpik_ = kind(1)
|
||||
integer, parameter :: indig=8
|
||||
integer, parameter :: psb_mpk_ = selected_int_kind(indig)
|
||||
! This is always an 8-byte integer.
|
||||
integer, parameter :: lndig=12
|
||||
integer, parameter :: psb_epk_ = selected_int_kind(lndig)
|
||||
!
|
||||
! These must be the kind parameter corresponding to psb_mpi_r_dpk_
|
||||
! and psb_mpi_r_spk_
|
||||
!
|
||||
integer(psb_mpik_), parameter :: psb_spk_p_ = 6
|
||||
integer(psb_mpik_), parameter :: psb_spk_r_ = 37
|
||||
integer(psb_mpik_), parameter :: psb_spk_ = selected_real_kind(psb_spk_p_,psb_spk_r_)
|
||||
integer(psb_mpik_), parameter :: psb_dpk_p_ = 15
|
||||
integer(psb_mpik_), parameter :: psb_dpk_r_ = 307
|
||||
integer(psb_mpik_), parameter :: psb_dpk_ = selected_real_kind(psb_dpk_p_,psb_dpk_r_)
|
||||
integer, parameter :: psb_spk_p_ = 6
|
||||
integer, parameter :: psb_spk_r_ = 37
|
||||
integer, parameter :: psb_spk_ = selected_real_kind(psb_spk_p_,psb_spk_r_)
|
||||
integer, parameter :: psb_dpk_p_ = 15
|
||||
integer, parameter :: psb_dpk_r_ = 307
|
||||
integer, parameter :: psb_dpk_ = selected_real_kind(psb_dpk_p_,psb_dpk_r_)
|
||||
#endif
|
||||
|
||||
integer(psb_ipk_), save :: psb_sizeof_dp, psb_sizeof_sp
|
||||
integer(psb_ipk_), save :: psb_sizeof_int, psb_sizeof_long_int
|
||||
! Now for the choices:
|
||||
! IPK = integer kind for "local" indices and sizes.
|
||||
! Can be 4 or 8 bytes.
|
||||
! LPK = integer kind for "global" indices and sizes.
|
||||
! Can be 4 or 8 bytes.
|
||||
! Size must be >= size of IPK
|
||||
!
|
||||
! Additional rules:
|
||||
! 1. MPI related stuff is always MPK
|
||||
! 2. ICTXT,IAM,NP: should we have two versions of everything,
|
||||
! one with MPK the other with EPK?
|
||||
! 3. INFO, ERR_ACT, IERR etc are always IPK
|
||||
! 4. For the array version of things, where it makes sense
|
||||
! e.g. realloc, snd/receive, define as MPK,EPK and the
|
||||
! compiler will later pick up the correct version according
|
||||
! to what IPK/LPK are mapped onto.
|
||||
!
|
||||
#if defined(IPK4) && defined(LPK4)
|
||||
integer, parameter :: psb_ipk_ = psb_mpk_
|
||||
integer, parameter :: psb_lpk_ = psb_mpk_
|
||||
#elif defined(IPK4) && defined(LPK8)
|
||||
integer, parameter :: psb_ipk_ = psb_mpk_
|
||||
integer, parameter :: psb_lpk_ = psb_epk_
|
||||
#elif defined(IPK8) && defined(LPK8)
|
||||
integer, parameter :: psb_ipk_ = psb_epk_
|
||||
integer, parameter :: psb_lpk_ = psb_epk_
|
||||
#else
|
||||
! Unsupported combination, compilation will stop later on
|
||||
integer, parameter :: psb_ipk_ = -1
|
||||
integer, parameter :: psb_lpk_ = -1
|
||||
#endif
|
||||
|
||||
integer(psb_ipk_), save :: psb_sizeof_sp
|
||||
integer(psb_ipk_), save :: psb_sizeof_dp
|
||||
integer(psb_ipk_), save :: psb_sizeof_i2p
|
||||
integer(psb_ipk_), save :: psb_sizeof_mp
|
||||
integer(psb_ipk_), save :: psb_sizeof_ep
|
||||
integer(psb_ipk_), save :: psb_sizeof_ip
|
||||
integer(psb_ipk_), save :: psb_sizeof_lp
|
||||
!
|
||||
! Integer type identifiers for MPI operations.
|
||||
!
|
||||
integer(psb_mpik_), save :: psb_mpi_ipk_integer
|
||||
integer(psb_mpik_), save :: psb_mpi_def_integer
|
||||
integer(psb_mpik_), save :: psb_mpi_lng_integer
|
||||
integer(psb_mpik_), save :: psb_mpi_r_spk_
|
||||
integer(psb_mpik_), save :: psb_mpi_r_dpk_
|
||||
integer(psb_mpik_), save :: psb_mpi_c_spk_
|
||||
integer(psb_mpik_), save :: psb_mpi_c_dpk_
|
||||
integer(psb_mpk_), save :: psb_mpi_i2pk_
|
||||
integer(psb_mpk_), save :: psb_mpi_epk_
|
||||
integer(psb_mpk_), save :: psb_mpi_mpk_
|
||||
integer(psb_mpk_), save :: psb_mpi_ipk_
|
||||
integer(psb_mpk_), save :: psb_mpi_lpk_
|
||||
integer(psb_mpk_), save :: psb_mpi_r_spk_
|
||||
integer(psb_mpk_), save :: psb_mpi_r_dpk_
|
||||
integer(psb_mpk_), save :: psb_mpi_c_spk_
|
||||
integer(psb_mpk_), save :: psb_mpi_c_dpk_
|
||||
!
|
||||
! Version
|
||||
!
|
||||
@@ -99,8 +131,15 @@ module psb_const_mod
|
||||
!
|
||||
! Handy & miscellaneous constants
|
||||
!
|
||||
integer(psb_epk_), parameter :: ezero=0, eone=1
|
||||
integer(psb_epk_), parameter :: etwo=2, ethree=3,emone=-1
|
||||
integer(psb_mpk_), parameter :: mzero=0, mone=1
|
||||
integer(psb_mpk_), parameter :: mtwo=2, mthree=3,mmone=-1
|
||||
integer(psb_lpk_), parameter :: lzero=0, lone=1
|
||||
integer(psb_lpk_), parameter :: ltwo=2, lthree=3,lmone=-1
|
||||
integer(psb_ipk_), parameter :: izero=0, ione=1
|
||||
integer(psb_ipk_), parameter :: itwo=2, ithree=3,mone=-1
|
||||
integer(psb_ipk_), parameter :: itwo=2, ithree=3,imone=-1
|
||||
|
||||
integer(psb_ipk_), parameter :: psb_root_=0
|
||||
real(psb_spk_), parameter :: szero=0.0_psb_spk_, sone=1.0_psb_spk_
|
||||
real(psb_dpk_), parameter :: dzero=0.0_psb_dpk_, done=1.0_psb_dpk_
|
||||
@@ -111,11 +150,18 @@ module psb_const_mod
|
||||
real(psb_dpk_), parameter :: d_epstol=1.1e-16_psb_dpk_ ! Unit roundoff.
|
||||
real(psb_spk_), parameter :: s_epstol=5.e-8_psb_spk_ ! Is this right?
|
||||
character, parameter :: psb_all_='A', psb_topdef_=' '
|
||||
logical, parameter :: psb_i_is_complex_ = .false.
|
||||
logical, parameter :: psb_s_is_complex_ = .false.
|
||||
logical, parameter :: psb_d_is_complex_ = .false.
|
||||
logical, parameter :: psb_c_is_complex_ = .true.
|
||||
logical, parameter :: psb_z_is_complex_ = .true.
|
||||
logical, parameter :: psb_m_is_complex_ = .false.
|
||||
logical, parameter :: psb_e_is_complex_ = .false.
|
||||
logical, parameter :: psb_i_is_complex_ = .false.
|
||||
logical, parameter :: psb_l_is_complex_ = .false.
|
||||
logical, parameter :: psb_s_is_complex_ = .false.
|
||||
logical, parameter :: psb_d_is_complex_ = .false.
|
||||
logical, parameter :: psb_c_is_complex_ = .true.
|
||||
logical, parameter :: psb_z_is_complex_ = .true.
|
||||
logical, parameter :: psb_ls_is_complex_ = .false.
|
||||
logical, parameter :: psb_ld_is_complex_ = .false.
|
||||
logical, parameter :: psb_lc_is_complex_ = .true.
|
||||
logical, parameter :: psb_lz_is_complex_ = .true.
|
||||
|
||||
!
|
||||
! Sort routines constants
|
||||
@@ -208,6 +254,8 @@ module psb_const_mod
|
||||
integer(psb_ipk_), parameter, public :: psb_err_forgot_spall_=295
|
||||
integer(psb_ipk_), parameter, public :: psb_err_wrong_ins_=298
|
||||
integer(psb_ipk_), parameter, public :: psb_err_iarg_mbeeiarra_i_=300
|
||||
integer(psb_ipk_), parameter, public :: psb_err_bad_int_cnv_=301
|
||||
integer(psb_ipk_), parameter, public :: psb_err_mpi_int_ovflw_=302
|
||||
integer(psb_ipk_), parameter, public :: psb_err_mpi_error_=400
|
||||
integer(psb_ipk_), parameter, public :: psb_err_parm_differs_among_procs_=550
|
||||
integer(psb_ipk_), parameter, public :: psb_err_entry_out_of_bounds_=551
|
||||
|
||||
Reference in New Issue
Block a user