|
|
|
@ -194,7 +194,22 @@ module psb_c_mat_mod
|
|
|
|
procedure, pass(a) :: cscnv_base => psb_c_cscnv_base
|
|
|
|
procedure, pass(a) :: cscnv_base => psb_c_cscnv_base
|
|
|
|
generic, public :: cscnv => cscnv_np, cscnv_ip, cscnv_base
|
|
|
|
generic, public :: cscnv => cscnv_np, cscnv_ip, cscnv_base
|
|
|
|
procedure, pass(a) :: clone => psb_cspmat_clone
|
|
|
|
procedure, pass(a) :: clone => psb_cspmat_clone
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
! To/from lc
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_from_lb => psb_c_mv_from_lb
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_to_lb => psb_c_mv_to_lb
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_from_lb => psb_c_cp_from_lb
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_to_lb => psb_c_cp_to_lb
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_from_l => psb_c_mv_from_l
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_to_l => psb_c_mv_to_l
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_from_l => psb_c_cp_from_l
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_to_l => psb_c_cp_to_l
|
|
|
|
|
|
|
|
generic, public :: mv_from => mv_from_lb, mv_from_l
|
|
|
|
|
|
|
|
generic, public :: mv_to => mv_to_lb, mv_to_l
|
|
|
|
|
|
|
|
generic, public :: cp_from => cp_from_lb, cp_from_l
|
|
|
|
|
|
|
|
generic, public :: cp_to => cp_to_lb, cp_to_l
|
|
|
|
|
|
|
|
|
|
|
|
! Computational routines
|
|
|
|
! Computational routines
|
|
|
|
procedure, pass(a) :: get_diag => psb_c_get_diag
|
|
|
|
procedure, pass(a) :: get_diag => psb_c_get_diag
|
|
|
|
procedure, pass(a) :: maxval => psb_c_maxval
|
|
|
|
procedure, pass(a) :: maxval => psb_c_maxval
|
|
|
|
@ -355,6 +370,21 @@ module psb_c_mat_mod
|
|
|
|
procedure, pass(a) :: cscnv_base => psb_lc_cscnv_base
|
|
|
|
procedure, pass(a) :: cscnv_base => psb_lc_cscnv_base
|
|
|
|
generic, public :: cscnv => cscnv_np, cscnv_ip, cscnv_base
|
|
|
|
generic, public :: cscnv => cscnv_np, cscnv_ip, cscnv_base
|
|
|
|
procedure, pass(a) :: clone => psb_lcspmat_clone
|
|
|
|
procedure, pass(a) :: clone => psb_lcspmat_clone
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
! To/from c
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_from_ib => psb_lc_mv_from_ib
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_to_ib => psb_lc_mv_to_ib
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_from_ib => psb_lc_cp_from_ib
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_to_ib => psb_lc_cp_to_ib
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_from_i => psb_lc_mv_from_i
|
|
|
|
|
|
|
|
procedure, pass(a) :: mv_to_i => psb_lc_mv_to_i
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_from_i => psb_lc_cp_from_i
|
|
|
|
|
|
|
|
procedure, pass(a) :: cp_to_i => psb_lc_cp_to_i
|
|
|
|
|
|
|
|
generic, public :: mv_from => mv_from_ib, mv_from_i
|
|
|
|
|
|
|
|
generic, public :: mv_to => mv_to_ib, mv_to_i
|
|
|
|
|
|
|
|
generic, public :: cp_from => cp_from_ib, cp_from_i
|
|
|
|
|
|
|
|
generic, public :: cp_to => cp_to_ib, cp_to_i
|
|
|
|
|
|
|
|
|
|
|
|
! Computational routines
|
|
|
|
! Computational routines
|
|
|
|
procedure, pass(a) :: get_diag => psb_lc_get_diag
|
|
|
|
procedure, pass(a) :: get_diag => psb_lc_get_diag
|
|
|
|
@ -845,7 +875,73 @@ module psb_c_mat_mod
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
end subroutine psb_c_cp_to
|
|
|
|
end subroutine psb_c_cp_to
|
|
|
|
end interface
|
|
|
|
end interface
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
! Mixed type conversions
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_mv_from_lb(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lc_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_lc_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_mv_from_lb
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_cp_from_lb(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lc_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(out) :: a
|
|
|
|
|
|
|
|
class(psb_lc_base_sparse_mat), intent(in) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_cp_from_lb
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_mv_to_lb(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lc_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_lc_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_mv_to_lb
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_cp_to_lb(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lc_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(in) :: a
|
|
|
|
|
|
|
|
class(psb_lc_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_cp_to_lb
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_mv_from_l(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lcspmat_type
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_mv_from_l
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_cp_from_l(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lcspmat_type
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(out) :: a
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(in) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_cp_from_l
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_mv_to_l(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lcspmat_type
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_mv_to_l
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_c_cp_to_l(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_cspmat_type, psb_spk_, psb_lcspmat_type
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(in) :: a
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_c_cp_to_l
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Transfer the internal allocation to the target.
|
|
|
|
! Transfer the internal allocation to the target.
|
|
|
|
!
|
|
|
|
!
|
|
|
|
@ -1467,6 +1563,73 @@ module psb_c_mat_mod
|
|
|
|
class(psb_lc_base_sparse_mat), intent(inout) :: b
|
|
|
|
class(psb_lc_base_sparse_mat), intent(inout) :: b
|
|
|
|
end subroutine psb_lc_cp_to
|
|
|
|
end subroutine psb_lc_cp_to
|
|
|
|
end interface
|
|
|
|
end interface
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
! Mixed type conversions
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_mv_from_ib(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_c_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_mv_from_ib
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_cp_from_ib(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_c_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(out) :: a
|
|
|
|
|
|
|
|
class(psb_c_base_sparse_mat), intent(in) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_cp_from_ib
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_mv_to_ib(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_c_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_mv_to_ib
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_cp_to_ib(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_c_base_sparse_mat
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(in) :: a
|
|
|
|
|
|
|
|
class(psb_c_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_cp_to_ib
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_mv_from_i(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_cspmat_type
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_mv_from_i
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_cp_from_i(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_cspmat_type
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(out) :: a
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(in) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_cp_from_i
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_mv_to_i(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_cspmat_type
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(inout) :: a
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_mv_to_i
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
subroutine psb_lc_cp_to_i(a,b)
|
|
|
|
|
|
|
|
import :: psb_ipk_, psb_lpk_, psb_lcspmat_type, psb_spk_, psb_cspmat_type
|
|
|
|
|
|
|
|
class(psb_lcspmat_type), intent(in) :: a
|
|
|
|
|
|
|
|
class(psb_cspmat_type), intent(inout) :: b
|
|
|
|
|
|
|
|
end subroutine psb_lc_cp_to_i
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Transfer the internal allocation to the target.
|
|
|
|
! Transfer the internal allocation to the target.
|
|
|
|
|