Merge branch 'development' into remap-coarse

new-context
Salvatore Filippone 6 years ago
commit db7def0433

@ -104,6 +104,7 @@ subroutine psi_bld_tmphalo(desc,info)
call desc%indxmap%l2gip(helem(1:nh),info) call desc%indxmap%l2gip(helem(1:nh),info)
if (info == psb_success_) call desc%indxmap%fnd_owner(helem(1:nh),hproc,info) if (info == psb_success_) call desc%indxmap%fnd_owner(helem(1:nh),hproc,info)
if (info == psb_success_) call desc%indxmap%set_halo_owner(hproc,info) if (info == psb_success_) call desc%indxmap%set_halo_owner(hproc,info)
if (info == psb_success_) call desc%indxmap%xtnd_p_adjcncy(hproc)
if (info /= psb_success_) then if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='fnd_owner') call psb_errpush(psb_err_from_subroutine_,name,a_err='fnd_owner')

@ -71,9 +71,9 @@ subroutine psi_i_crea_index(desc_a,index_in,index_out,nxch,nsnd,nrcv,info)
integer(psb_ipk_),parameter :: root=psb_root_,no_comm=-1 integer(psb_ipk_),parameter :: root=psb_root_,no_comm=-1
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name character(len=20) :: name
logical, parameter :: do_timings=.false. logical, parameter :: do_timings=.false., shuffle_dep_list=.false.
integer(psb_ipk_), save :: idx_phase1=-1, idx_phase2=-1, idx_phase3=-1 integer(psb_ipk_), save :: idx_phase1=-1, idx_phase2=-1, idx_phase3=-1
integer(psb_ipk_), save :: idx_phase11=-1, idx_phase12=-1, idx_phase13=-1 integer(psb_ipk_), save :: idx_phase21=-1, idx_phase22=-1, idx_phase13=-1
info = psb_success_ info = psb_success_
name='psi_crea_index' name='psi_crea_index'
@ -95,10 +95,10 @@ subroutine psi_i_crea_index(desc_a,index_in,index_out,nxch,nsnd,nrcv,info)
& idx_phase2 = psb_get_timer_idx("PSI_CREA_INDEX: phase2") & idx_phase2 = psb_get_timer_idx("PSI_CREA_INDEX: phase2")
if ((do_timings).and.(idx_phase3==-1)) & if ((do_timings).and.(idx_phase3==-1)) &
& idx_phase3 = psb_get_timer_idx("PSI_CREA_INDEX: phase3") & idx_phase3 = psb_get_timer_idx("PSI_CREA_INDEX: phase3")
!!$ if ((do_timings).and.(idx_phase11==-1)) & if ((do_timings).and.(idx_phase21==-1)) &
!!$ & idx_phase11 = psb_get_timer_idx("PSI_CREA_INDEX: phase11 ") & idx_phase21 = psb_get_timer_idx("PSI_CREA_INDEX: phase21 ")
!!$ if ((do_timings).and.(idx_phase12==-1)) & if ((do_timings).and.(idx_phase22==-1)) &
!!$ & idx_phase12 = psb_get_timer_idx("PSI_CREA_INDEX: phase12") & idx_phase22 = psb_get_timer_idx("PSI_CREA_INDEX: phase22")
!!$ if ((do_timings).and.(idx_phase13==-1)) & !!$ if ((do_timings).and.(idx_phase13==-1)) &
!!$ & idx_phase13 = psb_get_timer_idx("PSI_CREA_INDEX: phase13") !!$ & idx_phase13 = psb_get_timer_idx("PSI_CREA_INDEX: phase13")
@ -123,6 +123,7 @@ subroutine psi_i_crea_index(desc_a,index_in,index_out,nxch,nsnd,nrcv,info)
if (do_timings) call psb_tic(idx_phase2) if (do_timings) call psb_tic(idx_phase2)
if (choose_sorting(dlmax,dlavg,np)) then if (choose_sorting(dlmax,dlavg,np)) then
if (do_timings) call psb_tic(idx_phase21)
call psi_bld_glb_dep_list(ictxt,& call psi_bld_glb_dep_list(ictxt,&
& loc_dl,length_dl,c_dep_list,dl_ptr,info) & loc_dl,length_dl,c_dep_list,dl_ptr,info)
if (info /= 0) then if (info /= 0) then
@ -131,13 +132,15 @@ subroutine psi_i_crea_index(desc_a,index_in,index_out,nxch,nsnd,nrcv,info)
!!$ call psi_dl_check(dep_list,dl_lda,np,length_dl) !!$ call psi_dl_check(dep_list,dl_lda,np,length_dl)
!!$ !!$
!!$ ! ....now i can sort dependency lists. !!$ ! ....now i can sort dependency lists.
if (do_timings) call psb_toc(idx_phase21)
if (do_timings) call psb_tic(idx_phase22)
call psi_sort_dl(dl_ptr,c_dep_list,length_dl,ictxt,info) call psi_sort_dl(dl_ptr,c_dep_list,length_dl,ictxt,info)
if (info /= 0) then if (info /= 0) then
write(0,*) me,trim(name),' From sort_dl ',info write(0,*) me,trim(name),' From sort_dl ',info
end if end if
ldl = length_dl(me) ldl = length_dl(me)
loc_dl = c_dep_list(dl_ptr(me):dl_ptr(me)+ldl-1) loc_dl = c_dep_list(dl_ptr(me):dl_ptr(me)+ldl-1)
if (do_timings) call psb_toc(idx_phase22)
!!$ if(info /= psb_success_) then !!$ if(info /= psb_success_) then
!!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='psi_sort_dl') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='psi_sort_dl')
!!$ goto 9999 !!$ goto 9999
@ -146,7 +149,26 @@ subroutine psi_i_crea_index(desc_a,index_in,index_out,nxch,nsnd,nrcv,info)
else else
! Do nothing ! Do nothing
ldl = length_dl(me) ldl = length_dl(me)
loc_dl = loc_dl(1:ldl) loc_dl = loc_dl(1:ldl)
if (shuffle_dep_list) then
!
! Apply a random shuffle to the dependency list
! should improve the behaviour
!
block
! Algorithm 3.4.2P from TAOCP vol 2.
integer(psb_ipk_) :: tmp
integer :: j,k
real :: u
do j=ldl,2,-1
call random_number(u)
k = min(j,floor(j*u)+1)
tmp = loc_dl(k)
loc_dl(k) = loc_dl(j)
loc_dl(j) = tmp
end do
end block
end if
end if end if
if (do_timings) call psb_toc(idx_phase2) if (do_timings) call psb_toc(idx_phase2)
@ -189,7 +211,9 @@ contains
logical :: val logical :: val
val = .not.(((dlmax>(26*4)).or.((dlavg>=(26*2)).and.(np>=128)))) val = .not.(((dlmax>(26*4)).or.((dlavg>=(26*2)).and.(np>=128))))
val = (dlmax<16)
!val = .true. !val = .true.
val = .false.
end function choose_sorting end function choose_sorting
end subroutine psi_i_crea_index end subroutine psi_i_crea_index

@ -2192,7 +2192,7 @@ contains
integer(psb_ipk_) :: lb, ub, m integer(psb_ipk_) :: lb, ub, m
choice: if (n >5) then binsrch: if (n > 8) then
lb = 1 lb = 1
ub = n ub = n
ipos = -1 ipos = -1
@ -2201,7 +2201,7 @@ contains
m = (lb+ub)/2 m = (lb+ub)/2
if (key==v(m)) then if (key==v(m)) then
ipos = m ipos = m
exit choice exit binsrch
else if (key < v(m)) then else if (key < v(m)) then
ub = m-1 ub = m-1
else else
@ -2215,7 +2215,7 @@ contains
else else
! No binary search, do everything in the final cleanup ! No binary search, do everything in the final cleanup
ipos = 0 ipos = 0
end if choice end if binsrch
! Final cleanup ! Final cleanup
! This is needed because V may contain repeated entries ! This is needed because V may contain repeated entries
@ -2239,7 +2239,7 @@ contains
integer(psb_ipk_) :: lb, ub, m integer(psb_ipk_) :: lb, ub, m
choice: if (n >5) then binsrch: if (n > 8) then
lb = 1 lb = 1
ub = n ub = n
ipos = -1 ipos = -1
@ -2248,7 +2248,7 @@ contains
m = (lb+ub)/2 m = (lb+ub)/2
if (key==v(m)) then if (key==v(m)) then
ipos = m ipos = m
exit choice exit binsrch
else if (key < v(m)) then else if (key < v(m)) then
ub = m-1 ub = m-1
else else
@ -2262,7 +2262,7 @@ contains
else else
! No binary search, do everything in the final cleanup ! No binary search, do everything in the final cleanup
ipos = 0 ipos = 0
end if choice end if binsrch
! Final cleanup ! Final cleanup
! This is needed because V may contain repeated entries ! This is needed because V may contain repeated entries

@ -1048,7 +1048,7 @@ contains
idx = bsdindx(ip+1) idx = bsdindx(ip+1)
p2ptag = psb_complex_tag p2ptag = psb_complex_tag
call mpi_send(valsnd(idx+1:idx+sz),sz,& call mpi_send(valsnd(idx+1:idx+sz),sz,&
& psb_mpi_r_dpk_,prcid(ip+1),& & psb_mpi_c_spk_,prcid(ip+1),&
& p2ptag, icomm,iret) & p2ptag, icomm,iret)
p2ptag = psb_int_swap_tag p2ptag = psb_int_swap_tag
call mpi_send(iasnd(idx+1:idx+sz),sz,& call mpi_send(iasnd(idx+1:idx+sz),sz,&

@ -1416,7 +1416,7 @@ contains
idx = bsdindx(ip+1) idx = bsdindx(ip+1)
p2ptag = psb_int8_tag p2ptag = psb_int8_tag
call mpi_send(valsnd(idx+1:idx+sz),sz,& call mpi_send(valsnd(idx+1:idx+sz),sz,&
& psb_mpi_r_dpk_,prcid(ip+1),& & psb_mpi_epk_,prcid(ip+1),&
& p2ptag, icomm,iret) & p2ptag, icomm,iret)
p2ptag = psb_int_swap_tag p2ptag = psb_int_swap_tag
call mpi_send(iasnd(idx+1:idx+sz),sz,& call mpi_send(iasnd(idx+1:idx+sz),sz,&

@ -1416,7 +1416,7 @@ contains
idx = bsdindx(ip+1) idx = bsdindx(ip+1)
p2ptag = psb_int2_tag p2ptag = psb_int2_tag
call mpi_send(valsnd(idx+1:idx+sz),sz,& call mpi_send(valsnd(idx+1:idx+sz),sz,&
& psb_mpi_r_dpk_,prcid(ip+1),& & psb_mpi_i2pk_,prcid(ip+1),&
& p2ptag, icomm,iret) & p2ptag, icomm,iret)
p2ptag = psb_int_swap_tag p2ptag = psb_int_swap_tag
call mpi_send(iasnd(idx+1:idx+sz),sz,& call mpi_send(iasnd(idx+1:idx+sz),sz,&

@ -1416,7 +1416,7 @@ contains
idx = bsdindx(ip+1) idx = bsdindx(ip+1)
p2ptag = psb_int4_tag p2ptag = psb_int4_tag
call mpi_send(valsnd(idx+1:idx+sz),sz,& call mpi_send(valsnd(idx+1:idx+sz),sz,&
& psb_mpi_r_dpk_,prcid(ip+1),& & psb_mpi_mpk_,prcid(ip+1),&
& p2ptag, icomm,iret) & p2ptag, icomm,iret)
p2ptag = psb_int_swap_tag p2ptag = psb_int_swap_tag
call mpi_send(iasnd(idx+1:idx+sz),sz,& call mpi_send(iasnd(idx+1:idx+sz),sz,&

@ -1539,7 +1539,7 @@ contains
idx = bsdindx(ip+1) idx = bsdindx(ip+1)
p2ptag = psb_real_tag p2ptag = psb_real_tag
call mpi_send(valsnd(idx+1:idx+sz),sz,& call mpi_send(valsnd(idx+1:idx+sz),sz,&
& psb_mpi_r_dpk_,prcid(ip+1),& & psb_mpi_r_spk_,prcid(ip+1),&
& p2ptag, icomm,iret) & p2ptag, icomm,iret)
p2ptag = psb_int_swap_tag p2ptag = psb_int_swap_tag
call mpi_send(iasnd(idx+1:idx+sz),sz,& call mpi_send(iasnd(idx+1:idx+sz),sz,&

@ -1048,7 +1048,7 @@ contains
idx = bsdindx(ip+1) idx = bsdindx(ip+1)
p2ptag = psb_dcomplex_tag p2ptag = psb_dcomplex_tag
call mpi_send(valsnd(idx+1:idx+sz),sz,& call mpi_send(valsnd(idx+1:idx+sz),sz,&
& psb_mpi_r_dpk_,prcid(ip+1),& & psb_mpi_c_dpk_,prcid(ip+1),&
& p2ptag, icomm,iret) & p2ptag, icomm,iret)
p2ptag = psb_int_swap_tag p2ptag = psb_int_swap_tag
call mpi_send(iasnd(idx+1:idx+sz),sz,& call mpi_send(iasnd(idx+1:idx+sz),sz,&

@ -159,7 +159,7 @@ subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.present(vty)) call yt%free(info) if (.not.present(vty)) call yt%free(info)
@ -173,7 +173,6 @@ subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
nc1 = map%desc_U%get_local_cols() nc1 = map%desc_U%get_local_cols()
nr2 = map%desc_V%get_global_rows() nr2 = map%desc_V%get_global_rows()
nc2 = map%desc_V%get_local_cols() nc2 = map%desc_V%get_local_cols()
if (present(vtx).and.present(vty)) then if (present(vtx).and.present(vty)) then
ptx => vtx ptx => vtx
pty => vty pty => vty
@ -194,7 +193,7 @@ subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.(present(vtx).and.present(vty) )) then if (.not.(present(vtx).and.present(vty) )) then

@ -1284,7 +1284,7 @@ Subroutine psb_c_lc_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,&
if(psb_get_errstatus() /= 0) return if(psb_get_errstatus() /= 0) return
info=psb_success_ info=psb_success_
name='psb_lc_csr_sphalo' name='psb_c_lc_csr_sphalo'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (psb_errstatus_fatal()) then if (psb_errstatus_fatal()) then
info = psb_err_internal_error_ ; goto 9999 info = psb_err_internal_error_ ; goto 9999

@ -159,7 +159,7 @@ subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.present(vty)) call yt%free(info) if (.not.present(vty)) call yt%free(info)
@ -173,7 +173,6 @@ subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
nc1 = map%desc_U%get_local_cols() nc1 = map%desc_U%get_local_cols()
nr2 = map%desc_V%get_global_rows() nr2 = map%desc_V%get_global_rows()
nc2 = map%desc_V%get_local_cols() nc2 = map%desc_V%get_local_cols()
if (present(vtx).and.present(vty)) then if (present(vtx).and.present(vty)) then
ptx => vtx ptx => vtx
pty => vty pty => vty
@ -194,7 +193,7 @@ subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.(present(vtx).and.present(vty) )) then if (.not.(present(vtx).and.present(vty) )) then

@ -1284,7 +1284,7 @@ Subroutine psb_d_ld_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,&
if(psb_get_errstatus() /= 0) return if(psb_get_errstatus() /= 0) return
info=psb_success_ info=psb_success_
name='psb_ld_csr_sphalo' name='psb_d_ld_csr_sphalo'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (psb_errstatus_fatal()) then if (psb_errstatus_fatal()) then
info = psb_err_internal_error_ ; goto 9999 info = psb_err_internal_error_ ; goto 9999

@ -159,7 +159,7 @@ subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.present(vty)) call yt%free(info) if (.not.present(vty)) call yt%free(info)
@ -173,7 +173,6 @@ subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
nc1 = map%desc_U%get_local_cols() nc1 = map%desc_U%get_local_cols()
nr2 = map%desc_V%get_global_rows() nr2 = map%desc_V%get_global_rows()
nc2 = map%desc_V%get_local_cols() nc2 = map%desc_V%get_local_cols()
if (present(vtx).and.present(vty)) then if (present(vtx).and.present(vty)) then
ptx => vtx ptx => vtx
pty => vty pty => vty
@ -194,7 +193,7 @@ subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.(present(vtx).and.present(vty) )) then if (.not.(present(vtx).and.present(vty) )) then

@ -1284,7 +1284,7 @@ Subroutine psb_s_ls_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,&
if(psb_get_errstatus() /= 0) return if(psb_get_errstatus() /= 0) return
info=psb_success_ info=psb_success_
name='psb_ls_csr_sphalo' name='psb_s_ls_csr_sphalo'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (psb_errstatus_fatal()) then if (psb_errstatus_fatal()) then
info = psb_err_internal_error_ ; goto 9999 info = psb_err_internal_error_ ; goto 9999

@ -159,7 +159,7 @@ subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.present(vty)) call yt%free(info) if (.not.present(vty)) call yt%free(info)
@ -173,7 +173,6 @@ subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
nc1 = map%desc_U%get_local_cols() nc1 = map%desc_U%get_local_cols()
nr2 = map%desc_V%get_global_rows() nr2 = map%desc_V%get_global_rows()
nc2 = map%desc_V%get_local_cols() nc2 = map%desc_V%get_local_cols()
if (present(vtx).and.present(vty)) then if (present(vtx).and.present(vty)) then
ptx => vtx ptx => vtx
pty => vty pty => vty
@ -194,7 +193,7 @@ subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
end if end if
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info) if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
if (info /= psb_success_) then if (info /= psb_success_) then
write(psb_err_unit,*) trim(name),' Error from inner routines',info write(psb_err_unit,*) iam,' ',trim(name),' Error from inner routines',info
info = -1 info = -1
else else
if (.not.(present(vtx).and.present(vty) )) then if (.not.(present(vtx).and.present(vty) )) then

@ -1284,7 +1284,7 @@ Subroutine psb_z_lz_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,&
if(psb_get_errstatus() /= 0) return if(psb_get_errstatus() /= 0) return
info=psb_success_ info=psb_success_
name='psb_lz_csr_sphalo' name='psb_z_lz_csr_sphalo'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (psb_errstatus_fatal()) then if (psb_errstatus_fatal()) then
info = psb_err_internal_error_ ; goto 9999 info = psb_err_internal_error_ ; goto 9999

@ -301,5 +301,34 @@ contains
end function psb_c_cd_get_global_cols end function psb_c_cd_get_global_cols
function psb_c_cd_get_global_indices(idx,nidx,owned,cdh) bind(c,name='psb_c_cd_get_global_indices') result(res)
implicit none
integer(psb_c_ipk_) :: res
type(psb_c_object_type) :: cdh
integer(psb_c_lpk_) :: idx(nidx)
integer(psb_c_ipk_), value :: nidx
logical(c_bool), value :: owned
type(psb_desc_type), pointer :: descp
integer(psb_lpk_), allocatable :: myidx(:)
logical :: fowned
res = -1
if (c_associated(cdh%item)) then
call c_f_pointer(cdh%item,descp)
fowned = owned
myidx = descp%get_global_indices(owned=fowned)
idx(1:nidx) = myidx(1:nidx)
res = 0
end if
end function psb_c_cd_get_global_indices
end module psb_base_tools_cbind_mod end module psb_base_tools_cbind_mod

@ -13,7 +13,7 @@ extern "C" {
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <stdbool.h> #include <stdbool.h>
typedef int32_t psb_m_t; typedef int32_t psb_m_t;
@ -29,20 +29,20 @@ extern "C" {
#else #else
#endif #endif
typedef int64_t psb_e_t; typedef int64_t psb_e_t;
typedef float psb_s_t; typedef float psb_s_t;
typedef double psb_d_t; typedef double psb_d_t;
typedef float complex psb_c_t; typedef float complex psb_c_t;
typedef double complex psb_z_t; typedef double complex psb_z_t;
#define PSB_ERR_ERROR -1 #define PSB_ERR_ERROR -1
#define PSB_ERR_SUCCESS 0 #define PSB_ERR_SUCCESS 0
typedef struct PSB_C_DESCRIPTOR { typedef struct PSB_C_DESCRIPTOR {
void *descriptor; void *descriptor;
} psb_c_descriptor; } psb_c_descriptor;
psb_i_t psb_c_error(); psb_i_t psb_c_error();
psb_i_t psb_c_clean_errstack(); psb_i_t psb_c_clean_errstack();
@ -53,7 +53,7 @@ extern "C" {
void psb_c_seterraction_print(); void psb_c_seterraction_print();
void psb_c_seterraction_abort(); void psb_c_seterraction_abort();
/* Environment routines */ /* Environment routines */
psb_i_t psb_c_init(); psb_i_t psb_c_init();
void psb_c_exit_ctxt(psb_i_t ictxt); void psb_c_exit_ctxt(psb_i_t ictxt);
void psb_c_exit(psb_i_t ictxt); void psb_c_exit(psb_i_t ictxt);
@ -65,7 +65,7 @@ extern "C" {
psb_i_t psb_c_get_index_base(); psb_i_t psb_c_get_index_base();
void psb_c_set_index_base(psb_i_t base); void psb_c_set_index_base(psb_i_t base);
void psb_c_mbcast(psb_i_t ictxt, psb_i_t n, psb_m_t *v, psb_i_t root); void psb_c_mbcast(psb_i_t ictxt, psb_i_t n, psb_m_t *v, psb_i_t root);
void psb_c_ibcast(psb_i_t ictxt, psb_i_t n, psb_i_t *v, psb_i_t root); void psb_c_ibcast(psb_i_t ictxt, psb_i_t n, psb_i_t *v, psb_i_t root);
void psb_c_lbcast(psb_i_t ictxt, psb_i_t n, psb_l_t *v, psb_i_t root); void psb_c_lbcast(psb_i_t ictxt, psb_i_t n, psb_l_t *v, psb_i_t root);
@ -75,8 +75,8 @@ extern "C" {
void psb_c_cbcast(psb_i_t ictxt, psb_i_t n, psb_c_t *v, psb_i_t root); void psb_c_cbcast(psb_i_t ictxt, psb_i_t n, psb_c_t *v, psb_i_t root);
void psb_c_zbcast(psb_i_t ictxt, psb_i_t n, psb_z_t *v, psb_i_t root); void psb_c_zbcast(psb_i_t ictxt, psb_i_t n, psb_z_t *v, psb_i_t root);
void psb_c_hbcast(psb_i_t ictxt, const char *v, psb_i_t root); void psb_c_hbcast(psb_i_t ictxt, const char *v, psb_i_t root);
/* Descriptor/integer routines */ /* Descriptor/integer routines */
psb_c_descriptor* psb_c_new_descriptor(); psb_c_descriptor* psb_c_new_descriptor();
psb_i_t psb_c_cdall_vg(psb_l_t ng, psb_i_t *vg, psb_i_t ictxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_vg(psb_l_t ng, psb_i_t *vg, psb_i_t ictxt, psb_c_descriptor *cd);
psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_l_t *vl, psb_i_t ictxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_l_t *vl, psb_i_t ictxt, psb_c_descriptor *cd);
@ -85,25 +85,25 @@ extern "C" {
psb_i_t psb_c_cdasb(psb_c_descriptor *cd); psb_i_t psb_c_cdasb(psb_c_descriptor *cd);
psb_i_t psb_c_cdfree(psb_c_descriptor *cd); psb_i_t psb_c_cdfree(psb_c_descriptor *cd);
psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd);
psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd);
psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd);
psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd);
psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd);
psb_i_t psb_c_cd_get_global_indices(psb_l_t idx[], psb_i_t nidx, bool owned, psb_c_descriptor *cd);
/* legal values for upd argument */
/* legal values for upd argument */
#define psb_upd_srch_ 98764 #define psb_upd_srch_ 98764
#define psb_upd_perm_ 98765 #define psb_upd_perm_ 98765
#define psb_upd_def_ psb_upd_srch_ #define psb_upd_def_ psb_upd_srch_
/* legal values for dupl argument */ /* legal values for dupl argument */
#define psb_dupl_ovwrt_ 0 #define psb_dupl_ovwrt_ 0
#define psb_dupl_add_ 1 #define psb_dupl_add_ 1
#define psb_dupl_err_ 2 #define psb_dupl_err_ 2
#define psb_dupl_def_ psb_dupl_ovwrt_ #define psb_dupl_def_ psb_dupl_ovwrt_
/* legal values for afmt */ /* legal values for afmt */
#define PSB_AFMT_CSR "CSR" #define PSB_AFMT_CSR "CSR"
#define PSB_AFMT_CSC "CSC" #define PSB_AFMT_CSC "CSC"
#define PSB_AFMT_COO "COO" #define PSB_AFMT_COO "COO"
@ -113,21 +113,21 @@ extern "C" {
#define psb_NoTrans_ "N" #define psb_NoTrans_ "N"
#define psb_Trans_ "T" #define psb_Trans_ "T"
#define psb_ConjTrans_ "C" #define psb_ConjTrans_ "C"
/* legal values for halo swap modes argument */ /* legal values for halo swap modes argument */
#define psb_swap_send_ 1 #define psb_swap_send_ 1
#define psb_swap_recv_ 2 #define psb_swap_recv_ 2
#define psb_swap_sync_ 4 #define psb_swap_sync_ 4
#define psb_swap_mpi_ 8 #define psb_swap_mpi_ 8
/* legal values for ovrl update argument */ /* legal values for ovrl update argument */
#define psb_none_ 0 #define psb_none_ 0
#define psb_sum_ 1 #define psb_sum_ 1
#define psb_avg_ 2 #define psb_avg_ 2
#define psb_square_root_ 3 #define psb_square_root_ 3
#define psb_setzero_ 4 #define psb_setzero_ 4
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

@ -87,7 +87,7 @@ bool psb_c_dgecmpmat_val(psb_c_dspmat *ah,psb_d_t val,psb_d_t tol,psb_c_descri
psb_i_t psb_c_dgeaddconst(psb_c_dvector *xh,psb_d_t bh,psb_c_dvector *zh,psb_c_descriptor *cdh); psb_i_t psb_c_dgeaddconst(psb_c_dvector *xh,psb_d_t bh,psb_c_dvector *zh,psb_c_descriptor *cdh);
psb_d_t psb_c_dgenrm2_weight(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_descriptor *cdh); psb_d_t psb_c_dgenrm2_weight(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_descriptor *cdh);
psb_d_t psb_c_dgenrm2_weightmask(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_dvector *idvh,psb_c_descriptor *cdh); psb_d_t psb_c_dgenrm2_weightmask(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_dvector *idvh,psb_c_descriptor *cdh);
psb_i_t psb_c_dmask(psb_c_dvector *ch,psb_c_dvector *xh,psb_c_dvector *mh, void *t, psb_c_descriptor *cdh); psb_i_t psb_c_dmask(psb_c_dvector *ch,psb_c_dvector *xh,psb_c_dvector *mh, bool *t, psb_c_descriptor *cdh);
psb_d_t psb_c_dgemin(psb_c_dvector *xh,psb_c_descriptor *cdh); psb_d_t psb_c_dgemin(psb_c_dvector *xh,psb_c_descriptor *cdh);
psb_d_t psb_c_dminquotient(psb_c_dvector *xh,psb_c_dvector *yh, psb_c_descriptor *cdh); psb_d_t psb_c_dminquotient(psb_c_dvector *xh,psb_c_dvector *yh, psb_c_descriptor *cdh);
psb_i_t psb_c_dspscal(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); psb_i_t psb_c_dspscal(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh);

@ -87,7 +87,7 @@ bool psb_c_sgecmpmat_val(psb_c_sspmat *ah,psb_s_t val,psb_s_t tol,psb_c_descript
psb_i_t psb_c_sgeaddconst(psb_c_svector *xh,psb_s_t bh,psb_c_svector *zh,psb_c_descriptor *cdh); psb_i_t psb_c_sgeaddconst(psb_c_svector *xh,psb_s_t bh,psb_c_svector *zh,psb_c_descriptor *cdh);
psb_s_t psb_c_sgenrm2_weight(psb_c_svector *xh,psb_c_svector *wh,psb_c_descriptor *cdh); psb_s_t psb_c_sgenrm2_weight(psb_c_svector *xh,psb_c_svector *wh,psb_c_descriptor *cdh);
psb_s_t psb_c_sgenrm2_weightmask(psb_c_svector *xh,psb_c_svector *wh,psb_c_svector *idvh,psb_c_descriptor *cdh); psb_s_t psb_c_sgenrm2_weightmask(psb_c_svector *xh,psb_c_svector *wh,psb_c_svector *idvh,psb_c_descriptor *cdh);
psb_i_t psb_c_smask(psb_c_svector *ch,psb_c_svector *xh,psb_c_svector *mh, void *t, psb_c_descriptor *cdh); psb_i_t psb_c_smask(psb_c_svector *ch,psb_c_svector *xh,psb_c_svector *mh, bool *t, psb_c_descriptor *cdh);
psb_s_t psb_c_sgemin(psb_c_svector *xh,psb_c_descriptor *cdh); psb_s_t psb_c_sgemin(psb_c_svector *xh,psb_c_descriptor *cdh);
psb_i_t psb_c_sspscal(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); psb_i_t psb_c_sspscal(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh);
psb_i_t psb_c_sspscalpid(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); psb_i_t psb_c_sspscalpid(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh);

@ -575,12 +575,12 @@ contains
type(psb_c_dvector) :: ch,xh,mh type(psb_c_dvector) :: ch,xh,mh
type(psb_c_descriptor) :: cdh type(psb_c_descriptor) :: cdh
type(c_ptr), value :: t logical(c_bool) :: t
type(psb_desc_type), pointer :: descp type(psb_desc_type), pointer :: descp
type(psb_d_vect_type), pointer :: cp,xp,mp type(psb_d_vect_type), pointer :: cp,xp,mp
integer(psb_c_ipk_) :: info integer(psb_c_ipk_) :: info
logical, pointer :: fp logical :: fp
res = -1 res = -1
@ -604,10 +604,10 @@ contains
else else
return return
end if end if
call c_f_pointer(t,fp)
call psb_mask(cp,xp,mp,fp,descp,info) call psb_mask(cp,xp,mp,fp,descp,info)
t = fp
res = info res = info
end function psb_c_dmask end function psb_c_dmask

@ -575,12 +575,12 @@ contains
type(psb_c_svector) :: ch,xh,mh type(psb_c_svector) :: ch,xh,mh
type(psb_c_descriptor) :: cdh type(psb_c_descriptor) :: cdh
type(c_ptr), value :: t logical(c_bool) :: t
type(psb_desc_type), pointer :: descp type(psb_desc_type), pointer :: descp
type(psb_s_vect_type), pointer :: cp,xp,mp type(psb_s_vect_type), pointer :: cp,xp,mp
integer(psb_c_ipk_) :: info integer(psb_c_ipk_) :: info
logical, pointer :: fp logical :: fp
res = -1 res = -1
@ -604,10 +604,10 @@ contains
else else
return return
end if end if
call c_f_pointer(t,fp)
call psb_mask(cp,xp,mp,fp,descp,info) call psb_mask(cp,xp,mp,fp,descp,info)
t = fp
res = info res = info
end function psb_c_smask end function psb_c_smask

@ -6,5 +6,10 @@
#include "psb_c_cutil.h" #include "psb_c_cutil.h"
#include "psb_c_zutil.h" #include "psb_c_zutil.h"
psb_i_t psb_c_i_idx2ijk(psb_i_t ijk[],psb_i_t idx,psb_i_t sizes[],psb_i_t modes,psb_i_t base);
psb_i_t psb_c_l_idx2ijk(psb_i_t ijk[],psb_l_t idx,psb_i_t sizes[],psb_i_t modes,psb_i_t base);
psb_i_t psb_c_i_ijk2idx(psb_i_t ijk[],psb_i_t sizes[],psb_i_t modes,psb_i_t base);
psb_l_t psb_c_l_ijk2idx(psb_i_t ijk[],psb_i_t sizes[],psb_i_t modes,psb_i_t base);
#endif #endif

@ -1,6 +1,99 @@
module psb_base_util_cbind_mod module psb_base_util_cbind_mod
use iso_c_binding
use psb_util_mod
use psb_cutil_cbind_mod use psb_cutil_cbind_mod
use psb_dutil_cbind_mod use psb_dutil_cbind_mod
use psb_sutil_cbind_mod use psb_sutil_cbind_mod
use psb_zutil_cbind_mod use psb_zutil_cbind_mod
contains
! Routines for managing indexes are type independent
! so we have them defined only in the common module
! for all the index lengths:
function psb_c_i_ijk2idx(ijk,sizes,modes,base) bind(c) result(idx)
use psb_base_mod, only : psb_ipk_, psb_lpk_, psb_mpk_, psb_epk_
use psb_util_mod
implicit none
integer(psb_c_ipk_) :: idx
integer(psb_c_ipk_), value :: modes, base
integer(psb_c_ipk_) :: ijk(modes)
integer(psb_c_ipk_) :: sizes(modes)
integer(psb_ipk_) :: fijk(modes), fsizes(modes)
fijk(1:modes) = ijk(1:modes)
fsizes(1:modes) = sizes(1:modes)
call ijk2idx(idx,fijk,fsizes,base)
end function psb_c_i_ijk2idx
function psb_c_l_ijk2idx(ijk,sizes,modes,base) bind(c) result(idx)
use psb_base_mod, only : psb_ipk_, psb_lpk_, psb_mpk_, psb_epk_
use psb_util_mod
implicit none
integer(psb_c_lpk_) :: idx
integer(psb_c_ipk_), value :: modes, base
integer(psb_c_ipk_) :: ijk(modes)
integer(psb_c_ipk_) :: sizes(modes)
integer(psb_ipk_) :: fijk(modes), fsizes(modes)
fijk(1:modes) = ijk(1:modes)
fsizes(1:modes) = sizes(1:modes)
call ijk2idx(idx,fijk,fsizes,base)
end function psb_c_l_ijk2idx
function psb_c_i_idx2ijk(ijk,idx,sizes,modes,base) bind(c) result(res)
use psb_base_mod, only : psb_ipk_, psb_lpk_, psb_mpk_, psb_epk_
implicit none
integer(psb_c_ipk_) :: res
integer(psb_c_ipk_), value :: idx
integer(psb_c_ipk_), value :: modes, base
integer(psb_c_ipk_) :: ijk(modes)
integer(psb_c_ipk_) :: sizes(modes)
integer(psb_ipk_) :: fijk(modes), fsizes(modes)
res = -1
fsizes(1:modes) = sizes(1:modes)
call idx2ijk(fijk,idx,fsizes,base=base)
ijk(1:modes) = fijk(1:modes)
res = 0
end function
function psb_c_l_idx2ijk(ijk,idx,sizes,modes,base) bind(c) result(res)
use psb_base_mod, only : psb_ipk_, psb_lpk_, psb_mpk_, psb_epk_
implicit none
integer(psb_c_ipk_) :: res
integer(psb_c_lpk_), value :: idx
integer(psb_c_ipk_), value :: modes, base
integer(psb_c_ipk_) :: ijk(modes)
integer(psb_c_ipk_) :: sizes(modes)
integer(psb_ipk_) :: fijk(modes), fsizes(modes)
res = -1
fsizes(1:modes) = sizes(1:modes)
call idx2ijk(fijk,idx,fsizes,base=base)
ijk(1:modes) = fijk(1:modes)
res = 0
end function
end module psb_base_util_cbind_mod end module psb_base_util_cbind_mod

@ -1792,6 +1792,9 @@ AC_DEFUN(PAC_CHECK_METIS,
Default: "-lmetis"]), Default: "-lmetis"]),
[psblas_cv_metis=$withval], [psblas_cv_metis=$withval],
[psblas_cv_metis='-lmetis']) [psblas_cv_metis='-lmetis'])
AC_ARG_WITH(metisincfile, AC_HELP_STRING([--with-metisincfile=DIR], [Specify the name for METIS include file.]),
[psblas_cv_metisincfile=$withval],
[psblas_cv_metisincfile='metis.h'])
AC_ARG_WITH(metisdir, AC_HELP_STRING([--with-metisdir=DIR], [Specify the directory for METIS library and includes.]), AC_ARG_WITH(metisdir, AC_HELP_STRING([--with-metisdir=DIR], [Specify the directory for METIS library and includes.]),
[psblas_cv_metisdir=$withval], [psblas_cv_metisdir=$withval],
[psblas_cv_metisdir='']) [psblas_cv_metisdir=''])
@ -1821,7 +1824,7 @@ if test "x$psblas_cv_metislibdir" != "x"; then
fi fi
AC_MSG_NOTICE([metis dir $psblas_cv_metisdir]) AC_MSG_NOTICE([metis dir $psblas_cv_metisdir])
AC_CHECK_HEADERS([limits.h metis.h], AC_CHECK_HEADERS([limits.h $psblas_cv_metisincfile],
[pac_metis_header_ok=yes], [pac_metis_header_ok=yes],
[pac_metis_header_ok=no; METIS_INCLUDES=""]) [pac_metis_header_ok=no; METIS_INCLUDES=""])
if test "x$pac_metis_header_ok" == "xno" ; then if test "x$pac_metis_header_ok" == "xno" ; then
@ -1831,7 +1834,7 @@ dnl Maybe Include or include subdirs?
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS" CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
AC_MSG_CHECKING([for metis_h in $METIS_INCLUDES]) AC_MSG_CHECKING([for metis_h in $METIS_INCLUDES])
AC_CHECK_HEADERS([limits.h metis.h], AC_CHECK_HEADERS([limits.h $psblas_cv_metisincfile],
[pac_metis_header_ok=yes], [pac_metis_header_ok=yes],
[pac_metis_header_ok=no; METIS_INCLUDES=""]) [pac_metis_header_ok=no; METIS_INCLUDES=""])
fi fi
@ -1840,11 +1843,27 @@ dnl Maybe new structure with METIS UFconfig METIS?
unset ac_cv_header_metis_h unset ac_cv_header_metis_h
METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include" METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include"
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS" CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
AC_CHECK_HEADERS([limits.h metis.h], AC_CHECK_HEADERS([limits.h $psblas_cv_metisincfile],
[pac_metis_header_ok=yes], [pac_metis_header_ok=yes],
[pac_metis_header_ok=no; METIS_INCLUDES=""]) [pac_metis_header_ok=no; METIS_INCLUDES=""])
fi fi
if test "x$pac_metis_header_ok" == "xyes" ; then
AC_LANG_PUSH([C])
AC_MSG_CHECKING([for METIS idx size])
AC_LINK_IFELSE([AC_LANG_SOURCE(
#include <stdio.h>
#include "$psblas_cv_metisincfile"
void main(){
printf("%d\n",IDXTYPEWIDTH);
}
)],
[pac_cv_metis_idx=`./conftest${ac_exeext} | sed 's/^ *//'`],
[pac_cv_metis_idx="unknown"])
AC_MSG_RESULT($pac_cv_metis_idx)
AC_LANG_POP()
fi
if test "x$pac_metis_header_ok" == "xyes" ; then if test "x$pac_metis_header_ok" == "xyes" ; then
psblas_cv_metis_includes="$METIS_INCLUDES" psblas_cv_metis_includes="$METIS_INCLUDES"

516
configure vendored

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for PSBLAS 3.5. # Generated by GNU Autoconf 2.69 for PSBLAS 3.7.0.
# #
# Report bugs to <https://github.com/sfilippone/psblas3/issues>. # Report bugs to <https://github.com/sfilippone/psblas3/issues>.
# #
@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='PSBLAS' PACKAGE_NAME='PSBLAS'
PACKAGE_TARNAME='psblas' PACKAGE_TARNAME='psblas'
PACKAGE_VERSION='3.5' PACKAGE_VERSION='3.7.0'
PACKAGE_STRING='PSBLAS 3.5' PACKAGE_STRING='PSBLAS 3.7.0'
PACKAGE_BUGREPORT='https://github.com/sfilippone/psblas3/issues' PACKAGE_BUGREPORT='https://github.com/sfilippone/psblas3/issues'
PACKAGE_URL='' PACKAGE_URL=''
@ -626,6 +626,7 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE am__EXEEXT_TRUE
LTLIBOBJS LTLIBOBJS
LIBOBJS LIBOBJS
METISINCFILE
UTILLIBNAME UTILLIBNAME
METHDLIBNAME METHDLIBNAME
PRECLIBNAME PRECLIBNAME
@ -676,7 +677,6 @@ am__nodep
AMDEPBACKSLASH AMDEPBACKSLASH
AMDEP_FALSE AMDEP_FALSE
AMDEP_TRUE AMDEP_TRUE
am__quote
am__include am__include
DEPDIR DEPDIR
am__untar am__untar
@ -753,7 +753,8 @@ PACKAGE_VERSION
PACKAGE_TARNAME PACKAGE_TARNAME
PACKAGE_NAME PACKAGE_NAME
PATH_SEPARATOR PATH_SEPARATOR
SHELL' SHELL
am__quote'
ac_subst_files='' ac_subst_files=''
ac_user_opts=' ac_user_opts='
enable_option_checking enable_option_checking
@ -775,6 +776,7 @@ with_blasdir
with_lapack with_lapack
with_rsb with_rsb
with_metis with_metis
with_metisincfile
with_metisdir with_metisdir
with_metisincdir with_metisincdir
with_metislibdir with_metislibdir
@ -1336,7 +1338,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures PSBLAS 3.5 to adapt to many kinds of systems. \`configure' configures PSBLAS 3.7.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1402,7 +1404,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of PSBLAS 3.5:";; short | recursive ) echo "Configuration of PSBLAS 3.7.0:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@ -1454,6 +1456,7 @@ Optional Packages:
configure script invoke librsb-config) configure script invoke librsb-config)
--with-metis=LIBNAME Specify the library name for METIS library. Default: --with-metis=LIBNAME Specify the library name for METIS library. Default:
"-lmetis" "-lmetis"
--with-metisincfile=DIR Specify the name for METIS include file.
--with-metisdir=DIR Specify the directory for METIS library and --with-metisdir=DIR Specify the directory for METIS library and
includes. includes.
--with-metisincdir=DIR Specify the directory for METIS includes. --with-metisincdir=DIR Specify the directory for METIS includes.
@ -1544,7 +1547,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
PSBLAS configure 3.5 PSBLAS configure 3.7.0
generated by GNU Autoconf 2.69 generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
@ -2180,7 +2183,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by PSBLAS $as_me 3.5, which was It was created by PSBLAS $as_me 3.7.0, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@ $ $0 $@
@ -2531,7 +2534,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# VERSION is the file containing the PSBLAS version code # VERSION is the file containing the PSBLAS version code
# FIXME # FIXME
psblas_cv_version="3.5" psblas_cv_version="3.7.0"
# A sample source file # A sample source file
@ -3515,6 +3518,68 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Expand $ac_aux_dir to an absolute path.
am_aux_dir=`cd "$ac_aux_dir" && pwd`
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
if ${am_cv_prog_cc_c_o+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
# Make sure it works both with $CC and with simple cc.
# Following AC_PROG_CC_C_O, we do the test twice because some
# compilers refuse to overwrite an existing .o file with -o,
# though they will create one.
am_cv_prog_cc_c_o=yes
for am_i in 1 2; do
if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } \
&& test -f conftest2.$ac_objext; then
: OK
else
am_cv_prog_cc_c_o=no
break
fi
done
rm -f core conftest*
unset am_i
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
$as_echo "$am_cv_prog_cc_c_o" >&6; }
if test "$am_cv_prog_cc_c_o" != yes; then
# Losing compiler, so override with the script.
# FIXME: It is wrong to rewrite CC.
# But if we don't then we get into trouble of one sort or another.
# A longer-term fix would be to have automake use am__CC in this case,
# and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
CC="$am_aux_dir/compile $CC"
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
CFLAGS="$save_CFLAGS"; CFLAGS="$save_CFLAGS";
@ -4942,7 +5007,7 @@ else
fi fi
am__api_version='1.13' am__api_version='1.16'
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
$as_echo_n "checking whether build environment is sane... " >&6; } $as_echo_n "checking whether build environment is sane... " >&6; }
@ -5021,9 +5086,6 @@ test "$program_suffix" != NONE &&
ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
if test x"${MISSING+set}" != xset; then if test x"${MISSING+set}" != xset; then
case $am_aux_dir in case $am_aux_dir in
*\ * | *\ *) *\ * | *\ *)
@ -5041,7 +5103,7 @@ else
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi fi
if test x"${install_sh}" != xset; then if test x"${install_sh+set}" != xset; then
case $am_aux_dir in case $am_aux_dir in
*\ * | *\ *) *\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@ -5278,45 +5340,45 @@ DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depfiles" ac_config_commands="$ac_config_commands depfiles"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
am_make=${MAKE-make} $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
cat > confinc << 'END' cat > confinc.mk << 'END'
am__doit: am__doit:
@echo this is the am__doit target @echo this is the am__doit target >confinc.out
.PHONY: am__doit .PHONY: am__doit
END END
# If we don't find an include directive, just comment out the code.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
$as_echo_n "checking for style of include used by $am_make... " >&6; }
am__include="#" am__include="#"
am__quote= am__quote=
_am_result=none # BSD make does it like this.
# First try GNU make style include. echo '.include "confinc.mk" # ignored' > confmf.BSD
echo "include confinc" > confmf # Other make implementations (GNU, Solaris 10, AIX) do it like this.
# Ignore all kinds of additional output from 'make'. echo 'include confinc.mk # ignored' > confmf.GNU
case `$am_make -s -f confmf 2> /dev/null` in #( _am_result=no
*the\ am__doit\ target*) for s in GNU BSD; do
am__include=include { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
am__quote= (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
_am_result=GNU ac_status=$?
;; echo "$as_me:$LINENO: \$? = $ac_status" >&5
esac (exit $ac_status); }
# Now try BSD make style include. case $?:`cat confinc.out 2>/dev/null` in #(
if test "$am__include" = "#"; then '0:this is the am__doit target') :
echo '.include "confinc"' > confmf case $s in #(
case `$am_make -s -f confmf 2> /dev/null` in #( BSD) :
*the\ am__doit\ target*) am__include='.include' am__quote='"' ;; #(
am__include=.include *) :
am__quote="\"" am__include='include' am__quote='' ;;
_am_result=BSD esac ;; #(
*) :
;; ;;
esac esac
fi if test "$am__include" != "#"; then
_am_result="yes ($s style)"
break
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 fi
$as_echo "$_am_result" >&6; } done
rm -f confinc confmf rm -f confinc.* confmf.*
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
$as_echo "${_am_result}" >&6; }
# Check whether --enable-dependency-tracking was given. # Check whether --enable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then : if test "${enable_dependency_tracking+set}" = set; then :
@ -5398,7 +5460,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='psblas' PACKAGE='psblas'
VERSION='3.5' VERSION='3.7.0'
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
@ -5428,12 +5490,12 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# For better backward compatibility. To be removed once Automake 1.9.x # For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see: # dies out for good. For more background, see:
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)' mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target. The system "awk" is bad on # We need awk for the "check" target (and possibly the TAP driver). The
# some platforms. # system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used # Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ... # in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}' AMTAR='$${TAR-tar}'
@ -5577,6 +5639,48 @@ fi
# POSIX will say in a future version that running "rm -f" with no argument
# is OK; and we want to be able to make that assumption in our Makefile
# recipes. So use an aggressive probe to check that the usage we want is
# actually supported "in the wild" to an acceptable degree.
# See automake bug#10828.
# To make any issue more visible, cause the running configure to be aborted
# by default if the 'rm' program in use doesn't match our expectations; the
# user can still override this though.
if rm -f && rm -fr && rm -rf; then : OK; else
cat >&2 <<'END'
Oops!
Your 'rm' program seems unable to run without file operands specified
on the command line, even when the '-f' option is present. This is contrary
to the behaviour of most rm programs out there, and not conforming with
the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
Please tell bug-automake@gnu.org about your system, including the value
of your $PATH and any error possibly output before this message. This
can help us improve future automake versions.
END
if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
echo 'Configuration will proceed anyway, since you have set the' >&2
echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
echo >&2
else
cat >&2 <<'END'
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
to "yes", and re-run configure.
END
as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
fi
fi
@ -7260,10 +7364,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
#
# Optional features
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran VOLATILE" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran VOLATILE" >&5
$as_echo_n "checking support for Fortran VOLATILE... " >&6; } $as_echo_n "checking support for Fortran VOLATILE... " >&6; }
ac_ext=${ac_fc_srcext-f} ac_ext=${ac_fc_srcext-f}
@ -7283,12 +7383,13 @@ _ACEOF
if ac_fn_fc_try_compile "$LINENO"; then : if ac_fn_fc_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES" :
else else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; } $as_echo "no" >&6; }
echo "configure: failed program was:" >&5 echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5 cat conftest.$ac_ext >&5
as_fn_error $? "Sorry, cannot build PSBLAS without support for VOLATILE" "$LINENO" 5
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@ -7300,31 +7401,21 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking test GENERIC interfaces" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ISO_FORTRAN_ENV" >&5
$as_echo_n "checking test GENERIC interfaces... " >&6; } $as_echo_n "checking support for ISO_FORTRAN_ENV... " >&6; }
ac_ext=${ac_fc_srcext-f} ac_ext=${ac_fc_srcext-f}
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_compiler_gnu=$ac_cv_fc_compiler_gnu
ac_exeext='' ac_exeext=''
ac_ext='F90' ac_ext='f90'
ac_fc=${MPIFC-$FC}; ac_fc=${MPIFC-$FC};
cat > conftest.$ac_ext <<_ACEOF cat > conftest.$ac_ext <<_ACEOF
module conftest program test
use iso_fortran_env
interface foo end program test
subroutine i_sub_foo(v)
integer, intent(inout) :: v(:)
end subroutine i_sub_foo
end interface foo
interface bar
procedure i_sub_foo
end interface bar
end module conftest
_ACEOF _ACEOF
if ac_fn_fc_try_compile "$LINENO"; then : if ac_fn_fc_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@ -7335,7 +7426,7 @@ else
$as_echo "no" >&6; } $as_echo "no" >&6; }
echo "configure: failed program was:" >&5 echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5 cat conftest.$ac_ext >&5
FDEFINES="$psblas_cv_define_prepend-DHAVE_BUGGY_GENERICS $FDEFINES" as_fn_error $? "Sorry, cannot build PSBLAS without support for ISO_FORTRAN_ENV" "$LINENO" 5
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@ -7347,8 +7438,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FLUSH statement" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FINAL" >&5
$as_echo_n "checking support for Fortran FLUSH statement... " >&6; } $as_echo_n "checking support for Fortran FINAL... " >&6; }
ac_ext=${ac_fc_srcext-f} ac_ext=${ac_fc_srcext-f}
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
@ -7359,23 +7450,35 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
ac_fc=${MPIFC-$FC}; ac_fc=${MPIFC-$FC};
cat > conftest.$ac_ext <<_ACEOF cat > conftest.$ac_ext <<_ACEOF
module conftest_mod
type foo
integer :: i
contains
final :: destroy_foo
end type foo
private destroy_foo
contains
subroutine destroy_foo(a)
type(foo) :: a
! Just a test
end subroutine destroy_foo
end module conftest_mod
program conftest program conftest
integer :: iunit=10 use conftest_mod
open(10) type(foo) :: foovar
write(10,*) 'Test '
flush(10)
close(10)
end program conftest end program conftest
_ACEOF _ACEOF
if ac_fn_fc_try_compile "$LINENO"; then : if ac_fn_fc_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES" :
else else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; } $as_echo "no" >&6; }
echo "configure: failed program was:" >&5 echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5 cat conftest.$ac_ext >&5
as_fn_error $? "Sorry, cannot build PSBLAS without support for FINAL" "$LINENO" 5
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@ -7387,31 +7490,48 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ISO_FORTRAN_ENV" >&5
$as_echo_n "checking support for ISO_FORTRAN_ENV... " >&6; } #
ac_ext=${ac_fc_srcext-f} # Optional features
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking test GENERIC interfaces" >&5
$as_echo_n "checking test GENERIC interfaces... " >&6; }
ac_ext=${ac_fc_srcext-f}
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_compiler_gnu=$ac_cv_fc_compiler_gnu
ac_exeext='' ac_exeext=''
ac_ext='f90' ac_ext='F90'
ac_fc=${MPIFC-$FC}; ac_fc=${MPIFC-$FC};
cat > conftest.$ac_ext <<_ACEOF cat > conftest.$ac_ext <<_ACEOF
program test module conftest
use iso_fortran_env
end program test interface foo
subroutine i_sub_foo(v)
integer, intent(inout) :: v(:)
end subroutine i_sub_foo
end interface foo
interface bar
procedure i_sub_foo
end interface bar
end module conftest
_ACEOF _ACEOF
if ac_fn_fc_try_compile "$LINENO"; then : if ac_fn_fc_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES" :
else else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; } $as_echo "no" >&6; }
echo "configure: failed program was:" >&5 echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5 cat conftest.$ac_ext >&5
FDEFINES="$psblas_cv_define_prepend-DHAVE_BUGGY_GENERICS $FDEFINES"
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@ -7423,8 +7543,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FINAL" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FLUSH statement" >&5
$as_echo_n "checking support for Fortran FINAL... " >&6; } $as_echo_n "checking support for Fortran FLUSH statement... " >&6; }
ac_ext=${ac_fc_srcext-f} ac_ext=${ac_fc_srcext-f}
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
@ -7435,29 +7555,18 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
ac_fc=${MPIFC-$FC}; ac_fc=${MPIFC-$FC};
cat > conftest.$ac_ext <<_ACEOF cat > conftest.$ac_ext <<_ACEOF
module conftest_mod
type foo
integer :: i
contains
final :: destroy_foo
end type foo
private destroy_foo
contains
subroutine destroy_foo(a)
type(foo) :: a
! Just a test
end subroutine destroy_foo
end module conftest_mod
program conftest program conftest
use conftest_mod integer :: iunit=10
type(foo) :: foovar open(10)
write(10,*) 'Test '
flush(10)
close(10)
end program conftest end program conftest
_ACEOF _ACEOF
if ac_fn_fc_try_compile "$LINENO"; then : if ac_fn_fc_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES" FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES"
else else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; } $as_echo "no" >&6; }
@ -8756,6 +8865,14 @@ else
fi fi
# Check whether --with-metisincfile was given.
if test "${with_metisincfile+set}" = set; then :
withval=$with_metisincfile; psblas_cv_metisincfile=$withval
else
psblas_cv_metisincfile='metis.h'
fi
# Check whether --with-metisdir was given. # Check whether --with-metisdir was given.
if test "${with_metisdir+set}" = set; then : if test "${with_metisdir+set}" = set; then :
withval=$with_metisdir; psblas_cv_metisdir=$withval withval=$with_metisdir; psblas_cv_metisdir=$withval
@ -8805,7 +8922,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: metis dir $psblas_cv_metisdir" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: metis dir $psblas_cv_metisdir" >&5
$as_echo "$as_me: metis dir $psblas_cv_metisdir" >&6;} $as_echo "$as_me: metis dir $psblas_cv_metisdir" >&6;}
for ac_header in limits.h metis.h for ac_header in limits.h $psblas_cv_metisincfile
do : do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@ -8827,7 +8944,7 @@ if test "x$pac_metis_header_ok" == "xno" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for metis_h in $METIS_INCLUDES" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for metis_h in $METIS_INCLUDES" >&5
$as_echo_n "checking for metis_h in $METIS_INCLUDES... " >&6; } $as_echo_n "checking for metis_h in $METIS_INCLUDES... " >&6; }
for ac_header in limits.h metis.h for ac_header in limits.h $psblas_cv_metisincfile
do : do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@ -8847,7 +8964,7 @@ if test "x$pac_metis_header_ok" == "xno" ; then
unset ac_cv_header_metis_h unset ac_cv_header_metis_h
METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include" METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include"
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS" CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
for ac_header in limits.h metis.h for ac_header in limits.h $psblas_cv_metisincfile
do : do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@ -8864,6 +8981,41 @@ done
fi fi
if test "x$pac_metis_header_ok" == "xyes" ; then
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS idx size" >&5
$as_echo_n "checking for METIS idx size... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
#include "$psblas_cv_metisincfile"
void main(){
printf("%d\n",IDXTYPEWIDTH);
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
pac_cv_metis_idx=`./conftest${ac_exeext} | sed 's/^ *//'`
else
pac_cv_metis_idx="unknown"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_metis_idx" >&5
$as_echo "$pac_cv_metis_idx" >&6; }
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
if test "x$pac_metis_header_ok" == "xyes" ; then if test "x$pac_metis_header_ok" == "xyes" ; then
psblas_cv_metis_includes="$METIS_INCLUDES" psblas_cv_metis_includes="$METIS_INCLUDES"
@ -9003,9 +9155,12 @@ fi
LIBS="$SAVE_LIBS"; LIBS="$SAVE_LIBS";
CPPFLAGS="$SAVE_CPPFLAGS"; CPPFLAGS="$SAVE_CPPFLAGS";
if test "x$psblas_cv_have_metis" == "xyes" ; then if test "x$pac_cv_metis_idx" == "xunknown" ; then
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $FDEFINES" true ; # do nothing
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES" elif test "x$psblas_cv_have_metis" == "xyes" ; then
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $psblas_cv_define_prepend-DMETIS_$pac_cv_metis_idx $FDEFINES"
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx"
METISINCFILE=$psblas_cv_metisincfile
fi fi
@ -9218,11 +9373,6 @@ fi
# Note : We would like to detect PSBLAS, but this is complicated by the
# module symbols mangling rules, which are compiler specific !
#
# Moreover, the PSBLAS doesn't have an installer, currently.
############################################################################### ###############################################################################
# Library target directory and archive files. # Library target directory and archive files.
############################################################################### ###############################################################################
@ -9275,7 +9425,6 @@ UTILLIBNAME=libpsb_util.a
PSBLASRULES=' PSBLASRULES='
@ -9301,11 +9450,14 @@ FDEFINES=$(PSBFDEFINES)
############################################################################### ###############################################################################
# the following files will be created by Automake # the following files will be created by Automake
ac_config_files="$ac_config_files Make.inc" ac_config_files="$ac_config_files Make.inc"
ac_config_files="$ac_config_files util/psb_metis_int.h"
cat >confcache <<\_ACEOF cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure # This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure # tests run on this system so they can be shared between configure
@ -9872,7 +10024,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by PSBLAS $as_me 3.5, which was This file was extended by PSBLAS $as_me 3.7.0, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@ -9929,7 +10081,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
PSBLAS config.status 3.5 PSBLAS config.status 3.7.0
configured by $0, generated by GNU Autoconf 2.69, configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"
@ -10037,7 +10189,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# #
# INIT-COMMANDS # INIT-COMMANDS
# #
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
_ACEOF _ACEOF
@ -10049,6 +10201,7 @@ do
case $ac_config_target in case $ac_config_target in
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"Make.inc") CONFIG_FILES="$CONFIG_FILES Make.inc" ;; "Make.inc") CONFIG_FILES="$CONFIG_FILES Make.inc" ;;
"util/psb_metis_int.h") CONFIG_FILES="$CONFIG_FILES util/psb_metis_int.h" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac esac
@ -10482,29 +10635,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
# Older Autoconf quotes --file arguments for eval, but not when files # Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval # are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting. # if we detect the quoting.
case $CONFIG_FILES in # TODO: see whether this extra hack can be removed once we start
*\'*) eval set x "$CONFIG_FILES" ;; # requiring Autoconf 2.70 or later.
*) set x $CONFIG_FILES ;; case $CONFIG_FILES in #(
esac *\'*) :
eval set x "$CONFIG_FILES" ;; #(
*) :
set x $CONFIG_FILES ;; #(
*) :
;;
esac
shift shift
for mf # Used to flag and report bootstrapping failures.
am_rc=0
for am_mf
do do
# Strip MF so we end up with the name of the file. # Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'` am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not. # Check whether this is an Automake generated Makefile which includes
# We used to match only the files named 'Makefile.in', but # dependency-tracking related rules and includes.
# some people rename them; so instead we look at the file content. # Grep'ing the whole file directly is not great: AIX grep has a line
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# Grep'ing the whole file is not good either: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000. # limit of 2048, but all sed's we know have understand at least 4000.
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
dirpart=`$as_dirname -- "$mf" || || continue
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ am_dirpart=`$as_dirname -- "$am_mf" ||
X"$mf" : 'X\(//\)[^/]' \| \ $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \
X"$mf" : 'X\(/\)' \| . 2>/dev/null || X"$am_mf" : 'X\(//\)$' \| \
$as_echo X"$mf" | X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$am_mf" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/ s//\1/
q q
@ -10522,53 +10681,48 @@ $as_echo X"$mf" |
q q
} }
s/.*/./; q'` s/.*/./; q'`
else am_filepart=`$as_basename -- "$am_mf" ||
continue $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
fi X"$am_mf" : 'X\(//\)$' \| \
# Extract the definition of DEPDIR, am__include, and am__quote X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
# from the Makefile without running 'make'. $as_echo X/"$am_mf" |
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` sed '/^.*\/\([^/][^/]*\)\/*$/{
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "$am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`$as_dirname -- "$file" ||
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$file" : 'X\(//\)[^/]' \| \
X"$file" : 'X\(//\)$' \| \
X"$file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/ s//\1/
q q
} }
/^X\(\/\/\)$/{ /^X\/\(\/\/\)$/{
s//\1/ s//\1/
q q
} }
/^X\(\/\).*/{ /^X\/\(\/\).*/{
s//\1/ s//\1/
q q
} }
s/.*/./; q'` s/.*/./; q'`
as_dir=$dirpart/$fdir; as_fn_mkdir_p { echo "$as_me:$LINENO: cd "$am_dirpart" \
# echo "creating $dirpart/$file" && sed -e '/# am--include-marker/d' "$am_filepart" \
echo '# dummy' > "$dirpart/$file" | $MAKE -f - am--depfiles" >&5
done (cd "$am_dirpart" \
&& sed -e '/# am--include-marker/d' "$am_filepart" \
| $MAKE -f - am--depfiles) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } || am_rc=$?
done done
if test $am_rc -ne 0; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "Something went wrong bootstrapping makefile fragments
for automatic dependency tracking. Try re-running configure with the
'--disable-dependency-tracking' option to at least be able to build
the package (albeit without support for automatic dependency tracking).
See \`config.log' for more details" "$LINENO" 5; }
fi
{ am_dirpart=; unset am_dirpart;}
{ am_filepart=; unset am_filepart;}
{ am_mf=; unset am_mf;}
{ am_rc=; unset am_rc;}
rm -f conftest-deps.mk
} }
;; ;;

@ -36,11 +36,11 @@ dnl NOTE : There is no cross compilation support.
############################################################################### ###############################################################################
# NOTE: the literal for version (the second argument to AC_INIT should be a literal!) # NOTE: the literal for version (the second argument to AC_INIT should be a literal!)
AC_INIT([PSBLAS],3.5, [https://github.com/sfilippone/psblas3/issues]) AC_INIT([PSBLAS],3.7.0, [https://github.com/sfilippone/psblas3/issues])
# VERSION is the file containing the PSBLAS version code # VERSION is the file containing the PSBLAS version code
# FIXME # FIXME
psblas_cv_version="3.5" psblas_cv_version="3.7.0"
# A sample source file # A sample source file
AC_CONFIG_SRCDIR([base/modules/psb_base_mod.f90]) AC_CONFIG_SRCDIR([base/modules/psb_base_mod.f90])
@ -561,13 +561,26 @@ PAC_FORTRAN_TEST_MOLD(
Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])]
) )
PAC_FORTRAN_TEST_VOLATILE(
[],
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for VOLATILE])]
)
PAC_FORTRAN_TEST_ISO_FORTRAN_ENV(
[],
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for ISO_FORTRAN_ENV])]
)
PAC_FORTRAN_TEST_FINAL(
[],
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for FINAL])]
)
# #
# Optional features # Optional features
# #
PAC_FORTRAN_TEST_VOLATILE(
[FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES"],
)
PAC_FORTRAN_TEST_GENERICS( PAC_FORTRAN_TEST_GENERICS(
[], [],
@ -578,14 +591,6 @@ PAC_FORTRAN_TEST_FLUSH(
[FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES"], [FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES"],
) )
PAC_FORTRAN_TEST_ISO_FORTRAN_ENV(
[FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES"],
)
PAC_FORTRAN_TEST_FINAL(
[FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES"],
)
############################################################################### ###############################################################################
# Additional pathname stuff (yes, it is redundant and confusing...) # Additional pathname stuff (yes, it is redundant and confusing...)
@ -689,9 +694,12 @@ LIBS="$RSB_LIBS ${LIBS}"
dnl AC_CHECK_HEADERS([rsb.h], [ LIBS="${LIBS} $want_rsb_libs"], []) dnl AC_CHECK_HEADERS([rsb.h], [ LIBS="${LIBS} $want_rsb_libs"], [])
PAC_CHECK_METIS PAC_CHECK_METIS
if test "x$psblas_cv_have_metis" == "xyes" ; then if test "x$pac_cv_metis_idx" == "xunknown" ; then
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $FDEFINES" true ; # do nothing
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES" elif test "x$psblas_cv_have_metis" == "xyes" ; then
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $psblas_cv_define_prepend-DMETIS_$pac_cv_metis_idx $FDEFINES"
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx"
METISINCFILE=$psblas_cv_metisincfile
fi fi
PAC_CHECK_AMD PAC_CHECK_AMD
@ -702,11 +710,6 @@ fi
# Note : We would like to detect PSBLAS, but this is complicated by the
# module symbols mangling rules, which are compiler specific !
#
# Moreover, the PSBLAS doesn't have an installer, currently.
############################################################################### ###############################################################################
# Library target directory and archive files. # Library target directory and archive files.
############################################################################### ###############################################################################
@ -761,7 +764,6 @@ AC_SUBST(LAPACK_LIBS)
AC_SUBST(CINCLUDES) AC_SUBST(CINCLUDES)
AC_SUBST(FINCLUDES) AC_SUBST(FINCLUDES)
PSBLASRULES=' PSBLASRULES='
PSBLDLIBS=$(LAPACK) $(BLAS) $(METIS_LIB) $(AMD_LIB) $(LIBS) PSBLDLIBS=$(LAPACK) $(BLAS) $(METIS_LIB) $(AMD_LIB) $(LIBS)
CDEFINES=$(PSBCDEFINES) CDEFINES=$(PSBCDEFINES)
@ -784,11 +786,13 @@ AC_SUBST(BASELIBNAME)
AC_SUBST(PRECLIBNAME) AC_SUBST(PRECLIBNAME)
AC_SUBST(METHDLIBNAME) AC_SUBST(METHDLIBNAME)
AC_SUBST(UTILLIBNAME) AC_SUBST(UTILLIBNAME)
AC_SUBST(METISINCFILE)
############################################################################### ###############################################################################
# the following files will be created by Automake # the following files will be created by Automake
AC_CONFIG_FILES([Make.inc]) AC_CONFIG_FILES([Make.inc])
AC_CONFIG_FILES([util/psb_metis_int.h])
AC_OUTPUT() AC_OUTPUT()
#AC_OUTPUT(Make.inc Makefile) #AC_OUTPUT(Make.inc Makefile)
############################################################################### ###############################################################################

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 373 B

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

After

Width:  |  Height:  |  Size: 296 B

@ -8,13 +8,11 @@
.cmbx-12x-x-144{font-size:172%; font-weight: bold;} .cmbx-12x-x-144{font-size:172%; font-weight: bold;}
.cmbx-12x-x-144{ font-weight: bold;} .cmbx-12x-x-144{ font-weight: bold;}
.cmbx-12x-x-144{ font-weight: bold;} .cmbx-12x-x-144{ font-weight: bold;}
.cmbx-12x-x-144{ font-weight: bold;}
.cmti-10{ font-style: italic;} .cmti-10{ font-style: italic;}
.cmti-12{font-size:120%; font-style: italic;} .cmti-12{font-size:120%; font-style: italic;}
.cmbx-10{ font-weight: bold;} .cmbx-10{ font-weight: bold;}
.cmbx-10{ font-weight: bold;} .cmbx-10{ font-weight: bold;}
.cmbx-10{ font-weight: bold;} .cmbx-10{ font-weight: bold;}
.cmbx-10{ font-weight: bold;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace;}
@ -23,7 +21,6 @@
.cmbx-12{font-size:120%; font-weight: bold;} .cmbx-12{font-size:120%; font-weight: bold;}
.cmbx-12{ font-weight: bold;} .cmbx-12{ font-weight: bold;}
.cmbx-12{ font-weight: bold;} .cmbx-12{ font-weight: bold;}
.cmbx-12{ font-weight: bold;}
.cmtt-8{font-size:80%;font-family: monospace;} .cmtt-8{font-size:80%;font-family: monospace;}
.cmtt-8{font-family: monospace;} .cmtt-8{font-family: monospace;}
.cmtt-8{font-family: monospace;} .cmtt-8{font-family: monospace;}
@ -31,10 +28,6 @@
.cmtt-9{font-family: monospace;} .cmtt-9{font-family: monospace;}
.cmtt-9{font-family: monospace;} .cmtt-9{font-family: monospace;}
.cmmi-8{font-size:80%;font-style: italic;} .cmmi-8{font-size:80%;font-style: italic;}
.cmbx-9{font-size:90%; font-weight: bold;}
.cmbx-9{ font-weight: bold;}
.cmbx-9{ font-weight: bold;}
.cmbx-9{ font-weight: bold;}
p.noindent { text-indent: 0em } p.noindent { text-indent: 0em }
td p.noindent { text-indent: 0em; margin-top:0em; } td p.noindent { text-indent: 0em; margin-top:0em; }
p.nopar { text-indent: 0em; } p.nopar { text-indent: 0em; }
@ -104,8 +97,9 @@ span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float, div.figure {margin-left: auto; margin-right: auto;} div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;} div.float img {text-align:center;}
div.figure img {text-align:center;} div.figure img {text-align:center;}
.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} .marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;} .marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
.reversemarginpar{float:left;}
table.equation {width:100%;} table.equation {width:100%;}
.equation td{text-align:center; } .equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; } td.equation { margin-top:1em; margin-bottom:1em; }
@ -148,6 +142,7 @@ div.abstract {width:100%;}
.Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; } .Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; }
.shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; } .shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; }
.doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; } .doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; }
.rotatebox{display: inline-block;}
.figure img.graphics {margin-left:10%;} .figure img.graphics {margin-left:10%;}
.lstlisting .label{margin-right:0.5em; } .lstlisting .label{margin-right:0.5em; }
div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; } div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 B

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 765 B

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -70,264 +70,254 @@ explicitly.
<div class="fbox"><div class="minipage"><!--l. 44--> <div class="fbox"><div class="minipage"><!--l. 44-->
<div class="lstlisting" id="listing-9"><span class="label"><a <div class="lstlisting" id="listing-9"><span class="label"><a
id="x86-123001r1"></a></span><span id="x86-123001r1"></a></span><span
class="cmbx-9">subroutine</span><span class="cmtt-9">subroutine</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">psb</span><span class="cmtt-9">psb_foo</span><span
class="cmr-9">_foo</span><span class="cmtt-9">(</span><span
class="cmr-9">(</span><span class="cmtt-9">some</span><span
class="cmr-9">some</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">args</span><span
class="cmr-9">args</span><span class="cmtt-9">,</span><span
class="cmr-9">,</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">info</span><span
class="cmr-9">info</span><span class="cmtt-9">)</span><span
class="cmr-9">)</span><span class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
class="cmr-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123002r2"></a></span><span id="x86-123002r2"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">...</span><span class="cmtt-9">...</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123003r3"></a></span><span id="x86-123003r3"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">if</span><span class="cmtt-9">if</span><span
class="cmr-9">(</span><span class="cmtt-9">(</span><span
class="cmr-9">error</span><span class="cmtt-9">error</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">detected</span><span class="cmtt-9">detected</span><span
class="cmr-9">)</span><span class="cmtt-9">)</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">then</span><span class="cmtt-9">then</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123004r4"></a></span><span id="x86-123004r4"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">info</span><span class="cmtt-9">info</span><span
class="cmr-9">=</span><span class="cmtt-9">=</span><span
class="cmr-9">errcode1</span><span class="cmtt-9">errcode1</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123005r5"></a></span><span id="x86-123005r5"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">call</span><span class="cmtt-9">call</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">psb</span><span class="cmtt-9">psb_errpush</span><span
class="cmr-9">_errpush</span><span class="cmtt-9">(</span><span
class="cmr-9">(</span><span class="cmtt-9">&#8217;</span><span
class="cmr-9">&#8217;</span><span class="cmtt-9">psb_foo</span><span
class="cmr-9">psb</span><span class="cmtt-9">&#8217;</span><span
class="cmr-9">_foo</span><span class="cmtt-9">,</span><span
class="cmr-9">&#8217;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">,</span><span class="cmtt-9">errcode1</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">)</span><span
class="cmr-9">errcode1</span><span class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
class="cmr-9">)</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123006r6"></a></span><span id="x86-123006r6"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">goto</span><span class="cmtt-9">goto</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">9999</span><span class="cmtt-9">9999</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123007r7"></a></span><span id="x86-123007r7"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">end</span><span class="cmtt-9">end</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">if</span><span class="cmtt-9">if</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123008r8"></a></span><span id="x86-123008r8"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">...</span><span class="cmtt-9">...</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123009r9"></a></span><span id="x86-123009r9"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">call</span><span class="cmtt-9">call</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">psb</span><span class="cmtt-9">psb_bar</span><span
class="cmr-9">_bar</span><span class="cmtt-9">(</span><span
class="cmr-9">(</span><span class="cmtt-9">some</span><span
class="cmr-9">some</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">args</span><span
class="cmr-9">args</span><span class="cmtt-9">,</span><span
class="cmr-9">,</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">info</span><span
class="cmr-9">info</span><span class="cmtt-9">)</span><span
class="cmr-9">)</span><span class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
class="cmr-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123010r10"></a></span><span id="x86-123010r10"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">if</span><span class="cmtt-9">if</span><span
class="cmr-9">(</span><span class="cmtt-9">(</span><span
class="cmr-9">info</span><span class="cmtt-9">info</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">.</span><span class="cmtt-9">.</span><span
class="cmbx-9">ne</span><span class="cmtt-9">ne</span><span
class="cmr-9">.</span><span class="cmtt-9">.</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">zero</span><span class="cmtt-9">zero</span><span
class="cmr-9">)</span><span class="cmtt-9">)</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">then</span><span class="cmtt-9">then</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123011r11"></a></span><span id="x86-123011r11"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">info</span><span class="cmtt-9">info</span><span
class="cmr-9">=</span><span class="cmtt-9">=</span><span
class="cmr-9">errcode2</span><span class="cmtt-9">errcode2</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123012r12"></a></span><span id="x86-123012r12"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">call</span><span class="cmtt-9">call</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">psb</span><span class="cmtt-9">psb_errpush</span><span
class="cmr-9">_errpush</span><span class="cmtt-9">(</span><span
class="cmr-9">(</span><span class="cmtt-9">&#8217;</span><span
class="cmr-9">&#8217;</span><span class="cmtt-9">psb_foo</span><span
class="cmr-9">psb</span><span class="cmtt-9">&#8217;</span><span
class="cmr-9">_foo</span><span class="cmtt-9">,</span><span
class="cmr-9">&#8217;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">,</span><span class="cmtt-9">errcode2</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">)</span><span
class="cmr-9">errcode2</span><span class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
class="cmr-9">)</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123013r13"></a></span><span id="x86-123013r13"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">goto</span><span class="cmtt-9">goto</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">9999</span><span class="cmtt-9">9999</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123014r14"></a></span><span id="x86-123014r14"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">end</span><span class="cmtt-9">end</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">if</span><span class="cmtt-9">if</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123015r15"></a></span><span id="x86-123015r15"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">...</span><span class="cmtt-9">...</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123016r16"></a></span><span id="x86-123016r16"></a></span><span
class="cmr-9">9999</span><span class="cmtt-9">9999</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">continue</span><span class="cmtt-9">continue</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123017r17"></a></span><span id="x86-123017r17"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">if</span><span class="cmtt-9">if</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">(</span><span class="cmtt-9">(</span><span
class="cmr-9">err</span><span class="cmtt-9">err_act</span><span
class="cmr-9">_act</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">.</span><span
class="cmr-9">.</span><span class="cmtt-9">eq</span><span
class="cmbx-9">eq</span><span class="cmtt-9">.</span><span
class="cmr-9">.</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">act_abort</span><span
class="cmr-9">act</span><span class="cmtt-9">)</span><span
class="cmr-9">_abort</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">)</span><span class="cmtt-9">then</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
class="cmbx-9">then</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123018r18"></a></span><span id="x86-123018r18"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">call</span><span class="cmtt-9">call</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">psb</span><span class="cmtt-9">psb_error</span><span
class="cmr-9">_error</span><span class="cmtt-9">(</span><span
class="cmr-9">(</span><span class="cmtt-9">icontxt</span><span
class="cmr-9">icontxt</span><span class="cmtt-9">)</span><span
class="cmr-9">)</span><span class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
class="cmr-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123019r19"></a></span><span id="x86-123019r19"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">return</span><span class="cmtt-9">return</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123020r20"></a></span><span id="x86-123020r20"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">else</span><span class="cmtt-9">else</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123021r21"></a></span><span id="x86-123021r21"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">return</span><span class="cmtt-9">return</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123022r22"></a></span><span id="x86-123022r22"></a></span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">end</span><span class="cmtt-9">end</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">if</span><span class="cmtt-9">if</span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123023r23"></a></span><span id="x86-123023r23"></a></span><span
class="cmr-9">&#x00A0;</span><br /><span class="label"><a class="cmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x86-123024r24"></a></span><span id="x86-123024r24"></a></span><span
class="cmbx-9">end</span><span class="cmtt-9">end</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmbx-9">subroutine</span><span class="cmtt-9">subroutine</span><span
class="cmr-9">&#x00A0;</span><span class="cmtt-9">&#x00A0;</span><span
class="cmr-9">psb</span><span class="cmtt-9">psb_foo</span>
class="cmr-9">_foo</span>
</div> </div> </div> </div> </div> </div>
</div> </div>
<br /> <div class="caption" <br /> <div class="caption"

@ -220,14 +220,90 @@ class="cmbx-12">Notes</span>
possible to improve the runtime efficiency by using the following scheme: possible to improve the runtime efficiency by using the following scheme:
<!--l. 214--> <!--l. 214-->
<div class="lstlisting" id="listing-1"><span class="label"><a <div class="lstlisting" id="listing-1"><span class="label"><a
id="x20-57004r1"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(1)&#x00A0;=&#x00A0;psb_gedot(x1,y1,desc_a,info,global=.<span id="x20-57004r1"></a></span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x20-57005r2"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(2)&#x00A0;=&#x00A0;psb_gedot(x2,y2,desc_a,info,global=.<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x20-57006r3"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(3)&#x00A0;=&#x00A0;psb_gedot(x3,y3,desc_a,info,global=.<span class="cmtt-10">vres</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">(1)</span><span
id="x20-57007r4"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">call</span>&#x00A0;psb_sum(ictxt,vres(1:3)) class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_gedot</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x1</span><span
class="cmtt-10">,</span><span
class="cmtt-10">y1</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x20-57005r2"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(2)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_gedot</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x2</span><span
class="cmtt-10">,</span><span
class="cmtt-10">y2</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x20-57006r3"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(3)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_gedot</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x3</span><span
class="cmtt-10">,</span><span
class="cmtt-10">y3</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x20-57007r4"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_sum</span><span
class="cmtt-10">(</span><span
class="cmtt-10">ictxt</span><span
class="cmtt-10">,</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(1:3))</span>
</div> </div>
<!--l. 220--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound <!--l. 220--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound

@ -194,14 +194,84 @@ class="cmbx-12">Notes</span>
multiple norms at the same time; in this case, it is possible to improve the multiple norms at the same time; in this case, it is possible to improve the
runtime efficiency by using the following scheme: <!--l. 390--> runtime efficiency by using the following scheme: <!--l. 390-->
<div class="lstlisting" id="listing-2"><span class="label"><a <div class="lstlisting" id="listing-2"><span class="label"><a
id="x22-59004r1"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(1)&#x00A0;=&#x00A0;psb_geamax(x1,desc_a,info,global=.<span id="x22-59004r1"></a></span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x22-59005r2"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(2)&#x00A0;=&#x00A0;psb_geamax(x2,desc_a,info,global=.<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x22-59006r3"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(3)&#x00A0;=&#x00A0;psb_geamax(x3,desc_a,info,global=.<span class="cmtt-10">vres</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">(1)</span><span
id="x22-59007r4"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">call</span>&#x00A0;psb_amx(ictxt,vres(1:3)) class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_geamax</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x1</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x22-59005r2"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(2)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_geamax</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x2</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x22-59006r3"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(3)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_geamax</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x3</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x22-59007r4"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_amx</span><span
class="cmtt-10">(</span><span
class="cmtt-10">ictxt</span><span
class="cmtt-10">,</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(1:3))</span>
</div> </div>
<!--l. 396--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound <!--l. 396--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound

@ -195,14 +195,84 @@ class="cmbx-12">Notes</span>
multiple norms at the same time; in this case, it is possible to improve the multiple norms at the same time; in this case, it is possible to improve the
runtime efficiency by using the following scheme: <!--l. 543--> runtime efficiency by using the following scheme: <!--l. 543-->
<div class="lstlisting" id="listing-3"><span class="label"><a <div class="lstlisting" id="listing-3"><span class="label"><a
id="x24-61004r1"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(1)&#x00A0;=&#x00A0;psb_geasum(x1,desc_a,info,global=.<span id="x24-61004r1"></a></span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x24-61005r2"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(2)&#x00A0;=&#x00A0;psb_geasum(x2,desc_a,info,global=.<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x24-61006r3"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(3)&#x00A0;=&#x00A0;psb_geasum(x3,desc_a,info,global=.<span class="cmtt-10">vres</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">(1)</span><span
id="x24-61007r4"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">call</span>&#x00A0;psb_sum(ictxt,vres(1:3)) class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_geasum</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x1</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x24-61005r2"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(2)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_geasum</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x2</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x24-61006r3"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(3)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_geasum</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x3</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x24-61007r4"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_sum</span><span
class="cmtt-10">(</span><span
class="cmtt-10">ictxt</span><span
class="cmtt-10">,</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(1:3))</span>
</div> </div>
<!--l. 549--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound <!--l. 549--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound

@ -198,14 +198,84 @@ class="cmbx-12">Notes</span>
multiple norms at the same time; in this case, it is possible to improve the multiple norms at the same time; in this case, it is possible to improve the
runtime efficiency by using the following scheme: <!--l. 713--> runtime efficiency by using the following scheme: <!--l. 713-->
<div class="lstlisting" id="listing-4"><span class="label"><a <div class="lstlisting" id="listing-4"><span class="label"><a
id="x26-63004r1"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(1)&#x00A0;=&#x00A0;psb_genrm2(x1,desc_a,info,global=.<span id="x26-63004r1"></a></span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x26-63005r2"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(2)&#x00A0;=&#x00A0;psb_genrm2(x2,desc_a,info,global=.<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">&#x00A0;</span><span
id="x26-63006r3"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;vres(3)&#x00A0;=&#x00A0;psb_genrm2(x3,desc_a,info,global=.<span class="cmtt-10">vres</span><span
class="cmbx-10">false</span>.)&#x00A0;<br /><span class="label"><a class="cmtt-10">(1)</span><span
id="x26-63007r4"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">call</span>&#x00A0;psb_nrm2(ictxt,vres(1:3)) class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_genrm2</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x1</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x26-63005r2"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(2)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_genrm2</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x2</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x26-63006r3"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(3)</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">=</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_genrm2</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x3</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">global</span><span
class="cmtt-10">=.</span><span
class="cmtt-10">false</span><span
class="cmtt-10">.)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x26-63007r4"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_nrm2</span><span
class="cmtt-10">(</span><span
class="cmtt-10">ictxt</span><span
class="cmtt-10">,</span><span
class="cmtt-10">vres</span><span
class="cmtt-10">(1:3))</span>
</div> </div>
<!--l. 719--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound <!--l. 719--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound

@ -87,10 +87,38 @@ class="content">Data types</span></div><!--tex4ht:label?: x36-7300117 -->
<!--l. 40--> <!--l. 40-->
<div class="lstlisting" id="listing-5"><span class="label"><a <div class="lstlisting" id="listing-5"><span class="label"><a
id="x36-73002r1"></a></span><span id="x36-73002r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_halo(x,&#x00A0;desc_a,&#x00A0;info)&#x00A0;<br /><span class="label"><a class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_halo</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x36-73003r2"></a></span><span id="x36-73003r2"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_halo(x,&#x00A0;desc_a,&#x00A0;info,&#x00A0;work,&#x00A0;<span class="cmtt-10">call</span><span
class="cmbx-10">data</span>) class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_halo</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">work</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">data</span><span
class="cmtt-10">)</span>
</div> </div>
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">

@ -92,9 +92,42 @@ class="content">Data types</span></div><!--tex4ht:label?: x37-7400118 -->
<!--l. 192--> <!--l. 192-->
<div class="lstlisting" id="listing-6"><span class="label"><a <div class="lstlisting" id="listing-6"><span class="label"><a
id="x37-74002r1"></a></span><span id="x37-74002r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_ovrl(x,&#x00A0;desc_a,&#x00A0;info)&#x00A0;<br /><span class="label"><a class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_ovrl</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x37-74003r2"></a></span><span id="x37-74003r2"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_ovrl(x,&#x00A0;desc_a,&#x00A0;info,&#x00A0;update=update_type,&#x00A0;work=work) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_ovrl</span><span
class="cmtt-10">(</span><span
class="cmtt-10">x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">update</span><span
class="cmtt-10">=</span><span
class="cmtt-10">update_type</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">work</span><span
class="cmtt-10">=</span><span
class="cmtt-10">work</span><span
class="cmtt-10">)</span>
</div> </div>
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">

@ -109,9 +109,44 @@ class="content">Data types</span></div><!--tex4ht:label?: x38-7500119 -->
<!--l. 387--> <!--l. 387-->
<div class="lstlisting" id="listing-7"><span class="label"><a <div class="lstlisting" id="listing-7"><span class="label"><a
id="x38-75002r1"></a></span><span id="x38-75002r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_gather(glob_x,&#x00A0;loc_x,&#x00A0;desc_a,&#x00A0;info,&#x00A0;root)&#x00A0;<br /><span class="label"><a class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_gather</span><span
class="cmtt-10">(</span><span
class="cmtt-10">glob_x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">loc_x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">root</span><span
class="cmtt-10">)</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x38-75003r2"></a></span><span id="x38-75003r2"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_gather(glob_x,&#x00A0;loc_x,&#x00A0;desc_a,&#x00A0;info,&#x00A0;root) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_gather</span><span
class="cmtt-10">(</span><span
class="cmtt-10">glob_x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">loc_x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">root</span><span
class="cmtt-10">)</span>
</div> </div>
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">

@ -108,7 +108,27 @@ class="content">Data types</span></div><!--tex4ht:label?: x39-7600120 -->
<!--l. 487--> <!--l. 487-->
<div class="lstlisting" id="listing-8"><span class="label"><a <div class="lstlisting" id="listing-8"><span class="label"><a
id="x39-76002r1"></a></span><span id="x39-76002r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_scatter(glob_x,&#x00A0;loc_x,&#x00A0;desc_a,&#x00A0;info,&#x00A0;root,&#x00A0;mold) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_scatter</span><span
class="cmtt-10">(</span><span
class="cmtt-10">glob_x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">loc_x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">root</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mold</span><span
class="cmtt-10">)</span>
</div> </div>
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">

@ -45,8 +45,14 @@ class="description">Single precision complex;
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmbx-10">Z</span> </dt><dd class="cmbx-10">Z</span> </dt><dd
class="description">Double precision complex.</dd></dl> class="description">Double precision complex;
<!--l. 535--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span </dd><dt class="description">
<span
class="cmbx-10">LS,LD,LC,LZ</span> </dt><dd
class="description">Same numeric type as above, but with <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_lpk_</span></span></span> integer
indices.</dd></dl>
<!--l. 537--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">a%a</span></span></span> of type class="cmtt-10">a%a</span></span></span> of type
<a <a
id="spbasedata"><span id="spbasedata"><span
@ -62,18 +68,18 @@ class="cmtt-10">psb_spasb</span></span></span> routine. <hr class="figure"><div
id="x14-260014"></a> id="x14-260014"></a>
<div class="center" <div class="center"
> >
<!--l. 542--><p class="noindent" > <!--l. 544--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-15"> <div class="minipage"><div class="verbatim" id="verbatim-15">
&#x00A0;&#x00A0;type&#x00A0;::&#x00A0;psb_Tspmat_type &#x00A0;&#x00A0;type&#x00A0;::&#x00A0;psb_Tspmat_type
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;class(psb_T_base_sparse_mat),&#x00A0;allocatable&#x00A0;&#x00A0;::&#x00A0;a &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;class(psb_T_base_sparse_mat),&#x00A0;allocatable&#x00A0;&#x00A0;::&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;end&#x00A0;type&#x00A0;&#x00A0;psb_Tspmat_type &#x00A0;<br />&#x00A0;&#x00A0;end&#x00A0;type&#x00A0;&#x00A0;psb_Tspmat_type
</div> </div>
<!--l. 548--><p class="nopar" ></div></div> <!--l. 550--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Figure&#x00A0;4: </span><span ><span class="id">Figure&#x00A0;4: </span><span
class="content"> The PSBLAS defined data type that contains a sparse matrix.</span></div><!--tex4ht:label?: x14-260014 --> class="content"> The PSBLAS defined data type that contains a sparse matrix.</span></div><!--tex4ht:label?: x14-260014 -->
<!--l. 559--><p class="indent" > </div><hr class="endfigure"> <!--l. 561--><p class="indent" > </div><hr class="endfigure">
<!--l. 560--><p class="indent" > The following very common formats are precompiled in PSBLAS and thus are <!--l. 562--><p class="indent" > The following very common formats are precompiled in PSBLAS and thus are
always available: always available:
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
@ -83,6 +89,9 @@ class="cmbx-10">_coo</span><span
class="cmbx-10">_sparse</span><span class="cmbx-10">_sparse</span><span
class="cmbx-10">_mat</span> </dt><dd class="cmbx-10">_mat</span> </dt><dd
class="description">Coordinate storage; class="description">Coordinate storage;
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmbx-10">psb</span><span class="cmbx-10">psb</span><span
@ -99,10 +108,7 @@ class="cmbx-10">_csc</span><span
class="cmbx-10">_sparse</span><span class="cmbx-10">_sparse</span><span
class="cmbx-10">_mat</span> </dt><dd class="cmbx-10">_mat</span> </dt><dd
class="description">Compressed storage by columns;</dd></dl> class="description">Compressed storage by columns;</dd></dl>
<!--l. 569--><p class="noindent" >The inner sparse matrix has an associated state, which can take the following
<!--l. 567--><p class="noindent" >The inner sparse matrix has an associated state, which can take the following
values: values:
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
@ -121,12 +127,12 @@ class="description">State entered after a reinitalization; this is used to handl
in which the same sparsity pattern is used multiple times with different in which the same sparsity pattern is used multiple times with different
coefficients. In this state it is only possible to enter coefficients for already coefficients. In this state it is only possible to enter coefficients for already
existing nonzero entries.</dd></dl> existing nonzero entries.</dd></dl>
<!--l. 580--><p class="noindent" >The only storage variant supporting the build state is COO; all other variants are <!--l. 582--><p class="noindent" >The only storage variant supporting the build state is COO; all other variants are
obtained by conversion to/from it. obtained by conversion to/from it.
<!--l. 583--><p class="noindent" > <!--l. 585--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.1 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.1 </span> <a
id="x14-270003.2.1"></a>Sparse Matrix Methods</h5> id="x14-270003.2.1"></a>Sparse Matrix Methods</h5>
<!--l. 585--><p class="noindent" > <!--l. 587--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.2 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.2 </span> <a
id="x14-280003.2.2"></a>get_nrows &#8212; Get number of rows in a sparse matrix</h5> id="x14-280003.2.2"></a>get_nrows &#8212; Get number of rows in a sparse matrix</h5>
@ -135,8 +141,8 @@ obtained by conversion to/from it.
<div class="verbatim" id="verbatim-16"> <div class="verbatim" id="verbatim-16">
nr&#x00A0;=&#x00A0;a%get_nrows() nr&#x00A0;=&#x00A0;a%get_nrows()
</div> </div>
<!--l. 590--><p class="nopar" > <!--l. 592--><p class="nopar" >
<!--l. 592--><p class="indent" > <!--l. 594--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -152,7 +158,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 602--><p class="indent" > <!--l. 604--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -162,7 +168,7 @@ class="description">
class="cmbx-10">Function value</span> </dt><dd class="cmbx-10">Function value</span> </dt><dd
class="description">The number of rows of sparse matrix <span class="obeylines-h"><span class="verb"><span class="description">The number of rows of sparse matrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">a</span></span></span>.</dd></dl> class="cmtt-10">a</span></span></span>.</dd></dl>
<!--l. 609--><p class="noindent" > <!--l. 611--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.3 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.3 </span> <a
id="x14-290003.2.3"></a>get_ncols &#8212; Get number of columns in a sparse matrix</h5> id="x14-290003.2.3"></a>get_ncols &#8212; Get number of columns in a sparse matrix</h5>
@ -171,8 +177,8 @@ class="cmtt-10">a</span></span></span>.</dd></dl>
<div class="verbatim" id="verbatim-17"> <div class="verbatim" id="verbatim-17">
nc&#x00A0;=&#x00A0;a%get_ncols() nc&#x00A0;=&#x00A0;a%get_ncols()
</div> </div>
<!--l. 614--><p class="nopar" > <!--l. 616--><p class="nopar" >
<!--l. 616--><p class="indent" > <!--l. 618--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -188,7 +194,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 626--><p class="indent" > <!--l. 628--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -198,7 +204,7 @@ class="description">
class="cmbx-10">Function value</span> </dt><dd class="cmbx-10">Function value</span> </dt><dd
class="description">The number of columns of sparse matrix <span class="obeylines-h"><span class="verb"><span class="description">The number of columns of sparse matrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">a</span></span></span>.</dd></dl> class="cmtt-10">a</span></span></span>.</dd></dl>
<!--l. 633--><p class="noindent" > <!--l. 635--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.4 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.4 </span> <a
id="x14-300003.2.4"></a>get_nnzeros &#8212; Get number of nonzero elements in a sparse matrix</h5> id="x14-300003.2.4"></a>get_nnzeros &#8212; Get number of nonzero elements in a sparse matrix</h5>
@ -207,8 +213,8 @@ class="cmtt-10">a</span></span></span>.</dd></dl>
<div class="verbatim" id="verbatim-18"> <div class="verbatim" id="verbatim-18">
nz&#x00A0;=&#x00A0;a%get_nnzeros() nz&#x00A0;=&#x00A0;a%get_nnzeros()
</div> </div>
<!--l. 638--><p class="nopar" > <!--l. 640--><p class="nopar" >
<!--l. 640--><p class="indent" > <!--l. 642--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -224,7 +230,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 650--><p class="indent" > <!--l. 652--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -234,7 +240,7 @@ class="description">
class="cmbx-10">Function value</span> </dt><dd class="cmbx-10">Function value</span> </dt><dd
class="description">The number of nonzero elements stored in sparse matrix <span class="obeylines-h"><span class="verb"><span class="description">The number of nonzero elements stored in sparse matrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">a</span></span></span>.</dd></dl> class="cmtt-10">a</span></span></span>.</dd></dl>
<!--l. 655--><p class="noindent" ><span <!--l. 657--><p class="noindent" ><span
class="cmbx-10">Notes</span> class="cmbx-10">Notes</span>
<ol class="enumerate1" > <ol class="enumerate1" >
<li <li
@ -242,7 +248,7 @@ class="cmbx-10">Notes</span>
class="cmtt-10">a</span></span></span>; some class="cmtt-10">a</span></span></span>; some
storage formats employ padding, thus the returned value for the same storage formats employ padding, thus the returned value for the same
matrix may be different for different storage choices.</li></ol> matrix may be different for different storage choices.</li></ol>
<!--l. 663--><p class="noindent" > <!--l. 665--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.5 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.5 </span> <a
id="x14-310003.2.5"></a>get_size &#8212; Get maximum number of nonzero elements in a sparse id="x14-310003.2.5"></a>get_size &#8212; Get maximum number of nonzero elements in a sparse
matrix</h5> matrix</h5>
@ -252,8 +258,8 @@ matrix</h5>
<div class="verbatim" id="verbatim-19"> <div class="verbatim" id="verbatim-19">
maxnz&#x00A0;=&#x00A0;a%get_size() maxnz&#x00A0;=&#x00A0;a%get_size()
</div> </div>
<!--l. 668--><p class="nopar" > <!--l. 670--><p class="nopar" >
<!--l. 670--><p class="indent" > <!--l. 672--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -269,7 +275,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 680--><p class="indent" > <!--l. 682--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -280,7 +286,7 @@ class="cmbx-10">Function value</span> </dt><dd
class="description">The maximum number of nonzero elements that can be stored class="description">The maximum number of nonzero elements that can be stored
in sparse matrix <span class="obeylines-h"><span class="verb"><span in sparse matrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">a</span></span></span> using its current memory allocation.</dd></dl> class="cmtt-10">a</span></span></span> using its current memory allocation.</dd></dl>
<!--l. 687--><p class="noindent" > <!--l. 689--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.6 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.6 </span> <a
id="x14-320003.2.6"></a>sizeof &#8212; Get memory occupation in bytes of a sparse matrix</h5> id="x14-320003.2.6"></a>sizeof &#8212; Get memory occupation in bytes of a sparse matrix</h5>
@ -289,8 +295,8 @@ class="cmtt-10">a</span></span></span> using its current memory allocation.</dd>
<div class="verbatim" id="verbatim-20"> <div class="verbatim" id="verbatim-20">
memory_size&#x00A0;=&#x00A0;a%sizeof() memory_size&#x00A0;=&#x00A0;a%sizeof()
</div> </div>
<!--l. 692--><p class="nopar" > <!--l. 694--><p class="nopar" >
<!--l. 694--><p class="indent" > <!--l. 696--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -306,7 +312,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 704--><p class="indent" > <!--l. 706--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -315,7 +321,7 @@ class="description">
<span <span
class="cmbx-10">Function value</span> </dt><dd class="cmbx-10">Function value</span> </dt><dd
class="description">The memory occupation in bytes.</dd></dl> class="description">The memory occupation in bytes.</dd></dl>
<!--l. 710--><p class="noindent" > <!--l. 712--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.7 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.7 </span> <a
id="x14-330003.2.7"></a>get_fmt &#8212; Short description of the dynamic type</h5> id="x14-330003.2.7"></a>get_fmt &#8212; Short description of the dynamic type</h5>
@ -324,8 +330,8 @@ class="description">The memory occupation in bytes.</dd></dl>
<div class="verbatim" id="verbatim-21"> <div class="verbatim" id="verbatim-21">
write(*,*)&#x00A0;a%get_fmt() write(*,*)&#x00A0;a%get_fmt()
</div> </div>
<!--l. 715--><p class="nopar" > <!--l. 717--><p class="nopar" >
<!--l. 717--><p class="indent" > <!--l. 719--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -341,7 +347,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 727--><p class="indent" > <!--l. 729--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -355,7 +361,7 @@ class="cmtt-10">NULL</span></span></span>, <span class="obeylines-h"><span class
class="cmtt-10">COO</span></span></span>, <span class="obeylines-h"><span class="verb"><span class="cmtt-10">COO</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">CSR</span></span></span> and <span class="obeylines-h"><span class="verb"><span class="cmtt-10">CSR</span></span></span> and <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">CSC</span></span></span>.</dd></dl> class="cmtt-10">CSC</span></span></span>.</dd></dl>
<!--l. 734--><p class="noindent" > <!--l. 736--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.8 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.8 </span> <a
id="x14-340003.2.8"></a>is_bld, is_upd, is_asb &#8212; Status check</h5> id="x14-340003.2.8"></a>is_bld, is_upd, is_asb &#8212; Status check</h5>
@ -366,8 +372,8 @@ if&#x00A0;(a%is_bld())&#x00A0;then
&#x00A0;<br />if&#x00A0;(a%is_upd())&#x00A0;then &#x00A0;<br />if&#x00A0;(a%is_upd())&#x00A0;then
&#x00A0;<br />if&#x00A0;(a%is_asb())&#x00A0;then &#x00A0;<br />if&#x00A0;(a%is_asb())&#x00A0;then
</div> </div>
<!--l. 741--><p class="nopar" > <!--l. 743--><p class="nopar" >
<!--l. 743--><p class="indent" > <!--l. 745--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -383,7 +389,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 753--><p class="indent" > <!--l. 755--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -394,7 +400,7 @@ class="cmbx-10">Function value</span> </dt><dd
class="description">A <span class="obeylines-h"><span class="verb"><span class="description">A <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">logical</span></span></span> value indicating whether the matrix is in the Build, class="cmtt-10">logical</span></span></span> value indicating whether the matrix is in the Build,
Update or Assembled state, respectively.</dd></dl> Update or Assembled state, respectively.</dd></dl>
<!--l. 760--><p class="noindent" > <!--l. 762--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.9 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.9 </span> <a
id="x14-350003.2.9"></a>is_lower, is_upper, is_triangle, is_unit &#8212; Format check</h5> id="x14-350003.2.9"></a>is_lower, is_upper, is_triangle, is_unit &#8212; Format check</h5>
@ -406,8 +412,8 @@ if&#x00A0;(a%is_triangle())&#x00A0;then
&#x00A0;<br />if&#x00A0;(a%is_lower())&#x00A0;then &#x00A0;<br />if&#x00A0;(a%is_lower())&#x00A0;then
&#x00A0;<br />if&#x00A0;(a%is_unit())&#x00A0;then &#x00A0;<br />if&#x00A0;(a%is_unit())&#x00A0;then
</div> </div>
<!--l. 768--><p class="nopar" > <!--l. 770--><p class="nopar" >
<!--l. 770--><p class="indent" > <!--l. 772--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -423,7 +429,7 @@ class="description">the sparse matrix<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 780--><p class="indent" > <!--l. 782--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -437,7 +443,7 @@ class="cmtt-10">logical</span></span></span> value indicating whether the matrix
class="cmtt-10">is_triangle()</span></span></span> returns <span class="obeylines-h"><span class="verb"><span class="cmtt-10">is_triangle()</span></span></span> returns <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">.true.</span></span></span> check also if it is lower, upper and with class="cmtt-10">.true.</span></span></span> check also if it is lower, upper and with
a unit (i.e. assumed) diagonal.</dd></dl> a unit (i.e. assumed) diagonal.</dd></dl>
<!--l. 789--><p class="noindent" > <!--l. 791--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.10 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.10 </span> <a
id="x14-360003.2.10"></a>cscnv &#8212; Convert to a different storage format</h5> id="x14-360003.2.10"></a>cscnv &#8212; Convert to a different storage format</h5>
@ -447,8 +453,8 @@ class="cmtt-10">.true.</span></span></span> check also if it is lower, upper and
call&#x00A0;&#x00A0;a%cscnv(b,info&#x00A0;[,&#x00A0;type,&#x00A0;mold,&#x00A0;dupl]) call&#x00A0;&#x00A0;a%cscnv(b,info&#x00A0;[,&#x00A0;type,&#x00A0;mold,&#x00A0;dupl])
&#x00A0;<br />call&#x00A0;&#x00A0;a%cscnv(info&#x00A0;[,&#x00A0;type,&#x00A0;mold,&#x00A0;dupl]) &#x00A0;<br />call&#x00A0;&#x00A0;a%cscnv(info&#x00A0;[,&#x00A0;type,&#x00A0;mold,&#x00A0;dupl])
</div> </div>
<!--l. 795--><p class="nopar" > <!--l. 797--><p class="nopar" >
<!--l. 797--><p class="indent" > <!--l. 799--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -482,7 +488,7 @@ class="newline" />Type: optional.
class="cmbx-10">dupl</span> </dt><dd class="cmbx-10">dupl</span> </dt><dd
class="description">an integer value specifing how to handle duplicates (see Named Constants class="description">an integer value specifing how to handle duplicates (see Named Constants
below)</dd></dl> below)</dd></dl>
<!--l. 811--><p class="indent" > <!--l. 813--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -498,10 +504,10 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 817--><p class="noindent" >The <span class="obeylines-h"><span class="verb"><span <!--l. 819--><p class="noindent" >The <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">mold</span></span></span> arguments may be employed to interface with special devices, such as GPUs class="cmtt-10">mold</span></span></span> arguments may be employed to interface with special devices, such as GPUs
and other accelerators. and other accelerators.
<!--l. 822--><p class="noindent" > <!--l. 824--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.11 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.11 </span> <a
id="x14-370003.2.11"></a>csclip &#8212; Reduce to a submatrix</h5> id="x14-370003.2.11"></a>csclip &#8212; Reduce to a submatrix</h5>
@ -511,8 +517,8 @@ and other accelerators.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%csclip(b,info[,&amp; &#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%csclip(b,info[,&amp;
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;imin,imax,jmin,jmax,rscale,cscale]) &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;imin,imax,jmin,jmax,rscale,cscale])
</div> </div>
<!--l. 827--><p class="nopar" > <!--l. 829--><p class="nopar" >
<!--l. 829--><p class="indent" > Returns the submatrix <span class="obeylines-h"><span class="verb"><span <!--l. 831--><p class="indent" > Returns the submatrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>, optionally rescaling row/col class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>, optionally rescaling row/col
indices to the range <span class="obeylines-h"><span class="verb"><span indices to the range <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span>. class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span>.
@ -542,7 +548,7 @@ class="newline" />Type: optional.
<span <span
class="cmbx-10">rscale,cscale</span> </dt><dd class="cmbx-10">rscale,cscale</span> </dt><dd
class="description">Whether to rescale row/column indices. Type: optional.</dd></dl> class="description">Whether to rescale row/column indices. Type: optional.</dd></dl>
<!--l. 843--><p class="noindent" > <!--l. 845--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -558,7 +564,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 850--><p class="noindent" > <!--l. 852--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.12 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.12 </span> <a
id="x14-380003.2.12"></a>clean_zeros &#8212; Eliminate zero coefficients</h5> id="x14-380003.2.12"></a>clean_zeros &#8212; Eliminate zero coefficients</h5>
@ -567,11 +573,11 @@ class="description">Return code.</dd></dl>
<div class="verbatim" id="verbatim-26"> <div class="verbatim" id="verbatim-26">
&#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%clean_zeros(info) &#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%clean_zeros(info)
</div> </div>
<!--l. 854--><p class="nopar" > <!--l. 856--><p class="nopar" >
<!--l. 856--><p class="indent" > Eliminates zero coefficients in the input matrix. Note that depending on the <!--l. 858--><p class="indent" > Eliminates zero coefficients in the input matrix. Note that depending on the
internal storage format, there may still be some amount of zero padding in the internal storage format, there may still be some amount of zero padding in the
output. output.
<!--l. 860--><p class="indent" > <!--l. 862--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -589,7 +595,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span>.<br class="cmbx-10">local</span>.<br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 867--><p class="noindent" > <!--l. 869--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -605,7 +611,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 874--><p class="noindent" > <!--l. 876--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.13 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.13 </span> <a
id="x14-390003.2.13"></a>get_diag &#8212; Get main diagonal</h5> id="x14-390003.2.13"></a>get_diag &#8212; Get main diagonal</h5>
@ -614,8 +620,8 @@ class="description">Return code.</dd></dl>
<div class="verbatim" id="verbatim-27"> <div class="verbatim" id="verbatim-27">
&#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%get_diag(d,info) &#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%get_diag(d,info)
</div> </div>
<!--l. 878--><p class="nopar" > <!--l. 880--><p class="nopar" >
<!--l. 880--><p class="indent" > Returns a copy of the main diagonal. <!--l. 882--><p class="indent" > Returns a copy of the main diagonal.
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -633,7 +639,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span>.<br class="cmbx-10">local</span>.<br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 888--><p class="noindent" > <!--l. 890--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -647,7 +653,7 @@ class="newline" />A one-dimensional array of the appropriate type.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 896--><p class="noindent" > <!--l. 898--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.14 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.14 </span> <a
id="x14-400003.2.14"></a>clip_diag &#8212; Cut out main diagonal</h5> id="x14-400003.2.14"></a>clip_diag &#8212; Cut out main diagonal</h5>
@ -656,8 +662,8 @@ class="description">Return code.</dd></dl>
<div class="verbatim" id="verbatim-28"> <div class="verbatim" id="verbatim-28">
&#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%clip_diag(b,info) &#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%clip_diag(b,info)
</div> </div>
<!--l. 900--><p class="nopar" > <!--l. 902--><p class="nopar" >
<!--l. 902--><p class="indent" > Returns a copy of <span class="obeylines-h"><span class="verb"><span <!--l. 904--><p class="indent" > Returns a copy of <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">a</span></span></span> without the main diagonal. class="cmtt-10">a</span></span></span> without the main diagonal.
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
@ -676,7 +682,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span>.<br class="cmbx-10">local</span>.<br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 910--><p class="noindent" > <!--l. 912--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -692,7 +698,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 918--><p class="noindent" > <!--l. 920--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.15 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.15 </span> <a
id="x14-410003.2.15"></a>tril &#8212; Return the lower triangle</h5> id="x14-410003.2.15"></a>tril &#8212; Return the lower triangle</h5>
@ -702,8 +708,8 @@ class="description">Return code.</dd></dl>
&#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%tril(l,info[,&amp; &#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%tril(l,info[,&amp;
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;diag,imin,imax,jmin,jmax,rscale,cscale,u]) &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;diag,imin,imax,jmin,jmax,rscale,cscale,u])
</div> </div>
<!--l. 923--><p class="nopar" > <!--l. 925--><p class="nopar" >
<!--l. 925--><p class="indent" > Returns the lower triangular part of submatrix <span class="obeylines-h"><span class="verb"><span <!--l. 927--><p class="indent" > Returns the lower triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>, class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>,
optionally rescaling row/col indices to the range <span class="obeylines-h"><span class="verb"><span optionally rescaling row/col indices to the range <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span> and class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span> and
@ -741,7 +747,7 @@ class="newline" />Type: optional.
<span <span
class="cmbx-10">rscale,cscale</span> </dt><dd class="cmbx-10">rscale,cscale</span> </dt><dd
class="description">Whether to rescale row/column indices. Type: optional.</dd></dl> class="description">Whether to rescale row/column indices. Type: optional.</dd></dl>
<!--l. 943--><p class="noindent" > <!--l. 945--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -764,7 +770,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 952--><p class="noindent" > <!--l. 954--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.16 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.16 </span> <a
id="x14-420003.2.16"></a>triu &#8212; Return the upper triangle</h5> id="x14-420003.2.16"></a>triu &#8212; Return the upper triangle</h5>
@ -774,8 +780,8 @@ class="description">Return code.</dd></dl>
&#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%triu(u,info[,&amp; &#x00A0;&#x00A0;&#x00A0;&#x00A0;call&#x00A0;a%triu(u,info[,&amp;
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;diag,imin,imax,jmin,jmax,rscale,cscale,l]) &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;diag,imin,imax,jmin,jmax,rscale,cscale,l])
</div> </div>
<!--l. 957--><p class="nopar" > <!--l. 959--><p class="nopar" >
<!--l. 959--><p class="indent" > Returns the upper triangular part of submatrix <span class="obeylines-h"><span class="verb"><span <!--l. 961--><p class="indent" > Returns the upper triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>, class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>,
optionally rescaling row/col indices to the range <span class="obeylines-h"><span class="verb"><span optionally rescaling row/col indices to the range <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span>, class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span>,
@ -813,7 +819,7 @@ class="newline" />Type: optional.
<span <span
class="cmbx-10">rscale,cscale</span> </dt><dd class="cmbx-10">rscale,cscale</span> </dt><dd
class="description">Whether to rescale row/column indices. Type: optional.</dd></dl> class="description">Whether to rescale row/column indices. Type: optional.</dd></dl>
<!--l. 977--><p class="noindent" > <!--l. 979--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -836,7 +842,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 989--><p class="noindent" > <!--l. 991--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.17 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.17 </span> <a
id="x14-430003.2.17"></a>psb_set_mat_default &#8212; Set default storage format</h5> id="x14-430003.2.17"></a>psb_set_mat_default &#8212; Set default storage format</h5>
@ -845,8 +851,8 @@ class="description">Return code.</dd></dl>
<div class="verbatim" id="verbatim-31"> <div class="verbatim" id="verbatim-31">
call&#x00A0;&#x00A0;psb_set_mat_default(a) call&#x00A0;&#x00A0;psb_set_mat_default(a)
</div> </div>
<!--l. 995--><p class="nopar" > <!--l. 997--><p class="nopar" >
<!--l. 997--><p class="indent" > <!--l. 999--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -862,7 +868,7 @@ class="description">a variable of <span class="obeylines-h"><span class="verb
class="cmtt-10">class(psb_T_base_sparse_mat)</span></span></span> requesting a new default class="cmtt-10">class(psb_T_base_sparse_mat)</span></span></span> requesting a new default
storage format.<br storage format.<br
class="newline" />Type: required.</dd></dl> class="newline" />Type: required.</dd></dl>
<!--l. 1009--><p class="noindent" > <!--l. 1011--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.18 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.18 </span> <a
id="x14-440003.2.18"></a>clone &#8212; Clone current object</h5> id="x14-440003.2.18"></a>clone &#8212; Clone current object</h5>
@ -871,8 +877,8 @@ class="newline" />Type: required.</dd></dl>
<div class="verbatim" id="verbatim-32"> <div class="verbatim" id="verbatim-32">
call&#x00A0;&#x00A0;a%clone(b,info) call&#x00A0;&#x00A0;a%clone(b,info)
</div> </div>
<!--l. 1014--><p class="nopar" > <!--l. 1016--><p class="nopar" >
<!--l. 1016--><p class="indent" > <!--l. 1018--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -888,7 +894,7 @@ class="description">the sparse matrix.<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span>.<br class="cmbx-10">local</span>.<br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 1026--><p class="indent" > <!--l. 1028--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -901,10 +907,10 @@ class="description">A copy of the input object.
<span <span
class="cmbx-10">info</span> </dt><dd class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl> class="description">Return code.</dd></dl>
<!--l. 1033--><p class="noindent" > <!--l. 1035--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.2.19 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.2.19 </span> <a
id="x14-450003.2.19"></a>Named Constants</h5> id="x14-450003.2.19"></a>Named Constants</h5>
<!--l. 1035--><p class="noindent" > <!--l. 1037--><p class="noindent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">psb</span><span class="cmbx-10">psb</span><span
@ -952,12 +958,12 @@ class="description">Update strategy based on additional permutation data (see
<!--l. 1051--><div class="crosslinks"><p class="noindent">[<a <!--l. 1053--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlse4.html" >next</a>] [<a href="userhtmlse4.html" >next</a>] [<a
href="userhtmlsu5.html" >prev</a>] [<a href="userhtmlsu5.html" >prev</a>] [<a
href="userhtmlsu5.html#tailuserhtmlsu5.html" >prev-tail</a>] [<a href="userhtmlsu5.html#tailuserhtmlsu5.html" >prev-tail</a>] [<a
href="userhtmlsu6.html" >front</a>] [<a href="userhtmlsu6.html" >front</a>] [<a
href="userhtmlsu7.html#userhtmlsu9.html" >up</a>] </p></div> href="userhtmlsu7.html#userhtmlsu9.html" >up</a>] </p></div>
<!--l. 1051--><p class="indent" > <a <!--l. 1053--><p class="indent" > <a
id="tailuserhtmlsu6.html"></a> id="tailuserhtmlsu6.html"></a>
</body></html> </body></html>

@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 1051--><div class="crosslinks"><p class="noindent">[<a <!--l. 1053--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu10.html" >next</a>] [<a href="userhtmlsu10.html" >next</a>] [<a
href="userhtmlsu6.html" >prev</a>] [<a href="userhtmlsu6.html" >prev</a>] [<a
href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a
@ -18,7 +18,7 @@ href="userhtmlse3.html#tailuserhtmlsu7.html">tail</a>] [<a
href="userhtmlsu7.html#userhtmlse4.html" >up</a>] </p></div> href="userhtmlsu7.html#userhtmlse4.html" >up</a>] </p></div>
<h4 class="subsectionHead"><span class="titlemark">3.3 </span> <a <h4 class="subsectionHead"><span class="titlemark">3.3 </span> <a
id="x15-460003.3"></a>Dense Vector Data Structure</h4> id="x15-460003.3"></a>Dense Vector Data Structure</h4>
<!--l. 1053--><p class="noindent" >The <a <!--l. 1055--><p class="noindent" >The <a
id="vdata"><span id="vdata"><span
class="cmtt-10">psb</span><span class="cmtt-10">psb</span><span
class="cmtt-10">_T</span><span class="cmtt-10">_T</span><span
@ -36,7 +36,7 @@ sec.&#x00A0;<a
href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>. Among other simple things, we define here an extraction method that href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>. Among other simple things, we define here an extraction method that
can be used to get a full copy of the part of the vector stored on the local can be used to get a full copy of the part of the vector stored on the local
process. process.
<!--l. 1063--><p class="indent" > The type declaration is shown in figure&#x00A0;<a <!--l. 1065--><p class="indent" > The type declaration is shown in figure&#x00A0;<a
href="#x15-460015">5<!--tex4ht:ref: fig:vectype --></a> where <span class="obeylines-h"><span class="verb"><span href="#x15-460015">5<!--tex4ht:ref: fig:vectype --></a> where <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">T</span></span></span> is a placeholder for the data class="cmtt-10">T</span></span></span> is a placeholder for the data
type and precision variants type and precision variants
@ -60,7 +60,7 @@ class="description">Single precision complex;
<span <span
class="cmbx-10">Z</span> </dt><dd class="cmbx-10">Z</span> </dt><dd
class="description">Double precision complex.</dd></dl> class="description">Double precision complex.</dd></dl>
<!--l. 1073--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span <!--l. 1075--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">v%v</span></span></span>; the separation between class="cmtt-10">v%v</span></span></span>; the separation between
the application and the actual data is essential for cases where it is necessary to link the application and the actual data is essential for cases where it is necessary to link
to data storage made available elsewhere outside the direct control of the to data storage made available elsewhere outside the direct control of the
@ -70,7 +70,7 @@ compiler/application, e.g. data stored in a graphics accelerator&#8217;s private
id="x15-460015"></a> id="x15-460015"></a>
<div class="center" <div class="center"
> >
<!--l. 1081--><p class="noindent" > <!--l. 1083--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-33"> <div class="minipage"><div class="verbatim" id="verbatim-33">
&#x00A0;&#x00A0;type&#x00A0;psb_T_base_vect_type &#x00A0;&#x00A0;type&#x00A0;psb_T_base_vect_type
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;TYPE(KIND_),&#x00A0;allocatable&#x00A0;::&#x00A0;v(:) &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;TYPE(KIND_),&#x00A0;allocatable&#x00A0;::&#x00A0;v(:)
@ -81,18 +81,18 @@ compiler/application, e.g. data stored in a graphics accelerator&#8217;s private
&#x00A0;<br />&#x00A0;&#x00A0;end&#x00A0;type&#x00A0;&#x00A0;psb_T_vect_type &#x00A0;<br />&#x00A0;&#x00A0;end&#x00A0;type&#x00A0;&#x00A0;psb_T_vect_type
&#x00A0;<br /> &#x00A0;<br />
</div> </div>
<!--l. 1092--><p class="nopar" ></div></div> <!--l. 1094--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Figure&#x00A0;5: </span><span ><span class="id">Figure&#x00A0;5: </span><span
class="content"> The PSBLAS defined data type that contains a dense vector.</span></div><!--tex4ht:label?: x15-460015 --> class="content"> The PSBLAS defined data type that contains a dense vector.</span></div><!--tex4ht:label?: x15-460015 -->
<!--l. 1103--><p class="indent" > </div><hr class="endfigure"> <!--l. 1105--><p class="indent" > </div><hr class="endfigure">
<!--l. 1105--><p class="noindent" > <!--l. 1107--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.3.1 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.3.1 </span> <a
id="x15-470003.3.1"></a>Vector Methods</h5> id="x15-470003.3.1"></a>Vector Methods</h5>
<!--l. 1106--><p class="noindent" > <!--l. 1108--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.3.2 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.3.2 </span> <a
id="x15-480003.3.2"></a>get_nrows &#8212; Get number of rows in a dense vector</h5> id="x15-480003.3.2"></a>get_nrows &#8212; Get number of rows in a dense vector</h5>
@ -101,8 +101,8 @@ class="content"> The PSBLAS defined data type that contains a dense vector.</spa
<div class="verbatim" id="verbatim-34"> <div class="verbatim" id="verbatim-34">
nr&#x00A0;=&#x00A0;v%get_nrows() nr&#x00A0;=&#x00A0;v%get_nrows()
</div> </div>
<!--l. 1111--><p class="nopar" > <!--l. 1113--><p class="nopar" >
<!--l. 1113--><p class="indent" > <!--l. 1115--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -118,7 +118,7 @@ class="description">the dense vector<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 1123--><p class="indent" > <!--l. 1125--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -128,7 +128,7 @@ class="description">
class="cmbx-10">Function value</span> </dt><dd class="cmbx-10">Function value</span> </dt><dd
class="description">The number of rows of dense vector <span class="obeylines-h"><span class="verb"><span class="description">The number of rows of dense vector <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">v</span></span></span>.</dd></dl> class="cmtt-10">v</span></span></span>.</dd></dl>
<!--l. 1130--><p class="noindent" > <!--l. 1132--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.3.3 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.3.3 </span> <a
id="x15-490003.3.3"></a>sizeof &#8212; Get memory occupation in bytes of a dense vector</h5> id="x15-490003.3.3"></a>sizeof &#8212; Get memory occupation in bytes of a dense vector</h5>
@ -137,8 +137,8 @@ class="cmtt-10">v</span></span></span>.</dd></dl>
<div class="verbatim" id="verbatim-35"> <div class="verbatim" id="verbatim-35">
memory_size&#x00A0;=&#x00A0;v%sizeof() memory_size&#x00A0;=&#x00A0;v%sizeof()
</div> </div>
<!--l. 1135--><p class="nopar" > <!--l. 1137--><p class="nopar" >
<!--l. 1137--><p class="indent" > <!--l. 1139--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -154,7 +154,7 @@ class="description">the dense vector<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span><br class="cmbx-10">local</span><br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 1147--><p class="indent" > <!--l. 1149--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -163,7 +163,7 @@ class="description">
<span <span
class="cmbx-10">Function value</span> </dt><dd class="cmbx-10">Function value</span> </dt><dd
class="description">The memory occupation in bytes.</dd></dl> class="description">The memory occupation in bytes.</dd></dl>
<!--l. 1153--><p class="noindent" > <!--l. 1155--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.3.4 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.3.4 </span> <a
id="x15-500003.3.4"></a>set &#8212; Set contents of the vector</h5> id="x15-500003.3.4"></a>set &#8212; Set contents of the vector</h5>
@ -174,8 +174,8 @@ class="description">The memory occupation in bytes.</dd></dl>
&#x00A0;<br />&#x00A0;call&#x00A0;&#x00A0;v%set(vect[,first,last]) &#x00A0;<br />&#x00A0;call&#x00A0;&#x00A0;v%set(vect[,first,last])
&#x00A0;<br />&#x00A0;call&#x00A0;&#x00A0;v%zero() &#x00A0;<br />&#x00A0;call&#x00A0;&#x00A0;v%zero()
</div> </div>
<!--l. 1160--><p class="nopar" > <!--l. 1162--><p class="nopar" >
<!--l. 1162--><p class="indent" > <!--l. 1164--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -226,13 +226,13 @@ class="newline" />Intent: <span
class="cmbx-10">in</span>.<br class="cmbx-10">in</span>.<br
class="newline" />Specified as: a number of the data type indicated in Table&#x00A0;<a class="newline" />Specified as: a number of the data type indicated in Table&#x00A0;<a
href="userhtmlsu10.html#x19-560011">1<!--tex4ht:ref: tab:f90axpby --></a>.</dd></dl> href="userhtmlsu10.html#x19-560011">1<!--tex4ht:ref: tab:f90axpby --></a>.</dd></dl>
<!--l. 1181--><p class="noindent" >Note that a call to <span class="obeylines-h"><span class="verb"><span <!--l. 1183--><p class="noindent" >Note that a call to <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">v%zero()</span></span></span> is provided as a shorthand, but is equivalent to a call class="cmtt-10">v%zero()</span></span></span> is provided as a shorthand, but is equivalent to a call
to <span class="obeylines-h"><span class="verb"><span to <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">v%set(zero)</span></span></span> with the <span class="obeylines-h"><span class="verb"><span class="cmtt-10">v%set(zero)</span></span></span> with the <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">zero</span></span></span> constant having the appropriate type and class="cmtt-10">zero</span></span></span> constant having the appropriate type and
kind. kind.
<!--l. 1185--><p class="indent" > <!--l. 1187--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -247,7 +247,7 @@ class="newline" /></dd></dl>
<!--l. 1191--><p class="noindent" > <!--l. 1193--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.3.5 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.3.5 </span> <a
id="x15-510003.3.5"></a>get_vect &#8212; Get a copy of the vector contents</h5> id="x15-510003.3.5"></a>get_vect &#8212; Get a copy of the vector contents</h5>
@ -256,8 +256,8 @@ class="newline" /></dd></dl>
<div class="verbatim" id="verbatim-37"> <div class="verbatim" id="verbatim-37">
extv&#x00A0;=&#x00A0;v%get_vect([n]) extv&#x00A0;=&#x00A0;v%get_vect([n])
</div> </div>
<!--l. 1196--><p class="nopar" > <!--l. 1198--><p class="nopar" >
<!--l. 1198--><p class="indent" > <!--l. 1200--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -283,7 +283,7 @@ class="newline" />Type: <span
class="cmbx-10">optional</span>; default: entire vector.<br class="cmbx-10">optional</span>; default: entire vector.<br
class="newline" /> class="newline" />
</dd></dl> </dd></dl>
<!--l. 1212--><p class="indent" > <!--l. 1214--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -299,7 +299,7 @@ class="cmmi-10">n </span>and the internal size of the vector, or 0 if
<span <span
class="cmmi-10">n </span>is negative; otherwise, the size of the array is the same as the internal class="cmmi-10">n </span>is negative; otherwise, the size of the array is the same as the internal
size of the vector.</dd></dl> size of the vector.</dd></dl>
<!--l. 1221--><p class="noindent" > <!--l. 1223--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.3.6 </span> <a <h5 class="subsubsectionHead"><span class="titlemark">3.3.6 </span> <a
id="x15-520003.3.6"></a>clone &#8212; Clone current object</h5> id="x15-520003.3.6"></a>clone &#8212; Clone current object</h5>
@ -308,8 +308,8 @@ class="cmmi-10">n </span>is negative; otherwise, the size of the array is the sa
<div class="verbatim" id="verbatim-38"> <div class="verbatim" id="verbatim-38">
call&#x00A0;&#x00A0;x%clone(y,info) call&#x00A0;&#x00A0;x%clone(y,info)
</div> </div>
<!--l. 1225--><p class="nopar" > <!--l. 1227--><p class="nopar" >
<!--l. 1227--><p class="indent" > <!--l. 1229--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -325,7 +325,7 @@ class="description">the dense vector.<br
class="newline" />Scope: <span class="newline" />Scope: <span
class="cmbx-10">local</span>.<br class="cmbx-10">local</span>.<br
class="newline" /></dd></dl> class="newline" /></dd></dl>
<!--l. 1237--><p class="indent" > <!--l. 1239--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -341,12 +341,12 @@ class="description">Return code.</dd></dl>
<!--l. 1244--><div class="crosslinks"><p class="noindent">[<a <!--l. 1246--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu10.html" >next</a>] [<a href="userhtmlsu10.html" >next</a>] [<a
href="userhtmlsu6.html" >prev</a>] [<a href="userhtmlsu6.html" >prev</a>] [<a
href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a
href="userhtmlsu7.html" >front</a>] [<a href="userhtmlsu7.html" >front</a>] [<a
href="userhtmlsu7.html#userhtmlse4.html" >up</a>] </p></div> href="userhtmlsu7.html#userhtmlse4.html" >up</a>] </p></div>
<!--l. 1244--><p class="indent" > <a <!--l. 1246--><p class="indent" > <a
id="tailuserhtmlsu7.html"></a> id="tailuserhtmlsu7.html"></a>
</body></html> </body></html>

@ -19,7 +19,21 @@ href="userhtmlsu76.html#userhtmlsu77.html" >up</a>] </p></div>
<!--l. 126--> <!--l. 126-->
<div class="lstlisting" id="listing-10"><span class="label"><a <div class="lstlisting" id="listing-10"><span class="label"><a
id="x87-124001r1"></a></span><span id="x87-124001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_errpush(err_c,&#x00A0;r_name,&#x00A0;i_err,&#x00A0;a_err) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_errpush</span><span
class="cmtt-10">(</span><span
class="cmtt-10">err_c</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">r_name</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">i_err</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">a_err</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 130--><p class="indent" > <!--l. 130--><p class="indent" >

@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlse9.html" >up</a>] </p></div>
<!--l. 156--> <!--l. 156-->
<div class="lstlisting" id="listing-11"><span class="label"><a <div class="lstlisting" id="listing-11"><span class="label"><a
id="x88-125001r1"></a></span><span id="x88-125001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_error(icontxt) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_error</span><span
class="cmtt-10">(</span><span
class="cmtt-10">icontxt</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 160--><p class="indent" > <!--l. 160--><p class="indent" >

@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlsu78.html" >up</a>] </p></div>
<!--l. 176--> <!--l. 176-->
<div class="lstlisting" id="listing-12"><span class="label"><a <div class="lstlisting" id="listing-12"><span class="label"><a
id="x89-126001r1"></a></span><span id="x89-126001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_set_errverbosity(v) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_set_errverbosity</span><span
class="cmtt-10">(</span><span
class="cmtt-10">v</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 180--><p class="indent" > <!--l. 180--><p class="indent" >

@ -21,7 +21,12 @@ condition</h4>
<!--l. 193--> <!--l. 193-->
<div class="lstlisting" id="listing-13"><span class="label"><a <div class="lstlisting" id="listing-13"><span class="label"><a
id="x90-127001r1"></a></span><span id="x90-127001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_set_erraction(err_act) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">psb_set_erraction</span><span
class="cmtt-10">(</span><span
class="cmtt-10">err_act</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 197--><p class="indent" > <!--l. 197--><p class="indent" >

@ -21,7 +21,27 @@ format</h4>
<!--l. 16--> <!--l. 16-->
<div class="lstlisting" id="listing-14"><span class="label"><a <div class="lstlisting" id="listing-14"><span class="label"><a
id="x92-129001r1"></a></span><span id="x92-129001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;hb_read(a,&#x00A0;iret,&#x00A0;iunit,&#x00A0;filename,&#x00A0;b,&#x00A0;mtitle) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">hb_read</span><span
class="cmtt-10">(</span><span
class="cmtt-10">a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iret</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iunit</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">filename</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">b</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mtitle</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 20--><p class="indent" > <!--l. 20--><p class="indent" >

@ -22,7 +22,30 @@ format</h4>
<!--l. 59--> <!--l. 59-->
<div class="lstlisting" id="listing-15"><span class="label"><a <div class="lstlisting" id="listing-15"><span class="label"><a
id="x93-130001r1"></a></span><span id="x93-130001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;hb_write(a,&#x00A0;iret,&#x00A0;iunit,&#x00A0;filename,&#x00A0;key,&#x00A0;rhs,&#x00A0;mtitle) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">hb_write</span><span
class="cmtt-10">(</span><span
class="cmtt-10">a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iret</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iunit</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">filename</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">key</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">rhs</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mtitle</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 65--><p class="indent" > <!--l. 65--><p class="indent" >

@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 1244--><div class="crosslinks"><p class="noindent">[<a <!--l. 1246--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu11.html" >next</a>] [<a href="userhtmlsu11.html" >next</a>] [<a
href="userhtmlsu7.html" >prev</a>] [<a href="userhtmlsu7.html" >prev</a>] [<a
href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a
@ -18,9 +18,9 @@ href="userhtmlsu5.html#tailuserhtmlsu8.html">tail</a>] [<a
href="userhtmlsu7.html#userhtmlsu10.html" >up</a>] </p></div> href="userhtmlsu7.html#userhtmlsu10.html" >up</a>] </p></div>
<h4 class="subsectionHead"><span class="titlemark">3.4 </span> <a <h4 class="subsectionHead"><span class="titlemark">3.4 </span> <a
id="x16-530003.4"></a>Preconditioner data structure</h4> id="x16-530003.4"></a>Preconditioner data structure</h4>
<!--l. 1246--><p class="noindent" >Our base library offers support for simple well known preconditioners like Diagonal <!--l. 1248--><p class="noindent" >Our base library offers support for simple well known preconditioners like Diagonal
Scaling or Block Jacobi with incomplete factorization ILU(0). Scaling or Block Jacobi with incomplete factorization ILU(0).
<!--l. 1250--><p class="indent" > A preconditioner is held in the <a <!--l. 1252--><p class="indent" > A preconditioner is held in the <a
id="precdata"><span id="precdata"><span
class="cmtt-10">psb</span><span class="cmtt-10">psb</span><span
class="cmtt-10">_prec</span><span class="cmtt-10">_prec</span><span
@ -42,30 +42,30 @@ preconditioner. <hr class="figure"><div class="figure"
<div class="center" <div class="center"
> >
<!--l. 1271--><p class="noindent" > <!--l. 1273--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-39"> <div class="minipage"><div class="verbatim" id="verbatim-39">
&#x00A0;<br />&#x00A0;&#x00A0;type&#x00A0;psb_Tprec_type &#x00A0;<br />&#x00A0;&#x00A0;type&#x00A0;psb_Tprec_type
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;class(psb_T_base_prec_type),&#x00A0;allocatable&#x00A0;::&#x00A0;prec &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;class(psb_T_base_prec_type),&#x00A0;allocatable&#x00A0;::&#x00A0;prec
&#x00A0;<br />&#x00A0;&#x00A0;end&#x00A0;type&#x00A0;psb_Tprec_type &#x00A0;<br />&#x00A0;&#x00A0;end&#x00A0;type&#x00A0;psb_Tprec_type
&#x00A0;<br /> &#x00A0;<br />
</div> </div>
<!--l. 1279--><p class="nopar" ></div></div> <!--l. 1281--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Figure&#x00A0;6: </span><span ><span class="id">Figure&#x00A0;6: </span><span
class="content">The PSBLAS defined data type that contains a preconditioner.</span></div><!--tex4ht:label?: x16-530016 --> class="content">The PSBLAS defined data type that contains a preconditioner.</span></div><!--tex4ht:label?: x16-530016 -->
<!--l. 1288--><p class="indent" > </div><hr class="endfigure"> <!--l. 1290--><p class="indent" > </div><hr class="endfigure">
<!--l. 1312--><div class="crosslinks"><p class="noindent">[<a <!--l. 1314--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu11.html" >next</a>] [<a href="userhtmlsu11.html" >next</a>] [<a
href="userhtmlsu7.html" >prev</a>] [<a href="userhtmlsu7.html" >prev</a>] [<a
href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a
href="userhtmlsu8.html" >front</a>] [<a href="userhtmlsu8.html" >front</a>] [<a
href="userhtmlsu7.html#userhtmlsu10.html" >up</a>] </p></div> href="userhtmlsu7.html#userhtmlsu10.html" >up</a>] </p></div>
<!--l. 1312--><p class="indent" > <a <!--l. 1314--><p class="indent" > <a
id="tailuserhtmlsu8.html"></a> id="tailuserhtmlsu8.html"></a>
</body></html> </body></html>

@ -23,7 +23,21 @@ format</h4>
<!--l. 111--> <!--l. 111-->
<div class="lstlisting" id="listing-16"><span class="label"><a <div class="lstlisting" id="listing-16"><span class="label"><a
id="x94-131001r1"></a></span><span id="x94-131001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;mm_mat_read(a,&#x00A0;iret,&#x00A0;iunit,&#x00A0;filename) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mm_mat_read</span><span
class="cmtt-10">(</span><span
class="cmtt-10">a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iret</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iunit</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">filename</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 115--><p class="indent" > <!--l. 115--><p class="indent" >

@ -23,7 +23,21 @@ format</h4>
<!--l. 142--> <!--l. 142-->
<div class="lstlisting" id="listing-17"><span class="label"><a <div class="lstlisting" id="listing-17"><span class="label"><a
id="x95-132001r1"></a></span><span id="x95-132001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;mm_array_read(b,&#x00A0;iret,&#x00A0;iunit,&#x00A0;filename) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mm_array_read</span><span
class="cmtt-10">(</span><span
class="cmtt-10">b</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iret</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iunit</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">filename</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 146--><p class="indent" > <!--l. 146--><p class="indent" >
@ -66,9 +80,16 @@ class="description">Rigth hand side(s).<br
class="newline" />Type: <span class="newline" />Type: <span
class="cmbx-10">required </span><br class="cmbx-10">required </span><br
class="newline" />An array of type real or complex, rank 1 or 2 and having the class="newline" />An array of type real or complex, rank 1 or 2 and having the
ALLOCATABLE attribute; will be allocated and filled in if the input file ALLOCATABLE attribute, or an object of type <a
contains a right hand side, otherwise will be left in the UNALLOCATED href="userhtmlsu7.html#vdata"><span
state. class="cmtt-10">psb</span><span
class="cmtt-10">_T</span><span
class="cmtt-10">_vect</span><span
class="cmtt-10">_type</span></a>, of
type real or complex.<br
class="newline" />Will be allocated and filled in if the input file contains a right hand side,
otherwise will be left in the UNALLOCATED state. <br
class="newline" />
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmbx-10">iret</span> </dt><dd class="cmbx-10">iret</span> </dt><dd
@ -82,12 +103,12 @@ class="newline" />An integer value; 0 means no error has been detected.</dd></dl
<!--l. 173--><div class="crosslinks"><p class="noindent">[<a <!--l. 175--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu84.html" >next</a>] [<a href="userhtmlsu84.html" >next</a>] [<a
href="userhtmlsu80.html" >prev</a>] [<a href="userhtmlsu80.html" >prev</a>] [<a
href="userhtmlsu80.html#tailuserhtmlsu80.html" >prev-tail</a>] [<a href="userhtmlsu80.html#tailuserhtmlsu80.html" >prev-tail</a>] [<a
href="userhtmlsu81.html" >front</a>] [<a href="userhtmlsu81.html" >front</a>] [<a
href="userhtmlsu80.html#userhtmlse10.html" >up</a>] </p></div> href="userhtmlsu80.html#userhtmlse10.html" >up</a>] </p></div>
<!--l. 173--><p class="indent" > <a <!--l. 175--><p class="indent" > <a
id="tailuserhtmlsu81.html"></a> id="tailuserhtmlsu81.html"></a>
</body></html> </body></html>

@ -11,7 +11,7 @@ format</title>
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 174--><div class="crosslinks"><p class="noindent">[<a <!--l. 176--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu85.html" >next</a>] [<a href="userhtmlsu85.html" >next</a>] [<a
href="userhtmlsu81.html" >prev</a>] [<a href="userhtmlsu81.html" >prev</a>] [<a
href="userhtmlsu81.html#tailuserhtmlsu81.html" >prev-tail</a>] [<a href="userhtmlsu81.html#tailuserhtmlsu81.html" >prev-tail</a>] [<a
@ -20,13 +20,30 @@ href="userhtmlsu80.html#userhtmlsu84.html" >up</a>] </p></div>
<h4 class="subsectionHead"><span class="titlemark">9.5 </span> <a <h4 class="subsectionHead"><span class="titlemark">9.5 </span> <a
id="x96-1330009.5"></a>mm_mat_write &#8212; Write a sparse matrix to a file in the MatrixMarket id="x96-1330009.5"></a>mm_mat_write &#8212; Write a sparse matrix to a file in the MatrixMarket
format</h4> format</h4>
<!--l. 177--> <!--l. 179-->
<div class="lstlisting" id="listing-18"><span class="label"><a <div class="lstlisting" id="listing-18"><span class="label"><a
id="x96-133001r1"></a></span><span id="x96-133001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;mm_mat_write(a,&#x00A0;mtitle,&#x00A0;iret,&#x00A0;iunit,&#x00A0;filename) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mm_mat_write</span><span
class="cmtt-10">(</span><span
class="cmtt-10">a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mtitle</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iret</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iunit</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">filename</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 180--><p class="indent" > <!--l. 182--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -73,7 +90,7 @@ class="newline" />Type:<span
class="cmbx-10">optional</span>.<br class="cmbx-10">optional</span>.<br
class="newline" />Specified as: an integer value. Only meaningful if filename is not <span class="obeylines-h"><span class="verb"><span class="newline" />Specified as: an integer value. Only meaningful if filename is not <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">-</span></span></span>.</dd></dl> class="cmtt-10">-</span></span></span>.</dd></dl>
<!--l. 200--><p class="indent" > <!--l. 202--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
@ -94,12 +111,12 @@ class="newline" />An integer value; 0 means no error has been detected.</dd></dl
<!--l. 208--><div class="crosslinks"><p class="noindent">[<a <!--l. 210--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu85.html" >next</a>] [<a href="userhtmlsu85.html" >next</a>] [<a
href="userhtmlsu81.html" >prev</a>] [<a href="userhtmlsu81.html" >prev</a>] [<a
href="userhtmlsu81.html#tailuserhtmlsu81.html" >prev-tail</a>] [<a href="userhtmlsu81.html#tailuserhtmlsu81.html" >prev-tail</a>] [<a
href="userhtmlsu82.html" >front</a>] [<a href="userhtmlsu82.html" >front</a>] [<a
href="userhtmlsu80.html#userhtmlsu84.html" >up</a>] </p></div> href="userhtmlsu80.html#userhtmlsu84.html" >up</a>] </p></div>
<!--l. 208--><p class="indent" > <a <!--l. 210--><p class="indent" > <a
id="tailuserhtmlsu82.html"></a> id="tailuserhtmlsu82.html"></a>
</body></html> </body></html>

@ -11,7 +11,7 @@ format</title>
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 209--><div class="crosslinks"><p class="noindent">[<a <!--l. 211--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu82.html" >prev</a>] [<a href="userhtmlsu82.html" >prev</a>] [<a
href="userhtmlsu82.html#tailuserhtmlsu82.html" >prev-tail</a>] [<a href="userhtmlsu82.html#tailuserhtmlsu82.html" >prev-tail</a>] [<a
href="userhtmlsu80.html#tailuserhtmlsu83.html">tail</a>] [<a href="userhtmlsu80.html#tailuserhtmlsu83.html">tail</a>] [<a
@ -19,13 +19,30 @@ href="userhtmlsu80.html#userhtmlsu85.html" >up</a>] </p></div>
<h4 class="subsectionHead"><span class="titlemark">9.6 </span> <a <h4 class="subsectionHead"><span class="titlemark">9.6 </span> <a
id="x97-1340009.6"></a>mm_array_write &#8212; Write a dense array from a file in the MatrixMarket id="x97-1340009.6"></a>mm_array_write &#8212; Write a dense array from a file in the MatrixMarket
format</h4> format</h4>
<!--l. 211--> <!--l. 213-->
<div class="lstlisting" id="listing-19"><span class="label"><a <div class="lstlisting" id="listing-19"><span class="label"><a
id="x97-134001r1"></a></span><span id="x97-134001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;mm_array_write(b,&#x00A0;iret,&#x00A0;iunit,&#x00A0;filename) class="cmtt-10">call</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">mm_array_write</span><span
class="cmtt-10">(</span><span
class="cmtt-10">b</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">vtitle</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iret</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">iunit</span><span
class="cmtt-10">,</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">filename</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 215--><p class="indent" > <!--l. 217--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">Type:</span> </dt><dd class="cmbx-10">Type:</span> </dt><dd
@ -40,12 +57,28 @@ class="cmbx-10">b</span> </dt><dd
class="description">Rigth hand side(s).<br class="description">Rigth hand side(s).<br
class="newline" />Type: <span class="newline" />Type: <span
class="cmbx-10">required </span><br class="cmbx-10">required </span><br
class="newline" />An array of type real or complex, rank 1 or 2; will be written..&#x00A0; class="newline" />An array of type real or complex, rank 1 or 2, or an object of type
<a
href="userhtmlsu7.html#vdata"><span
class="cmtt-10">psb</span><span
class="cmtt-10">_T</span><span
class="cmtt-10">_vect</span><span
class="cmtt-10">_type</span></a>, of type real or complex; its contents will be written to
disk.<br
class="newline" />
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmbx-10">filename</span> </dt><dd class="cmbx-10">filename</span> </dt><dd
class="description">The name of the file to be written.<br class="description">The name of the file to be written.<br
class="newline" />Type:<span class="newline" />
</dd><dt class="description">
<span
class="cmbx-10">vtitle</span> </dt><dd
class="description">Matrix title.<br
class="newline" />Type: <span
class="cmbx-10">required </span><br
class="newline" />A charachter variable holding a descriptive title for the vector to be written
to file. Type:<span
class="cmbx-10">optional</span>.<br class="cmbx-10">optional</span>.<br
class="newline" />Specified as: a character variable containing a valid file name, or <span class="obeylines-h"><span class="verb"><span class="newline" />Specified as: a character variable containing a valid file name, or <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">-</span></span></span>, in class="cmtt-10">-</span></span></span>, in
@ -60,11 +93,14 @@ class="newline" />Type:<span
class="cmbx-10">optional</span>.<br class="cmbx-10">optional</span>.<br
class="newline" />Specified as: an integer value. Only meaningful if filename is not <span class="obeylines-h"><span class="verb"><span class="newline" />Specified as: an integer value. Only meaningful if filename is not <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">-</span></span></span>.</dd></dl> class="cmtt-10">-</span></span></span>.</dd></dl>
<!--l. 231--><p class="indent" > <!--l. 239--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">On Return</span> </dt><dd class="cmbx-10">On Return</span> </dt><dd
class="description"> class="description">
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmbx-10">iret</span> </dt><dd class="cmbx-10">iret</span> </dt><dd

@ -10,14 +10,14 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 1312--><div class="crosslinks"><p class="noindent">[<a <!--l. 1314--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu8.html" >prev</a>] [<a href="userhtmlsu8.html" >prev</a>] [<a
href="userhtmlsu8.html#tailuserhtmlsu8.html" >prev-tail</a>] [<a href="userhtmlsu8.html#tailuserhtmlsu8.html" >prev-tail</a>] [<a
href="userhtmlsu6.html#tailuserhtmlsu9.html">tail</a>] [<a href="userhtmlsu6.html#tailuserhtmlsu9.html">tail</a>] [<a
href="userhtmlsu7.html#userhtmlsu11.html" >up</a>] </p></div> href="userhtmlsu7.html#userhtmlsu11.html" >up</a>] </p></div>
<h4 class="subsectionHead"><span class="titlemark">3.5 </span> <a <h4 class="subsectionHead"><span class="titlemark">3.5 </span> <a
id="x17-540003.5"></a>Heap data structure</h4> id="x17-540003.5"></a>Heap data structure</h4>
<!--l. 1314--><p class="noindent" >Among the tools routines of sec.&#x00A0;<a <!--l. 1316--><p class="noindent" >Among the tools routines of sec.&#x00A0;<a
href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>, we have a number of sorting utilities; the heap href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>, we have a number of sorting utilities; the heap
sort is implemented in terms of heaps having the following signatures: sort is implemented in terms of heaps having the following signatures:
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
@ -36,7 +36,7 @@ class="cmtt-10">_idx</span><span
class="cmtt-10">_heap</span> </dt><dd class="cmtt-10">_heap</span> </dt><dd
class="description">: a heap containing elements of type T, as above, together class="description">: a heap containing elements of type T, as above, together
with an integer index.</dd></dl> with an integer index.</dd></dl>
<!--l. 1323--><p class="noindent" >Given a heap object, the following methods are defined on it: <!--l. 1325--><p class="noindent" >Given a heap object, the following methods are defined on it:
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-10">init</span> </dt><dd class="cmbx-10">init</span> </dt><dd
@ -62,7 +62,7 @@ class="description">Print on file;
<span <span
class="cmbx-10">free</span> </dt><dd class="cmbx-10">free</span> </dt><dd
class="description">Release memory.</dd></dl> class="description">Release memory.</dd></dl>
<!--l. 1333--><p class="noindent" >These objects are used in MLD2P4 to implement the factorization algorithms. <!--l. 1335--><p class="noindent" >These objects are used in MLD2P4 to implement the factorization algorithms.

@ -63,9 +63,48 @@ iteration.
<!--l. 37--> <!--l. 37-->
<div class="lstlisting" id="listing-20"><span class="label"><a <div class="lstlisting" id="listing-20"><span class="label"><a
id="x107-143001r1"></a></span><span id="x107-143001r1"></a></span><span
class="cmbx-10">call</span>&#x00A0;psb_krylov(method,a,prec,b,x,eps,desc_a,info,&amp;&#x00A0;<br /><span class="label"><a class="cmtt-10">call</span><span
id="x107-143002r2"></a></span>&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;itmax,iter,<span class="cmtt-10">&#x00A0;</span><span
class="cmbx-10">err</span>,itrace,irst,istop,cond) class="cmtt-10">psb_krylov</span><span
class="cmtt-10">(</span><span
class="cmtt-10">method</span><span
class="cmtt-10">,</span><span
class="cmtt-10">a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">prec</span><span
class="cmtt-10">,</span><span
class="cmtt-10">b</span><span
class="cmtt-10">,</span><span
class="cmtt-10">x</span><span
class="cmtt-10">,</span><span
class="cmtt-10">eps</span><span
class="cmtt-10">,</span><span
class="cmtt-10">desc_a</span><span
class="cmtt-10">,</span><span
class="cmtt-10">info</span><span
class="cmtt-10">,&amp;</span><span
class="cmtt-10">&#x00A0;</span><br /><span class="label"><a
id="x107-143002r2"></a></span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">&amp;</span><span
class="cmtt-10">&#x00A0;</span><span
class="cmtt-10">itmax</span><span
class="cmtt-10">,</span><span
class="cmtt-10">iter</span><span
class="cmtt-10">,</span><span
class="cmtt-10">err</span><span
class="cmtt-10">,</span><span
class="cmtt-10">itrace</span><span
class="cmtt-10">,</span><span
class="cmtt-10">irst</span><span
class="cmtt-10">,</span><span
class="cmtt-10">istop</span><span
class="cmtt-10">,</span><span
class="cmtt-10">cond</span><span
class="cmtt-10">)</span>
</div> </div>
<!--l. 42--><p class="indent" > <!--l. 42--><p class="indent" >
@ -349,10 +388,6 @@ class="newline" />An integer value; 0 means no error has been detected.</dd></dl
<!--l. 110--><p class="indent" >
<!--l. 2--><div class="crosslinks"><p class="noindent">[<a <!--l. 2--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu90.html" >front</a>] [<a href="userhtmlsu90.html" >front</a>] [<a
href="# " >up</a>] </p></div> href="# " >up</a>] </p></div>

File diff suppressed because it is too large Load Diff

@ -530,7 +530,9 @@ data type and precision variants
\item[S] Single precision real; \item[S] Single precision real;
\item[D] Double precision real; \item[D] Double precision real;
\item[C] Single precision complex; \item[C] Single precision complex;
\item[Z] Double precision complex. \item[Z] Double precision complex;
\item[LS,LD,LC,LZ] Same numeric type as above, but with
\verb|psb_lpk_| integer indices.
\end{description} \end{description}
The actual data is contained in the polymorphic component \verb|a%a| The actual data is contained in the polymorphic component \verb|a%a|
of type \hypertarget{spbasedata}{{\tt psb\_T\_base\_sparse\_mat}}; its of type \hypertarget{spbasedata}{{\tt psb\_T\_base\_sparse\_mat}}; its

@ -1 +0,0 @@
tmp/userguide.pdf

@ -161,8 +161,10 @@ Specified as: an integer value. Only meaningful if filename is not \verb|-|.
\item[b] Rigth hand side(s).\\ \item[b] Rigth hand side(s).\\
Type: {\bf required} \\ Type: {\bf required} \\
An array of type real or complex, rank 1 or 2 and having the ALLOCATABLE An array of type real or complex, rank 1 or 2 and having the ALLOCATABLE
attribute; will be allocated and filled in if the input file contains attribute, or an
a right hand side, otherwise will be left in the UNALLOCATED state. object of type \vdata, of type real or complex.\\
Will be allocated and filled in if the input file contains
a right hand side, otherwise will be left in the UNALLOCATED state. \\
\item[iret] Error code.\\ \item[iret] Error code.\\
Type: {\bf required} \\ Type: {\bf required} \\
An integer value; 0 means no error has been detected. An integer value; 0 means no error has been detected.
@ -209,7 +211,7 @@ An integer value; 0 means no error has been detected.
file in the MatrixMarket format} file in the MatrixMarket format}
\begin{lstlisting} \begin{lstlisting}
call mm_array_write(b, iret, iunit, filename) call mm_array_write(b, vtitle, iret, iunit, filename)
\end{lstlisting} \end{lstlisting}
\begin{description} \begin{description}
@ -217,8 +219,14 @@ call mm_array_write(b, iret, iunit, filename)
\item[\bf On Entry ] \item[\bf On Entry ]
\item[b] Rigth hand side(s).\\ \item[b] Rigth hand side(s).\\
Type: {\bf required} \\ Type: {\bf required} \\
An array of type real or complex, rank 1 or 2; will be written..\ An array of type real or complex, rank 1 or 2, or an
object of type \vdata, of type real or complex; its contents will be
written to disk.\\
\item[filename] The name of the file to be written.\\ \item[filename] The name of the file to be written.\\
\item[vtitle] Matrix title.\\
Type: {\bf required} \\
A charachter variable holding a descriptive title for the vector to be
written to file.
Type:{\bf optional}.\\ Type:{\bf optional}.\\
Specified as: a character variable containing a valid file name, or Specified as: a character variable containing a valid file name, or
\verb|-|, in which case the default input unit 5 (i.e. standard input \verb|-|, in which case the default input unit 5 (i.e. standard input

@ -38,10 +38,11 @@ program psb_cf_sample
implicit none implicit none
! input parameters ! input parameters
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
! sparse matrices ! sparse matrices
type(psb_cspmat_type) :: a, aux_a type(psb_cspmat_type) :: a
type(psb_lcspmat_type) :: aux_a
! preconditioner data ! preconditioner data
type(psb_cprec_type) :: prec type(psb_cprec_type) :: prec
@ -56,6 +57,7 @@ program psb_cf_sample
type(psb_desc_type):: desc_a type(psb_desc_type):: desc_a
integer(psb_ipk_) :: ictxt, iam, np integer(psb_ipk_) :: ictxt, iam, np
integer(psb_lpk_) :: lnp
! solver paramters ! solver paramters
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,& integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
@ -140,7 +142,6 @@ program psb_cf_sample
m_problem = aux_a%get_nrows() m_problem = aux_a%get_nrows()
call psb_bcast(ictxt,m_problem) call psb_bcast(ictxt,m_problem)
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
! At this point aux_b may still be unallocated ! At this point aux_b may still be unallocated
if (size(aux_b,dim=1) == m_problem) then if (size(aux_b,dim=1) == m_problem) then
@ -180,7 +181,9 @@ program psb_cf_sample
write(psb_out_unit,'("Partition type: graph vector")') write(psb_out_unit,'("Partition type: graph vector")')
write(psb_out_unit,'(" ")') write(psb_out_unit,'(" ")')
! write(psb_err_unit,'("Build type: graph")') ! write(psb_err_unit,'("Build type: graph")')
call build_mtpart(aux_a,np) call aux_a%cscnv(info,type='csr')
lnp = np
call build_mtpart(aux_a,lnp)
endif endif
call psb_barrier(ictxt) call psb_barrier(ictxt)

@ -38,10 +38,11 @@ program psb_df_sample
implicit none implicit none
! input parameters ! input parameters
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
! sparse matrices ! sparse matrices
type(psb_dspmat_type) :: a, aux_a type(psb_dspmat_type) :: a
type(psb_ldspmat_type) :: aux_a
! preconditioner data ! preconditioner data
type(psb_dprec_type) :: prec type(psb_dprec_type) :: prec
@ -56,6 +57,7 @@ program psb_df_sample
type(psb_desc_type):: desc_a type(psb_desc_type):: desc_a
integer(psb_ipk_) :: ictxt, iam, np integer(psb_ipk_) :: ictxt, iam, np
integer(psb_lpk_) :: lnp
! solver paramters ! solver paramters
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,& integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
@ -140,7 +142,6 @@ program psb_df_sample
m_problem = aux_a%get_nrows() m_problem = aux_a%get_nrows()
call psb_bcast(ictxt,m_problem) call psb_bcast(ictxt,m_problem)
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
! At this point aux_b may still be unallocated ! At this point aux_b may still be unallocated
if (size(aux_b,dim=1) == m_problem) then if (size(aux_b,dim=1) == m_problem) then
@ -180,7 +181,9 @@ program psb_df_sample
write(psb_out_unit,'("Partition type: graph vector")') write(psb_out_unit,'("Partition type: graph vector")')
write(psb_out_unit,'(" ")') write(psb_out_unit,'(" ")')
! write(psb_err_unit,'("Build type: graph")') ! write(psb_err_unit,'("Build type: graph")')
call build_mtpart(aux_a,np) call aux_a%cscnv(info,type='csr')
lnp = np
call build_mtpart(aux_a,lnp)
endif endif
call psb_barrier(ictxt) call psb_barrier(ictxt)

@ -38,10 +38,11 @@ program psb_sf_sample
implicit none implicit none
! input parameters ! input parameters
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
! sparse matrices ! sparse matrices
type(psb_sspmat_type) :: a, aux_a type(psb_sspmat_type) :: a
type(psb_lsspmat_type) :: aux_a
! preconditioner data ! preconditioner data
type(psb_sprec_type) :: prec type(psb_sprec_type) :: prec
@ -56,6 +57,7 @@ program psb_sf_sample
type(psb_desc_type):: desc_a type(psb_desc_type):: desc_a
integer(psb_ipk_) :: ictxt, iam, np integer(psb_ipk_) :: ictxt, iam, np
integer(psb_lpk_) :: lnp
! solver paramters ! solver paramters
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,& integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
@ -140,7 +142,6 @@ program psb_sf_sample
m_problem = aux_a%get_nrows() m_problem = aux_a%get_nrows()
call psb_bcast(ictxt,m_problem) call psb_bcast(ictxt,m_problem)
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
! At this point aux_b may still be unallocated ! At this point aux_b may still be unallocated
if (size(aux_b,dim=1) == m_problem) then if (size(aux_b,dim=1) == m_problem) then
@ -180,7 +181,9 @@ program psb_sf_sample
write(psb_out_unit,'("Partition type: graph vector")') write(psb_out_unit,'("Partition type: graph vector")')
write(psb_out_unit,'(" ")') write(psb_out_unit,'(" ")')
! write(psb_err_unit,'("Build type: graph")') ! write(psb_err_unit,'("Build type: graph")')
call build_mtpart(aux_a,np) call aux_a%cscnv(info,type='csr')
lnp = np
call build_mtpart(aux_a,lnp)
endif endif
call psb_barrier(ictxt) call psb_barrier(ictxt)

@ -38,10 +38,11 @@ program psb_zf_sample
implicit none implicit none
! input parameters ! input parameters
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
! sparse matrices ! sparse matrices
type(psb_zspmat_type) :: a, aux_a type(psb_zspmat_type) :: a
type(psb_lzspmat_type) :: aux_a
! preconditioner data ! preconditioner data
type(psb_zprec_type) :: prec type(psb_zprec_type) :: prec
@ -56,6 +57,7 @@ program psb_zf_sample
type(psb_desc_type):: desc_a type(psb_desc_type):: desc_a
integer(psb_ipk_) :: ictxt, iam, np integer(psb_ipk_) :: ictxt, iam, np
integer(psb_lpk_) :: lnp
! solver paramters ! solver paramters
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,& integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
@ -140,7 +142,6 @@ program psb_zf_sample
m_problem = aux_a%get_nrows() m_problem = aux_a%get_nrows()
call psb_bcast(ictxt,m_problem) call psb_bcast(ictxt,m_problem)
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
! At this point aux_b may still be unallocated ! At this point aux_b may still be unallocated
if (size(aux_b,dim=1) == m_problem) then if (size(aux_b,dim=1) == m_problem) then
@ -180,7 +181,9 @@ program psb_zf_sample
write(psb_out_unit,'("Partition type: graph vector")') write(psb_out_unit,'("Partition type: graph vector")')
write(psb_out_unit,'(" ")') write(psb_out_unit,'(" ")')
! write(psb_err_unit,'("Build type: graph")') ! write(psb_err_unit,'("Build type: graph")')
call build_mtpart(aux_a,np) call aux_a%cscnv(info,type='csr')
lnp = np
call build_mtpart(aux_a,lnp)
endif endif
call psb_barrier(ictxt) call psb_barrier(ictxt)

@ -21,7 +21,7 @@ IMPLOBJS= psb_s_hbio_impl.o psb_d_hbio_impl.o \
psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o
MODOBJS=psb_util_mod.o $(BASEOBJS) MODOBJS=psb_util_mod.o $(BASEOBJS)
COBJS=metis_int.o psb_amd_order.o COBJS=psb_metis_int.o psb_amd_order.o
OBJS=$(COBJS) $(MODOBJS) $(IMPLOBJS) OBJS=$(COBJS) $(MODOBJS) $(IMPLOBJS)
LOCAL_MODS=$(MODOBJS:.o=$(.mod)) LOCAL_MODS=$(MODOBJS:.o=$(.mod))
LIBNAME=$(UTILLIBNAME) LIBNAME=$(UTILLIBNAME)
@ -38,7 +38,7 @@ $(HERE)/$(LIBNAME): $(OBJS)
$(OBJS): $(MODDIR)/$(BASEMODNAME)$(.mod) $(OBJS): $(MODDIR)/$(BASEMODNAME)$(.mod)
psb_util_mod.o: $(BASEOBJS) psb_util_mod.o: $(BASEOBJS)
psb_metispart_mod.o: metis_int.o psb_metispart_mod.o: psb_metis_int.o
psb_mat_dist_mod.o: psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_mat_dist_mod.o: psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o
$(IMPLOBJS): $(BASEOBJS) $(IMPLOBJS): $(BASEOBJS)

@ -286,6 +286,39 @@ subroutine mm_cvet1_write(b, header, info, iunit, filename)
end subroutine mm_cvet1_write end subroutine mm_cvet1_write
subroutine mm_cvect_read(b, info, iunit, filename)
use psb_base_mod
use psb_mmio_mod, psb_protect_name => mm_cvect_read
implicit none
type(psb_c_vect_type), intent(inout) :: b
integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: iunit
character(len=*), optional, intent(in) :: filename
!
complex(psb_spk_), allocatable :: bv(:)
call mm_array_read(bv, info, iunit, filename)
call b%bld(bv)
end subroutine mm_cvect_read
subroutine mm_cvect_write(b, header, info, iunit, filename)
use psb_base_mod
use psb_mmio_mod, psb_protect_name => mm_cvect_write
implicit none
type(psb_c_vect_type), intent(inout) :: b
character(len=*), intent(in) :: header
integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: iunit
character(len=*), optional, intent(in) :: filename
info = psb_success_
if (.not.allocated(b%v)) return
call b%sync()
call mm_array_write(b%v%v,header,info,iunit,filename)
end subroutine mm_cvect_write
subroutine cmm_mat_read(a, info, iunit, filename) subroutine cmm_mat_read(a, info, iunit, filename)
use psb_base_mod use psb_base_mod
implicit none implicit none

@ -279,6 +279,39 @@ subroutine mm_dvet1_write(b, header, info, iunit, filename)
end subroutine mm_dvet1_write end subroutine mm_dvet1_write
subroutine mm_dvect_read(b, info, iunit, filename)
use psb_base_mod
use psb_mmio_mod, psb_protect_name => mm_dvect_read
implicit none
type(psb_d_vect_type), intent(inout) :: b
integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: iunit
character(len=*), optional, intent(in) :: filename
!
real(psb_dpk_), allocatable :: bv(:)
call mm_array_read(bv, info, iunit, filename)
if (info == 0) call b%bld(bv)
end subroutine mm_dvect_read
subroutine mm_dvect_write(b, header, info, iunit, filename)
use psb_base_mod
use psb_mmio_mod, psb_protect_name => mm_dvect_write
implicit none
type(psb_d_vect_type), intent(inout) :: b
character(len=*), intent(in) :: header
integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: iunit
character(len=*), optional, intent(in) :: filename
info = psb_success_
if (.not.allocated(b%v)) return
call b%sync()
call mm_array_write(b%v%v,header,info,iunit,filename)
end subroutine mm_dvect_write
subroutine dmm_mat_read(a, info, iunit, filename) subroutine dmm_mat_read(a, info, iunit, filename)
use psb_base_mod use psb_base_mod
implicit none implicit none

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save