Merge branch 'development' into remap-coarse
@@ -104,6 +104,7 @@ subroutine psi_bld_tmphalo(desc,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%set_halo_owner(hproc,info)
|
||||
if (info == psb_success_) call desc%indxmap%xtnd_p_adjcncy(hproc)
|
||||
|
||||
if (info /= psb_success_) then
|
||||
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_) :: debug_level, debug_unit
|
||||
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_phase11=-1, idx_phase12=-1, idx_phase13=-1
|
||||
integer(psb_ipk_), save :: idx_phase21=-1, idx_phase22=-1, idx_phase13=-1
|
||||
|
||||
info = psb_success_
|
||||
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")
|
||||
if ((do_timings).and.(idx_phase3==-1)) &
|
||||
& idx_phase3 = psb_get_timer_idx("PSI_CREA_INDEX: phase3")
|
||||
!!$ if ((do_timings).and.(idx_phase11==-1)) &
|
||||
!!$ & idx_phase11 = psb_get_timer_idx("PSI_CREA_INDEX: phase11 ")
|
||||
!!$ if ((do_timings).and.(idx_phase12==-1)) &
|
||||
!!$ & idx_phase12 = psb_get_timer_idx("PSI_CREA_INDEX: phase12")
|
||||
if ((do_timings).and.(idx_phase21==-1)) &
|
||||
& idx_phase21 = psb_get_timer_idx("PSI_CREA_INDEX: phase21 ")
|
||||
if ((do_timings).and.(idx_phase22==-1)) &
|
||||
& idx_phase22 = psb_get_timer_idx("PSI_CREA_INDEX: phase22")
|
||||
!!$ if ((do_timings).and.(idx_phase13==-1)) &
|
||||
!!$ & 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 (choose_sorting(dlmax,dlavg,np)) then
|
||||
if (do_timings) call psb_tic(idx_phase21)
|
||||
call psi_bld_glb_dep_list(ictxt,&
|
||||
& loc_dl,length_dl,c_dep_list,dl_ptr,info)
|
||||
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)
|
||||
!!$
|
||||
!!$ ! ....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)
|
||||
if (info /= 0) then
|
||||
write(0,*) me,trim(name),' From sort_dl ',info
|
||||
end if
|
||||
ldl = length_dl(me)
|
||||
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
|
||||
!!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='psi_sort_dl')
|
||||
!!$ goto 9999
|
||||
@@ -146,7 +149,26 @@ subroutine psi_i_crea_index(desc_a,index_in,index_out,nxch,nsnd,nrcv,info)
|
||||
else
|
||||
! Do nothing
|
||||
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
|
||||
if (do_timings) call psb_toc(idx_phase2)
|
||||
|
||||
@@ -189,7 +211,9 @@ contains
|
||||
logical :: val
|
||||
|
||||
val = .not.(((dlmax>(26*4)).or.((dlavg>=(26*2)).and.(np>=128))))
|
||||
val = (dlmax<16)
|
||||
!val = .true.
|
||||
val = .false.
|
||||
end function choose_sorting
|
||||
|
||||
end subroutine psi_i_crea_index
|
||||
|
||||
@@ -2192,7 +2192,7 @@ contains
|
||||
|
||||
integer(psb_ipk_) :: lb, ub, m
|
||||
|
||||
choice: if (n >5) then
|
||||
binsrch: if (n > 8) then
|
||||
lb = 1
|
||||
ub = n
|
||||
ipos = -1
|
||||
@@ -2201,7 +2201,7 @@ contains
|
||||
m = (lb+ub)/2
|
||||
if (key==v(m)) then
|
||||
ipos = m
|
||||
exit choice
|
||||
exit binsrch
|
||||
else if (key < v(m)) then
|
||||
ub = m-1
|
||||
else
|
||||
@@ -2215,7 +2215,7 @@ contains
|
||||
else
|
||||
! No binary search, do everything in the final cleanup
|
||||
ipos = 0
|
||||
end if choice
|
||||
end if binsrch
|
||||
|
||||
! Final cleanup
|
||||
! This is needed because V may contain repeated entries
|
||||
@@ -2239,7 +2239,7 @@ contains
|
||||
|
||||
integer(psb_ipk_) :: lb, ub, m
|
||||
|
||||
choice: if (n >5) then
|
||||
binsrch: if (n > 8) then
|
||||
lb = 1
|
||||
ub = n
|
||||
ipos = -1
|
||||
@@ -2248,7 +2248,7 @@ contains
|
||||
m = (lb+ub)/2
|
||||
if (key==v(m)) then
|
||||
ipos = m
|
||||
exit choice
|
||||
exit binsrch
|
||||
else if (key < v(m)) then
|
||||
ub = m-1
|
||||
else
|
||||
@@ -2262,7 +2262,7 @@ contains
|
||||
else
|
||||
! No binary search, do everything in the final cleanup
|
||||
ipos = 0
|
||||
end if choice
|
||||
end if binsrch
|
||||
|
||||
! Final cleanup
|
||||
! This is needed because V may contain repeated entries
|
||||
|
||||
@@ -1048,7 +1048,7 @@ contains
|
||||
idx = bsdindx(ip+1)
|
||||
p2ptag = psb_complex_tag
|
||||
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 = psb_int_swap_tag
|
||||
call mpi_send(iasnd(idx+1:idx+sz),sz,&
|
||||
|
||||
@@ -1416,7 +1416,7 @@ contains
|
||||
idx = bsdindx(ip+1)
|
||||
p2ptag = psb_int8_tag
|
||||
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 = psb_int_swap_tag
|
||||
call mpi_send(iasnd(idx+1:idx+sz),sz,&
|
||||
|
||||
@@ -1416,7 +1416,7 @@ contains
|
||||
idx = bsdindx(ip+1)
|
||||
p2ptag = psb_int2_tag
|
||||
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 = psb_int_swap_tag
|
||||
call mpi_send(iasnd(idx+1:idx+sz),sz,&
|
||||
|
||||
@@ -1416,7 +1416,7 @@ contains
|
||||
idx = bsdindx(ip+1)
|
||||
p2ptag = psb_int4_tag
|
||||
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 = psb_int_swap_tag
|
||||
call mpi_send(iasnd(idx+1:idx+sz),sz,&
|
||||
|
||||
@@ -1539,7 +1539,7 @@ contains
|
||||
idx = bsdindx(ip+1)
|
||||
p2ptag = psb_real_tag
|
||||
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 = psb_int_swap_tag
|
||||
call mpi_send(iasnd(idx+1:idx+sz),sz,&
|
||||
|
||||
@@ -1048,7 +1048,7 @@ contains
|
||||
idx = bsdindx(ip+1)
|
||||
p2ptag = psb_dcomplex_tag
|
||||
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 = psb_int_swap_tag
|
||||
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
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
|
||||
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
|
||||
else
|
||||
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()
|
||||
nr2 = map%desc_V%get_global_rows()
|
||||
nc2 = map%desc_V%get_local_cols()
|
||||
|
||||
if (present(vtx).and.present(vty)) then
|
||||
ptx => vtx
|
||||
pty => vty
|
||||
@@ -194,7 +193,7 @@ subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
|
||||
end if
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
|
||||
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
|
||||
else
|
||||
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
|
||||
info=psb_success_
|
||||
name='psb_lc_csr_sphalo'
|
||||
name='psb_c_lc_csr_sphalo'
|
||||
call psb_erractionsave(err_act)
|
||||
if (psb_errstatus_fatal()) then
|
||||
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
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
|
||||
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
|
||||
else
|
||||
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()
|
||||
nr2 = map%desc_V%get_global_rows()
|
||||
nc2 = map%desc_V%get_local_cols()
|
||||
|
||||
if (present(vtx).and.present(vty)) then
|
||||
ptx => vtx
|
||||
pty => vty
|
||||
@@ -194,7 +193,7 @@ subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
|
||||
end if
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
|
||||
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
|
||||
else
|
||||
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
|
||||
info=psb_success_
|
||||
name='psb_ld_csr_sphalo'
|
||||
name='psb_d_ld_csr_sphalo'
|
||||
call psb_erractionsave(err_act)
|
||||
if (psb_errstatus_fatal()) then
|
||||
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
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
|
||||
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
|
||||
else
|
||||
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()
|
||||
nr2 = map%desc_V%get_global_rows()
|
||||
nc2 = map%desc_V%get_local_cols()
|
||||
|
||||
if (present(vtx).and.present(vty)) then
|
||||
ptx => vtx
|
||||
pty => vty
|
||||
@@ -194,7 +193,7 @@ subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
|
||||
end if
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
|
||||
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
|
||||
else
|
||||
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
|
||||
info=psb_success_
|
||||
name='psb_ls_csr_sphalo'
|
||||
name='psb_s_ls_csr_sphalo'
|
||||
call psb_erractionsave(err_act)
|
||||
if (psb_errstatus_fatal()) then
|
||||
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
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%p_desc_V,info)
|
||||
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
|
||||
else
|
||||
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()
|
||||
nr2 = map%desc_V%get_global_rows()
|
||||
nc2 = map%desc_V%get_local_cols()
|
||||
|
||||
if (present(vtx).and.present(vty)) then
|
||||
ptx => vtx
|
||||
pty => vty
|
||||
@@ -194,7 +193,7 @@ subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty)
|
||||
end if
|
||||
if (info == psb_success_) call psb_geaxpby(alpha,pty,beta,y,map%desc_V,info)
|
||||
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
|
||||
else
|
||||
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
|
||||
info=psb_success_
|
||||
name='psb_lz_csr_sphalo'
|
||||
name='psb_z_lz_csr_sphalo'
|
||||
call psb_erractionsave(err_act)
|
||||
if (psb_errstatus_fatal()) then
|
||||
info = psb_err_internal_error_ ; goto 9999
|
||||
|
||||
@@ -301,5 +301,34 @@ contains
|
||||
|
||||
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
|
||||
|
||||
@@ -13,7 +13,7 @@ extern "C" {
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
|
||||
|
||||
typedef int32_t psb_m_t;
|
||||
|
||||
@@ -29,20 +29,20 @@ extern "C" {
|
||||
#else
|
||||
#endif
|
||||
typedef int64_t psb_e_t;
|
||||
|
||||
|
||||
typedef float psb_s_t;
|
||||
typedef double psb_d_t;
|
||||
typedef float complex psb_c_t;
|
||||
typedef double complex psb_z_t;
|
||||
#define PSB_ERR_ERROR -1
|
||||
#define PSB_ERR_SUCCESS 0
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct PSB_C_DESCRIPTOR {
|
||||
void *descriptor;
|
||||
} psb_c_descriptor;
|
||||
|
||||
|
||||
} psb_c_descriptor;
|
||||
|
||||
|
||||
|
||||
psb_i_t psb_c_error();
|
||||
psb_i_t psb_c_clean_errstack();
|
||||
@@ -53,7 +53,7 @@ extern "C" {
|
||||
void psb_c_seterraction_print();
|
||||
void psb_c_seterraction_abort();
|
||||
|
||||
/* Environment routines */
|
||||
/* Environment routines */
|
||||
psb_i_t psb_c_init();
|
||||
void psb_c_exit_ctxt(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();
|
||||
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_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);
|
||||
@@ -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_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);
|
||||
|
||||
/* Descriptor/integer routines */
|
||||
|
||||
/* Descriptor/integer routines */
|
||||
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_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_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_cd_get_local_rows(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_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_perm_ 98765
|
||||
#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_add_ 1
|
||||
#define psb_dupl_err_ 2
|
||||
#define psb_dupl_def_ psb_dupl_ovwrt_
|
||||
|
||||
/* legal values for afmt */
|
||||
/* legal values for afmt */
|
||||
#define PSB_AFMT_CSR "CSR"
|
||||
#define PSB_AFMT_CSC "CSC"
|
||||
#define PSB_AFMT_COO "COO"
|
||||
@@ -113,21 +113,21 @@ extern "C" {
|
||||
#define psb_NoTrans_ "N"
|
||||
#define psb_Trans_ "T"
|
||||
#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_recv_ 2
|
||||
#define psb_swap_sync_ 4
|
||||
#define psb_swap_mpi_ 8
|
||||
|
||||
/* legal values for ovrl update argument */
|
||||
/* legal values for ovrl update argument */
|
||||
#define psb_none_ 0
|
||||
#define psb_sum_ 1
|
||||
#define psb_avg_ 2
|
||||
#define psb_square_root_ 3
|
||||
#define psb_setzero_ 4
|
||||
|
||||
|
||||
|
||||
#ifdef __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_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_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_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);
|
||||
|
||||
@@ -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_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_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_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);
|
||||
|
||||
@@ -575,12 +575,12 @@ contains
|
||||
|
||||
type(psb_c_dvector) :: ch,xh,mh
|
||||
type(psb_c_descriptor) :: cdh
|
||||
type(c_ptr), value :: t
|
||||
logical(c_bool) :: t
|
||||
|
||||
type(psb_desc_type), pointer :: descp
|
||||
type(psb_d_vect_type), pointer :: cp,xp,mp
|
||||
integer(psb_c_ipk_) :: info
|
||||
logical, pointer :: fp
|
||||
logical :: fp
|
||||
|
||||
res = -1
|
||||
|
||||
@@ -604,10 +604,10 @@ contains
|
||||
else
|
||||
return
|
||||
end if
|
||||
call c_f_pointer(t,fp)
|
||||
|
||||
call psb_mask(cp,xp,mp,fp,descp,info)
|
||||
|
||||
t = fp
|
||||
res = info
|
||||
|
||||
end function psb_c_dmask
|
||||
|
||||
@@ -575,12 +575,12 @@ contains
|
||||
|
||||
type(psb_c_svector) :: ch,xh,mh
|
||||
type(psb_c_descriptor) :: cdh
|
||||
type(c_ptr), value :: t
|
||||
logical(c_bool) :: t
|
||||
|
||||
type(psb_desc_type), pointer :: descp
|
||||
type(psb_s_vect_type), pointer :: cp,xp,mp
|
||||
integer(psb_c_ipk_) :: info
|
||||
logical, pointer :: fp
|
||||
logical :: fp
|
||||
|
||||
res = -1
|
||||
|
||||
@@ -604,10 +604,10 @@ contains
|
||||
else
|
||||
return
|
||||
end if
|
||||
call c_f_pointer(t,fp)
|
||||
|
||||
call psb_mask(cp,xp,mp,fp,descp,info)
|
||||
|
||||
t = fp
|
||||
res = info
|
||||
|
||||
end function psb_c_smask
|
||||
|
||||
@@ -6,5 +6,10 @@
|
||||
#include "psb_c_cutil.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
|
||||
|
||||
@@ -1,6 +1,99 @@
|
||||
module psb_base_util_cbind_mod
|
||||
use iso_c_binding
|
||||
use psb_util_mod
|
||||
use psb_cutil_cbind_mod
|
||||
use psb_dutil_cbind_mod
|
||||
use psb_sutil_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
|
||||
|
||||
@@ -1792,6 +1792,9 @@ AC_DEFUN(PAC_CHECK_METIS,
|
||||
Default: "-lmetis"]),
|
||||
[psblas_cv_metis=$withval],
|
||||
[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.]),
|
||||
[psblas_cv_metisdir=$withval],
|
||||
[psblas_cv_metisdir=''])
|
||||
@@ -1821,7 +1824,7 @@ if test "x$psblas_cv_metislibdir" != "x"; then
|
||||
fi
|
||||
|
||||
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=no; METIS_INCLUDES=""])
|
||||
if test "x$pac_metis_header_ok" == "xno" ; then
|
||||
@@ -1831,7 +1834,7 @@ dnl Maybe Include or include subdirs?
|
||||
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
|
||||
|
||||
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=no; METIS_INCLUDES=""])
|
||||
fi
|
||||
@@ -1840,11 +1843,27 @@ dnl Maybe new structure with METIS UFconfig METIS?
|
||||
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"
|
||||
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=no; METIS_INCLUDES=""])
|
||||
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
|
||||
psblas_cv_metis_includes="$METIS_INCLUDES"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# 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>.
|
||||
#
|
||||
@@ -580,8 +580,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='PSBLAS'
|
||||
PACKAGE_TARNAME='psblas'
|
||||
PACKAGE_VERSION='3.5'
|
||||
PACKAGE_STRING='PSBLAS 3.5'
|
||||
PACKAGE_VERSION='3.7.0'
|
||||
PACKAGE_STRING='PSBLAS 3.7.0'
|
||||
PACKAGE_BUGREPORT='https://github.com/sfilippone/psblas3/issues'
|
||||
PACKAGE_URL=''
|
||||
|
||||
@@ -626,6 +626,7 @@ ac_subst_vars='am__EXEEXT_FALSE
|
||||
am__EXEEXT_TRUE
|
||||
LTLIBOBJS
|
||||
LIBOBJS
|
||||
METISINCFILE
|
||||
UTILLIBNAME
|
||||
METHDLIBNAME
|
||||
PRECLIBNAME
|
||||
@@ -676,7 +677,6 @@ am__nodep
|
||||
AMDEPBACKSLASH
|
||||
AMDEP_FALSE
|
||||
AMDEP_TRUE
|
||||
am__quote
|
||||
am__include
|
||||
DEPDIR
|
||||
am__untar
|
||||
@@ -753,7 +753,8 @@ PACKAGE_VERSION
|
||||
PACKAGE_TARNAME
|
||||
PACKAGE_NAME
|
||||
PATH_SEPARATOR
|
||||
SHELL'
|
||||
SHELL
|
||||
am__quote'
|
||||
ac_subst_files=''
|
||||
ac_user_opts='
|
||||
enable_option_checking
|
||||
@@ -775,6 +776,7 @@ with_blasdir
|
||||
with_lapack
|
||||
with_rsb
|
||||
with_metis
|
||||
with_metisincfile
|
||||
with_metisdir
|
||||
with_metisincdir
|
||||
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.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
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]...
|
||||
|
||||
@@ -1402,7 +1404,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of PSBLAS 3.5:";;
|
||||
short | recursive ) echo "Configuration of PSBLAS 3.7.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1454,6 +1456,7 @@ Optional Packages:
|
||||
configure script invoke librsb-config)
|
||||
--with-metis=LIBNAME Specify the library name for METIS library. Default:
|
||||
"-lmetis"
|
||||
--with-metisincfile=DIR Specify the name for METIS include file.
|
||||
--with-metisdir=DIR Specify the directory for METIS library and
|
||||
includes.
|
||||
--with-metisincdir=DIR Specify the directory for METIS includes.
|
||||
@@ -1544,7 +1547,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
PSBLAS configure 3.5
|
||||
PSBLAS configure 3.7.0
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2180,7 +2183,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
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
|
||||
|
||||
$ $0 $@
|
||||
@@ -2531,7 +2534,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
# VERSION is the file containing the PSBLAS version code
|
||||
# FIXME
|
||||
psblas_cv_version="3.5"
|
||||
psblas_cv_version="3.7.0"
|
||||
|
||||
# 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_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";
|
||||
|
||||
|
||||
@@ -4942,7 +5007,7 @@ else
|
||||
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_n "checking whether build environment is sane... " >&6; }
|
||||
@@ -5021,9 +5086,6 @@ test "$program_suffix" != NONE &&
|
||||
ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
|
||||
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
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
@@ -5041,7 +5103,7 @@ else
|
||||
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
|
||||
fi
|
||||
|
||||
if test x"${install_sh}" != xset; then
|
||||
if test x"${install_sh+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
|
||||
@@ -5278,45 +5340,45 @@ DEPDIR="${am__leading_dot}deps"
|
||||
|
||||
ac_config_commands="$ac_config_commands depfiles"
|
||||
|
||||
|
||||
am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
|
||||
$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
|
||||
cat > confinc.mk << 'END'
|
||||
am__doit:
|
||||
@echo this is the am__doit target
|
||||
@echo this is the am__doit target >confinc.out
|
||||
.PHONY: am__doit
|
||||
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__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# Ignore all kinds of additional output from 'make'.
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
;;
|
||||
esac
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
# BSD make does it like this.
|
||||
echo '.include "confinc.mk" # ignored' > confmf.BSD
|
||||
# Other make implementations (GNU, Solaris 10, AIX) do it like this.
|
||||
echo 'include confinc.mk # ignored' > confmf.GNU
|
||||
_am_result=no
|
||||
for s in GNU BSD; do
|
||||
{ echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
|
||||
(${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }
|
||||
case $?:`cat confinc.out 2>/dev/null` in #(
|
||||
'0:this is the am__doit target') :
|
||||
case $s in #(
|
||||
BSD) :
|
||||
am__include='.include' am__quote='"' ;; #(
|
||||
*) :
|
||||
am__include='include' am__quote='' ;;
|
||||
esac ;; #(
|
||||
*) :
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
|
||||
$as_echo "$_am_result" >&6; }
|
||||
rm -f confinc confmf
|
||||
esac
|
||||
if test "$am__include" != "#"; then
|
||||
_am_result="yes ($s style)"
|
||||
break
|
||||
fi
|
||||
done
|
||||
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.
|
||||
if test "${enable_dependency_tracking+set}" = set; then :
|
||||
@@ -5398,7 +5460,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='psblas'
|
||||
VERSION='3.5'
|
||||
VERSION='3.7.0'
|
||||
|
||||
|
||||
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
|
||||
# dies out for good. For more background, see:
|
||||
# <http://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/msg00001.html>
|
||||
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
|
||||
mkdir_p='$(MKDIR_P)'
|
||||
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
# We need awk for the "check" target (and possibly the TAP driver). The
|
||||
# system "awk" is bad on some platforms.
|
||||
# Always define AMTAR for backward compatibility. Yes, it's still used
|
||||
# in the wild :-( We should find a proper way to deprecate it ...
|
||||
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_n "checking support for Fortran VOLATILE... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
@@ -7283,12 +7383,13 @@ _ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES"
|
||||
:
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
as_fn_error $? "Sorry, cannot build PSBLAS without support for VOLATILE" "$LINENO" 5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
@@ -7300,6 +7401,101 @@ 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}
|
||||
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_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
cat > conftest.$ac_ext <<_ACEOF
|
||||
|
||||
program test
|
||||
use iso_fortran_env
|
||||
end program test
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
:
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
as_fn_error $? "Sorry, cannot build PSBLAS without support for ISO_FORTRAN_ENV" "$LINENO" 5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
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 support for Fortran FINAL" >&5
|
||||
$as_echo_n "checking support for Fortran FINAL... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
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_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
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
|
||||
use conftest_mod
|
||||
type(foo) :: foovar
|
||||
end program conftest
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
:
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
as_fn_error $? "Sorry, cannot build PSBLAS without support for FINAL" "$LINENO" 5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
# 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}
|
||||
@@ -7387,93 +7583,6 @@ 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}
|
||||
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_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
cat > conftest.$ac_ext <<_ACEOF
|
||||
|
||||
program test
|
||||
use iso_fortran_env
|
||||
end program test
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
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 support for Fortran FINAL" >&5
|
||||
$as_echo_n "checking support for Fortran FINAL... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
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_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
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
|
||||
use conftest_mod
|
||||
type(foo) :: foovar
|
||||
end program conftest
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Additional pathname stuff (yes, it is redundant and confusing...)
|
||||
@@ -8756,6 +8865,14 @@ else
|
||||
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.
|
||||
if test "${with_metisdir+set}" = set; then :
|
||||
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: metis dir $psblas_cv_metisdir" >&6;}
|
||||
for ac_header in limits.h metis.h
|
||||
for ac_header in limits.h $psblas_cv_metisincfile
|
||||
do :
|
||||
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"
|
||||
@@ -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_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 :
|
||||
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"
|
||||
@@ -8847,7 +8964,7 @@ if test "x$pac_metis_header_ok" == "xno" ; then
|
||||
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"
|
||||
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
|
||||
for ac_header in limits.h metis.h
|
||||
for ac_header in limits.h $psblas_cv_metisincfile
|
||||
do :
|
||||
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"
|
||||
@@ -8864,6 +8981,41 @@ done
|
||||
|
||||
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
|
||||
psblas_cv_metis_includes="$METIS_INCLUDES"
|
||||
@@ -9003,9 +9155,12 @@ fi
|
||||
LIBS="$SAVE_LIBS";
|
||||
CPPFLAGS="$SAVE_CPPFLAGS";
|
||||
|
||||
if test "x$psblas_cv_have_metis" == "xyes" ; then
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $FDEFINES"
|
||||
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES"
|
||||
if test "x$pac_cv_metis_idx" == "xunknown" ; then
|
||||
true ; # do nothing
|
||||
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
|
||||
|
||||
|
||||
@@ -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.
|
||||
###############################################################################
|
||||
@@ -9275,7 +9425,6 @@ UTILLIBNAME=libpsb_util.a
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PSBLASRULES='
|
||||
@@ -9301,11 +9450,14 @@ FDEFINES=$(PSBFDEFINES)
|
||||
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
# the following files will be created by Automake
|
||||
|
||||
ac_config_files="$ac_config_files Make.inc"
|
||||
|
||||
ac_config_files="$ac_config_files util/psb_metis_int.h"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of 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
|
||||
# values after options handling.
|
||||
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
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -9929,7 +10081,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
PSBLAS config.status 3.5
|
||||
PSBLAS config.status 3.7.0
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
@@ -10037,7 +10189,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
#
|
||||
# INIT-COMMANDS
|
||||
#
|
||||
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
|
||||
AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
|
||||
|
||||
_ACEOF
|
||||
|
||||
@@ -10049,6 +10201,7 @@ do
|
||||
case $ac_config_target in
|
||||
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
||||
"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;;
|
||||
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
|
||||
# are listed without --file. Let's play safe and only enable the eval
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
*\'*) eval set x "$CONFIG_FILES" ;;
|
||||
*) set x $CONFIG_FILES ;;
|
||||
esac
|
||||
# TODO: see whether this extra hack can be removed once we start
|
||||
# requiring Autoconf 2.70 or later.
|
||||
case $CONFIG_FILES in #(
|
||||
*\'*) :
|
||||
eval set x "$CONFIG_FILES" ;; #(
|
||||
*) :
|
||||
set x $CONFIG_FILES ;; #(
|
||||
*) :
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
for mf
|
||||
# Used to flag and report bootstrapping failures.
|
||||
am_rc=0
|
||||
for am_mf
|
||||
do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named 'Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# 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
|
||||
am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile which includes
|
||||
# dependency-tracking related rules and includes.
|
||||
# Grep'ing the whole file directly is not great: AIX grep has a line
|
||||
# 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
|
||||
dirpart=`$as_dirname -- "$mf" ||
|
||||
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$mf" : 'X\(//\)[^/]' \| \
|
||||
X"$mf" : 'X\(//\)$' \| \
|
||||
X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X"$mf" |
|
||||
sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
|
||||
|| continue
|
||||
am_dirpart=`$as_dirname -- "$am_mf" ||
|
||||
$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$am_mf" : 'X\(//\)[^/]' \| \
|
||||
X"$am_mf" : 'X\(//\)$' \| \
|
||||
X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X"$am_mf" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
@@ -10522,53 +10681,48 @@ $as_echo X"$mf" |
|
||||
q
|
||||
}
|
||||
s/.*/./; q'`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running 'make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
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\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
am_filepart=`$as_basename -- "$am_mf" ||
|
||||
$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
|
||||
X"$am_mf" : 'X\(//\)$' \| \
|
||||
X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X/"$am_mf" |
|
||||
sed '/^.*\/\([^/][^/]*\)\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
/^X\/\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
/^X\/\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'`
|
||||
as_dir=$dirpart/$fdir; as_fn_mkdir_p
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
{ echo "$as_me:$LINENO: cd "$am_dirpart" \
|
||||
&& sed -e '/# am--include-marker/d' "$am_filepart" \
|
||||
| $MAKE -f - am--depfiles" >&5
|
||||
(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
|
||||
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!)
|
||||
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
|
||||
# FIXME
|
||||
psblas_cv_version="3.5"
|
||||
psblas_cv_version="3.7.0"
|
||||
|
||||
# A sample source file
|
||||
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.])]
|
||||
)
|
||||
|
||||
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
|
||||
#
|
||||
|
||||
PAC_FORTRAN_TEST_VOLATILE(
|
||||
[FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES"],
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_GENERICS(
|
||||
[],
|
||||
@@ -578,14 +591,6 @@ PAC_FORTRAN_TEST_FLUSH(
|
||||
[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...)
|
||||
@@ -689,9 +694,12 @@ LIBS="$RSB_LIBS ${LIBS}"
|
||||
dnl AC_CHECK_HEADERS([rsb.h], [ LIBS="${LIBS} $want_rsb_libs"], [])
|
||||
|
||||
PAC_CHECK_METIS
|
||||
if test "x$psblas_cv_have_metis" == "xyes" ; then
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $FDEFINES"
|
||||
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES"
|
||||
if test "x$pac_cv_metis_idx" == "xunknown" ; then
|
||||
true ; # do nothing
|
||||
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
|
||||
|
||||
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.
|
||||
###############################################################################
|
||||
@@ -761,7 +764,6 @@ AC_SUBST(LAPACK_LIBS)
|
||||
AC_SUBST(CINCLUDES)
|
||||
AC_SUBST(FINCLUDES)
|
||||
|
||||
|
||||
PSBLASRULES='
|
||||
PSBLDLIBS=$(LAPACK) $(BLAS) $(METIS_LIB) $(AMD_LIB) $(LIBS)
|
||||
CDEFINES=$(PSBCDEFINES)
|
||||
@@ -784,11 +786,13 @@ AC_SUBST(BASELIBNAME)
|
||||
AC_SUBST(PRECLIBNAME)
|
||||
AC_SUBST(METHDLIBNAME)
|
||||
AC_SUBST(UTILLIBNAME)
|
||||
AC_SUBST(METISINCFILE)
|
||||
|
||||
###############################################################################
|
||||
# the following files will be created by Automake
|
||||
|
||||
AC_CONFIG_FILES([Make.inc])
|
||||
AC_CONFIG_FILES([util/psb_metis_int.h])
|
||||
AC_OUTPUT()
|
||||
#AC_OUTPUT(Make.inc Makefile)
|
||||
###############################################################################
|
||||
|
||||
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 334 B |
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 382 B |
|
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-weight: bold;}
|
||||
.cmbx-12x-x-144{ font-weight: bold;}
|
||||
.cmbx-12x-x-144{ font-weight: bold;}
|
||||
.cmti-10{ 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;}
|
||||
.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-weight: bold;}
|
||||
.cmbx-12{ font-weight: bold;}
|
||||
.cmbx-12{ font-weight: bold;}
|
||||
.cmtt-8{font-size:80%;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;}
|
||||
.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 }
|
||||
td p.noindent { text-indent: 0em; margin-top: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 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 p{margin-top:0.4em; margin-bottom:0.4em;}
|
||||
.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
|
||||
.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
|
||||
.reversemarginpar{float:left;}
|
||||
table.equation {width:100%;}
|
||||
.equation td{text-align:center; }
|
||||
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; }
|
||||
.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; }
|
||||
.rotatebox{display: inline-block;}
|
||||
.figure img.graphics {margin-left:10%;}
|
||||
.lstlisting .label{margin-right:0.5em; }
|
||||
div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; }
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 439 B After Width: | Height: | Size: 439 B |
|
Before Width: | Height: | Size: 765 B After Width: | Height: | Size: 763 B |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
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="lstlisting" id="listing-9"><span class="label"><a
|
||||
id="x86-123001r1"></a></span><span
|
||||
class="cmbx-9">subroutine</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">some</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">args</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9">subroutine</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_foo</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">some</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">args</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123002r2"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">...</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">...</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123003r3"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">error</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">detected</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">then</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">error</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">detected</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">then</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123004r4"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">=</span><span
|
||||
class="cmr-9">errcode1</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">=</span><span
|
||||
class="cmtt-9">errcode1</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123005r5"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_errpush</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">errcode1</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_errpush</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">psb_foo</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">errcode1</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123006r6"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">goto</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">9999</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">goto</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">9999</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123007r7"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123008r8"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">...</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">...</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123009r9"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_bar</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">some</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">args</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_bar</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">some</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">args</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123010r10"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmbx-9">ne</span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">zero</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">then</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9">ne</span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">zero</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">then</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123011r11"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">=</span><span
|
||||
class="cmr-9">errcode2</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">=</span><span
|
||||
class="cmtt-9">errcode2</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123012r12"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_errpush</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">errcode2</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_errpush</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">psb_foo</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">errcode2</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123013r13"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">goto</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">9999</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">goto</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">9999</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123014r14"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123015r15"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">...</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">...</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123016r16"></a></span><span
|
||||
class="cmr-9">9999</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">continue</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9">9999</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">continue</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123017r17"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">err</span><span
|
||||
class="cmr-9">_act</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmbx-9">eq</span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">act</span><span
|
||||
class="cmr-9">_abort</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">then</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">err_act</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9">eq</span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">act_abort</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">then</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123018r18"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_error</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">icontxt</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_error</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">icontxt</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123019r19"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">return</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">return</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123020r20"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">else</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">else</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123021r21"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">return</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">return</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123022r22"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123023r23"></a></span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123024r24"></a></span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">subroutine</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span>
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">subroutine</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_foo</span>
|
||||
</div> </div> </div>
|
||||
</div>
|
||||
<br /> <div class="caption"
|
||||
|
||||
@@ -220,14 +220,90 @@ class="cmbx-12">Notes</span>
|
||||
possible to improve the runtime efficiency by using the following scheme:
|
||||
<!--l. 214-->
|
||||
<div class="lstlisting" id="listing-1"><span class="label"><a
|
||||
id="x20-57004r1"></a></span>    vres(1) = psb_gedot(x1,y1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x20-57005r2"></a></span>    vres(2) = psb_gedot(x2,y2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x20-57006r3"></a></span>    vres(3) = psb_gedot(x3,y3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x20-57007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_sum(ictxt,vres(1:3))
|
||||
id="x20-57004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x20-57005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x20-57006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x20-57007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--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
|
||||
runtime efficiency by using the following scheme: <!--l. 390-->
|
||||
<div class="lstlisting" id="listing-2"><span class="label"><a
|
||||
id="x22-59004r1"></a></span>    vres(1) = psb_geamax(x1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x22-59005r2"></a></span>    vres(2) = psb_geamax(x2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x22-59006r3"></a></span>    vres(3) = psb_geamax(x3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x22-59007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_amx(ictxt,vres(1:3))
|
||||
id="x22-59004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x22-59005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x22-59006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x22-59007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--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
|
||||
runtime efficiency by using the following scheme: <!--l. 543-->
|
||||
<div class="lstlisting" id="listing-3"><span class="label"><a
|
||||
id="x24-61004r1"></a></span>    vres(1) = psb_geasum(x1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x24-61005r2"></a></span>    vres(2) = psb_geasum(x2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x24-61006r3"></a></span>    vres(3) = psb_geasum(x3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x24-61007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_sum(ictxt,vres(1:3))
|
||||
id="x24-61004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x24-61005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x24-61006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x24-61007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--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
|
||||
runtime efficiency by using the following scheme: <!--l. 713-->
|
||||
<div class="lstlisting" id="listing-4"><span class="label"><a
|
||||
id="x26-63004r1"></a></span>    vres(1) = psb_genrm2(x1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x26-63005r2"></a></span>    vres(2) = psb_genrm2(x2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x26-63006r3"></a></span>    vres(3) = psb_genrm2(x3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x26-63007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_nrm2(ictxt,vres(1:3))
|
||||
id="x26-63004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x26-63005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x26-63006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </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"> </span><br /><span class="label"><a
|
||||
id="x26-63007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--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-->
|
||||
<div class="lstlisting" id="listing-5"><span class="label"><a
|
||||
id="x36-73002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_halo(x, desc_a, info) <br /><span class="label"><a
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x36-73003r2"></a></span><span
|
||||
class="cmbx-10">call</span> psb_halo(x, desc_a, info, work, <span
|
||||
class="cmbx-10">data</span>)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">work</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">data</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -92,9 +92,42 @@ class="content">Data types</span></div><!--tex4ht:label?: x37-7400118 -->
|
||||
<!--l. 192-->
|
||||
<div class="lstlisting" id="listing-6"><span class="label"><a
|
||||
id="x37-74002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_ovrl(x, desc_a, info) <br /><span class="label"><a
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x37-74003r2"></a></span><span
|
||||
class="cmbx-10">call</span> psb_ovrl(x, desc_a, info, update=update_type, work=work)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">work</span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10">work</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -109,9 +109,44 @@ class="content">Data types</span></div><!--tex4ht:label?: x38-7500119 -->
|
||||
<!--l. 387-->
|
||||
<div class="lstlisting" id="listing-7"><span class="label"><a
|
||||
id="x38-75002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_gather(glob_x, loc_x, desc_a, info, root) <br /><span class="label"><a
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">loc_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">root</span><span
|
||||
class="cmtt-10">)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x38-75003r2"></a></span><span
|
||||
class="cmbx-10">call</span> psb_gather(glob_x, loc_x, desc_a, info, root)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">loc_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">root</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -108,7 +108,27 @@ class="content">Data types</span></div><!--tex4ht:label?: x39-7600120 -->
|
||||
<!--l. 487-->
|
||||
<div class="lstlisting" id="listing-8"><span class="label"><a
|
||||
id="x39-76002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_scatter(glob_x, loc_x, desc_a, info, root, mold)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">loc_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">root</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mold</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -45,8 +45,14 @@ class="description">Single precision complex;
|
||||
</dd><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Z</span> </dt><dd
|
||||
class="description">Double precision complex.</dd></dl>
|
||||
<!--l. 535--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
|
||||
class="description">Double precision complex;
|
||||
</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
|
||||
<a
|
||||
id="spbasedata"><span
|
||||
@@ -62,18 +68,18 @@ class="cmtt-10">psb_spasb</span></span></span> routine. <hr class="figure"><div
|
||||
id="x14-260014"></a>
|
||||
<div class="center"
|
||||
>
|
||||
<!--l. 542--><p class="noindent" >
|
||||
<!--l. 544--><p class="noindent" >
|
||||
<div class="minipage"><div class="verbatim" id="verbatim-15">
|
||||
  type :: psb_Tspmat_type
|
||||
 <br />    class(psb_T_base_sparse_mat), allocatable  :: a
|
||||
 <br />  end type  psb_Tspmat_type
|
||||
</div>
|
||||
<!--l. 548--><p class="nopar" ></div></div>
|
||||
<!--l. 550--><p class="nopar" ></div></div>
|
||||
<br /> <div class="caption"
|
||||
><span class="id">Figure 4: </span><span
|
||||
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. 560--><p class="indent" > The following very common formats are precompiled in PSBLAS and thus are
|
||||
<!--l. 561--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 562--><p class="indent" > The following very common formats are precompiled in PSBLAS and thus are
|
||||
always available:
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
@@ -83,6 +89,9 @@ class="cmbx-10">_coo</span><span
|
||||
class="cmbx-10">_sparse</span><span
|
||||
class="cmbx-10">_mat</span> </dt><dd
|
||||
class="description">Coordinate storage;
|
||||
|
||||
|
||||
|
||||
</dd><dt class="description">
|
||||
<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">_mat</span> </dt><dd
|
||||
class="description">Compressed storage by columns;</dd></dl>
|
||||
|
||||
|
||||
|
||||
<!--l. 567--><p class="noindent" >The inner sparse matrix has an associated state, which can take the following
|
||||
<!--l. 569--><p class="noindent" >The inner sparse matrix has an associated state, which can take the following
|
||||
values:
|
||||
<dl class="description"><dt class="description">
|
||||
<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
|
||||
coefficients. In this state it is only possible to enter coefficients for already
|
||||
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.
|
||||
<!--l. 583--><p class="noindent" >
|
||||
<!--l. 585--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.1 </span> <a
|
||||
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
|
||||
id="x14-280003.2.2"></a>get_nrows — 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">
|
||||
nr = a%get_nrows()
|
||||
</div>
|
||||
<!--l. 590--><p class="nopar" >
|
||||
<!--l. 592--><p class="indent" >
|
||||
<!--l. 592--><p class="nopar" >
|
||||
<!--l. 594--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -152,7 +158,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 602--><p class="indent" >
|
||||
<!--l. 604--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -162,7 +168,7 @@ class="description">
|
||||
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="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
|
||||
id="x14-290003.2.3"></a>get_ncols — 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">
|
||||
nc = a%get_ncols()
|
||||
</div>
|
||||
<!--l. 614--><p class="nopar" >
|
||||
<!--l. 616--><p class="indent" >
|
||||
<!--l. 616--><p class="nopar" >
|
||||
<!--l. 618--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -188,7 +194,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 626--><p class="indent" >
|
||||
<!--l. 628--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -198,7 +204,7 @@ class="description">
|
||||
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="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
|
||||
id="x14-300003.2.4"></a>get_nnzeros — 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">
|
||||
nz = a%get_nnzeros()
|
||||
</div>
|
||||
<!--l. 638--><p class="nopar" >
|
||||
<!--l. 640--><p class="indent" >
|
||||
<!--l. 640--><p class="nopar" >
|
||||
<!--l. 642--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -224,7 +230,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 650--><p class="indent" >
|
||||
<!--l. 652--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -234,7 +240,7 @@ class="description">
|
||||
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="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>
|
||||
<ol class="enumerate1" >
|
||||
<li
|
||||
@@ -242,7 +248,7 @@ class="cmbx-10">Notes</span>
|
||||
class="cmtt-10">a</span></span></span>; some
|
||||
storage formats employ padding, thus the returned value for the same
|
||||
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
|
||||
id="x14-310003.2.5"></a>get_size — Get maximum number of nonzero elements in a sparse
|
||||
matrix</h5>
|
||||
@@ -252,8 +258,8 @@ matrix</h5>
|
||||
<div class="verbatim" id="verbatim-19">
|
||||
maxnz = a%get_size()
|
||||
</div>
|
||||
<!--l. 668--><p class="nopar" >
|
||||
<!--l. 670--><p class="indent" >
|
||||
<!--l. 670--><p class="nopar" >
|
||||
<!--l. 672--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -269,7 +275,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 680--><p class="indent" >
|
||||
<!--l. 682--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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
|
||||
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>
|
||||
<!--l. 687--><p class="noindent" >
|
||||
<!--l. 689--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.6 </span> <a
|
||||
id="x14-320003.2.6"></a>sizeof — 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">
|
||||
memory_size = a%sizeof()
|
||||
</div>
|
||||
<!--l. 692--><p class="nopar" >
|
||||
<!--l. 694--><p class="indent" >
|
||||
<!--l. 694--><p class="nopar" >
|
||||
<!--l. 696--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -306,7 +312,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 704--><p class="indent" >
|
||||
<!--l. 706--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -315,7 +321,7 @@ class="description">
|
||||
<span
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
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
|
||||
id="x14-330003.2.7"></a>get_fmt — 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">
|
||||
write(*,*) a%get_fmt()
|
||||
</div>
|
||||
<!--l. 715--><p class="nopar" >
|
||||
<!--l. 717--><p class="indent" >
|
||||
<!--l. 717--><p class="nopar" >
|
||||
<!--l. 719--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -341,7 +347,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 727--><p class="indent" >
|
||||
<!--l. 729--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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">CSR</span></span></span> and <span class="obeylines-h"><span class="verb"><span
|
||||
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
|
||||
id="x14-340003.2.8"></a>is_bld, is_upd, is_asb — Status check</h5>
|
||||
|
||||
@@ -366,8 +372,8 @@ if (a%is_bld()) then
|
||||
 <br />if (a%is_upd()) then
|
||||
 <br />if (a%is_asb()) then
|
||||
</div>
|
||||
<!--l. 741--><p class="nopar" >
|
||||
<!--l. 743--><p class="indent" >
|
||||
<!--l. 743--><p class="nopar" >
|
||||
<!--l. 745--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -383,7 +389,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 753--><p class="indent" >
|
||||
<!--l. 755--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="cmtt-10">logical</span></span></span> value indicating whether the matrix is in the Build,
|
||||
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
|
||||
id="x14-350003.2.9"></a>is_lower, is_upper, is_triangle, is_unit — Format check</h5>
|
||||
|
||||
@@ -406,8 +412,8 @@ if (a%is_triangle()) then
|
||||
 <br />if (a%is_lower()) then
|
||||
 <br />if (a%is_unit()) then
|
||||
</div>
|
||||
<!--l. 768--><p class="nopar" >
|
||||
<!--l. 770--><p class="indent" >
|
||||
<!--l. 770--><p class="nopar" >
|
||||
<!--l. 772--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -423,7 +429,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 780--><p class="indent" >
|
||||
<!--l. 782--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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">.true.</span></span></span> check also if it is lower, upper and with
|
||||
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
|
||||
id="x14-360003.2.10"></a>cscnv — 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  a%cscnv(b,info [, type, mold, dupl])
|
||||
 <br />call  a%cscnv(info [, type, mold, dupl])
|
||||
</div>
|
||||
<!--l. 795--><p class="nopar" >
|
||||
<!--l. 797--><p class="indent" >
|
||||
<!--l. 797--><p class="nopar" >
|
||||
<!--l. 799--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -482,7 +488,7 @@ class="newline" />Type: optional.
|
||||
class="cmbx-10">dupl</span> </dt><dd
|
||||
class="description">an integer value specifing how to handle duplicates (see Named Constants
|
||||
below)</dd></dl>
|
||||
<!--l. 811--><p class="indent" >
|
||||
<!--l. 813--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -498,10 +504,10 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
and other accelerators.
|
||||
<!--l. 822--><p class="noindent" >
|
||||
<!--l. 824--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.11 </span> <a
|
||||
id="x14-370003.2.11"></a>csclip — Reduce to a submatrix</h5>
|
||||
|
||||
@@ -511,8 +517,8 @@ and other accelerators.
|
||||
    call a%csclip(b,info[,&
|
||||
 <br />       & imin,imax,jmin,jmax,rscale,cscale])
|
||||
</div>
|
||||
<!--l. 827--><p class="nopar" >
|
||||
<!--l. 829--><p class="indent" > Returns the submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 829--><p class="nopar" >
|
||||
<!--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
|
||||
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>.
|
||||
@@ -542,7 +548,7 @@ class="newline" />Type: optional.
|
||||
<span
|
||||
class="cmbx-10">rscale,cscale</span> </dt><dd
|
||||
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">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -558,7 +564,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
id="x14-380003.2.12"></a>clean_zeros — Eliminate zero coefficients</h5>
|
||||
|
||||
@@ -567,11 +573,11 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-26">
|
||||
    call a%clean_zeros(info)
|
||||
</div>
|
||||
<!--l. 854--><p class="nopar" >
|
||||
<!--l. 856--><p class="indent" > Eliminates zero coefficients in the input matrix. Note that depending on the
|
||||
<!--l. 856--><p class="nopar" >
|
||||
<!--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
|
||||
output.
|
||||
<!--l. 860--><p class="indent" >
|
||||
<!--l. 862--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 867--><p class="noindent" >
|
||||
<!--l. 869--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -605,7 +611,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
id="x14-390003.2.13"></a>get_diag — Get main diagonal</h5>
|
||||
|
||||
@@ -614,8 +620,8 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-27">
|
||||
    call a%get_diag(d,info)
|
||||
</div>
|
||||
<!--l. 878--><p class="nopar" >
|
||||
<!--l. 880--><p class="indent" > Returns a copy of the main diagonal.
|
||||
<!--l. 880--><p class="nopar" >
|
||||
<!--l. 882--><p class="indent" > Returns a copy of the main diagonal.
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 888--><p class="noindent" >
|
||||
<!--l. 890--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -647,7 +653,7 @@ class="newline" />A one-dimensional array of the appropriate type.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
id="x14-400003.2.14"></a>clip_diag — Cut out main diagonal</h5>
|
||||
|
||||
@@ -656,8 +662,8 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-28">
|
||||
    call a%clip_diag(b,info)
|
||||
</div>
|
||||
<!--l. 900--><p class="nopar" >
|
||||
<!--l. 902--><p class="indent" > Returns a copy of <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 902--><p class="nopar" >
|
||||
<!--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.
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
@@ -676,7 +682,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 910--><p class="noindent" >
|
||||
<!--l. 912--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -692,7 +698,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
id="x14-410003.2.15"></a>tril — Return the lower triangle</h5>
|
||||
|
||||
@@ -702,8 +708,8 @@ class="description">Return code.</dd></dl>
|
||||
    call a%tril(l,info[,&
|
||||
 <br />       & diag,imin,imax,jmin,jmax,rscale,cscale,u])
|
||||
</div>
|
||||
<!--l. 923--><p class="nopar" >
|
||||
<!--l. 925--><p class="indent" > Returns the lower triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 925--><p class="nopar" >
|
||||
<!--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>,
|
||||
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
|
||||
@@ -741,7 +747,7 @@ class="newline" />Type: optional.
|
||||
<span
|
||||
class="cmbx-10">rscale,cscale</span> </dt><dd
|
||||
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">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -764,7 +770,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
id="x14-420003.2.16"></a>triu — Return the upper triangle</h5>
|
||||
|
||||
@@ -774,8 +780,8 @@ class="description">Return code.</dd></dl>
|
||||
    call a%triu(u,info[,&
|
||||
 <br />       & diag,imin,imax,jmin,jmax,rscale,cscale,l])
|
||||
</div>
|
||||
<!--l. 957--><p class="nopar" >
|
||||
<!--l. 959--><p class="indent" > Returns the upper triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 959--><p class="nopar" >
|
||||
<!--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>,
|
||||
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>,
|
||||
@@ -813,7 +819,7 @@ class="newline" />Type: optional.
|
||||
<span
|
||||
class="cmbx-10">rscale,cscale</span> </dt><dd
|
||||
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">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -836,7 +842,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
id="x14-430003.2.17"></a>psb_set_mat_default — Set default storage format</h5>
|
||||
|
||||
@@ -845,8 +851,8 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-31">
|
||||
call  psb_set_mat_default(a)
|
||||
</div>
|
||||
<!--l. 995--><p class="nopar" >
|
||||
<!--l. 997--><p class="indent" >
|
||||
<!--l. 997--><p class="nopar" >
|
||||
<!--l. 999--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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
|
||||
storage format.<br
|
||||
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
|
||||
id="x14-440003.2.18"></a>clone — Clone current object</h5>
|
||||
|
||||
@@ -871,8 +877,8 @@ class="newline" />Type: required.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-32">
|
||||
call  a%clone(b,info)
|
||||
</div>
|
||||
<!--l. 1014--><p class="nopar" >
|
||||
<!--l. 1016--><p class="indent" >
|
||||
<!--l. 1016--><p class="nopar" >
|
||||
<!--l. 1018--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -888,7 +894,7 @@ class="description">the sparse matrix.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1026--><p class="indent" >
|
||||
<!--l. 1028--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -901,10 +907,10 @@ class="description">A copy of the input object.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
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
|
||||
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">
|
||||
<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="userhtmlsu5.html" >prev</a>] [<a
|
||||
href="userhtmlsu5.html#tailuserhtmlsu5.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu6.html" >front</a>] [<a
|
||||
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>
|
||||
</body></html>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</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="userhtmlsu6.html" >prev</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>
|
||||
<h4 class="subsectionHead"><span class="titlemark">3.3 </span> <a
|
||||
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
|
||||
class="cmtt-10">psb</span><span
|
||||
class="cmtt-10">_T</span><span
|
||||
@@ -36,7 +36,7 @@ sec. <a
|
||||
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
|
||||
process.
|
||||
<!--l. 1063--><p class="indent" > The type declaration is shown in figure <a
|
||||
<!--l. 1065--><p class="indent" > The type declaration is shown in figure <a
|
||||
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
|
||||
type and precision variants
|
||||
@@ -60,7 +60,7 @@ class="description">Single precision complex;
|
||||
<span
|
||||
class="cmbx-10">Z</span> </dt><dd
|
||||
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
|
||||
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
|
||||
@@ -70,7 +70,7 @@ compiler/application, e.g. data stored in a graphics accelerator’s private
|
||||
id="x15-460015"></a>
|
||||
<div class="center"
|
||||
>
|
||||
<!--l. 1081--><p class="noindent" >
|
||||
<!--l. 1083--><p class="noindent" >
|
||||
<div class="minipage"><div class="verbatim" id="verbatim-33">
|
||||
  type psb_T_base_vect_type
|
||||
 <br />    TYPE(KIND_), allocatable :: v(:)
|
||||
@@ -81,18 +81,18 @@ compiler/application, e.g. data stored in a graphics accelerator’s private
|
||||
 <br />  end type  psb_T_vect_type
|
||||
 <br />
|
||||
</div>
|
||||
<!--l. 1092--><p class="nopar" ></div></div>
|
||||
<!--l. 1094--><p class="nopar" ></div></div>
|
||||
|
||||
|
||||
|
||||
<br /> <div class="caption"
|
||||
><span class="id">Figure 5: </span><span
|
||||
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="noindent" >
|
||||
<!--l. 1105--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 1107--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.1 </span> <a
|
||||
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
|
||||
id="x15-480003.3.2"></a>get_nrows — 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">
|
||||
nr = v%get_nrows()
|
||||
</div>
|
||||
<!--l. 1111--><p class="nopar" >
|
||||
<!--l. 1113--><p class="indent" >
|
||||
<!--l. 1113--><p class="nopar" >
|
||||
<!--l. 1115--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -118,7 +118,7 @@ class="description">the dense vector<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1123--><p class="indent" >
|
||||
<!--l. 1125--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -128,7 +128,7 @@ class="description">
|
||||
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="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
|
||||
id="x15-490003.3.3"></a>sizeof — 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">
|
||||
memory_size = v%sizeof()
|
||||
</div>
|
||||
<!--l. 1135--><p class="nopar" >
|
||||
<!--l. 1137--><p class="indent" >
|
||||
<!--l. 1137--><p class="nopar" >
|
||||
<!--l. 1139--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -154,7 +154,7 @@ class="description">the dense vector<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1147--><p class="indent" >
|
||||
<!--l. 1149--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -163,7 +163,7 @@ class="description">
|
||||
<span
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
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
|
||||
id="x15-500003.3.4"></a>set — Set contents of the vector</h5>
|
||||
|
||||
@@ -174,8 +174,8 @@ class="description">The memory occupation in bytes.</dd></dl>
|
||||
 <br /> call  v%set(vect[,first,last])
|
||||
 <br /> call  v%zero()
|
||||
</div>
|
||||
<!--l. 1160--><p class="nopar" >
|
||||
<!--l. 1162--><p class="indent" >
|
||||
<!--l. 1162--><p class="nopar" >
|
||||
<!--l. 1164--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -226,13 +226,13 @@ class="newline" />Intent: <span
|
||||
class="cmbx-10">in</span>.<br
|
||||
class="newline" />Specified as: a number of the data type indicated in Table <a
|
||||
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
|
||||
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">zero</span></span></span> constant having the appropriate type and
|
||||
kind.
|
||||
<!--l. 1185--><p class="indent" >
|
||||
<!--l. 1187--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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
|
||||
id="x15-510003.3.5"></a>get_vect — Get a copy of the vector contents</h5>
|
||||
|
||||
@@ -256,8 +256,8 @@ class="newline" /></dd></dl>
|
||||
<div class="verbatim" id="verbatim-37">
|
||||
extv = v%get_vect([n])
|
||||
</div>
|
||||
<!--l. 1196--><p class="nopar" >
|
||||
<!--l. 1198--><p class="indent" >
|
||||
<!--l. 1198--><p class="nopar" >
|
||||
<!--l. 1200--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="newline" />
|
||||
</dd></dl>
|
||||
<!--l. 1212--><p class="indent" >
|
||||
<!--l. 1214--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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
|
||||
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>
|
||||
<!--l. 1221--><p class="noindent" >
|
||||
<!--l. 1223--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.6 </span> <a
|
||||
id="x15-520003.3.6"></a>clone — 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">
|
||||
call  x%clone(y,info)
|
||||
</div>
|
||||
<!--l. 1225--><p class="nopar" >
|
||||
<!--l. 1227--><p class="indent" >
|
||||
<!--l. 1227--><p class="nopar" >
|
||||
<!--l. 1229--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -325,7 +325,7 @@ class="description">the dense vector.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1237--><p class="indent" >
|
||||
<!--l. 1239--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="userhtmlsu6.html" >prev</a>] [<a
|
||||
href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu7.html" >front</a>] [<a
|
||||
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>
|
||||
</body></html>
|
||||
|
||||
@@ -19,7 +19,21 @@ href="userhtmlsu76.html#userhtmlsu77.html" >up</a>] </p></div>
|
||||
<!--l. 126-->
|
||||
<div class="lstlisting" id="listing-10"><span class="label"><a
|
||||
id="x87-124001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_errpush(err_c, r_name, i_err, a_err)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">r_name</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">i_err</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">a_err</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 130--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlse9.html" >up</a>] </p></div>
|
||||
<!--l. 156-->
|
||||
<div class="lstlisting" id="listing-11"><span class="label"><a
|
||||
id="x88-125001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_error(icontxt)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--l. 160--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlsu78.html" >up</a>] </p></div>
|
||||
<!--l. 176-->
|
||||
<div class="lstlisting" id="listing-12"><span class="label"><a
|
||||
id="x89-126001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_set_errverbosity(v)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--l. 180--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,12 @@ condition</h4>
|
||||
<!--l. 193-->
|
||||
<div class="lstlisting" id="listing-13"><span class="label"><a
|
||||
id="x90-127001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_set_erraction(err_act)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--l. 197--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,27 @@ format</h4>
|
||||
<!--l. 16-->
|
||||
<div class="lstlisting" id="listing-14"><span class="label"><a
|
||||
id="x92-129001r1"></a></span><span
|
||||
class="cmbx-10">call</span> hb_read(a, iret, iunit, filename, b, mtitle)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">b</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mtitle</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 20--><p class="indent" >
|
||||
|
||||
@@ -22,7 +22,30 @@ format</h4>
|
||||
<!--l. 59-->
|
||||
<div class="lstlisting" id="listing-15"><span class="label"><a
|
||||
id="x93-130001r1"></a></span><span
|
||||
class="cmbx-10">call</span> hb_write(a, iret, iunit, filename, key, rhs, mtitle)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">key</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">rhs</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mtitle</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 65--><p class="indent" >
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</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="userhtmlsu7.html" >prev</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>
|
||||
<h4 class="subsectionHead"><span class="titlemark">3.4 </span> <a
|
||||
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).
|
||||
<!--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
|
||||
class="cmtt-10">psb</span><span
|
||||
class="cmtt-10">_prec</span><span
|
||||
@@ -42,30 +42,30 @@ preconditioner. <hr class="figure"><div class="figure"
|
||||
|
||||
<div class="center"
|
||||
>
|
||||
<!--l. 1271--><p class="noindent" >
|
||||
<!--l. 1273--><p class="noindent" >
|
||||
<div class="minipage"><div class="verbatim" id="verbatim-39">
|
||||
 <br />  type psb_Tprec_type
|
||||
 <br />    class(psb_T_base_prec_type), allocatable :: prec
|
||||
 <br />  end type psb_Tprec_type
|
||||
 <br />
|
||||
</div>
|
||||
<!--l. 1279--><p class="nopar" ></div></div>
|
||||
<!--l. 1281--><p class="nopar" ></div></div>
|
||||
<br /> <div class="caption"
|
||||
><span class="id">Figure 6: </span><span
|
||||
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="userhtmlsu7.html" >prev</a>] [<a
|
||||
href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu8.html" >front</a>] [<a
|
||||
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>
|
||||
</body></html>
|
||||
|
||||
@@ -23,7 +23,21 @@ format</h4>
|
||||
<!--l. 111-->
|
||||
<div class="lstlisting" id="listing-16"><span class="label"><a
|
||||
id="x94-131001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_mat_read(a, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 115--><p class="indent" >
|
||||
|
||||
@@ -23,7 +23,21 @@ format</h4>
|
||||
<!--l. 142-->
|
||||
<div class="lstlisting" id="listing-17"><span class="label"><a
|
||||
id="x95-132001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_array_read(b, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 146--><p class="indent" >
|
||||
@@ -66,9 +80,16 @@ class="description">Rigth hand side(s).<br
|
||||
class="newline" />Type: <span
|
||||
class="cmbx-10">required </span><br
|
||||
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
|
||||
contains a right hand side, otherwise will be left in the UNALLOCATED
|
||||
state.
|
||||
ALLOCATABLE attribute, 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.<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">
|
||||
<span
|
||||
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="userhtmlsu80.html" >prev</a>] [<a
|
||||
href="userhtmlsu80.html#tailuserhtmlsu80.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu81.html" >front</a>] [<a
|
||||
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>
|
||||
</body></html>
|
||||
|
||||
@@ -11,7 +11,7 @@ format</title>
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</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="userhtmlsu81.html" >prev</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
|
||||
id="x96-1330009.5"></a>mm_mat_write — Write a sparse matrix to a file in the MatrixMarket
|
||||
format</h4>
|
||||
<!--l. 177-->
|
||||
<!--l. 179-->
|
||||
<div class="lstlisting" id="listing-18"><span class="label"><a
|
||||
id="x96-133001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_mat_write(a, mtitle, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">mtitle</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 180--><p class="indent" >
|
||||
<!--l. 182--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -73,7 +90,7 @@ class="newline" />Type:<span
|
||||
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="cmtt-10">-</span></span></span>.</dd></dl>
|
||||
<!--l. 200--><p class="indent" >
|
||||
<!--l. 202--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="userhtmlsu81.html" >prev</a>] [<a
|
||||
href="userhtmlsu81.html#tailuserhtmlsu81.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu82.html" >front</a>] [<a
|
||||
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>
|
||||
</body></html>
|
||||
|
||||
@@ -11,7 +11,7 @@ format</title>
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</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#tailuserhtmlsu82.html" >prev-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
|
||||
id="x97-1340009.6"></a>mm_array_write — Write a dense array from a file in the MatrixMarket
|
||||
format</h4>
|
||||
<!--l. 211-->
|
||||
<!--l. 213-->
|
||||
<div class="lstlisting" id="listing-19"><span class="label"><a
|
||||
id="x97-134001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_array_write(b, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </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"> </span><span
|
||||
class="cmtt-10">vtitle</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 215--><p class="indent" >
|
||||
<!--l. 217--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
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="newline" />Type: <span
|
||||
class="cmbx-10">required </span><br
|
||||
class="newline" />An array of type real or complex, rank 1 or 2; will be written.. 
|
||||
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">
|
||||
<span
|
||||
class="cmbx-10">filename</span> </dt><dd
|
||||
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="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
|
||||
@@ -60,11 +93,14 @@ class="newline" />Type:<span
|
||||
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="cmtt-10">-</span></span></span>.</dd></dl>
|
||||
<!--l. 231--><p class="indent" >
|
||||
<!--l. 239--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
class="description">
|
||||
|
||||
|
||||
|
||||
</dd><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">iret</span> </dt><dd
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</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#tailuserhtmlsu8.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu6.html#tailuserhtmlsu9.html">tail</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlsu11.html" >up</a>] </p></div>
|
||||
<h4 class="subsectionHead"><span class="titlemark">3.5 </span> <a
|
||||
id="x17-540003.5"></a>Heap data structure</h4>
|
||||
<!--l. 1314--><p class="noindent" >Among the tools routines of sec. <a
|
||||
<!--l. 1316--><p class="noindent" >Among the tools routines of sec. <a
|
||||
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:
|
||||
<dl class="description"><dt class="description">
|
||||
@@ -36,7 +36,7 @@ class="cmtt-10">_idx</span><span
|
||||
class="cmtt-10">_heap</span> </dt><dd
|
||||
class="description">: a heap containing elements of type T, as above, together
|
||||
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">
|
||||
<span
|
||||
class="cmbx-10">init</span> </dt><dd
|
||||
@@ -62,7 +62,7 @@ class="description">Print on file;
|
||||
<span
|
||||
class="cmbx-10">free</span> </dt><dd
|
||||
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-->
|
||||
<div class="lstlisting" id="listing-20"><span class="label"><a
|
||||
id="x107-143001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_krylov(method,a,prec,b,x,eps,desc_a,info,& <br /><span class="label"><a
|
||||
id="x107-143002r2"></a></span>     & itmax,iter,<span
|
||||
class="cmbx-10">err</span>,itrace,irst,istop,cond)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
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">,&</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x107-143002r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">&</span><span
|
||||
class="cmtt-10"> </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>
|
||||
<!--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
|
||||
href="userhtmlsu90.html" >front</a>] [<a
|
||||
href="# " >up</a>] </p></div>
|
||||
|
||||
@@ -530,7 +530,9 @@ data type and precision variants
|
||||
\item[S] Single precision real;
|
||||
\item[D] Double precision real;
|
||||
\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}
|
||||
The actual data is contained in the polymorphic component \verb|a%a|
|
||||
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).\\
|
||||
Type: {\bf required} \\
|
||||
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
|
||||
a right hand side, otherwise will be left in the UNALLOCATED state.
|
||||
attribute, or an
|
||||
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.\\
|
||||
Type: {\bf required} \\
|
||||
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}
|
||||
|
||||
\begin{lstlisting}
|
||||
call mm_array_write(b, iret, iunit, filename)
|
||||
call mm_array_write(b, vtitle, iret, iunit, filename)
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{description}
|
||||
@@ -217,8 +219,14 @@ call mm_array_write(b, iret, iunit, filename)
|
||||
\item[\bf On Entry ]
|
||||
\item[b] Rigth hand side(s).\\
|
||||
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[vtitle] Matrix title.\\
|
||||
Type: {\bf required} \\
|
||||
A charachter variable holding a descriptive title for the vector to be
|
||||
written to file.
|
||||
Type:{\bf optional}.\\
|
||||
Specified as: a character variable containing a valid file name, or
|
||||
\verb|-|, in which case the default input unit 5 (i.e. standard input
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_cf_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_cspmat_type) :: a, aux_a
|
||||
type(psb_cspmat_type) :: a
|
||||
type(psb_lcspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_cprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_cf_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_cf_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
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
|
||||
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,'(" ")')
|
||||
! 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
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_df_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_dspmat_type) :: a, aux_a
|
||||
type(psb_dspmat_type) :: a
|
||||
type(psb_ldspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_dprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_df_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_df_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
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
|
||||
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,'(" ")')
|
||||
! 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
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_sf_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_sspmat_type) :: a, aux_a
|
||||
type(psb_sspmat_type) :: a
|
||||
type(psb_lsspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_sprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_sf_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_sf_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
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
|
||||
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,'(" ")')
|
||||
! 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
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_zf_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_zspmat_type) :: a, aux_a
|
||||
type(psb_zspmat_type) :: a
|
||||
type(psb_lzspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_zprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_zf_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_zf_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
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
|
||||
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,'(" ")')
|
||||
! 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
|
||||
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
|
||||
|
||||
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)
|
||||
LOCAL_MODS=$(MODOBJS:.o=$(.mod))
|
||||
LIBNAME=$(UTILLIBNAME)
|
||||
@@ -38,7 +38,7 @@ $(HERE)/$(LIBNAME): $(OBJS)
|
||||
|
||||
$(OBJS): $(MODDIR)/$(BASEMODNAME)$(.mod)
|
||||
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
|
||||
|
||||
$(IMPLOBJS): $(BASEOBJS)
|
||||
|
||||
@@ -286,6 +286,39 @@ subroutine mm_cvet1_write(b, header, info, iunit, filename)
|
||||
|
||||
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)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
|
||||
@@ -279,6 +279,39 @@ subroutine mm_dvet1_write(b, header, info, iunit, filename)
|
||||
|
||||
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)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
|
||||