Modify handling of lower/upper/symmetric

psblas-3.6-maint
Salvatore Filippone 6 years ago
parent adc3d37a11
commit be30879121

@ -116,6 +116,8 @@ module psb_base_mat_mod
!! can ever be in the BUILD state, hence all other formats
!! cannot have duplicate entries.
integer(psb_ipk_), private :: duplicate
!> Is the matrix symmetric? (must also be square)
logical, private :: symmetric
!> Is the matrix triangular? (must also be square)
logical, private :: triangle
!> Is the matrix upper or lower? (only if triangular)
@ -152,6 +154,7 @@ module psb_base_mat_mod
procedure, pass(a) :: is_upper => psb_base_is_upper
procedure, pass(a) :: is_lower => psb_base_is_lower
procedure, pass(a) :: is_triangle => psb_base_is_triangle
procedure, pass(a) :: is_symmetric => psb_base_is_symmetric
procedure, pass(a) :: is_unit => psb_base_is_unit
procedure, pass(a) :: is_by_rows => psb_base_is_by_rows
procedure, pass(a) :: is_by_cols => psb_base_is_by_cols
@ -174,6 +177,7 @@ module psb_base_mat_mod
procedure, pass(a) :: set_upper => psb_base_set_upper
procedure, pass(a) :: set_lower => psb_base_set_lower
procedure, pass(a) :: set_triangle => psb_base_set_triangle
procedure, pass(a) :: set_symmetric => psb_base_set_symmetric
procedure, pass(a) :: set_unit => psb_base_set_unit
procedure, pass(a) :: set_repeatable_updates => psb_base_set_repeatable_updates
@ -586,6 +590,18 @@ contains
end if
end subroutine psb_base_set_triangle
subroutine psb_base_set_symmetric(a,val)
implicit none
class(psb_base_sparse_mat), intent(inout) :: a
logical, intent(in), optional :: val
if (present(val)) then
a%symmetric = val
else
a%symmetric = .true.
end if
end subroutine psb_base_set_symmetric
subroutine psb_base_set_unit(a,val)
implicit none
class(psb_base_sparse_mat), intent(inout) :: a
@ -641,6 +657,13 @@ contains
res = a%triangle
end function psb_base_is_triangle
function psb_base_is_symmetric(a) result(res)
implicit none
class(psb_base_sparse_mat), intent(in) :: a
logical :: res
res = a%symmetric
end function psb_base_is_symmetric
function psb_base_is_unit(a) result(res)
implicit none
class(psb_base_sparse_mat), intent(in) :: a
@ -652,14 +675,14 @@ contains
implicit none
class(psb_base_sparse_mat), intent(in) :: a
logical :: res
res = a%upper
res = a%upper .and. a%triangle
end function psb_base_is_upper
function psb_base_is_lower(a) result(res)
implicit none
class(psb_base_sparse_mat), intent(in) :: a
logical :: res
res = .not.a%upper
res = (.not.a%upper) .and. a%triangle
end function psb_base_is_lower
function psb_base_is_null(a) result(res)

@ -81,42 +81,44 @@ module psb_c_mat_mod
contains
! Getters
procedure, pass(a) :: get_nrows => psb_c_get_nrows
procedure, pass(a) :: get_ncols => psb_c_get_ncols
procedure, pass(a) :: get_nzeros => psb_c_get_nzeros
procedure, pass(a) :: get_nz_row => psb_c_get_nz_row
procedure, pass(a) :: get_size => psb_c_get_size
procedure, pass(a) :: get_dupl => psb_c_get_dupl
procedure, pass(a) :: is_null => psb_c_is_null
procedure, pass(a) :: is_bld => psb_c_is_bld
procedure, pass(a) :: is_upd => psb_c_is_upd
procedure, pass(a) :: is_asb => psb_c_is_asb
procedure, pass(a) :: is_sorted => psb_c_is_sorted
procedure, pass(a) :: is_by_rows => psb_c_is_by_rows
procedure, pass(a) :: is_by_cols => psb_c_is_by_cols
procedure, pass(a) :: is_upper => psb_c_is_upper
procedure, pass(a) :: is_lower => psb_c_is_lower
procedure, pass(a) :: is_triangle => psb_c_is_triangle
procedure, pass(a) :: get_nrows => psb_c_get_nrows
procedure, pass(a) :: get_ncols => psb_c_get_ncols
procedure, pass(a) :: get_nzeros => psb_c_get_nzeros
procedure, pass(a) :: get_nz_row => psb_c_get_nz_row
procedure, pass(a) :: get_size => psb_c_get_size
procedure, pass(a) :: get_dupl => psb_c_get_dupl
procedure, pass(a) :: is_null => psb_c_is_null
procedure, pass(a) :: is_bld => psb_c_is_bld
procedure, pass(a) :: is_upd => psb_c_is_upd
procedure, pass(a) :: is_asb => psb_c_is_asb
procedure, pass(a) :: is_sorted => psb_c_is_sorted
procedure, pass(a) :: is_by_rows => psb_c_is_by_rows
procedure, pass(a) :: is_by_cols => psb_c_is_by_cols
procedure, pass(a) :: is_upper => psb_c_is_upper
procedure, pass(a) :: is_lower => psb_c_is_lower
procedure, pass(a) :: is_triangle => psb_c_is_triangle
procedure, pass(a) :: is_symmetric => psb_c_is_symmetric
procedure, pass(a) :: is_unit => psb_c_is_unit
procedure, pass(a) :: is_repeatable_updates => psb_c_is_repeatable_updates
procedure, pass(a) :: get_fmt => psb_c_get_fmt
procedure, pass(a) :: sizeof => psb_c_sizeof
! Setters
procedure, pass(a) :: set_nrows => psb_c_set_nrows
procedure, pass(a) :: set_ncols => psb_c_set_ncols
procedure, pass(a) :: set_dupl => psb_c_set_dupl
procedure, pass(a) :: set_null => psb_c_set_null
procedure, pass(a) :: set_bld => psb_c_set_bld
procedure, pass(a) :: set_upd => psb_c_set_upd
procedure, pass(a) :: set_asb => psb_c_set_asb
procedure, pass(a) :: set_sorted => psb_c_set_sorted
procedure, pass(a) :: set_upper => psb_c_set_upper
procedure, pass(a) :: set_lower => psb_c_set_lower
procedure, pass(a) :: set_triangle => psb_c_set_triangle
procedure, pass(a) :: set_unit => psb_c_set_unit
procedure, pass(a) :: set_nrows => psb_c_set_nrows
procedure, pass(a) :: set_ncols => psb_c_set_ncols
procedure, pass(a) :: set_dupl => psb_c_set_dupl
procedure, pass(a) :: set_null => psb_c_set_null
procedure, pass(a) :: set_bld => psb_c_set_bld
procedure, pass(a) :: set_upd => psb_c_set_upd
procedure, pass(a) :: set_asb => psb_c_set_asb
procedure, pass(a) :: set_sorted => psb_c_set_sorted
procedure, pass(a) :: set_upper => psb_c_set_upper
procedure, pass(a) :: set_lower => psb_c_set_lower
procedure, pass(a) :: set_triangle => psb_c_set_triangle
procedure, pass(a) :: set_symmetric => psb_c_set_symmetric
procedure, pass(a) :: set_unit => psb_c_set_unit
procedure, pass(a) :: set_repeatable_updates => psb_c_set_repeatable_updates
procedure, pass(a) :: has_xt_tri => psb_c_has_xt_tri
procedure, pass(a) :: has_xt_tri => psb_c_has_xt_tri
! Memory/data management
@ -322,6 +324,14 @@ module psb_c_mat_mod
end subroutine psb_c_set_triangle
end interface
interface
subroutine psb_c_set_symmetric(a,val)
import :: psb_ipk_, psb_cspmat_type
class(psb_cspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
end subroutine psb_c_set_symmetric
end interface
interface
subroutine psb_c_set_unit(a,val)
import :: psb_ipk_, psb_cspmat_type
@ -1037,6 +1047,19 @@ contains
end function psb_c_is_triangle
function psb_c_is_symmetric(a) result(res)
implicit none
class(psb_cspmat_type), intent(in) :: a
logical :: res
if (allocated(a%a)) then
res = a%a%is_symmetric()
else
res = .false.
end if
end function psb_c_is_symmetric
function psb_c_is_unit(a) result(res)
implicit none
class(psb_cspmat_type), intent(in) :: a

@ -81,42 +81,44 @@ module psb_d_mat_mod
contains
! Getters
procedure, pass(a) :: get_nrows => psb_d_get_nrows
procedure, pass(a) :: get_ncols => psb_d_get_ncols
procedure, pass(a) :: get_nzeros => psb_d_get_nzeros
procedure, pass(a) :: get_nz_row => psb_d_get_nz_row
procedure, pass(a) :: get_size => psb_d_get_size
procedure, pass(a) :: get_dupl => psb_d_get_dupl
procedure, pass(a) :: is_null => psb_d_is_null
procedure, pass(a) :: is_bld => psb_d_is_bld
procedure, pass(a) :: is_upd => psb_d_is_upd
procedure, pass(a) :: is_asb => psb_d_is_asb
procedure, pass(a) :: is_sorted => psb_d_is_sorted
procedure, pass(a) :: is_by_rows => psb_d_is_by_rows
procedure, pass(a) :: is_by_cols => psb_d_is_by_cols
procedure, pass(a) :: is_upper => psb_d_is_upper
procedure, pass(a) :: is_lower => psb_d_is_lower
procedure, pass(a) :: is_triangle => psb_d_is_triangle
procedure, pass(a) :: get_nrows => psb_d_get_nrows
procedure, pass(a) :: get_ncols => psb_d_get_ncols
procedure, pass(a) :: get_nzeros => psb_d_get_nzeros
procedure, pass(a) :: get_nz_row => psb_d_get_nz_row
procedure, pass(a) :: get_size => psb_d_get_size
procedure, pass(a) :: get_dupl => psb_d_get_dupl
procedure, pass(a) :: is_null => psb_d_is_null
procedure, pass(a) :: is_bld => psb_d_is_bld
procedure, pass(a) :: is_upd => psb_d_is_upd
procedure, pass(a) :: is_asb => psb_d_is_asb
procedure, pass(a) :: is_sorted => psb_d_is_sorted
procedure, pass(a) :: is_by_rows => psb_d_is_by_rows
procedure, pass(a) :: is_by_cols => psb_d_is_by_cols
procedure, pass(a) :: is_upper => psb_d_is_upper
procedure, pass(a) :: is_lower => psb_d_is_lower
procedure, pass(a) :: is_triangle => psb_d_is_triangle
procedure, pass(a) :: is_symmetric => psb_d_is_symmetric
procedure, pass(a) :: is_unit => psb_d_is_unit
procedure, pass(a) :: is_repeatable_updates => psb_d_is_repeatable_updates
procedure, pass(a) :: get_fmt => psb_d_get_fmt
procedure, pass(a) :: sizeof => psb_d_sizeof
! Setters
procedure, pass(a) :: set_nrows => psb_d_set_nrows
procedure, pass(a) :: set_ncols => psb_d_set_ncols
procedure, pass(a) :: set_dupl => psb_d_set_dupl
procedure, pass(a) :: set_null => psb_d_set_null
procedure, pass(a) :: set_bld => psb_d_set_bld
procedure, pass(a) :: set_upd => psb_d_set_upd
procedure, pass(a) :: set_asb => psb_d_set_asb
procedure, pass(a) :: set_sorted => psb_d_set_sorted
procedure, pass(a) :: set_upper => psb_d_set_upper
procedure, pass(a) :: set_lower => psb_d_set_lower
procedure, pass(a) :: set_triangle => psb_d_set_triangle
procedure, pass(a) :: set_unit => psb_d_set_unit
procedure, pass(a) :: set_nrows => psb_d_set_nrows
procedure, pass(a) :: set_ncols => psb_d_set_ncols
procedure, pass(a) :: set_dupl => psb_d_set_dupl
procedure, pass(a) :: set_null => psb_d_set_null
procedure, pass(a) :: set_bld => psb_d_set_bld
procedure, pass(a) :: set_upd => psb_d_set_upd
procedure, pass(a) :: set_asb => psb_d_set_asb
procedure, pass(a) :: set_sorted => psb_d_set_sorted
procedure, pass(a) :: set_upper => psb_d_set_upper
procedure, pass(a) :: set_lower => psb_d_set_lower
procedure, pass(a) :: set_triangle => psb_d_set_triangle
procedure, pass(a) :: set_symmetric => psb_d_set_symmetric
procedure, pass(a) :: set_unit => psb_d_set_unit
procedure, pass(a) :: set_repeatable_updates => psb_d_set_repeatable_updates
procedure, pass(a) :: has_xt_tri => psb_d_has_xt_tri
procedure, pass(a) :: has_xt_tri => psb_d_has_xt_tri
! Memory/data management
@ -322,6 +324,14 @@ module psb_d_mat_mod
end subroutine psb_d_set_triangle
end interface
interface
subroutine psb_d_set_symmetric(a,val)
import :: psb_ipk_, psb_dspmat_type
class(psb_dspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
end subroutine psb_d_set_symmetric
end interface
interface
subroutine psb_d_set_unit(a,val)
import :: psb_ipk_, psb_dspmat_type
@ -1037,6 +1047,19 @@ contains
end function psb_d_is_triangle
function psb_d_is_symmetric(a) result(res)
implicit none
class(psb_dspmat_type), intent(in) :: a
logical :: res
if (allocated(a%a)) then
res = a%a%is_symmetric()
else
res = .false.
end if
end function psb_d_is_symmetric
function psb_d_is_unit(a) result(res)
implicit none
class(psb_dspmat_type), intent(in) :: a

@ -81,42 +81,44 @@ module psb_s_mat_mod
contains
! Getters
procedure, pass(a) :: get_nrows => psb_s_get_nrows
procedure, pass(a) :: get_ncols => psb_s_get_ncols
procedure, pass(a) :: get_nzeros => psb_s_get_nzeros
procedure, pass(a) :: get_nz_row => psb_s_get_nz_row
procedure, pass(a) :: get_size => psb_s_get_size
procedure, pass(a) :: get_dupl => psb_s_get_dupl
procedure, pass(a) :: is_null => psb_s_is_null
procedure, pass(a) :: is_bld => psb_s_is_bld
procedure, pass(a) :: is_upd => psb_s_is_upd
procedure, pass(a) :: is_asb => psb_s_is_asb
procedure, pass(a) :: is_sorted => psb_s_is_sorted
procedure, pass(a) :: is_by_rows => psb_s_is_by_rows
procedure, pass(a) :: is_by_cols => psb_s_is_by_cols
procedure, pass(a) :: is_upper => psb_s_is_upper
procedure, pass(a) :: is_lower => psb_s_is_lower
procedure, pass(a) :: is_triangle => psb_s_is_triangle
procedure, pass(a) :: get_nrows => psb_s_get_nrows
procedure, pass(a) :: get_ncols => psb_s_get_ncols
procedure, pass(a) :: get_nzeros => psb_s_get_nzeros
procedure, pass(a) :: get_nz_row => psb_s_get_nz_row
procedure, pass(a) :: get_size => psb_s_get_size
procedure, pass(a) :: get_dupl => psb_s_get_dupl
procedure, pass(a) :: is_null => psb_s_is_null
procedure, pass(a) :: is_bld => psb_s_is_bld
procedure, pass(a) :: is_upd => psb_s_is_upd
procedure, pass(a) :: is_asb => psb_s_is_asb
procedure, pass(a) :: is_sorted => psb_s_is_sorted
procedure, pass(a) :: is_by_rows => psb_s_is_by_rows
procedure, pass(a) :: is_by_cols => psb_s_is_by_cols
procedure, pass(a) :: is_upper => psb_s_is_upper
procedure, pass(a) :: is_lower => psb_s_is_lower
procedure, pass(a) :: is_triangle => psb_s_is_triangle
procedure, pass(a) :: is_symmetric => psb_s_is_symmetric
procedure, pass(a) :: is_unit => psb_s_is_unit
procedure, pass(a) :: is_repeatable_updates => psb_s_is_repeatable_updates
procedure, pass(a) :: get_fmt => psb_s_get_fmt
procedure, pass(a) :: sizeof => psb_s_sizeof
! Setters
procedure, pass(a) :: set_nrows => psb_s_set_nrows
procedure, pass(a) :: set_ncols => psb_s_set_ncols
procedure, pass(a) :: set_dupl => psb_s_set_dupl
procedure, pass(a) :: set_null => psb_s_set_null
procedure, pass(a) :: set_bld => psb_s_set_bld
procedure, pass(a) :: set_upd => psb_s_set_upd
procedure, pass(a) :: set_asb => psb_s_set_asb
procedure, pass(a) :: set_sorted => psb_s_set_sorted
procedure, pass(a) :: set_upper => psb_s_set_upper
procedure, pass(a) :: set_lower => psb_s_set_lower
procedure, pass(a) :: set_triangle => psb_s_set_triangle
procedure, pass(a) :: set_unit => psb_s_set_unit
procedure, pass(a) :: set_nrows => psb_s_set_nrows
procedure, pass(a) :: set_ncols => psb_s_set_ncols
procedure, pass(a) :: set_dupl => psb_s_set_dupl
procedure, pass(a) :: set_null => psb_s_set_null
procedure, pass(a) :: set_bld => psb_s_set_bld
procedure, pass(a) :: set_upd => psb_s_set_upd
procedure, pass(a) :: set_asb => psb_s_set_asb
procedure, pass(a) :: set_sorted => psb_s_set_sorted
procedure, pass(a) :: set_upper => psb_s_set_upper
procedure, pass(a) :: set_lower => psb_s_set_lower
procedure, pass(a) :: set_triangle => psb_s_set_triangle
procedure, pass(a) :: set_symmetric => psb_s_set_symmetric
procedure, pass(a) :: set_unit => psb_s_set_unit
procedure, pass(a) :: set_repeatable_updates => psb_s_set_repeatable_updates
procedure, pass(a) :: has_xt_tri => psb_s_has_xt_tri
procedure, pass(a) :: has_xt_tri => psb_s_has_xt_tri
! Memory/data management
@ -322,6 +324,14 @@ module psb_s_mat_mod
end subroutine psb_s_set_triangle
end interface
interface
subroutine psb_s_set_symmetric(a,val)
import :: psb_ipk_, psb_sspmat_type
class(psb_sspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
end subroutine psb_s_set_symmetric
end interface
interface
subroutine psb_s_set_unit(a,val)
import :: psb_ipk_, psb_sspmat_type
@ -1037,6 +1047,19 @@ contains
end function psb_s_is_triangle
function psb_s_is_symmetric(a) result(res)
implicit none
class(psb_sspmat_type), intent(in) :: a
logical :: res
if (allocated(a%a)) then
res = a%a%is_symmetric()
else
res = .false.
end if
end function psb_s_is_symmetric
function psb_s_is_unit(a) result(res)
implicit none
class(psb_sspmat_type), intent(in) :: a

@ -81,42 +81,44 @@ module psb_z_mat_mod
contains
! Getters
procedure, pass(a) :: get_nrows => psb_z_get_nrows
procedure, pass(a) :: get_ncols => psb_z_get_ncols
procedure, pass(a) :: get_nzeros => psb_z_get_nzeros
procedure, pass(a) :: get_nz_row => psb_z_get_nz_row
procedure, pass(a) :: get_size => psb_z_get_size
procedure, pass(a) :: get_dupl => psb_z_get_dupl
procedure, pass(a) :: is_null => psb_z_is_null
procedure, pass(a) :: is_bld => psb_z_is_bld
procedure, pass(a) :: is_upd => psb_z_is_upd
procedure, pass(a) :: is_asb => psb_z_is_asb
procedure, pass(a) :: is_sorted => psb_z_is_sorted
procedure, pass(a) :: is_by_rows => psb_z_is_by_rows
procedure, pass(a) :: is_by_cols => psb_z_is_by_cols
procedure, pass(a) :: is_upper => psb_z_is_upper
procedure, pass(a) :: is_lower => psb_z_is_lower
procedure, pass(a) :: is_triangle => psb_z_is_triangle
procedure, pass(a) :: get_nrows => psb_z_get_nrows
procedure, pass(a) :: get_ncols => psb_z_get_ncols
procedure, pass(a) :: get_nzeros => psb_z_get_nzeros
procedure, pass(a) :: get_nz_row => psb_z_get_nz_row
procedure, pass(a) :: get_size => psb_z_get_size
procedure, pass(a) :: get_dupl => psb_z_get_dupl
procedure, pass(a) :: is_null => psb_z_is_null
procedure, pass(a) :: is_bld => psb_z_is_bld
procedure, pass(a) :: is_upd => psb_z_is_upd
procedure, pass(a) :: is_asb => psb_z_is_asb
procedure, pass(a) :: is_sorted => psb_z_is_sorted
procedure, pass(a) :: is_by_rows => psb_z_is_by_rows
procedure, pass(a) :: is_by_cols => psb_z_is_by_cols
procedure, pass(a) :: is_upper => psb_z_is_upper
procedure, pass(a) :: is_lower => psb_z_is_lower
procedure, pass(a) :: is_triangle => psb_z_is_triangle
procedure, pass(a) :: is_symmetric => psb_z_is_symmetric
procedure, pass(a) :: is_unit => psb_z_is_unit
procedure, pass(a) :: is_repeatable_updates => psb_z_is_repeatable_updates
procedure, pass(a) :: get_fmt => psb_z_get_fmt
procedure, pass(a) :: sizeof => psb_z_sizeof
! Setters
procedure, pass(a) :: set_nrows => psb_z_set_nrows
procedure, pass(a) :: set_ncols => psb_z_set_ncols
procedure, pass(a) :: set_dupl => psb_z_set_dupl
procedure, pass(a) :: set_null => psb_z_set_null
procedure, pass(a) :: set_bld => psb_z_set_bld
procedure, pass(a) :: set_upd => psb_z_set_upd
procedure, pass(a) :: set_asb => psb_z_set_asb
procedure, pass(a) :: set_sorted => psb_z_set_sorted
procedure, pass(a) :: set_upper => psb_z_set_upper
procedure, pass(a) :: set_lower => psb_z_set_lower
procedure, pass(a) :: set_triangle => psb_z_set_triangle
procedure, pass(a) :: set_unit => psb_z_set_unit
procedure, pass(a) :: set_nrows => psb_z_set_nrows
procedure, pass(a) :: set_ncols => psb_z_set_ncols
procedure, pass(a) :: set_dupl => psb_z_set_dupl
procedure, pass(a) :: set_null => psb_z_set_null
procedure, pass(a) :: set_bld => psb_z_set_bld
procedure, pass(a) :: set_upd => psb_z_set_upd
procedure, pass(a) :: set_asb => psb_z_set_asb
procedure, pass(a) :: set_sorted => psb_z_set_sorted
procedure, pass(a) :: set_upper => psb_z_set_upper
procedure, pass(a) :: set_lower => psb_z_set_lower
procedure, pass(a) :: set_triangle => psb_z_set_triangle
procedure, pass(a) :: set_symmetric => psb_z_set_symmetric
procedure, pass(a) :: set_unit => psb_z_set_unit
procedure, pass(a) :: set_repeatable_updates => psb_z_set_repeatable_updates
procedure, pass(a) :: has_xt_tri => psb_z_has_xt_tri
procedure, pass(a) :: has_xt_tri => psb_z_has_xt_tri
! Memory/data management
@ -322,6 +324,14 @@ module psb_z_mat_mod
end subroutine psb_z_set_triangle
end interface
interface
subroutine psb_z_set_symmetric(a,val)
import :: psb_ipk_, psb_zspmat_type
class(psb_zspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
end subroutine psb_z_set_symmetric
end interface
interface
subroutine psb_z_set_unit(a,val)
import :: psb_ipk_, psb_zspmat_type
@ -1037,6 +1047,19 @@ contains
end function psb_z_is_triangle
function psb_z_is_symmetric(a) result(res)
implicit none
class(psb_zspmat_type), intent(in) :: a
logical :: res
if (allocated(a%a)) then
res = a%a%is_symmetric()
else
res = .false.
end if
end function psb_z_is_symmetric
function psb_z_is_unit(a) result(res)
implicit none
class(psb_zspmat_type), intent(in) :: a

@ -999,8 +999,6 @@ contains
end subroutine psb_c_csr_cssv
subroutine psb_c_csr_cssm(alpha,a,x,beta,y,info,trans)
use psb_error_mod
use psb_string_mod
@ -3385,7 +3383,7 @@ subroutine psb_ccsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output.
nza = a%get_nzeros()
nzb = b%get_nzeros()
nzc = 2*(nza+nzb)
nzc = int(1.25*(nza+nzb))
call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info)

@ -328,6 +328,35 @@ subroutine psb_c_set_triangle(a,val)
end subroutine psb_c_set_triangle
subroutine psb_c_set_symmetric(a,val)
use psb_c_mat_mod, psb_protect_name => psb_c_set_symmetric
use psb_error_mod
implicit none
class(psb_cspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
integer(psb_ipk_) :: err_act, info
character(len=20) :: name='get_nzeros'
logical, parameter :: debug=.false.
call psb_erractionsave(err_act)
if (.not.allocated(a%a)) then
info = psb_err_invalid_mat_state_
call psb_errpush(info,name)
goto 9999
endif
call a%a%set_symmetric(val)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_c_set_symmetric
subroutine psb_c_set_unit(a,val)
use psb_c_mat_mod, psb_protect_name => psb_c_set_unit

@ -999,8 +999,6 @@ contains
end subroutine psb_d_csr_cssv
subroutine psb_d_csr_cssm(alpha,a,x,beta,y,info,trans)
use psb_error_mod
use psb_string_mod
@ -3385,7 +3383,7 @@ subroutine psb_dcsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output.
nza = a%get_nzeros()
nzb = b%get_nzeros()
nzc = 2*(nza+nzb)
nzc = int(1.25*(nza+nzb))
call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info)

@ -328,6 +328,35 @@ subroutine psb_d_set_triangle(a,val)
end subroutine psb_d_set_triangle
subroutine psb_d_set_symmetric(a,val)
use psb_d_mat_mod, psb_protect_name => psb_d_set_symmetric
use psb_error_mod
implicit none
class(psb_dspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
integer(psb_ipk_) :: err_act, info
character(len=20) :: name='get_nzeros'
logical, parameter :: debug=.false.
call psb_erractionsave(err_act)
if (.not.allocated(a%a)) then
info = psb_err_invalid_mat_state_
call psb_errpush(info,name)
goto 9999
endif
call a%a%set_symmetric(val)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_d_set_symmetric
subroutine psb_d_set_unit(a,val)
use psb_d_mat_mod, psb_protect_name => psb_d_set_unit

@ -999,8 +999,6 @@ contains
end subroutine psb_s_csr_cssv
subroutine psb_s_csr_cssm(alpha,a,x,beta,y,info,trans)
use psb_error_mod
use psb_string_mod
@ -3385,7 +3383,7 @@ subroutine psb_scsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output.
nza = a%get_nzeros()
nzb = b%get_nzeros()
nzc = 2*(nza+nzb)
nzc = int(1.25*(nza+nzb))
call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info)

@ -328,6 +328,35 @@ subroutine psb_s_set_triangle(a,val)
end subroutine psb_s_set_triangle
subroutine psb_s_set_symmetric(a,val)
use psb_s_mat_mod, psb_protect_name => psb_s_set_symmetric
use psb_error_mod
implicit none
class(psb_sspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
integer(psb_ipk_) :: err_act, info
character(len=20) :: name='get_nzeros'
logical, parameter :: debug=.false.
call psb_erractionsave(err_act)
if (.not.allocated(a%a)) then
info = psb_err_invalid_mat_state_
call psb_errpush(info,name)
goto 9999
endif
call a%a%set_symmetric(val)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_s_set_symmetric
subroutine psb_s_set_unit(a,val)
use psb_s_mat_mod, psb_protect_name => psb_s_set_unit

@ -999,8 +999,6 @@ contains
end subroutine psb_z_csr_cssv
subroutine psb_z_csr_cssm(alpha,a,x,beta,y,info,trans)
use psb_error_mod
use psb_string_mod
@ -3385,7 +3383,7 @@ subroutine psb_zcsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output.
nza = a%get_nzeros()
nzb = b%get_nzeros()
nzc = 2*(nza+nzb)
nzc = int(1.25*(nza+nzb))
call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info)

@ -328,6 +328,35 @@ subroutine psb_z_set_triangle(a,val)
end subroutine psb_z_set_triangle
subroutine psb_z_set_symmetric(a,val)
use psb_z_mat_mod, psb_protect_name => psb_z_set_symmetric
use psb_error_mod
implicit none
class(psb_zspmat_type), intent(inout) :: a
logical, intent(in), optional :: val
integer(psb_ipk_) :: err_act, info
character(len=20) :: name='get_nzeros'
logical, parameter :: debug=.false.
call psb_erractionsave(err_act)
if (.not.allocated(a%a)) then
info = psb_err_invalid_mat_state_
call psb_errpush(info,name)
goto 9999
endif
call a%a%set_symmetric(val)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_z_set_symmetric
subroutine psb_z_set_unit(a,val)
use psb_z_mat_mod, psb_protect_name => psb_z_set_unit

Loading…
Cancel
Save