|
|
|
|
@ -281,13 +281,19 @@ contains
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
ixb = psb_c_get_index_base()
|
|
|
|
|
if (ixb == 1) then
|
|
|
|
|
call psb_geins(nz,irw(1:nz),val(1:nz),&
|
|
|
|
|
& xp,descp,info)
|
|
|
|
|
else
|
|
|
|
|
select case(ixb)
|
|
|
|
|
case (0)
|
|
|
|
|
!write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz)
|
|
|
|
|
call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),&
|
|
|
|
|
& xp,descp,info)
|
|
|
|
|
end if
|
|
|
|
|
case(1)
|
|
|
|
|
!write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz)
|
|
|
|
|
call psb_geins(nz,irw(1:nz),val(1:nz),&
|
|
|
|
|
& xp,descp,info)
|
|
|
|
|
case default
|
|
|
|
|
write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb
|
|
|
|
|
info =-2
|
|
|
|
|
end select
|
|
|
|
|
|
|
|
|
|
res = min(0,info)
|
|
|
|
|
|
|
|
|
|
@ -440,6 +446,7 @@ contains
|
|
|
|
|
#endif
|
|
|
|
|
type(psb_d_ell_sparse_mat), target :: aell
|
|
|
|
|
type(psb_d_csr_sparse_mat), target :: acsr
|
|
|
|
|
type(psb_d_csc_sparse_mat), target :: acsc
|
|
|
|
|
type(psb_d_coo_sparse_mat), target :: acoo
|
|
|
|
|
type(psb_d_hll_sparse_mat), target :: ahll
|
|
|
|
|
type(psb_d_hdia_sparse_mat), target :: ahdia
|
|
|
|
|
@ -489,6 +496,8 @@ contains
|
|
|
|
|
amold => ahdia
|
|
|
|
|
case('CSR')
|
|
|
|
|
amold => acsr
|
|
|
|
|
case('CSC')
|
|
|
|
|
amold => acsc
|
|
|
|
|
case('DNS')
|
|
|
|
|
amold => adns
|
|
|
|
|
case default
|
|
|
|
|
@ -504,6 +513,8 @@ contains
|
|
|
|
|
amold => ahdia
|
|
|
|
|
case('CSR')
|
|
|
|
|
amold => acsr
|
|
|
|
|
case('CSC')
|
|
|
|
|
amold => acsc
|
|
|
|
|
case('DNS')
|
|
|
|
|
amold => adns
|
|
|
|
|
case default
|
|
|
|
|
@ -520,7 +531,7 @@ contains
|
|
|
|
|
& upd=upd,mold=arsb)
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
case('ELL','HLL','CSR','DNS')
|
|
|
|
|
case('ELL','HLL','CSR','DNS','CSC')
|
|
|
|
|
call psb_spasb(ap,descp,info,upd=upd,mold=amold)
|
|
|
|
|
case('HDIA')
|
|
|
|
|
call psb_spasb(ap,descp,info,upd=upd,mold=amold)
|
|
|
|
|
@ -664,4 +675,39 @@ contains
|
|
|
|
|
|
|
|
|
|
end function psb_c_dgetelem
|
|
|
|
|
|
|
|
|
|
function psb_c_dmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res)
|
|
|
|
|
implicit none
|
|
|
|
|
|
|
|
|
|
type(psb_c_dspmat) :: ah
|
|
|
|
|
integer(psb_c_lpk_), value :: rowindex, colindex
|
|
|
|
|
type(psb_c_descriptor) :: cdh
|
|
|
|
|
real(c_double) :: res
|
|
|
|
|
|
|
|
|
|
type(psb_dspmat_type), pointer :: ap
|
|
|
|
|
type(psb_desc_type), pointer :: descp
|
|
|
|
|
integer(psb_c_ipk_) :: info, ixb
|
|
|
|
|
|
|
|
|
|
res = -1
|
|
|
|
|
if (c_associated(cdh%item)) then
|
|
|
|
|
call c_f_pointer(cdh%item,descp)
|
|
|
|
|
else
|
|
|
|
|
return
|
|
|
|
|
end if
|
|
|
|
|
if (c_associated(ah%item)) then
|
|
|
|
|
call c_f_pointer(ah%item,ap)
|
|
|
|
|
else
|
|
|
|
|
return
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
ixb = psb_c_get_index_base()
|
|
|
|
|
if (ixb == 1) then
|
|
|
|
|
res = psb_getelem(ap,rowindex,colindex,descp,info)
|
|
|
|
|
else
|
|
|
|
|
res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info)
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
end function psb_c_dmatgetelem
|
|
|
|
|
|
|
|
|
|
end module psb_d_tools_cbind_mod
|
|
|
|
|
|