From 25aa88d35800e7a5d36e9c992ed02b0b8e61260b Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 28 Apr 2015 17:26:14 +0000 Subject: [PATCH] psblas3: base/comm/psb_chalo.f90 base/comm/psb_dhalo.f90 base/comm/psb_ihalo.f90 base/comm/psb_shalo.f90 base/comm/psb_zhalo.f90 base/modules/psb_c_base_vect_mod.f90 base/modules/psb_c_comm_mod.f90 base/modules/psb_c_tools_mod.f90 base/modules/psb_c_vect_mod.F90 base/modules/psb_d_base_vect_mod.f90 base/modules/psb_d_comm_mod.f90 base/modules/psb_d_tools_mod.f90 base/modules/psb_d_vect_mod.F90 base/modules/psb_i_base_vect_mod.f90 base/modules/psb_i_comm_mod.f90 base/modules/psb_i_tools_mod.f90 base/modules/psb_i_vect_mod.F90 base/modules/psb_s_base_vect_mod.f90 base/modules/psb_s_comm_mod.f90 base/modules/psb_s_tools_mod.f90 base/modules/psb_s_vect_mod.F90 base/modules/psb_z_base_vect_mod.f90 base/modules/psb_z_comm_mod.f90 base/modules/psb_z_tools_mod.f90 base/modules/psb_z_vect_mod.F90 base/modules/psi_c_mod.f90 base/modules/psi_d_mod.f90 base/modules/psi_i_mod.f90 base/modules/psi_s_mod.f90 base/modules/psi_z_mod.f90 docs/psblas-3.2.pdf docs/psblas-3.4.pdf docs/src/Makefile docs/src/commrout.tex docs/src/userguide.tex docs/src/userhtml.tex Regenerate some of the modules. Take out alpha from psb_halo, update docs accordingly. --- base/comm/psb_chalo.f90 | 31 +- base/comm/psb_dhalo.f90 | 31 +- base/comm/psb_ihalo.f90 | 31 +- base/comm/psb_shalo.f90 | 31 +- base/comm/psb_zhalo.f90 | 31 +- base/modules/psb_c_base_vect_mod.f90 | 93 +- base/modules/psb_c_comm_mod.f90 | 68 +- base/modules/psb_c_tools_mod.f90 | 156 +- base/modules/psb_c_vect_mod.F90 | 876 +-- base/modules/psb_d_base_vect_mod.f90 | 93 +- base/modules/psb_d_comm_mod.f90 | 68 +- base/modules/psb_d_tools_mod.f90 | 156 +- base/modules/psb_d_vect_mod.F90 | 876 +-- base/modules/psb_i_base_vect_mod.f90 | 1022 +--- base/modules/psb_i_comm_mod.f90 | 73 +- base/modules/psb_i_tools_mod.f90 | 139 +- base/modules/psb_i_vect_mod.F90 | 497 +- base/modules/psb_s_base_vect_mod.f90 | 93 +- base/modules/psb_s_comm_mod.f90 | 68 +- base/modules/psb_s_tools_mod.f90 | 156 +- base/modules/psb_s_vect_mod.F90 | 876 +-- base/modules/psb_z_base_vect_mod.f90 | 93 +- base/modules/psb_z_comm_mod.f90 | 68 +- base/modules/psb_z_tools_mod.f90 | 156 +- base/modules/psb_z_vect_mod.F90 | 876 +-- base/modules/psi_c_mod.f90 | 1 + base/modules/psi_d_mod.f90 | 1 + base/modules/psi_i_mod.f90 | 164 +- base/modules/psi_s_mod.f90 | 1 + base/modules/psi_z_mod.f90 | 1 + docs/{psblas-3.2.pdf => psblas-3.4.pdf} | 6566 +++++++++++------------ docs/src/Makefile | 2 +- docs/src/commrout.tex | 12 +- docs/src/userguide.tex | 8 +- docs/src/userhtml.tex | 6 +- 35 files changed, 5912 insertions(+), 7508 deletions(-) rename docs/{psblas-3.2.pdf => psblas-3.4.pdf} (93%) diff --git a/base/comm/psb_chalo.f90 b/base/comm/psb_chalo.f90 index da991c06..4b18ec43 100644 --- a/base/comm/psb_chalo.f90 +++ b/base/comm/psb_chalo.f90 @@ -39,7 +39,6 @@ ! x - complex,dimension(:,:). The local part of the dense matrix. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - complex(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - complex(optional). Work area. @@ -53,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_chalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) +subroutine psb_chalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalom use psi_mod implicit none @@ -61,7 +60,6 @@ subroutine psb_chalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) complex(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(in), optional :: alpha complex(psb_spk_), optional, target, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran @@ -147,14 +145,6 @@ subroutine psb_chalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= cone) then - do i=0, k-1 - call cscal(int(nrow,kind=psb_mpik_),alpha,x(:,jjx+i),1) - end do - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -256,7 +246,6 @@ end subroutine psb_chalom ! x - real,dimension(:). The local part of the dense vector. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - complex(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - complex(optional). Work area. @@ -270,7 +259,7 @@ end subroutine psb_chalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_chalov(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_chalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalov use psi_mod implicit none @@ -278,7 +267,6 @@ subroutine psb_chalov(x,desc_a,info,alpha,work,tran,mode,data) complex(psb_spk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(in), optional :: alpha complex(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -347,12 +335,6 @@ subroutine psb_chalov(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= cone) then - call cscal(int(nrow,kind=psb_mpik_),alpha,x,ione) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -410,7 +392,7 @@ subroutine psb_chalov(x,desc_a,info,alpha,work,tran,mode,data) end subroutine psb_chalov -subroutine psb_chalo_vect(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_chalo_vect(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalo_vect use psi_mod implicit none @@ -418,7 +400,6 @@ subroutine psb_chalo_vect(x,desc_a,info,alpha,work,tran,mode,data) type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(in), optional :: alpha complex(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -493,12 +474,6 @@ subroutine psb_chalo_vect(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= cone) then - call x%scal(alpha) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then diff --git a/base/comm/psb_dhalo.f90 b/base/comm/psb_dhalo.f90 index 946b3af0..d19739be 100644 --- a/base/comm/psb_dhalo.f90 +++ b/base/comm/psb_dhalo.f90 @@ -39,7 +39,6 @@ ! x - real,dimension(:,:). The local part of the dense matrix. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - real(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - real(optional). Work area. @@ -53,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) +subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalom use psi_mod implicit none @@ -61,7 +60,6 @@ subroutine psb_dhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) real(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(in), optional :: alpha real(psb_dpk_), optional, target, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran @@ -147,14 +145,6 @@ subroutine psb_dhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= done) then - do i=0, k-1 - call dscal(int(nrow,kind=psb_mpik_),alpha,x(:,jjx+i),1) - end do - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -256,7 +246,6 @@ end subroutine psb_dhalom ! x - real,dimension(:). The local part of the dense vector. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - real(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - real(optional). Work area. @@ -270,7 +259,7 @@ end subroutine psb_dhalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalov(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_dhalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalov use psi_mod implicit none @@ -278,7 +267,6 @@ subroutine psb_dhalov(x,desc_a,info,alpha,work,tran,mode,data) real(psb_dpk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(in), optional :: alpha real(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -347,12 +335,6 @@ subroutine psb_dhalov(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= done) then - call dscal(int(nrow,kind=psb_mpik_),alpha,x,ione) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -410,7 +392,7 @@ subroutine psb_dhalov(x,desc_a,info,alpha,work,tran,mode,data) end subroutine psb_dhalov -subroutine psb_dhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalo_vect use psi_mod implicit none @@ -418,7 +400,6 @@ subroutine psb_dhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(in), optional :: alpha real(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -493,12 +474,6 @@ subroutine psb_dhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= done) then - call x%scal(alpha) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then diff --git a/base/comm/psb_ihalo.f90 b/base/comm/psb_ihalo.f90 index d1040c02..e8c9a9bf 100644 --- a/base/comm/psb_ihalo.f90 +++ b/base/comm/psb_ihalo.f90 @@ -39,7 +39,6 @@ ! x - integer,dimension(:,:). The local part of the dense matrix. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - integer(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - integer(optional). Work area. @@ -53,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ihalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) +subroutine psb_ihalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ihalom use psi_mod implicit none @@ -61,7 +60,6 @@ subroutine psb_ihalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) integer(psb_ipk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: alpha integer(psb_ipk_), optional, target, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran @@ -147,14 +145,6 @@ subroutine psb_ihalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= ione) then - do i=0, k-1 - call iscal(int(nrow,kind=psb_mpik_),alpha,x(:,jjx+i),1) - end do - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -256,7 +246,6 @@ end subroutine psb_ihalom ! x - real,dimension(:). The local part of the dense vector. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - integer(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - integer(optional). Work area. @@ -270,7 +259,7 @@ end subroutine psb_ihalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ihalov(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_ihalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ihalov use psi_mod implicit none @@ -278,7 +267,6 @@ subroutine psb_ihalov(x,desc_a,info,alpha,work,tran,mode,data) integer(psb_ipk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: alpha integer(psb_ipk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -347,12 +335,6 @@ subroutine psb_ihalov(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= ione) then - call iscal(int(nrow,kind=psb_mpik_),alpha,x,ione) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -410,7 +392,7 @@ subroutine psb_ihalov(x,desc_a,info,alpha,work,tran,mode,data) end subroutine psb_ihalov -subroutine psb_ihalo_vect(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_ihalo_vect(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ihalo_vect use psi_mod implicit none @@ -418,7 +400,6 @@ subroutine psb_ihalo_vect(x,desc_a,info,alpha,work,tran,mode,data) type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: alpha integer(psb_ipk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -493,12 +474,6 @@ subroutine psb_ihalo_vect(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= ione) then - call x%scal(alpha) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then diff --git a/base/comm/psb_shalo.f90 b/base/comm/psb_shalo.f90 index 732ac2af..f182b458 100644 --- a/base/comm/psb_shalo.f90 +++ b/base/comm/psb_shalo.f90 @@ -39,7 +39,6 @@ ! x - real,dimension(:,:). The local part of the dense matrix. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - real(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - real(optional). Work area. @@ -53,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_shalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) +subroutine psb_shalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalom use psi_mod implicit none @@ -61,7 +60,6 @@ subroutine psb_shalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) real(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(in), optional :: alpha real(psb_spk_), optional, target, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran @@ -147,14 +145,6 @@ subroutine psb_shalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= sone) then - do i=0, k-1 - call sscal(int(nrow,kind=psb_mpik_),alpha,x(:,jjx+i),1) - end do - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -256,7 +246,6 @@ end subroutine psb_shalom ! x - real,dimension(:). The local part of the dense vector. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - real(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - real(optional). Work area. @@ -270,7 +259,7 @@ end subroutine psb_shalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_shalov(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_shalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalov use psi_mod implicit none @@ -278,7 +267,6 @@ subroutine psb_shalov(x,desc_a,info,alpha,work,tran,mode,data) real(psb_spk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(in), optional :: alpha real(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -347,12 +335,6 @@ subroutine psb_shalov(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= sone) then - call sscal(int(nrow,kind=psb_mpik_),alpha,x,ione) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -410,7 +392,7 @@ subroutine psb_shalov(x,desc_a,info,alpha,work,tran,mode,data) end subroutine psb_shalov -subroutine psb_shalo_vect(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_shalo_vect(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalo_vect use psi_mod implicit none @@ -418,7 +400,6 @@ subroutine psb_shalo_vect(x,desc_a,info,alpha,work,tran,mode,data) type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(in), optional :: alpha real(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -493,12 +474,6 @@ subroutine psb_shalo_vect(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= sone) then - call x%scal(alpha) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then diff --git a/base/comm/psb_zhalo.f90 b/base/comm/psb_zhalo.f90 index 4d7c4422..42658ff3 100644 --- a/base/comm/psb_zhalo.f90 +++ b/base/comm/psb_zhalo.f90 @@ -39,7 +39,6 @@ ! x - complex,dimension(:,:). The local part of the dense matrix. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - complex(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - complex(optional). Work area. @@ -53,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_zhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) +subroutine psb_zhalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_zhalom use psi_mod implicit none @@ -61,7 +60,6 @@ subroutine psb_zhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) complex(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(in), optional :: alpha complex(psb_dpk_), optional, target, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran @@ -147,14 +145,6 @@ subroutine psb_zhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= zone) then - do i=0, k-1 - call zscal(int(nrow,kind=psb_mpik_),alpha,x(:,jjx+i),1) - end do - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -256,7 +246,6 @@ end subroutine psb_zhalom ! x - real,dimension(:). The local part of the dense vector. ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code -! alpha - complex(optional). Scale factor. ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. ! work - complex(optional). Work area. @@ -270,7 +259,7 @@ end subroutine psb_zhalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_zhalov(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_zhalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_zhalov use psi_mod implicit none @@ -278,7 +267,6 @@ subroutine psb_zhalov(x,desc_a,info,alpha,work,tran,mode,data) complex(psb_dpk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(in), optional :: alpha complex(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -347,12 +335,6 @@ subroutine psb_zhalov(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= zone) then - call zscal(int(nrow,kind=psb_mpik_),alpha,x,ione) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then @@ -410,7 +392,7 @@ subroutine psb_zhalov(x,desc_a,info,alpha,work,tran,mode,data) end subroutine psb_zhalov -subroutine psb_zhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) +subroutine psb_zhalo_vect(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_zhalo_vect use psi_mod implicit none @@ -418,7 +400,6 @@ subroutine psb_zhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(in), optional :: alpha complex(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -493,12 +474,6 @@ subroutine psb_zhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) call psb_errcomm(ictxt,err) if(err /= 0) goto 9999 - if(present(alpha)) then - if(alpha /= zone) then - call x%scal(alpha) - end if - end if - liwork=nrow if (present(work)) then if(size(work) >= liwork) then diff --git a/base/modules/psb_c_base_vect_mod.f90 b/base/modules/psb_c_base_vect_mod.f90 index 0e4b87ed..58735b76 100644 --- a/base/modules/psb_c_base_vect_mod.f90 +++ b/base/modules/psb_c_base_vect_mod.f90 @@ -46,8 +46,8 @@ module psb_c_base_vect_mod use psb_const_mod use psb_error_mod - use psb_i_base_vect_mod use psb_realloc_mod + use psb_i_base_vect_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -123,6 +123,20 @@ module psb_c_base_vect_mod procedure, pass(x) :: set_scal => c_base_set_scal procedure, pass(x) :: set_vect => c_base_set_vect generic, public :: set => set_vect, set_scal + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => c_base_gthab + procedure, pass(x) :: gthzv => c_base_gthzv + procedure, pass(x) :: gthzv_x => c_base_gthzv_x + procedure, pass(x) :: gthzbuf => c_base_gthzbuf + generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => c_base_sctb + procedure, pass(y) :: sctb_x => c_base_sctb_x + procedure, pass(y) :: sctb_buf => c_base_sctb_buf + generic, public :: sct => sctb, sctb_x, sctb_buf + ! ! Dot product and AXPBY @@ -154,19 +168,7 @@ module psb_c_base_vect_mod procedure, pass(x) :: nrm2 => c_base_nrm2 procedure, pass(x) :: amax => c_base_amax procedure, pass(x) :: asum => c_base_asum - ! - ! Gather/scatter. These are needed for MPI interfacing. - ! May have to be reworked. - ! - procedure, pass(x) :: gthab => c_base_gthab - procedure, pass(x) :: gthzv => c_base_gthzv - procedure, pass(x) :: gthzv_x => c_base_gthzv_x - procedure, pass(x) :: gthzbuf => c_base_gthzbuf - generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf - procedure, pass(y) :: sctb => c_base_sctb - procedure, pass(y) :: sctb_x => c_base_sctb_x - procedure, pass(y) :: sctb_buf => c_base_sctb_buf - generic, public :: sct => sctb, sctb_x, sctb_buf + end type psb_c_base_vect_type public :: psb_c_base_vect @@ -668,6 +670,36 @@ contains end subroutine c_base_set_scal + + ! + !> Function base_set_vect + !! \memberof psb_c_base_vect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine c_base_set_vect(x,val,first,last) + class(psb_c_base_vect_type), intent(inout) :: x + complex(psb_spk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info, first_, last_, nr + + first_=1 + last_=min(psb_size(x%v),size(val)) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(first_:last_) = val(1:last_-first_+1) + else + x%v = val + end if + call x%set_host() + + end subroutine c_base_set_vect + + ! ! Overwrite with absolute value ! @@ -680,7 +712,7 @@ contains class(psb_c_base_vect_type), intent(inout) :: x if (allocated(x%v)) then - if (.not.x%is_host()) call x%sync() + if (x%is_dev()) call x%sync() x%v = abs(x%v) call x%set_host() end if @@ -693,40 +725,12 @@ contains if (.not.x%is_host()) call x%sync() if (allocated(x%v)) then - call y%bld(x%v) + call y%axpby(min(x%get_nrows(),y%get_nrows()),cone,x,czero,info) call y%absval() - call y%set_host() end if end subroutine c_base_absval2 - ! - !> Function base_set_vect - !! \memberof psb_c_base_vect_type - !! \brief Set all entries - !! \param val(:) The vector to be copied in - !! - subroutine c_base_set_vect(x,val,first,last) - class(psb_c_base_vect_type), intent(inout) :: x - complex(psb_spk_), intent(in) :: val(:) - integer(psb_ipk_), optional :: first, last - - integer(psb_ipk_) :: info, first_, last_, nr - - first_=1 - last_=min(psb_size(x%v),size(val)) - if (present(first)) first_ = max(1,first) - if (present(last)) last_ = min(last,last_) - - if (allocated(x%v)) then - x%v(first_:last_) = val(1:last_-first_+1) - else - x%v = val - end if - call x%set_host() - - end subroutine c_base_set_vect - ! ! Dot products ! @@ -2422,6 +2426,5 @@ contains !!$ call y%sct(n,idx%v(i:),x,beta) !!$ !!$ end subroutine c_base_mv_sctb_x - end module psb_c_base_multivect_mod diff --git a/base/modules/psb_c_comm_mod.f90 b/base/modules/psb_c_comm_mod.f90 index b5000309..712679bb 100644 --- a/base/modules/psb_c_comm_mod.f90 +++ b/base/modules/psb_c_comm_mod.f90 @@ -30,27 +30,33 @@ !!$ !!$ module psb_c_comm_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_spk_ + use psb_mat_mod, only : psb_cspmat_type + + use psb_c_vect_mod, only : psb_c_vect_type, psb_c_base_vect_type interface psb_ovrl - subroutine psb_covrlm(x,desc_a,info,jx,ik,work,update,mode) - use psb_desc_mod + subroutine psb_covrlm(x,desc_a,info,jx,ik,work,update,mode) + import + implicit none complex(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info complex(psb_spk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_covrlm - subroutine psb_covrlv(x,desc_a,info,work,update,mode) - use psb_desc_mod + subroutine psb_covrlv(x,desc_a,info,work,update,mode) + import + implicit none complex(psb_spk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info complex(psb_spk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_covrlv - subroutine psb_covrl_vect(x,desc_a,info,work,update,mode) - use psb_desc_mod - use psb_c_vect_mod + subroutine psb_covrl_vect(x,desc_a,info,work,update,mode) + import + implicit none type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -60,33 +66,32 @@ module psb_c_comm_mod end interface psb_ovrl interface psb_halo - subroutine psb_chalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) - use psb_desc_mod + subroutine psb_chalom(x,desc_a,info,jx,ik,work,tran,mode,data) + import + implicit none complex(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(in), optional :: alpha complex(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran end subroutine psb_chalom - subroutine psb_chalov(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod + subroutine psb_chalov(x,desc_a,info,work,tran,mode,data) + import + implicit none complex(psb_spk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(in), optional :: alpha complex(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_chalov - subroutine psb_chalo_vect(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod - use psb_c_vect_mod + subroutine psb_chalo_vect(x,desc_a,info,work,tran,mode,data) + import + implicit none type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(in), optional :: alpha complex(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -95,16 +100,18 @@ module psb_c_comm_mod interface psb_scatter - subroutine psb_cscatterm(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_cscatterm(globx, locx, desc_a, info, root) + import + implicit none complex(psb_spk_), intent(out) :: locx(:,:) complex(psb_spk_), intent(in) :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_cscatterm - subroutine psb_cscatterv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_cscatterv(globx, locx, desc_a, info, root) + import + implicit none complex(psb_spk_), intent(out) :: locx(:) complex(psb_spk_), intent(in) :: globx(:) type(psb_desc_type), intent(in) :: desc_a @@ -114,9 +121,8 @@ module psb_c_comm_mod end interface psb_scatter interface psb_gather - subroutine psb_csp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) - use psb_desc_mod - use psb_mat_mod + subroutine psb_csp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) + import implicit none type(psb_cspmat_type), intent(inout) :: loca type(psb_cspmat_type), intent(out) :: globa @@ -126,24 +132,26 @@ module psb_c_comm_mod logical, intent(in), optional :: keepnum,keeploc end subroutine psb_csp_allgather subroutine psb_cgatherm(globx, locx, desc_a, info, root) - use psb_desc_mod + import + implicit none complex(psb_spk_), intent(in) :: locx(:,:) complex(psb_spk_), intent(out), allocatable :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_cgatherm - subroutine psb_cgatherv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_cgatherv(globx, locx, desc_a, info, root) + import + implicit none complex(psb_spk_), intent(in) :: locx(:) complex(psb_spk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_cgatherv - subroutine psb_cgather_vect(globx, locx, desc_a, info, root) - use psb_desc_mod - use psb_c_vect_mod + subroutine psb_cgather_vect(globx, locx, desc_a, info, root) + import + implicit none type(psb_c_vect_type), intent(inout) :: locx complex(psb_spk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/psb_c_tools_mod.f90 b/base/modules/psb_c_tools_mod.f90 index 365c7619..64fb0830 100644 --- a/base/modules/psb_c_tools_mod.f90 +++ b/base/modules/psb_c_tools_mod.f90 @@ -36,9 +36,7 @@ Module psb_c_tools_mod interface psb_geall subroutine psb_calloc(x, desc_a, info, n, lb) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import implicit none complex(psb_spk_), allocatable, intent(out) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -46,27 +44,24 @@ Module psb_c_tools_mod integer(psb_ipk_), optional, intent(in) :: n, lb end subroutine psb_calloc subroutine psb_callocv(x, desc_a,info,n) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none complex(psb_spk_), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_callocv subroutine psb_calloc_vect(x, desc_a,info,n) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_c_vect_type), intent(out) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_calloc_vect subroutine psb_calloc_vect_r2(x, desc_a,info,n,lb) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_c_vect_type), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info @@ -77,25 +72,22 @@ Module psb_c_tools_mod interface psb_geasb subroutine psb_casb(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a complex(psb_spk_), allocatable, intent(inout) :: x(:,:) integer(psb_ipk_), intent(out) :: info end subroutine psb_casb subroutine psb_casbv(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a complex(psb_spk_), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_casbv subroutine psb_casb_vect(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -103,9 +95,8 @@ Module psb_c_tools_mod logical, intent(in), optional :: scratch end subroutine psb_casb_vect subroutine psb_casb_vect_r2(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -114,51 +105,31 @@ Module psb_c_tools_mod end subroutine psb_casb_vect_r2 end interface - interface psb_sphalo - Subroutine psb_csphalo(a,desc_a,blk,info,rowcnv,colcnv,& - & rowscale,colscale,outfmt,data) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat - Type(psb_cspmat_type),Intent(in) :: a - Type(psb_cspmat_type),Intent(inout) :: blk - Type(psb_desc_type),Intent(in), target :: desc_a - integer(psb_ipk_), intent(out) :: info - logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale - character(len=5), optional :: outfmt - integer(psb_ipk_), intent(in), optional :: data - end Subroutine psb_csphalo - end interface - interface psb_gefree subroutine psb_cfree(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none complex(psb_spk_),allocatable, intent(inout) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_cfree subroutine psb_cfreev(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none complex(psb_spk_),allocatable, intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_cfreev subroutine psb_cfree_vect(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info end subroutine psb_cfree_vect subroutine psb_cfree_vect_r2(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -168,9 +139,8 @@ Module psb_c_tools_mod interface psb_geins subroutine psb_cinsi(m,irw,val, x, desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a complex(psb_spk_),intent(inout) :: x(:,:) @@ -181,9 +151,8 @@ Module psb_c_tools_mod logical, intent(in), optional :: local end subroutine psb_cinsi subroutine psb_cinsvi(m, irw,val, x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a complex(psb_spk_),intent(inout) :: x(:) @@ -194,9 +163,8 @@ Module psb_c_tools_mod logical, intent(in), optional :: local end subroutine psb_cinsvi subroutine psb_cins_vect(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), intent(inout) :: x @@ -207,9 +175,8 @@ Module psb_c_tools_mod logical, intent(in), optional :: local end subroutine psb_cins_vect subroutine psb_cins_vect_v(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, psb_i_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), intent(inout) :: x @@ -220,9 +187,8 @@ Module psb_c_tools_mod logical, intent(in), optional :: local end subroutine psb_cins_vect_v subroutine psb_cins_vect_r2(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_c_vect_type), intent(inout) :: x(:) @@ -236,9 +202,8 @@ Module psb_c_tools_mod interface psb_cdbldext Subroutine psb_ccdbldext(a,desc_a,novr,desc_ov,info,extype) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: novr Type(psb_cspmat_type), Intent(in) :: a Type(psb_desc_type), Intent(inout), target :: desc_a @@ -248,11 +213,26 @@ Module psb_c_tools_mod end Subroutine psb_ccdbldext end interface + interface psb_sphalo + Subroutine psb_csphalo(a,desc_a,blk,info,rowcnv,colcnv,& + & rowscale,colscale,outfmt,data) + import + implicit none + Type(psb_cspmat_type),Intent(in) :: a + Type(psb_cspmat_type),Intent(inout) :: blk + Type(psb_desc_type),Intent(in), target :: desc_a + integer(psb_ipk_), intent(out) :: info + logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale + character(len=5), optional :: outfmt + integer(psb_ipk_), intent(in), optional :: data + end Subroutine psb_csphalo + end interface + + interface psb_spall subroutine psb_cspalloc(a, desc_a, info, nnz) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_cspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info @@ -262,9 +242,8 @@ Module psb_c_tools_mod interface psb_spasb subroutine psb_cspasb(a,desc_a, info, afmt, upd, dupl,mold) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_cspmat_type), intent (inout) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -276,9 +255,8 @@ Module psb_c_tools_mod interface psb_spfree subroutine psb_cspfree(a, desc_a,info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_cspmat_type), intent(inout) ::a integer(psb_ipk_), intent(out) :: info @@ -288,9 +266,8 @@ Module psb_c_tools_mod interface psb_spins subroutine psb_cspins(nz,ia,ja,val,a,desc_a,info,rebuild,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_cspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz,ia(:),ja(:) @@ -301,9 +278,8 @@ Module psb_c_tools_mod end subroutine psb_cspins subroutine psb_cspins_v(nz,ia,ja,val,a,desc_a,info,rebuild,local) use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type,& - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_cspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz @@ -314,9 +290,8 @@ Module psb_c_tools_mod logical, intent(in), optional :: local end subroutine psb_cspins_v subroutine psb_cspins_2desc(nz,ia,ja,val,a,desc_ar,desc_ac,info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_ar type(psb_desc_type), intent(inout) :: desc_ac type(psb_cspmat_type), intent(inout) :: a @@ -329,9 +304,8 @@ Module psb_c_tools_mod interface psb_sprn subroutine psb_csprn(a, desc_a,info,clear) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_c_vect_type, & - & psb_cspmat_type, psb_c_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_cspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/psb_c_vect_mod.F90 b/base/modules/psb_c_vect_mod.F90 index 8e0322a4..953108fc 100644 --- a/base/modules/psb_c_vect_mod.F90 +++ b/base/modules/psb_c_vect_mod.F90 @@ -48,27 +48,6 @@ module psb_c_vect_mod procedure, pass(x) :: get_nrows => c_vect_get_nrows procedure, pass(x) :: sizeof => c_vect_sizeof procedure, pass(x) :: get_fmt => c_vect_get_fmt - procedure, pass(x) :: dot_v => c_vect_dot_v - procedure, pass(x) :: dot_a => c_vect_dot_a - generic, public :: dot => dot_v, dot_a - procedure, pass(y) :: axpby_v => c_vect_axpby_v - procedure, pass(y) :: axpby_a => c_vect_axpby_a - generic, public :: axpby => axpby_v, axpby_a - procedure, pass(y) :: mlt_v => c_vect_mlt_v - procedure, pass(y) :: mlt_a => c_vect_mlt_a - procedure, pass(z) :: mlt_a_2 => c_vect_mlt_a_2 - procedure, pass(z) :: mlt_v_2 => c_vect_mlt_v_2 - procedure, pass(z) :: mlt_va => c_vect_mlt_va - procedure, pass(z) :: mlt_av => c_vect_mlt_av - generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& - & mlt_v_2, mlt_av, mlt_va - procedure, pass(x) :: scal => c_vect_scal - procedure, pass(x) :: absval1 => c_vect_absval1 - procedure, pass(x) :: absval2 => c_vect_absval2 - generic, public :: absval => absval1, absval2 - procedure, pass(x) :: nrm2 => c_vect_nrm2 - procedure, pass(x) :: amax => c_vect_amax - procedure, pass(x) :: asum => c_vect_asum procedure, pass(x) :: all => c_vect_all procedure, pass(x) :: reall => c_vect_reall procedure, pass(x) :: zero => c_vect_zero @@ -92,6 +71,27 @@ module psb_c_vect_mod procedure, pass(x) :: set_vect => c_vect_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: clone => c_vect_clone + procedure, pass(x) :: dot_v => c_vect_dot_v + procedure, pass(x) :: dot_a => c_vect_dot_a + generic, public :: dot => dot_v, dot_a + procedure, pass(y) :: axpby_v => c_vect_axpby_v + procedure, pass(y) :: axpby_a => c_vect_axpby_a + generic, public :: axpby => axpby_v, axpby_a + procedure, pass(y) :: mlt_v => c_vect_mlt_v + procedure, pass(y) :: mlt_a => c_vect_mlt_a + procedure, pass(z) :: mlt_a_2 => c_vect_mlt_a_2 + procedure, pass(z) :: mlt_v_2 => c_vect_mlt_v_2 + procedure, pass(z) :: mlt_va => c_vect_mlt_va + procedure, pass(z) :: mlt_av => c_vect_mlt_av + generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& + & mlt_v_2, mlt_av, mlt_va + procedure, pass(x) :: scal => c_vect_scal + procedure, pass(x) :: absval1 => c_vect_absval1 + procedure, pass(x) :: absval2 => c_vect_absval2 + generic, public :: absval => absval1, absval2 + procedure, pass(x) :: nrm2 => c_vect_nrm2 + procedure, pass(x) :: amax => c_vect_amax + procedure, pass(x) :: asum => c_vect_asum end type psb_c_vect_type public :: psb_c_vect @@ -296,6 +296,191 @@ contains res = 'NULL' if (allocated(x%v)) res = x%v%get_fmt() end function c_vect_get_fmt + subroutine c_vect_all(n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_c_vect_type), intent(inout) :: x + class(psb_c_base_vect_type), intent(in), optional :: mold + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(x%v,stat=info,mold=mold) +#else + call mold%mold(x%v,info) +#endif + else + allocate(psb_c_base_vect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(n,info) + else + info = psb_err_alloc_dealloc_ + end if + + end subroutine c_vect_all + + subroutine c_vect_reall(n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(n,info) + if (info == 0) & + & call x%asb(n,info) + + end subroutine c_vect_reall + + subroutine c_vect_zero(x) + use psi_serial_mod + implicit none + class(psb_c_vect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine c_vect_zero + + subroutine c_vect_asb(n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%v%asb(n,info) + + end subroutine c_vect_asb + + subroutine c_vect_sync(x) + implicit none + class(psb_c_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine c_vect_sync + + subroutine c_vect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + complex(psb_spk_) :: alpha, beta, y(:) + class(psb_c_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine c_vect_gthab + + subroutine c_vect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + complex(psb_spk_) :: y(:) + class(psb_c_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine c_vect_gthzv + + subroutine c_vect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + complex(psb_spk_) :: beta, x(:) + class(psb_c_vect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine c_vect_sctb + + subroutine c_vect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine c_vect_free + + subroutine c_vect_ins_a(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: irl(:) + complex(psb_spk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl,val,dupl,info) + + end subroutine c_vect_ins_a + + subroutine c_vect_ins_v(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + class(psb_i_vect_type), intent(inout) :: irl + class(psb_c_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl%v,val%v,dupl,info) + + end subroutine c_vect_ins_v + + + subroutine c_vect_cnv(x,mold) + class(psb_c_vect_type), intent(inout) :: x + class(psb_c_base_vect_type), intent(in), optional :: mold + class(psb_c_base_vect_type), allocatable :: tmp + integer(psb_ipk_) :: info + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(tmp,stat=info,mold=mold) +#else + call mold%mold(tmp,info) +#endif + if (allocated(x%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%free(info) + end if + call move_alloc(tmp,x%v) + end if + end subroutine c_vect_cnv function c_vect_dot_v(n,x,y) result(res) implicit none @@ -522,197 +707,12 @@ contains end function c_vect_asum - subroutine c_vect_all(n, x, info, mold) - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_c_vect_type), intent(inout) :: x - class(psb_c_base_vect_type), intent(in), optional :: mold - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%free(info) +end module psb_c_vect_mod - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(x%v,stat=info,mold=mold) -#else - call mold%mold(x%v,info) -#endif - else - allocate(psb_c_base_vect_type :: x%v,stat=info) - endif - if (info == 0) then - call x%v%all(n,info) - else - info = psb_err_alloc_dealloc_ - end if - end subroutine c_vect_all - subroutine c_vect_reall(n, x, info) - - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (.not.allocated(x%v)) & - & call x%all(n,info) - if (info == 0) & - & call x%asb(n,info) - - end subroutine c_vect_reall - - subroutine c_vect_zero(x) - use psi_serial_mod - implicit none - class(psb_c_vect_type), intent(inout) :: x - - if (allocated(x%v)) call x%v%zero() - - end subroutine c_vect_zero - - subroutine c_vect_asb(n, x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%v%asb(n,info) - - end subroutine c_vect_asb - - subroutine c_vect_sync(x) - implicit none - class(psb_c_vect_type), intent(inout) :: x - - if (allocated(x%v)) & - & call x%v%sync() - - end subroutine c_vect_sync - - subroutine c_vect_gthab(n,idx,alpha,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - complex(psb_spk_) :: alpha, beta, y(:) - class(psb_c_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,alpha,beta,y) - - end subroutine c_vect_gthab - - subroutine c_vect_gthzv(n,idx,x,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - complex(psb_spk_) :: y(:) - class(psb_c_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,y) - - end subroutine c_vect_gthzv - - subroutine c_vect_sctb(n,idx,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - complex(psb_spk_) :: beta, x(:) - class(psb_c_vect_type) :: y - - if (allocated(y%v)) & - & call y%v%sct(n,idx,x,beta) - - end subroutine c_vect_sctb - - subroutine c_vect_free(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (allocated(x%v)) then - call x%v%free(info) - if (info == 0) deallocate(x%v,stat=info) - end if - - end subroutine c_vect_free - - subroutine c_vect_ins_a(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - integer(psb_ipk_), intent(in) :: irl(:) - complex(psb_spk_), intent(in) :: val(:) - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl,val,dupl,info) - - end subroutine c_vect_ins_a - - subroutine c_vect_ins_v(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - class(psb_i_vect_type), intent(inout) :: irl - class(psb_c_vect_type), intent(inout) :: val - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl%v,val%v,dupl,info) - - end subroutine c_vect_ins_v - - - subroutine c_vect_cnv(x,mold) - class(psb_c_vect_type), intent(inout) :: x - class(psb_c_base_vect_type), intent(in), optional :: mold - class(psb_c_base_vect_type), allocatable :: tmp - integer(psb_ipk_) :: info - - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(tmp,stat=info,mold=mold) -#else - call mold%mold(tmp,info) -#endif - if (allocated(x%v)) then - call x%v%sync() - if (info == psb_success_) call tmp%bld(x%v%v) - call x%v%free(info) - end if - call move_alloc(tmp,x%v) - end if - end subroutine c_vect_cnv - -end module psb_c_vect_mod - - - -module psb_c_multivect_mod +module psb_c_multivect_mod use psb_c_base_multivect_mod use psb_const_mod @@ -726,6 +726,28 @@ module psb_c_multivect_mod procedure, pass(x) :: get_ncols => c_vect_get_ncols procedure, pass(x) :: sizeof => c_vect_sizeof procedure, pass(x) :: get_fmt => c_vect_get_fmt + + procedure, pass(x) :: all => c_vect_all + procedure, pass(x) :: reall => c_vect_reall + procedure, pass(x) :: zero => c_vect_zero + procedure, pass(x) :: asb => c_vect_asb + procedure, pass(x) :: sync => c_vect_sync + procedure, pass(x) :: free => c_vect_free + procedure, pass(x) :: ins => c_vect_ins + procedure, pass(x) :: bld_x => c_vect_bld_x + procedure, pass(x) :: bld_n => c_vect_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: get_vect => c_vect_get_vect + procedure, pass(x) :: cnv => c_vect_cnv + procedure, pass(x) :: set_scal => c_vect_set_scal + procedure, pass(x) :: set_vect => c_vect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => c_vect_clone +!!$ procedure, pass(x) :: gthab => c_vect_gthab +!!$ procedure, pass(x) :: gthzv => c_vect_gthzv +!!$ generic, public :: gth => gthab, gthzv +!!$ procedure, pass(y) :: sctb => c_vect_sctb +!!$ generic, public :: sct => sctb !!$ procedure, pass(x) :: dot_v => c_vect_dot_v !!$ procedure, pass(x) :: dot_a => c_vect_dot_a !!$ generic, public :: dot => dot_v, dot_a @@ -744,27 +766,6 @@ module psb_c_multivect_mod !!$ procedure, pass(x) :: nrm2 => c_vect_nrm2 !!$ procedure, pass(x) :: amax => c_vect_amax !!$ procedure, pass(x) :: asum => c_vect_asum - procedure, pass(x) :: all => c_vect_all - procedure, pass(x) :: reall => c_vect_reall - procedure, pass(x) :: zero => c_vect_zero - procedure, pass(x) :: asb => c_vect_asb - procedure, pass(x) :: sync => c_vect_sync -!!$ procedure, pass(x) :: gthab => c_vect_gthab -!!$ procedure, pass(x) :: gthzv => c_vect_gthzv -!!$ generic, public :: gth => gthab, gthzv -!!$ procedure, pass(y) :: sctb => c_vect_sctb -!!$ generic, public :: sct => sctb - procedure, pass(x) :: free => c_vect_free - procedure, pass(x) :: ins => c_vect_ins - procedure, pass(x) :: bld_x => c_vect_bld_x - procedure, pass(x) :: bld_n => c_vect_bld_n - generic, public :: bld => bld_x, bld_n - procedure, pass(x) :: get_vect => c_vect_get_vect - procedure, pass(x) :: cnv => c_vect_cnv - procedure, pass(x) :: set_scal => c_vect_set_scal - procedure, pass(x) :: set_vect => c_vect_set_vect - generic, public :: set => set_vect, set_scal - procedure, pass(x) :: clone => c_vect_clone end type psb_c_multivect_type public :: psb_c_multivect, psb_c_multivect_type,& @@ -971,214 +972,6 @@ contains if (allocated(x%v)) res = x%v%get_fmt() end function c_vect_get_fmt -!!$ function c_vect_dot_v(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x, y -!!$ integer(psb_ipk_), intent(in) :: n -!!$ complex(psb_spk_) :: res -!!$ -!!$ res = czero -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & res = x%v%dot(n,y%v) -!!$ -!!$ end function c_vect_dot_v -!!$ -!!$ function c_vect_dot_a(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ complex(psb_spk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: n -!!$ complex(psb_spk_) :: res -!!$ -!!$ res = czero -!!$ if (allocated(x%v)) & -!!$ & res = x%v%dot(n,y) -!!$ -!!$ end function c_vect_dot_a -!!$ -!!$ subroutine c_vect_axpby_v(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ class(psb_c_multivect_type), intent(inout) :: y -!!$ complex(psb_spk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(x%v).and.allocated(y%v)) then -!!$ call y%v%axpby(m,alpha,x%v,beta,info) -!!$ else -!!$ info = psb_err_invalid_vect_state_ -!!$ end if -!!$ -!!$ end subroutine c_vect_axpby_v -!!$ -!!$ subroutine c_vect_axpby_a(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ complex(psb_spk_), intent(in) :: x(:) -!!$ class(psb_c_multivect_type), intent(inout) :: y -!!$ complex(psb_spk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(y%v)) & -!!$ & call y%v%axpby(m,alpha,x,beta,info) -!!$ -!!$ end subroutine c_vect_axpby_a -!!$ -!!$ -!!$ subroutine c_vect_mlt_v(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ class(psb_c_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & call y%v%mlt(x%v,info) -!!$ -!!$ end subroutine c_vect_mlt_v -!!$ -!!$ subroutine c_vect_mlt_a(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_spk_), intent(in) :: x(:) -!!$ class(psb_c_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ -!!$ info = 0 -!!$ if (allocated(y%v)) & -!!$ & call y%v%mlt(x,info) -!!$ -!!$ end subroutine c_vect_mlt_a -!!$ -!!$ -!!$ subroutine c_vect_mlt_a_2(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_spk_), intent(in) :: alpha,beta -!!$ complex(psb_spk_), intent(in) :: y(:) -!!$ complex(psb_spk_), intent(in) :: x(:) -!!$ class(psb_c_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x,y,beta,info) -!!$ -!!$ end subroutine c_vect_mlt_a_2 -!!$ -!!$ subroutine c_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_spk_), intent(in) :: alpha,beta -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ class(psb_c_multivect_type), intent(inout) :: y -!!$ class(psb_c_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ character(len=1), intent(in), optional :: conjgx, conjgy -!!$ -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v).and.& -!!$ & allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) -!!$ -!!$ end subroutine c_vect_mlt_v_2 -!!$ -!!$ subroutine c_vect_mlt_av(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_spk_), intent(in) :: alpha,beta -!!$ complex(psb_spk_), intent(in) :: x(:) -!!$ class(psb_c_multivect_type), intent(inout) :: y -!!$ class(psb_c_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v).and.allocated(y%v)) & -!!$ & call z%v%mlt(alpha,x,y%v,beta,info) -!!$ -!!$ end subroutine c_vect_mlt_av -!!$ -!!$ subroutine c_vect_mlt_va(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_spk_), intent(in) :: alpha,beta -!!$ complex(psb_spk_), intent(in) :: y(:) -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ class(psb_c_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ if (allocated(z%v).and.allocated(x%v)) & -!!$ & call z%v%mlt(alpha,x%v,y,beta,info) -!!$ -!!$ end subroutine c_vect_mlt_va -!!$ -!!$ subroutine c_vect_scal(alpha, x) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ complex(psb_spk_), intent (in) :: alpha -!!$ -!!$ if (allocated(x%v)) call x%v%scal(alpha) -!!$ -!!$ end subroutine c_vect_scal -!!$ -!!$ -!!$ function c_vect_nrm2(n,x) result(res) -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%nrm2(n) -!!$ else -!!$ res = szero -!!$ end if -!!$ -!!$ end function c_vect_nrm2 -!!$ -!!$ function c_vect_amax(n,x) result(res) -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%amax(n) -!!$ else -!!$ res = szero -!!$ end if -!!$ -!!$ end function c_vect_amax -!!$ -!!$ function c_vect_asum(n,x) result(res) -!!$ implicit none -!!$ class(psb_c_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%asum(n) -!!$ else -!!$ res = szero -!!$ end if -!!$ -!!$ end function c_vect_asum - subroutine c_vect_all(m,n, x, info, mold) implicit none @@ -1341,4 +1134,213 @@ contains end if end subroutine c_vect_cnv + +!!$ function c_vect_dot_v(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x, y +!!$ integer(psb_ipk_), intent(in) :: n +!!$ complex(psb_spk_) :: res +!!$ +!!$ res = czero +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & res = x%v%dot(n,y%v) +!!$ +!!$ end function c_vect_dot_v +!!$ +!!$ function c_vect_dot_a(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ complex(psb_spk_), intent(in) :: y(:) +!!$ integer(psb_ipk_), intent(in) :: n +!!$ complex(psb_spk_) :: res +!!$ +!!$ res = czero +!!$ if (allocated(x%v)) & +!!$ & res = x%v%dot(n,y) +!!$ +!!$ end function c_vect_dot_a +!!$ +!!$ subroutine c_vect_axpby_v(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ class(psb_c_multivect_type), intent(inout) :: y +!!$ complex(psb_spk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(x%v).and.allocated(y%v)) then +!!$ call y%v%axpby(m,alpha,x%v,beta,info) +!!$ else +!!$ info = psb_err_invalid_vect_state_ +!!$ end if +!!$ +!!$ end subroutine c_vect_axpby_v +!!$ +!!$ subroutine c_vect_axpby_a(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ complex(psb_spk_), intent(in) :: x(:) +!!$ class(psb_c_multivect_type), intent(inout) :: y +!!$ complex(psb_spk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(y%v)) & +!!$ & call y%v%axpby(m,alpha,x,beta,info) +!!$ +!!$ end subroutine c_vect_axpby_a +!!$ +!!$ +!!$ subroutine c_vect_mlt_v(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ class(psb_c_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & call y%v%mlt(x%v,info) +!!$ +!!$ end subroutine c_vect_mlt_v +!!$ +!!$ subroutine c_vect_mlt_a(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_spk_), intent(in) :: x(:) +!!$ class(psb_c_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ +!!$ info = 0 +!!$ if (allocated(y%v)) & +!!$ & call y%v%mlt(x,info) +!!$ +!!$ end subroutine c_vect_mlt_a +!!$ +!!$ +!!$ subroutine c_vect_mlt_a_2(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_spk_), intent(in) :: alpha,beta +!!$ complex(psb_spk_), intent(in) :: y(:) +!!$ complex(psb_spk_), intent(in) :: x(:) +!!$ class(psb_c_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x,y,beta,info) +!!$ +!!$ end subroutine c_vect_mlt_a_2 +!!$ +!!$ subroutine c_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_spk_), intent(in) :: alpha,beta +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ class(psb_c_multivect_type), intent(inout) :: y +!!$ class(psb_c_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ character(len=1), intent(in), optional :: conjgx, conjgy +!!$ +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v).and.& +!!$ & allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) +!!$ +!!$ end subroutine c_vect_mlt_v_2 +!!$ +!!$ subroutine c_vect_mlt_av(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_spk_), intent(in) :: alpha,beta +!!$ complex(psb_spk_), intent(in) :: x(:) +!!$ class(psb_c_multivect_type), intent(inout) :: y +!!$ class(psb_c_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v).and.allocated(y%v)) & +!!$ & call z%v%mlt(alpha,x,y%v,beta,info) +!!$ +!!$ end subroutine c_vect_mlt_av +!!$ +!!$ subroutine c_vect_mlt_va(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_spk_), intent(in) :: alpha,beta +!!$ complex(psb_spk_), intent(in) :: y(:) +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ class(psb_c_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ +!!$ if (allocated(z%v).and.allocated(x%v)) & +!!$ & call z%v%mlt(alpha,x%v,y,beta,info) +!!$ +!!$ end subroutine c_vect_mlt_va +!!$ +!!$ subroutine c_vect_scal(alpha, x) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ complex(psb_spk_), intent (in) :: alpha +!!$ +!!$ if (allocated(x%v)) call x%v%scal(alpha) +!!$ +!!$ end subroutine c_vect_scal +!!$ +!!$ +!!$ function c_vect_nrm2(n,x) result(res) +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%nrm2(n) +!!$ else +!!$ res = szero +!!$ end if +!!$ +!!$ end function c_vect_nrm2 +!!$ +!!$ function c_vect_amax(n,x) result(res) +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%amax(n) +!!$ else +!!$ res = szero +!!$ end if +!!$ +!!$ end function c_vect_amax +!!$ +!!$ function c_vect_asum(n,x) result(res) +!!$ implicit none +!!$ class(psb_c_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%asum(n) +!!$ else +!!$ res = szero +!!$ end if +!!$ +!!$ end function c_vect_asum + end module psb_c_multivect_mod diff --git a/base/modules/psb_d_base_vect_mod.f90 b/base/modules/psb_d_base_vect_mod.f90 index d00bb913..eb098253 100644 --- a/base/modules/psb_d_base_vect_mod.f90 +++ b/base/modules/psb_d_base_vect_mod.f90 @@ -46,8 +46,8 @@ module psb_d_base_vect_mod use psb_const_mod use psb_error_mod - use psb_i_base_vect_mod use psb_realloc_mod + use psb_i_base_vect_mod !> \namespace psb_base_mod \class psb_d_base_vect_type !! The psb_d_base_vect_type @@ -123,6 +123,20 @@ module psb_d_base_vect_mod procedure, pass(x) :: set_scal => d_base_set_scal procedure, pass(x) :: set_vect => d_base_set_vect generic, public :: set => set_vect, set_scal + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => d_base_gthab + procedure, pass(x) :: gthzv => d_base_gthzv + procedure, pass(x) :: gthzv_x => d_base_gthzv_x + procedure, pass(x) :: gthzbuf => d_base_gthzbuf + generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => d_base_sctb + procedure, pass(y) :: sctb_x => d_base_sctb_x + procedure, pass(y) :: sctb_buf => d_base_sctb_buf + generic, public :: sct => sctb, sctb_x, sctb_buf + ! ! Dot product and AXPBY @@ -154,19 +168,7 @@ module psb_d_base_vect_mod procedure, pass(x) :: nrm2 => d_base_nrm2 procedure, pass(x) :: amax => d_base_amax procedure, pass(x) :: asum => d_base_asum - ! - ! Gather/scatter. These are needed for MPI interfacing. - ! May have to be reworked. - ! - procedure, pass(x) :: gthab => d_base_gthab - procedure, pass(x) :: gthzv => d_base_gthzv - procedure, pass(x) :: gthzv_x => d_base_gthzv_x - procedure, pass(x) :: gthzbuf => d_base_gthzbuf - generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf - procedure, pass(y) :: sctb => d_base_sctb - procedure, pass(y) :: sctb_x => d_base_sctb_x - procedure, pass(y) :: sctb_buf => d_base_sctb_buf - generic, public :: sct => sctb, sctb_x, sctb_buf + end type psb_d_base_vect_type public :: psb_d_base_vect @@ -668,6 +670,36 @@ contains end subroutine d_base_set_scal + + ! + !> Function base_set_vect + !! \memberof psb_d_base_vect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine d_base_set_vect(x,val,first,last) + class(psb_d_base_vect_type), intent(inout) :: x + real(psb_dpk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info, first_, last_, nr + + first_=1 + last_=min(psb_size(x%v),size(val)) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(first_:last_) = val(1:last_-first_+1) + else + x%v = val + end if + call x%set_host() + + end subroutine d_base_set_vect + + ! ! Overwrite with absolute value ! @@ -680,7 +712,7 @@ contains class(psb_d_base_vect_type), intent(inout) :: x if (allocated(x%v)) then - if (.not.x%is_host()) call x%sync() + if (x%is_dev()) call x%sync() x%v = abs(x%v) call x%set_host() end if @@ -693,40 +725,12 @@ contains if (.not.x%is_host()) call x%sync() if (allocated(x%v)) then - call y%bld(x%v) + call y%axpby(min(x%get_nrows(),y%get_nrows()),done,x,dzero,info) call y%absval() - call y%set_host() end if end subroutine d_base_absval2 - ! - !> Function base_set_vect - !! \memberof psb_d_base_vect_type - !! \brief Set all entries - !! \param val(:) The vector to be copied in - !! - subroutine d_base_set_vect(x,val,first,last) - class(psb_d_base_vect_type), intent(inout) :: x - real(psb_dpk_), intent(in) :: val(:) - integer(psb_ipk_), optional :: first, last - - integer(psb_ipk_) :: info, first_, last_, nr - - first_=1 - last_=min(psb_size(x%v),size(val)) - if (present(first)) first_ = max(1,first) - if (present(last)) last_ = min(last,last_) - - if (allocated(x%v)) then - x%v(first_:last_) = val(1:last_-first_+1) - else - x%v = val - end if - call x%set_host() - - end subroutine d_base_set_vect - ! ! Dot products ! @@ -2422,6 +2426,5 @@ contains !!$ call y%sct(n,idx%v(i:),x,beta) !!$ !!$ end subroutine d_base_mv_sctb_x - end module psb_d_base_multivect_mod diff --git a/base/modules/psb_d_comm_mod.f90 b/base/modules/psb_d_comm_mod.f90 index 0838e0a9..7dadc55f 100644 --- a/base/modules/psb_d_comm_mod.f90 +++ b/base/modules/psb_d_comm_mod.f90 @@ -30,27 +30,33 @@ !!$ !!$ module psb_d_comm_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_dpk_ + use psb_mat_mod, only : psb_dspmat_type + + use psb_d_vect_mod, only : psb_d_vect_type, psb_d_base_vect_type interface psb_ovrl - subroutine psb_dovrlm(x,desc_a,info,jx,ik,work,update,mode) - use psb_desc_mod + subroutine psb_dovrlm(x,desc_a,info,jx,ik,work,update,mode) + import + implicit none real(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info real(psb_dpk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_dovrlm - subroutine psb_dovrlv(x,desc_a,info,work,update,mode) - use psb_desc_mod + subroutine psb_dovrlv(x,desc_a,info,work,update,mode) + import + implicit none real(psb_dpk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info real(psb_dpk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_dovrlv - subroutine psb_dovrl_vect(x,desc_a,info,work,update,mode) - use psb_desc_mod - use psb_d_vect_mod + subroutine psb_dovrl_vect(x,desc_a,info,work,update,mode) + import + implicit none type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -60,33 +66,32 @@ module psb_d_comm_mod end interface psb_ovrl interface psb_halo - subroutine psb_dhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) - use psb_desc_mod + subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) + import + implicit none real(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(in), optional :: alpha real(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran end subroutine psb_dhalom - subroutine psb_dhalov(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod + subroutine psb_dhalov(x,desc_a,info,work,tran,mode,data) + import + implicit none real(psb_dpk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(in), optional :: alpha real(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_dhalov - subroutine psb_dhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod - use psb_d_vect_mod + subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) + import + implicit none type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(in), optional :: alpha real(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -95,16 +100,18 @@ module psb_d_comm_mod interface psb_scatter - subroutine psb_dscatterm(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_dscatterm(globx, locx, desc_a, info, root) + import + implicit none real(psb_dpk_), intent(out) :: locx(:,:) real(psb_dpk_), intent(in) :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_dscatterm - subroutine psb_dscatterv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_dscatterv(globx, locx, desc_a, info, root) + import + implicit none real(psb_dpk_), intent(out) :: locx(:) real(psb_dpk_), intent(in) :: globx(:) type(psb_desc_type), intent(in) :: desc_a @@ -114,9 +121,8 @@ module psb_d_comm_mod end interface psb_scatter interface psb_gather - subroutine psb_dsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) - use psb_desc_mod - use psb_mat_mod + subroutine psb_dsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) + import implicit none type(psb_dspmat_type), intent(inout) :: loca type(psb_dspmat_type), intent(out) :: globa @@ -126,24 +132,26 @@ module psb_d_comm_mod logical, intent(in), optional :: keepnum,keeploc end subroutine psb_dsp_allgather subroutine psb_dgatherm(globx, locx, desc_a, info, root) - use psb_desc_mod + import + implicit none real(psb_dpk_), intent(in) :: locx(:,:) real(psb_dpk_), intent(out), allocatable :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_dgatherm - subroutine psb_dgatherv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_dgatherv(globx, locx, desc_a, info, root) + import + implicit none real(psb_dpk_), intent(in) :: locx(:) real(psb_dpk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_dgatherv - subroutine psb_dgather_vect(globx, locx, desc_a, info, root) - use psb_desc_mod - use psb_d_vect_mod + subroutine psb_dgather_vect(globx, locx, desc_a, info, root) + import + implicit none type(psb_d_vect_type), intent(inout) :: locx real(psb_dpk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/psb_d_tools_mod.f90 b/base/modules/psb_d_tools_mod.f90 index 08f66831..e02f9533 100644 --- a/base/modules/psb_d_tools_mod.f90 +++ b/base/modules/psb_d_tools_mod.f90 @@ -36,9 +36,7 @@ Module psb_d_tools_mod interface psb_geall subroutine psb_dalloc(x, desc_a, info, n, lb) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import implicit none real(psb_dpk_), allocatable, intent(out) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -46,27 +44,24 @@ Module psb_d_tools_mod integer(psb_ipk_), optional, intent(in) :: n, lb end subroutine psb_dalloc subroutine psb_dallocv(x, desc_a,info,n) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none real(psb_dpk_), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_dallocv subroutine psb_dalloc_vect(x, desc_a,info,n) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_d_vect_type), intent(out) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_dalloc_vect subroutine psb_dalloc_vect_r2(x, desc_a,info,n,lb) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_d_vect_type), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info @@ -77,25 +72,22 @@ Module psb_d_tools_mod interface psb_geasb subroutine psb_dasb(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a real(psb_dpk_), allocatable, intent(inout) :: x(:,:) integer(psb_ipk_), intent(out) :: info end subroutine psb_dasb subroutine psb_dasbv(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a real(psb_dpk_), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_dasbv subroutine psb_dasb_vect(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -103,9 +95,8 @@ Module psb_d_tools_mod logical, intent(in), optional :: scratch end subroutine psb_dasb_vect subroutine psb_dasb_vect_r2(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -114,51 +105,31 @@ Module psb_d_tools_mod end subroutine psb_dasb_vect_r2 end interface - interface psb_sphalo - Subroutine psb_dsphalo(a,desc_a,blk,info,rowcnv,colcnv,& - & rowscale,colscale,outfmt,data) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat - Type(psb_dspmat_type),Intent(in) :: a - Type(psb_dspmat_type),Intent(inout) :: blk - Type(psb_desc_type),Intent(in), target :: desc_a - integer(psb_ipk_), intent(out) :: info - logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale - character(len=5), optional :: outfmt - integer(psb_ipk_), intent(in), optional :: data - end Subroutine psb_dsphalo - end interface - interface psb_gefree subroutine psb_dfree(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none real(psb_dpk_),allocatable, intent(inout) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_dfree subroutine psb_dfreev(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none real(psb_dpk_),allocatable, intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_dfreev subroutine psb_dfree_vect(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info end subroutine psb_dfree_vect subroutine psb_dfree_vect_r2(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -168,9 +139,8 @@ Module psb_d_tools_mod interface psb_geins subroutine psb_dinsi(m,irw,val, x, desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a real(psb_dpk_),intent(inout) :: x(:,:) @@ -181,9 +151,8 @@ Module psb_d_tools_mod logical, intent(in), optional :: local end subroutine psb_dinsi subroutine psb_dinsvi(m, irw,val, x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a real(psb_dpk_),intent(inout) :: x(:) @@ -194,9 +163,8 @@ Module psb_d_tools_mod logical, intent(in), optional :: local end subroutine psb_dinsvi subroutine psb_dins_vect(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), intent(inout) :: x @@ -207,9 +175,8 @@ Module psb_d_tools_mod logical, intent(in), optional :: local end subroutine psb_dins_vect subroutine psb_dins_vect_v(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, psb_i_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), intent(inout) :: x @@ -220,9 +187,8 @@ Module psb_d_tools_mod logical, intent(in), optional :: local end subroutine psb_dins_vect_v subroutine psb_dins_vect_r2(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_d_vect_type), intent(inout) :: x(:) @@ -236,9 +202,8 @@ Module psb_d_tools_mod interface psb_cdbldext Subroutine psb_dcdbldext(a,desc_a,novr,desc_ov,info,extype) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: novr Type(psb_dspmat_type), Intent(in) :: a Type(psb_desc_type), Intent(inout), target :: desc_a @@ -248,11 +213,26 @@ Module psb_d_tools_mod end Subroutine psb_dcdbldext end interface + interface psb_sphalo + Subroutine psb_dsphalo(a,desc_a,blk,info,rowcnv,colcnv,& + & rowscale,colscale,outfmt,data) + import + implicit none + Type(psb_dspmat_type),Intent(in) :: a + Type(psb_dspmat_type),Intent(inout) :: blk + Type(psb_desc_type),Intent(in), target :: desc_a + integer(psb_ipk_), intent(out) :: info + logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale + character(len=5), optional :: outfmt + integer(psb_ipk_), intent(in), optional :: data + end Subroutine psb_dsphalo + end interface + + interface psb_spall subroutine psb_dspalloc(a, desc_a, info, nnz) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_dspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info @@ -262,9 +242,8 @@ Module psb_d_tools_mod interface psb_spasb subroutine psb_dspasb(a,desc_a, info, afmt, upd, dupl,mold) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_dspmat_type), intent (inout) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -276,9 +255,8 @@ Module psb_d_tools_mod interface psb_spfree subroutine psb_dspfree(a, desc_a,info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_dspmat_type), intent(inout) ::a integer(psb_ipk_), intent(out) :: info @@ -288,9 +266,8 @@ Module psb_d_tools_mod interface psb_spins subroutine psb_dspins(nz,ia,ja,val,a,desc_a,info,rebuild,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_dspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz,ia(:),ja(:) @@ -301,9 +278,8 @@ Module psb_d_tools_mod end subroutine psb_dspins subroutine psb_dspins_v(nz,ia,ja,val,a,desc_a,info,rebuild,local) use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type,& - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_dspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz @@ -314,9 +290,8 @@ Module psb_d_tools_mod logical, intent(in), optional :: local end subroutine psb_dspins_v subroutine psb_dspins_2desc(nz,ia,ja,val,a,desc_ar,desc_ac,info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_ar type(psb_desc_type), intent(inout) :: desc_ac type(psb_dspmat_type), intent(inout) :: a @@ -329,9 +304,8 @@ Module psb_d_tools_mod interface psb_sprn subroutine psb_dsprn(a, desc_a,info,clear) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_d_vect_type, & - & psb_dspmat_type, psb_d_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_dspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/psb_d_vect_mod.F90 b/base/modules/psb_d_vect_mod.F90 index b6890a78..ecc6ae66 100644 --- a/base/modules/psb_d_vect_mod.F90 +++ b/base/modules/psb_d_vect_mod.F90 @@ -48,27 +48,6 @@ module psb_d_vect_mod procedure, pass(x) :: get_nrows => d_vect_get_nrows procedure, pass(x) :: sizeof => d_vect_sizeof procedure, pass(x) :: get_fmt => d_vect_get_fmt - procedure, pass(x) :: dot_v => d_vect_dot_v - procedure, pass(x) :: dot_a => d_vect_dot_a - generic, public :: dot => dot_v, dot_a - procedure, pass(y) :: axpby_v => d_vect_axpby_v - procedure, pass(y) :: axpby_a => d_vect_axpby_a - generic, public :: axpby => axpby_v, axpby_a - procedure, pass(y) :: mlt_v => d_vect_mlt_v - procedure, pass(y) :: mlt_a => d_vect_mlt_a - procedure, pass(z) :: mlt_a_2 => d_vect_mlt_a_2 - procedure, pass(z) :: mlt_v_2 => d_vect_mlt_v_2 - procedure, pass(z) :: mlt_va => d_vect_mlt_va - procedure, pass(z) :: mlt_av => d_vect_mlt_av - generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& - & mlt_v_2, mlt_av, mlt_va - procedure, pass(x) :: scal => d_vect_scal - procedure, pass(x) :: absval1 => d_vect_absval1 - procedure, pass(x) :: absval2 => d_vect_absval2 - generic, public :: absval => absval1, absval2 - procedure, pass(x) :: nrm2 => d_vect_nrm2 - procedure, pass(x) :: amax => d_vect_amax - procedure, pass(x) :: asum => d_vect_asum procedure, pass(x) :: all => d_vect_all procedure, pass(x) :: reall => d_vect_reall procedure, pass(x) :: zero => d_vect_zero @@ -92,6 +71,27 @@ module psb_d_vect_mod procedure, pass(x) :: set_vect => d_vect_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: clone => d_vect_clone + procedure, pass(x) :: dot_v => d_vect_dot_v + procedure, pass(x) :: dot_a => d_vect_dot_a + generic, public :: dot => dot_v, dot_a + procedure, pass(y) :: axpby_v => d_vect_axpby_v + procedure, pass(y) :: axpby_a => d_vect_axpby_a + generic, public :: axpby => axpby_v, axpby_a + procedure, pass(y) :: mlt_v => d_vect_mlt_v + procedure, pass(y) :: mlt_a => d_vect_mlt_a + procedure, pass(z) :: mlt_a_2 => d_vect_mlt_a_2 + procedure, pass(z) :: mlt_v_2 => d_vect_mlt_v_2 + procedure, pass(z) :: mlt_va => d_vect_mlt_va + procedure, pass(z) :: mlt_av => d_vect_mlt_av + generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& + & mlt_v_2, mlt_av, mlt_va + procedure, pass(x) :: scal => d_vect_scal + procedure, pass(x) :: absval1 => d_vect_absval1 + procedure, pass(x) :: absval2 => d_vect_absval2 + generic, public :: absval => absval1, absval2 + procedure, pass(x) :: nrm2 => d_vect_nrm2 + procedure, pass(x) :: amax => d_vect_amax + procedure, pass(x) :: asum => d_vect_asum end type psb_d_vect_type public :: psb_d_vect @@ -296,6 +296,191 @@ contains res = 'NULL' if (allocated(x%v)) res = x%v%get_fmt() end function d_vect_get_fmt + subroutine d_vect_all(n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_d_vect_type), intent(inout) :: x + class(psb_d_base_vect_type), intent(in), optional :: mold + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(x%v,stat=info,mold=mold) +#else + call mold%mold(x%v,info) +#endif + else + allocate(psb_d_base_vect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(n,info) + else + info = psb_err_alloc_dealloc_ + end if + + end subroutine d_vect_all + + subroutine d_vect_reall(n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(n,info) + if (info == 0) & + & call x%asb(n,info) + + end subroutine d_vect_reall + + subroutine d_vect_zero(x) + use psi_serial_mod + implicit none + class(psb_d_vect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine d_vect_zero + + subroutine d_vect_asb(n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%v%asb(n,info) + + end subroutine d_vect_asb + + subroutine d_vect_sync(x) + implicit none + class(psb_d_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine d_vect_sync + + subroutine d_vect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + real(psb_dpk_) :: alpha, beta, y(:) + class(psb_d_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine d_vect_gthab + + subroutine d_vect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + real(psb_dpk_) :: y(:) + class(psb_d_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine d_vect_gthzv + + subroutine d_vect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + real(psb_dpk_) :: beta, x(:) + class(psb_d_vect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine d_vect_sctb + + subroutine d_vect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine d_vect_free + + subroutine d_vect_ins_a(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: irl(:) + real(psb_dpk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl,val,dupl,info) + + end subroutine d_vect_ins_a + + subroutine d_vect_ins_v(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + class(psb_i_vect_type), intent(inout) :: irl + class(psb_d_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl%v,val%v,dupl,info) + + end subroutine d_vect_ins_v + + + subroutine d_vect_cnv(x,mold) + class(psb_d_vect_type), intent(inout) :: x + class(psb_d_base_vect_type), intent(in), optional :: mold + class(psb_d_base_vect_type), allocatable :: tmp + integer(psb_ipk_) :: info + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(tmp,stat=info,mold=mold) +#else + call mold%mold(tmp,info) +#endif + if (allocated(x%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%free(info) + end if + call move_alloc(tmp,x%v) + end if + end subroutine d_vect_cnv function d_vect_dot_v(n,x,y) result(res) implicit none @@ -522,197 +707,12 @@ contains end function d_vect_asum - subroutine d_vect_all(n, x, info, mold) - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_d_vect_type), intent(inout) :: x - class(psb_d_base_vect_type), intent(in), optional :: mold - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%free(info) +end module psb_d_vect_mod - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(x%v,stat=info,mold=mold) -#else - call mold%mold(x%v,info) -#endif - else - allocate(psb_d_base_vect_type :: x%v,stat=info) - endif - if (info == 0) then - call x%v%all(n,info) - else - info = psb_err_alloc_dealloc_ - end if - end subroutine d_vect_all - subroutine d_vect_reall(n, x, info) - - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (.not.allocated(x%v)) & - & call x%all(n,info) - if (info == 0) & - & call x%asb(n,info) - - end subroutine d_vect_reall - - subroutine d_vect_zero(x) - use psi_serial_mod - implicit none - class(psb_d_vect_type), intent(inout) :: x - - if (allocated(x%v)) call x%v%zero() - - end subroutine d_vect_zero - - subroutine d_vect_asb(n, x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%v%asb(n,info) - - end subroutine d_vect_asb - - subroutine d_vect_sync(x) - implicit none - class(psb_d_vect_type), intent(inout) :: x - - if (allocated(x%v)) & - & call x%v%sync() - - end subroutine d_vect_sync - - subroutine d_vect_gthab(n,idx,alpha,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - real(psb_dpk_) :: alpha, beta, y(:) - class(psb_d_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,alpha,beta,y) - - end subroutine d_vect_gthab - - subroutine d_vect_gthzv(n,idx,x,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - real(psb_dpk_) :: y(:) - class(psb_d_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,y) - - end subroutine d_vect_gthzv - - subroutine d_vect_sctb(n,idx,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - real(psb_dpk_) :: beta, x(:) - class(psb_d_vect_type) :: y - - if (allocated(y%v)) & - & call y%v%sct(n,idx,x,beta) - - end subroutine d_vect_sctb - - subroutine d_vect_free(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (allocated(x%v)) then - call x%v%free(info) - if (info == 0) deallocate(x%v,stat=info) - end if - - end subroutine d_vect_free - - subroutine d_vect_ins_a(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - integer(psb_ipk_), intent(in) :: irl(:) - real(psb_dpk_), intent(in) :: val(:) - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl,val,dupl,info) - - end subroutine d_vect_ins_a - - subroutine d_vect_ins_v(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - class(psb_i_vect_type), intent(inout) :: irl - class(psb_d_vect_type), intent(inout) :: val - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl%v,val%v,dupl,info) - - end subroutine d_vect_ins_v - - - subroutine d_vect_cnv(x,mold) - class(psb_d_vect_type), intent(inout) :: x - class(psb_d_base_vect_type), intent(in), optional :: mold - class(psb_d_base_vect_type), allocatable :: tmp - integer(psb_ipk_) :: info - - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(tmp,stat=info,mold=mold) -#else - call mold%mold(tmp,info) -#endif - if (allocated(x%v)) then - call x%v%sync() - if (info == psb_success_) call tmp%bld(x%v%v) - call x%v%free(info) - end if - call move_alloc(tmp,x%v) - end if - end subroutine d_vect_cnv - -end module psb_d_vect_mod - - - -module psb_d_multivect_mod +module psb_d_multivect_mod use psb_d_base_multivect_mod use psb_const_mod @@ -726,6 +726,28 @@ module psb_d_multivect_mod procedure, pass(x) :: get_ncols => d_vect_get_ncols procedure, pass(x) :: sizeof => d_vect_sizeof procedure, pass(x) :: get_fmt => d_vect_get_fmt + + procedure, pass(x) :: all => d_vect_all + procedure, pass(x) :: reall => d_vect_reall + procedure, pass(x) :: zero => d_vect_zero + procedure, pass(x) :: asb => d_vect_asb + procedure, pass(x) :: sync => d_vect_sync + procedure, pass(x) :: free => d_vect_free + procedure, pass(x) :: ins => d_vect_ins + procedure, pass(x) :: bld_x => d_vect_bld_x + procedure, pass(x) :: bld_n => d_vect_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: get_vect => d_vect_get_vect + procedure, pass(x) :: cnv => d_vect_cnv + procedure, pass(x) :: set_scal => d_vect_set_scal + procedure, pass(x) :: set_vect => d_vect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => d_vect_clone +!!$ procedure, pass(x) :: gthab => d_vect_gthab +!!$ procedure, pass(x) :: gthzv => d_vect_gthzv +!!$ generic, public :: gth => gthab, gthzv +!!$ procedure, pass(y) :: sctb => d_vect_sctb +!!$ generic, public :: sct => sctb !!$ procedure, pass(x) :: dot_v => d_vect_dot_v !!$ procedure, pass(x) :: dot_a => d_vect_dot_a !!$ generic, public :: dot => dot_v, dot_a @@ -744,27 +766,6 @@ module psb_d_multivect_mod !!$ procedure, pass(x) :: nrm2 => d_vect_nrm2 !!$ procedure, pass(x) :: amax => d_vect_amax !!$ procedure, pass(x) :: asum => d_vect_asum - procedure, pass(x) :: all => d_vect_all - procedure, pass(x) :: reall => d_vect_reall - procedure, pass(x) :: zero => d_vect_zero - procedure, pass(x) :: asb => d_vect_asb - procedure, pass(x) :: sync => d_vect_sync -!!$ procedure, pass(x) :: gthab => d_vect_gthab -!!$ procedure, pass(x) :: gthzv => d_vect_gthzv -!!$ generic, public :: gth => gthab, gthzv -!!$ procedure, pass(y) :: sctb => d_vect_sctb -!!$ generic, public :: sct => sctb - procedure, pass(x) :: free => d_vect_free - procedure, pass(x) :: ins => d_vect_ins - procedure, pass(x) :: bld_x => d_vect_bld_x - procedure, pass(x) :: bld_n => d_vect_bld_n - generic, public :: bld => bld_x, bld_n - procedure, pass(x) :: get_vect => d_vect_get_vect - procedure, pass(x) :: cnv => d_vect_cnv - procedure, pass(x) :: set_scal => d_vect_set_scal - procedure, pass(x) :: set_vect => d_vect_set_vect - generic, public :: set => set_vect, set_scal - procedure, pass(x) :: clone => d_vect_clone end type psb_d_multivect_type public :: psb_d_multivect, psb_d_multivect_type,& @@ -971,214 +972,6 @@ contains if (allocated(x%v)) res = x%v%get_fmt() end function d_vect_get_fmt -!!$ function d_vect_dot_v(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x, y -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ res = dzero -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & res = x%v%dot(n,y%v) -!!$ -!!$ end function d_vect_dot_v -!!$ -!!$ function d_vect_dot_a(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ real(psb_dpk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ res = dzero -!!$ if (allocated(x%v)) & -!!$ & res = x%v%dot(n,y) -!!$ -!!$ end function d_vect_dot_a -!!$ -!!$ subroutine d_vect_axpby_v(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ class(psb_d_multivect_type), intent(inout) :: y -!!$ real(psb_dpk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(x%v).and.allocated(y%v)) then -!!$ call y%v%axpby(m,alpha,x%v,beta,info) -!!$ else -!!$ info = psb_err_invalid_vect_state_ -!!$ end if -!!$ -!!$ end subroutine d_vect_axpby_v -!!$ -!!$ subroutine d_vect_axpby_a(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ real(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_d_multivect_type), intent(inout) :: y -!!$ real(psb_dpk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(y%v)) & -!!$ & call y%v%axpby(m,alpha,x,beta,info) -!!$ -!!$ end subroutine d_vect_axpby_a -!!$ -!!$ -!!$ subroutine d_vect_mlt_v(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ class(psb_d_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & call y%v%mlt(x%v,info) -!!$ -!!$ end subroutine d_vect_mlt_v -!!$ -!!$ subroutine d_vect_mlt_a(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_d_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ -!!$ info = 0 -!!$ if (allocated(y%v)) & -!!$ & call y%v%mlt(x,info) -!!$ -!!$ end subroutine d_vect_mlt_a -!!$ -!!$ -!!$ subroutine d_vect_mlt_a_2(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_dpk_), intent(in) :: alpha,beta -!!$ real(psb_dpk_), intent(in) :: y(:) -!!$ real(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_d_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x,y,beta,info) -!!$ -!!$ end subroutine d_vect_mlt_a_2 -!!$ -!!$ subroutine d_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_dpk_), intent(in) :: alpha,beta -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ class(psb_d_multivect_type), intent(inout) :: y -!!$ class(psb_d_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ character(len=1), intent(in), optional :: conjgx, conjgy -!!$ -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v).and.& -!!$ & allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) -!!$ -!!$ end subroutine d_vect_mlt_v_2 -!!$ -!!$ subroutine d_vect_mlt_av(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_dpk_), intent(in) :: alpha,beta -!!$ real(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_d_multivect_type), intent(inout) :: y -!!$ class(psb_d_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v).and.allocated(y%v)) & -!!$ & call z%v%mlt(alpha,x,y%v,beta,info) -!!$ -!!$ end subroutine d_vect_mlt_av -!!$ -!!$ subroutine d_vect_mlt_va(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_dpk_), intent(in) :: alpha,beta -!!$ real(psb_dpk_), intent(in) :: y(:) -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ class(psb_d_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ if (allocated(z%v).and.allocated(x%v)) & -!!$ & call z%v%mlt(alpha,x%v,y,beta,info) -!!$ -!!$ end subroutine d_vect_mlt_va -!!$ -!!$ subroutine d_vect_scal(alpha, x) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ real(psb_dpk_), intent (in) :: alpha -!!$ -!!$ if (allocated(x%v)) call x%v%scal(alpha) -!!$ -!!$ end subroutine d_vect_scal -!!$ -!!$ -!!$ function d_vect_nrm2(n,x) result(res) -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%nrm2(n) -!!$ else -!!$ res = dzero -!!$ end if -!!$ -!!$ end function d_vect_nrm2 -!!$ -!!$ function d_vect_amax(n,x) result(res) -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%amax(n) -!!$ else -!!$ res = dzero -!!$ end if -!!$ -!!$ end function d_vect_amax -!!$ -!!$ function d_vect_asum(n,x) result(res) -!!$ implicit none -!!$ class(psb_d_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%asum(n) -!!$ else -!!$ res = dzero -!!$ end if -!!$ -!!$ end function d_vect_asum - subroutine d_vect_all(m,n, x, info, mold) implicit none @@ -1341,4 +1134,213 @@ contains end if end subroutine d_vect_cnv + +!!$ function d_vect_dot_v(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x, y +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ res = dzero +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & res = x%v%dot(n,y%v) +!!$ +!!$ end function d_vect_dot_v +!!$ +!!$ function d_vect_dot_a(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ real(psb_dpk_), intent(in) :: y(:) +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ res = dzero +!!$ if (allocated(x%v)) & +!!$ & res = x%v%dot(n,y) +!!$ +!!$ end function d_vect_dot_a +!!$ +!!$ subroutine d_vect_axpby_v(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ class(psb_d_multivect_type), intent(inout) :: y +!!$ real(psb_dpk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(x%v).and.allocated(y%v)) then +!!$ call y%v%axpby(m,alpha,x%v,beta,info) +!!$ else +!!$ info = psb_err_invalid_vect_state_ +!!$ end if +!!$ +!!$ end subroutine d_vect_axpby_v +!!$ +!!$ subroutine d_vect_axpby_a(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ real(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_d_multivect_type), intent(inout) :: y +!!$ real(psb_dpk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(y%v)) & +!!$ & call y%v%axpby(m,alpha,x,beta,info) +!!$ +!!$ end subroutine d_vect_axpby_a +!!$ +!!$ +!!$ subroutine d_vect_mlt_v(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ class(psb_d_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & call y%v%mlt(x%v,info) +!!$ +!!$ end subroutine d_vect_mlt_v +!!$ +!!$ subroutine d_vect_mlt_a(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_d_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ +!!$ info = 0 +!!$ if (allocated(y%v)) & +!!$ & call y%v%mlt(x,info) +!!$ +!!$ end subroutine d_vect_mlt_a +!!$ +!!$ +!!$ subroutine d_vect_mlt_a_2(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_dpk_), intent(in) :: alpha,beta +!!$ real(psb_dpk_), intent(in) :: y(:) +!!$ real(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_d_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x,y,beta,info) +!!$ +!!$ end subroutine d_vect_mlt_a_2 +!!$ +!!$ subroutine d_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_dpk_), intent(in) :: alpha,beta +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ class(psb_d_multivect_type), intent(inout) :: y +!!$ class(psb_d_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ character(len=1), intent(in), optional :: conjgx, conjgy +!!$ +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v).and.& +!!$ & allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) +!!$ +!!$ end subroutine d_vect_mlt_v_2 +!!$ +!!$ subroutine d_vect_mlt_av(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_dpk_), intent(in) :: alpha,beta +!!$ real(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_d_multivect_type), intent(inout) :: y +!!$ class(psb_d_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v).and.allocated(y%v)) & +!!$ & call z%v%mlt(alpha,x,y%v,beta,info) +!!$ +!!$ end subroutine d_vect_mlt_av +!!$ +!!$ subroutine d_vect_mlt_va(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_dpk_), intent(in) :: alpha,beta +!!$ real(psb_dpk_), intent(in) :: y(:) +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ class(psb_d_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ +!!$ if (allocated(z%v).and.allocated(x%v)) & +!!$ & call z%v%mlt(alpha,x%v,y,beta,info) +!!$ +!!$ end subroutine d_vect_mlt_va +!!$ +!!$ subroutine d_vect_scal(alpha, x) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ real(psb_dpk_), intent (in) :: alpha +!!$ +!!$ if (allocated(x%v)) call x%v%scal(alpha) +!!$ +!!$ end subroutine d_vect_scal +!!$ +!!$ +!!$ function d_vect_nrm2(n,x) result(res) +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%nrm2(n) +!!$ else +!!$ res = dzero +!!$ end if +!!$ +!!$ end function d_vect_nrm2 +!!$ +!!$ function d_vect_amax(n,x) result(res) +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%amax(n) +!!$ else +!!$ res = dzero +!!$ end if +!!$ +!!$ end function d_vect_amax +!!$ +!!$ function d_vect_asum(n,x) result(res) +!!$ implicit none +!!$ class(psb_d_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%asum(n) +!!$ else +!!$ res = dzero +!!$ end if +!!$ +!!$ end function d_vect_asum + end module psb_d_multivect_mod diff --git a/base/modules/psb_i_base_vect_mod.f90 b/base/modules/psb_i_base_vect_mod.f90 index 6dd2a430..a5814f3d 100644 --- a/base/modules/psb_i_base_vect_mod.f90 +++ b/base/modules/psb_i_base_vect_mod.f90 @@ -46,7 +46,7 @@ module psb_i_base_vect_mod use psb_const_mod use psb_error_mod - + use psb_realloc_mod !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -122,37 +122,6 @@ module psb_i_base_vect_mod procedure, pass(x) :: set_scal => i_base_set_scal procedure, pass(x) :: set_vect => i_base_set_vect generic, public :: set => set_vect, set_scal - - ! - ! Dot product and AXPBY - ! - procedure, pass(x) :: dot_v => i_base_dot_v - procedure, pass(x) :: dot_a => i_base_dot_a - generic, public :: dot => dot_v, dot_a - procedure, pass(y) :: axpby_v => i_base_axpby_v - procedure, pass(y) :: axpby_a => i_base_axpby_a - generic, public :: axpby => axpby_v, axpby_a - ! - ! Vector by vector multiplication. Need all variants - ! to handle multiple requirements from preconditioners - ! - procedure, pass(y) :: mlt_v => i_base_mlt_v - procedure, pass(y) :: mlt_a => i_base_mlt_a - procedure, pass(z) :: mlt_a_2 => i_base_mlt_a_2 - procedure, pass(z) :: mlt_v_2 => i_base_mlt_v_2 - procedure, pass(z) :: mlt_va => i_base_mlt_va - procedure, pass(z) :: mlt_av => i_base_mlt_av - generic, public :: mlt => mlt_v, mlt_a, mlt_a_2, mlt_v_2, mlt_av, mlt_va - ! - ! Scaling and norms - ! - procedure, pass(x) :: scal => i_base_scal - procedure, pass(x) :: absval1 => i_base_absval1 - procedure, pass(x) :: absval2 => i_base_absval2 - generic, public :: absval => absval1, absval2 - procedure, pass(x) :: nrm2 => i_base_nrm2 - procedure, pass(x) :: amax => i_base_amax - procedure, pass(x) :: asum => i_base_asum ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -166,6 +135,9 @@ module psb_i_base_vect_mod procedure, pass(y) :: sctb_x => i_base_sctb_x procedure, pass(y) :: sctb_buf => i_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf + + + end type psb_i_base_vect_type public :: psb_i_base_vect @@ -649,48 +621,24 @@ contains !! \brief Set all entries !! \param val The value to set !! - subroutine i_base_set_scal(x,val) + subroutine i_base_set_scal(x,val,first,last) class(psb_i_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: val + integer(psb_ipk_), optional :: first, last - integer(psb_ipk_) :: info + integer(psb_ipk_) :: info, first_, last_ - x%v = val + first_=1 + last_=size(x%v) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (x%is_dev()) call x%sync() + x%v(first_:last_) = val call x%set_host() end subroutine i_base_set_scal - ! - ! Overwrite with absolute value - ! - ! - !> Function base_set_scal - !! \memberof psb_i_base_vect_type - !! \brief Set all entries to their respective absolute values. - !! - subroutine i_base_absval1(x) - class(psb_i_base_vect_type), intent(inout) :: x - - if (allocated(x%v)) then - if (.not.x%is_host()) call x%sync() - x%v = abs(x%v) - call x%set_host() - end if - - end subroutine i_base_absval1 - - subroutine i_base_absval2(x,y) - class(psb_i_base_vect_type), intent(inout) :: x - class(psb_i_base_vect_type), intent(inout) :: y - - if (.not.x%is_host()) call x%sync() - if (allocated(x%v)) then - call y%bld(x%v) - call y%absval() - call y%set_host() - end if - - end subroutine i_base_absval2 ! !> Function base_set_vect @@ -698,15 +646,21 @@ contains !! \brief Set all entries !! \param val(:) The vector to be copied in !! - subroutine i_base_set_vect(x,val) + subroutine i_base_set_vect(x,val,first,last) class(psb_i_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: val(:) - integer(psb_ipk_) :: nr - integer(psb_ipk_) :: info + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info, first_, last_, nr + + first_=1 + last_=min(psb_size(x%v),size(val)) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) if (allocated(x%v)) then - nr = min(size(x%v),size(val)) - x%v(1:nr) = val(1:nr) + if (x%is_dev()) call x%sync() + x%v(first_:last_) = val(1:last_-first_+1) else x%v = val end if @@ -714,405 +668,8 @@ contains end subroutine i_base_set_vect - ! - ! Dot products - ! - ! - !> Function base_dot_v - !! \memberof psb_i_base_vect_type - !! \brief Dot product by another base_vector - !! \param n Number of entries to be considere - !! \param y The other (base_vect) to be multiplied by - !! - function i_base_dot_v(n,x,y) result(res) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x, y - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - integer(psb_ipk_), external :: idot - - res = izero - ! - ! Note: this is the base implementation. - ! When we get here, we are sure that X is of - ! TYPE psb_i_base_vect. - ! If Y is not, throw the burden on it, implicitly - ! calling dot_a - ! - select type(yy => y) - type is (psb_i_base_vect_type) - res = idot(n,x%v,1,y%v,1) - class default - res = y%dot(n,x%v) - end select - - end function i_base_dot_v - - ! - ! Base workhorse is good old BLAS1 - ! - ! - !> Function base_dot_a - !! \memberof psb_i_base_vect_type - !! \brief Dot product by a normal array - !! \param n Number of entries to be considere - !! \param y(:) The array to be multiplied by - !! - function i_base_dot_a(n,x,y) result(res) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: y(:) - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - integer(psb_ipk_), external :: idot - - res = idot(n,y,1,x%v,1) - - end function i_base_dot_a - - ! - ! AXPBY is invoked via Y, hence the structure below. - ! - ! - ! - !> Function base_axpby_v - !! \memberof psb_i_base_vect_type - !! \brief AXPBY by a (base_vect) y=alpha*x+beta*y - !! \param m Number of entries to be considere - !! \param alpha scalar alpha - !! \param x The class(base_vect) to be added - !! \param beta scalar alpha - !! \param info return code - !! - subroutine i_base_axpby_v(m,alpha, x, beta, y, info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: m - class(psb_i_base_vect_type), intent(inout) :: x - class(psb_i_base_vect_type), intent(inout) :: y - integer(psb_ipk_), intent (in) :: alpha, beta - integer(psb_ipk_), intent(out) :: info - - if (x%is_dev()) call x%sync() - - call y%axpby(m,alpha,x%v,beta,info) - - end subroutine i_base_axpby_v - - ! - ! AXPBY is invoked via Y, hence the structure below. - ! - ! - !> Function base_axpby_a - !! \memberof psb_i_base_vect_type - !! \brief AXPBY by a normal array y=alpha*x+beta*y - !! \param m Number of entries to be considere - !! \param alpha scalar alpha - !! \param x(:) The array to be added - !! \param beta scalar alpha - !! \param info return code - !! - subroutine i_base_axpby_a(m,alpha, x, beta, y, info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: m - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_base_vect_type), intent(inout) :: y - integer(psb_ipk_), intent (in) :: alpha, beta - integer(psb_ipk_), intent(out) :: info - - if (y%is_dev()) call y%sync() - call psb_geaxpby(m,alpha,x,beta,y%v,info) - call y%set_host() - - end subroutine i_base_axpby_a - ! - ! Multiple variants of two operations: - ! Simple multiplication Y(:) = X(:)*Y(:) - ! blas-like: Z(:) = alpha*X(:)*Y(:)+beta*Z(:) - ! - ! Variants expanded according to the dynamic type - ! of the involved entities - ! - ! - !> Function base_mlt_a - !! \memberof psb_i_base_vect_type - !! \brief Vector entry-by-entry multiply by a base_vect array y=x*y - !! \param x The class(base_vect) to be multiplied by - !! \param info return code - !! - subroutine i_base_mlt_v(x, y, info) - use psi_serial_mod - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - class(psb_i_base_vect_type), intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (x%is_dev()) call x%sync() - call y%mlt(x%v,info) - - end subroutine i_base_mlt_v - - ! - !> Function base_mlt_a - !! \memberof psb_i_base_vect_type - !! \brief Vector entry-by-entry multiply by a normal array y=x*y - !! \param x(:) The array to be multiplied by - !! \param info return code - !! - subroutine i_base_mlt_a(x, y, info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_base_vect_type), intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (y%is_dev()) call y%sync() - n = min(size(y%v), size(x)) - do i=1, n - y%v(i) = y%v(i)*x(i) - end do - call y%set_host() - - end subroutine i_base_mlt_a - - - ! - !> Function base_mlt_a_2 - !! \memberof psb_i_base_vect_type - !! \brief AXPBY-like Vector entry-by-entry multiply by normal arrays - !! z=beta*z+alpha*x*y - !! \param alpha - !! \param beta - !! \param x(:) The array to be multiplied b - !! \param y(:) The array to be multiplied by - !! \param info return code - !! - subroutine i_base_mlt_a_2(alpha,x,y,beta,z,info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - integer(psb_ipk_), intent(in) :: y(:) - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_base_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (z%is_dev()) call z%sync() - - n = min(size(z%v), size(x), size(y)) -!!$ write(0,*) 'Mlt_a_2: ',n - if (alpha == izero) then - if (beta == ione) then - return - else - do i=1, n - z%v(i) = beta*z%v(i) - end do - end if - else - if (alpha == ione) then - if (beta == izero) then - do i=1, n - z%v(i) = y(i)*x(i) - end do - else if (beta == ione) then - do i=1, n - z%v(i) = z%v(i) + y(i)*x(i) - end do - else - do i=1, n - z%v(i) = beta*z%v(i) + y(i)*x(i) - end do - end if - else if (alpha == -ione) then - if (beta == izero) then - do i=1, n - z%v(i) = -y(i)*x(i) - end do - else if (beta == ione) then - do i=1, n - z%v(i) = z%v(i) - y(i)*x(i) - end do - else - do i=1, n - z%v(i) = beta*z%v(i) - y(i)*x(i) - end do - end if - else - if (beta == izero) then - do i=1, n - z%v(i) = alpha*y(i)*x(i) - end do - else if (beta == ione) then - do i=1, n - z%v(i) = z%v(i) + alpha*y(i)*x(i) - end do - else - do i=1, n - z%v(i) = beta*z%v(i) + alpha*y(i)*x(i) - end do - end if - end if - end if - call z%set_host() - - end subroutine i_base_mlt_a_2 - - ! - !> Function base_mlt_v_2 - !! \memberof psb_i_base_vect_type - !! \brief AXPBY-like Vector entry-by-entry multiply by class(base_vect) - !! z=beta*z+alpha*x*y - !! \param alpha - !! \param beta - !! \param x The class(base_vect) to be multiplied b - !! \param y The class(base_vect) to be multiplied by - !! \param info return code - !! - subroutine i_base_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) - use psi_serial_mod - use psb_string_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - class(psb_i_base_vect_type), intent(inout) :: x - class(psb_i_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - character(len=1), intent(in), optional :: conjgx, conjgy - integer(psb_ipk_) :: i, n - logical :: conjgx_, conjgy_ - - info = 0 - if (y%is_dev()) call y%sync() - if (x%is_dev()) call x%sync() - if (.not.psb_i_is_complex_) then - call z%mlt(alpha,x%v,y%v,beta,info) - else - conjgx_=.false. - if (present(conjgx)) conjgx_ = (psb_toupper(conjgx)=='C') - conjgy_=.false. - if (present(conjgy)) conjgy_ = (psb_toupper(conjgy)=='C') - if (conjgx_) x%v=(x%v) - if (conjgy_) y%v=(y%v) - call z%mlt(alpha,x%v,y%v,beta,info) - if (conjgx_) x%v=(x%v) - if (conjgy_) y%v=(y%v) - end if - end subroutine i_base_mlt_v_2 - - subroutine i_base_mlt_av(alpha,x,y,beta,z,info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (y%is_dev()) call y%sync() - call z%mlt(alpha,x,y%v,beta,info) - - end subroutine i_base_mlt_av - - subroutine i_base_mlt_va(alpha,x,y,beta,z,info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - integer(psb_ipk_), intent(in) :: y(:) - class(psb_i_base_vect_type), intent(inout) :: x - class(psb_i_base_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (x%is_dev()) call x%sync() - call z%mlt(alpha,y,x,beta,info) - - end subroutine i_base_mlt_va - - - ! - ! Simple scaling - ! - !> Function base_scal - !! \memberof psb_i_base_vect_type - !! \brief Scale all entries x = alpha*x - !! \param alpha The multiplier - !! - subroutine i_base_scal(alpha, x) - use psi_serial_mod - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent (in) :: alpha - - if (allocated(x%v)) then - x%v = alpha*x%v - call x%set_host() - end if - - end subroutine i_base_scal - - ! - ! Norms 1, 2 and infinity - ! - !> Function base_nrm2 - !! \memberof psb_i_base_vect_type - !! \brief 2-norm |x(1:n)|_2 - !! \param n how many entries to consider - function i_base_nrm2(n,x) result(res) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - integer(psb_ipk_), external :: inrm2 - - if (x%is_dev()) call x%sync() - res = inrm2(n,x%v,1) - - end function i_base_nrm2 - - ! - !> Function base_amax - !! \memberof psb_i_base_vect_type - !! \brief infinity-norm |x(1:n)|_\infty - !! \param n how many entries to consider - function i_base_amax(n,x) result(res) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - if (x%is_dev()) call x%sync() - res = maxval(abs(x%v(1:n))) - - end function i_base_amax - - ! - !> Function base_asum - !! \memberof psb_i_base_vect_type - !! \brief 1-norm |x(1:n)|_1 - !! \param n how many entries to consider - function i_base_asum(n,x) result(res) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - if (x%is_dev()) call x%sync() - res = sum(abs(x%v(1:n))) - - end function i_base_asum - ! ! Gather: Y = beta * Y + alpha * X(IDX(:)) @@ -1388,44 +945,6 @@ module psb_i_base_multivect_mod procedure, pass(x) :: set_vect => i_base_mv_set_vect generic, public :: set => set_vect, set_scal - ! - ! Dot product and AXPBY - ! -!!$ procedure, pass(x) :: dot_v => i_base_mv_dot_v -!!$ procedure, pass(x) :: dot_a => i_base_mv_dot_a -!!$ generic, public :: dot => dot_v, dot_a -!!$ procedure, pass(y) :: axpby_v => i_base_mv_axpby_v -!!$ procedure, pass(y) :: axpby_a => i_base_mv_axpby_a -!!$ generic, public :: axpby => axpby_v, axpby_a -!!$ ! -!!$ ! Vector by vector multiplication. Need all variants -!!$ ! to handle multiple requirements from preconditioners -!!$ ! -!!$ procedure, pass(y) :: mlt_v => i_base_mv_mlt_v -!!$ procedure, pass(y) :: mlt_a => i_base_mv_mlt_a -!!$ procedure, pass(z) :: mlt_a_2 => i_base_mv_mlt_a_2 -!!$ procedure, pass(z) :: mlt_v_2 => i_base_mv_mlt_v_2 -!!$ procedure, pass(z) :: mlt_va => i_base_mv_mlt_va -!!$ procedure, pass(z) :: mlt_av => i_base_mv_mlt_av -!!$ generic, public :: mlt => mlt_v, mlt_a, mlt_a_2, mlt_v_2, mlt_av, mlt_va -!!$ ! -!!$ ! Scaling and norms -!!$ ! -!!$ procedure, pass(x) :: scal => i_base_mv_scal -!!$ procedure, pass(x) :: nrm2 => i_base_mv_nrm2 -!!$ procedure, pass(x) :: amax => i_base_mv_amax -!!$ procedure, pass(x) :: asum => i_base_mv_asum -!!$ ! -!!$ ! Gather/scatter. These are needed for MPI interfacing. -!!$ ! May have to be reworked. -!!$ ! -!!$ procedure, pass(x) :: gthab => i_base_mv_gthab -!!$ procedure, pass(x) :: gthzv => i_base_mv_gthzv -!!$ procedure, pass(x) :: gthzv_x => i_base_mv_gthzv_x -!!$ generic, public :: gth => gthab, gthzv, gthzv_x -!!$ procedure, pass(y) :: sctb => i_base_mv_sctb -!!$ procedure, pass(y) :: sctb_x => i_base_mv_sctb_x -!!$ generic, public :: sct => sctb, sctb_x end type psb_i_base_multivect_type interface psb_i_base_multivect @@ -1919,496 +1438,5 @@ contains end subroutine i_base_mv_set_vect -!!$ ! -!!$ ! Dot products -!!$ ! -!!$ ! -!!$ !> Function base_mv_dot_v -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief Dot product by another base_mv_vector -!!$ !! \param n Number of entries to be considere -!!$ !! \param y The other (base_mv_vect) to be multiplied by -!!$ !! -!!$ function i_base_mv_dot_v(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x, y -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ integer(psb_ipk_), external :: ddot -!!$ -!!$ res = izero -!!$ ! -!!$ ! Note: this is the base implementation. -!!$ ! When we get here, we are sure that X is of -!!$ ! TYPE psb_i_base_mv_vect. -!!$ ! If Y is not, throw the burden on it, implicitly -!!$ ! calling dot_a -!!$ ! -!!$ select type(yy => y) -!!$ type is (psb_i_base_multivect_type) -!!$ res = ddot(n,x%v,1,y%v,1) -!!$ class default -!!$ res = y%dot(n,x%v) -!!$ end select -!!$ -!!$ end function i_base_mv_dot_v -!!$ -!!$ ! -!!$ ! Base workhorse is good old BLAS1 -!!$ ! -!!$ ! -!!$ !> Function base_mv_dot_a -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief Dot product by a normal array -!!$ !! \param n Number of entries to be considere -!!$ !! \param y(:) The array to be multiplied by -!!$ !! -!!$ function i_base_mv_dot_a(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ integer(psb_ipk_), external :: ddot -!!$ -!!$ res = ddot(n,y,1,x%v,1) -!!$ -!!$ end function i_base_mv_dot_a - -!!$ ! -!!$ ! AXPBY is invoked via Y, hence the structure below. -!!$ ! -!!$ ! -!!$ ! -!!$ !> Function base_mv_axpby_v -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief AXPBY by a (base_mv_vect) y=alpha*x+beta*y -!!$ !! \param m Number of entries to be considere -!!$ !! \param alpha scalar alpha -!!$ !! \param x The class(base_mv_vect) to be added -!!$ !! \param beta scalar alpha -!!$ !! \param info return code -!!$ !! -!!$ subroutine i_base_mv_axpby_v(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ class(psb_i_base_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ select type(xx => x) -!!$ type is (psb_i_base_multivect_type) -!!$ call psb_geaxpby(m,alpha,x%v,beta,y%v,info) -!!$ class default -!!$ call y%axpby(m,alpha,x%v,beta,info) -!!$ end select -!!$ -!!$ end subroutine i_base_mv_axpby_v -!!$ -!!$ ! -!!$ ! AXPBY is invoked via Y, hence the structure below. -!!$ ! -!!$ ! -!!$ !> Function base_mv_axpby_a -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief AXPBY by a normal array y=alpha*x+beta*y -!!$ !! \param m Number of entries to be considere -!!$ !! \param alpha scalar alpha -!!$ !! \param x(:) The array to be added -!!$ !! \param beta scalar alpha -!!$ !! \param info return code -!!$ !! -!!$ subroutine i_base_mv_axpby_a(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_base_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ call psb_geaxpby(m,alpha,x,beta,y%v,info) -!!$ -!!$ end subroutine i_base_mv_axpby_a - - -!!$ ! -!!$ ! Multiple variants of two operations: -!!$ ! Simple multiplication Y(:) = X(:)*Y(:) -!!$ ! blas-like: Z(:) = alpha*X(:)*Y(:)+beta*Z(:) -!!$ ! -!!$ ! Variants expanded according to the dynamic type -!!$ ! of the involved entities -!!$ ! -!!$ ! -!!$ !> Function base_mv_mlt_a -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief Vector entry-by-entry multiply by a base_mv_vect array y=x*y -!!$ !! \param x The class(base_mv_vect) to be multiplied by -!!$ !! \param info return code -!!$ !! -!!$ subroutine i_base_mv_mlt_v(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ class(psb_i_base_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ select type(xx => x) -!!$ type is (psb_i_base_multivect_type) -!!$ n = min(size(y%v), size(xx%v)) -!!$ do i=1, n -!!$ y%v(i) = y%v(i)*xx%v(i) -!!$ end do -!!$ class default -!!$ call y%mlt(x%v,info) -!!$ end select -!!$ -!!$ end subroutine i_base_mv_mlt_v -!!$ -!!$ ! -!!$ !> Function base_mv_mlt_a -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief Vector entry-by-entry multiply by a normal array y=x*y -!!$ !! \param x(:) The array to be multiplied by -!!$ !! \param info return code -!!$ !! -!!$ subroutine i_base_mv_mlt_a(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_base_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ n = min(size(y%v), size(x)) -!!$ do i=1, n -!!$ y%v(i) = y%v(i)*x(i) -!!$ end do -!!$ -!!$ end subroutine i_base_mv_mlt_a -!!$ -!!$ -!!$ ! -!!$ !> Function base_mv_mlt_a_2 -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief AXPBY-like Vector entry-by-entry multiply by normal arrays -!!$ !! z=beta*z+alpha*x*y -!!$ !! \param alpha -!!$ !! \param beta -!!$ !! \param x(:) The array to be multiplied b -!!$ !! \param y(:) The array to be multiplied by -!!$ !! \param info return code -!!$ !! -!!$ subroutine i_base_mv_mlt_a_2(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ integer(psb_ipk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_base_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ n = min(size(z%v), size(x), size(y)) -!!$ if (alpha == izero) then -!!$ if (beta == ione) then -!!$ return -!!$ else -!!$ do i=1, n -!!$ z%v(i) = beta*z%v(i) -!!$ end do -!!$ end if -!!$ else -!!$ if (alpha == ione) then -!!$ if (beta == izero) then -!!$ do i=1, n -!!$ z%v(i) = y(i)*x(i) -!!$ end do -!!$ else if (beta == ione) then -!!$ do i=1, n -!!$ z%v(i) = z%v(i) + y(i)*x(i) -!!$ end do -!!$ else -!!$ do i=1, n -!!$ z%v(i) = beta*z%v(i) + y(i)*x(i) -!!$ end do -!!$ end if -!!$ else if (alpha == -ione) then -!!$ if (beta == izero) then -!!$ do i=1, n -!!$ z%v(i) = -y(i)*x(i) -!!$ end do -!!$ else if (beta == ione) then -!!$ do i=1, n -!!$ z%v(i) = z%v(i) - y(i)*x(i) -!!$ end do -!!$ else -!!$ do i=1, n -!!$ z%v(i) = beta*z%v(i) - y(i)*x(i) -!!$ end do -!!$ end if -!!$ else -!!$ if (beta == izero) then -!!$ do i=1, n -!!$ z%v(i) = alpha*y(i)*x(i) -!!$ end do -!!$ else if (beta == ione) then -!!$ do i=1, n -!!$ z%v(i) = z%v(i) + alpha*y(i)*x(i) -!!$ end do -!!$ else -!!$ do i=1, n -!!$ z%v(i) = beta*z%v(i) + alpha*y(i)*x(i) -!!$ end do -!!$ end if -!!$ end if -!!$ end if -!!$ end subroutine i_base_mv_mlt_a_2 -!!$ -!!$ ! -!!$ !> Function base_mv_mlt_v_2 -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief AXPBY-like Vector entry-by-entry multiply by class(base_mv_vect) -!!$ !! z=beta*z+alpha*x*y -!!$ !! \param alpha -!!$ !! \param beta -!!$ !! \param x The class(base_mv_vect) to be multiplied b -!!$ !! \param y The class(base_mv_vect) to be multiplied by -!!$ !! \param info return code -!!$ !! -!!$ subroutine i_base_mv_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) -!!$ use psi_serial_mod -!!$ use psb_string_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ class(psb_i_base_multivect_type), intent(inout) :: y -!!$ class(psb_i_base_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ character(len=1), intent(in), optional :: conjgx, conjgy -!!$ integer(psb_ipk_) :: i, n -!!$ logical :: conjgx_, conjgy_ -!!$ -!!$ info = 0 -!!$ if (.not.psb_i_is_complex_) then -!!$ call z%mlt(alpha,x%v,y%v,beta,info) -!!$ else -!!$ conjgx_=.false. -!!$ if (present(conjgx)) conjgx_ = (psb_toupper(conjgx)=='C') -!!$ conjgy_=.false. -!!$ if (present(conjgy)) conjgy_ = (psb_toupper(conjgy)=='C') -!!$ if (conjgx_) x%v=(x%v) -!!$ if (conjgy_) y%v=(y%v) -!!$ call z%mlt(alpha,x%v,y%v,beta,info) -!!$ if (conjgx_) x%v=(x%v) -!!$ if (conjgy_) y%v=(y%v) -!!$ end if -!!$ end subroutine i_base_mv_mlt_v_2 -!!$ -!!$ subroutine i_base_mv_mlt_av(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_base_multivect_type), intent(inout) :: y -!!$ class(psb_i_base_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ call z%mlt(alpha,x,y%v,beta,info) -!!$ -!!$ end subroutine i_base_mv_mlt_av -!!$ -!!$ subroutine i_base_mv_mlt_va(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ integer(psb_ipk_), intent(in) :: y(:) -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ class(psb_i_base_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ call z%mlt(alpha,y,x,beta,info) -!!$ -!!$ end subroutine i_base_mv_mlt_va -!!$ -!!$ -!!$ ! -!!$ ! Simple scaling -!!$ ! -!!$ !> Function base_mv_scal -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief Scale all entries x = alpha*x -!!$ !! \param alpha The multiplier -!!$ !! -!!$ subroutine i_base_mv_scal(alpha, x) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent (in) :: alpha -!!$ -!!$ if (allocated(x%v)) x%v = alpha*x%v -!!$ -!!$ end subroutine i_base_mv_scal -!!$ -!!$ ! -!!$ ! Norms 1, 2 and infinity -!!$ ! -!!$ !> Function base_mv_nrm2 -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief 2-norm |x(1:n)|_2 -!!$ !! \param n how many entries to consider -!!$ function i_base_mv_nrm2(n,x) result(res) -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ integer(psb_ipk_), external :: dnrm2 -!!$ -!!$ res = dnrm2(n,x%v,1) -!!$ -!!$ end function i_base_mv_nrm2 -!!$ -!!$ ! -!!$ !> Function base_mv_amax -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief infinity-norm |x(1:n)|_\infty -!!$ !! \param n how many entries to consider -!!$ function i_base_mv_amax(n,x) result(res) -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ res = maxval(abs(x%v(1:n))) -!!$ -!!$ end function i_base_mv_amax -!!$ -!!$ ! -!!$ !> Function base_mv_asum -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief 1-norm |x(1:n)|_1 -!!$ !! \param n how many entries to consider -!!$ function i_base_mv_asum(n,x) result(res) -!!$ implicit none -!!$ class(psb_i_base_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ res = sum(abs(x%v(1:n))) -!!$ -!!$ end function i_base_mv_asum -!!$ -!!$ -!!$ ! -!!$ ! Gather: Y = beta * Y + alpha * X(IDX(:)) -!!$ ! -!!$ ! -!!$ !> Function base_mv_gthab -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief gather into an array -!!$ !! Y = beta * Y + alpha * X(IDX(:)) -!!$ !! \param n how many entries to consider -!!$ !! \param idx(:) indices -!!$ !! \param alpha -!!$ !! \param beta -!!$ subroutine i_base_mv_gthab(n,idx,alpha,x,beta,y) -!!$ use psi_serial_mod -!!$ integer(psb_ipk_) :: n, idx(:) -!!$ integer(psb_ipk_) :: alpha, beta, y(:) -!!$ class(psb_i_base_multivect_type) :: x -!!$ -!!$ call x%sync() -!!$ call psi_gth(n,idx,alpha,x%v,beta,y) -!!$ -!!$ end subroutine i_base_mv_gthab -!!$ ! -!!$ ! shortcut alpha=1 beta=0 -!!$ ! -!!$ !> Function base_mv_gthzv -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief gather into an array special alpha=1 beta=0 -!!$ !! Y = X(IDX(:)) -!!$ !! \param n how many entries to consider -!!$ !! \param idx(:) indices -!!$ subroutine i_base_mv_gthzv_x(i,n,idx,x,y) -!!$ use psi_serial_mod -!!$ integer(psb_ipk_) :: i,n -!!$ class(psb_i_base_multivect_type) :: idx -!!$ integer(psb_ipk_) :: y(:) -!!$ class(psb_i_base_multivect_type) :: x -!!$ -!!$ call x%gth(n,idx%v(i:),y) -!!$ -!!$ end subroutine i_base_mv_gthzv_x -!!$ -!!$ ! -!!$ ! shortcut alpha=1 beta=0 -!!$ ! -!!$ !> Function base_mv_gthzv -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief gather into an array special alpha=1 beta=0 -!!$ !! Y = X(IDX(:)) -!!$ !! \param n how many entries to consider -!!$ !! \param idx(:) indices -!!$ subroutine i_base_mv_gthzv(n,idx,x,y) -!!$ use psi_serial_mod -!!$ integer(psb_ipk_) :: n, idx(:) -!!$ integer(psb_ipk_) :: y(:) -!!$ class(psb_i_base_multivect_type) :: x -!!$ -!!$ call x%sync() -!!$ call psi_gth(n,idx,x%v,y) -!!$ -!!$ end subroutine i_base_mv_gthzv -!!$ -!!$ ! -!!$ ! Scatter: -!!$ ! Y(IDX(:)) = beta*Y(IDX(:)) + X(:) -!!$ ! -!!$ ! -!!$ !> Function base_mv_sctb -!!$ !! \memberof psb_i_base_multivect_type -!!$ !! \brief scatter into a class(base_mv_vect) -!!$ !! Y(IDX(:)) = beta * Y(IDX(:)) + X(:) -!!$ !! \param n how many entries to consider -!!$ !! \param idx(:) indices -!!$ !! \param beta -!!$ !! \param x(:) -!!$ subroutine i_base_mv_sctb(n,idx,x,beta,y) -!!$ use psi_serial_mod -!!$ integer(psb_ipk_) :: n, idx(:) -!!$ integer(psb_ipk_) :: beta, x(:) -!!$ class(psb_i_base_multivect_type) :: y -!!$ -!!$ call y%sync() -!!$ call psi_sct(n,idx,x,beta,y%v) -!!$ call y%set_host() -!!$ -!!$ end subroutine i_base_mv_sctb -!!$ -!!$ subroutine i_base_mv_sctb_x(i,n,idx,x,beta,y) -!!$ use psi_serial_mod -!!$ integer(psb_ipk_) :: i, n -!!$ class(psb_i_base_multivect_type) :: idx -!!$ integer( psb_ipk_) :: beta, x(:) -!!$ class(psb_i_base_multivect_type) :: y -!!$ -!!$ call y%sct(n,idx%v(i:),x,beta) -!!$ -!!$ end subroutine i_base_mv_sctb_x - end module psb_i_base_multivect_mod diff --git a/base/modules/psb_i_comm_mod.f90 b/base/modules/psb_i_comm_mod.f90 index 94d7c1c8..bdbbe3c6 100644 --- a/base/modules/psb_i_comm_mod.f90 +++ b/base/modules/psb_i_comm_mod.f90 @@ -30,27 +30,32 @@ !!$ !!$ module psb_i_comm_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_ + + use psb_i_vect_mod, only : psb_i_vect_type, psb_i_base_vect_type interface psb_ovrl - subroutine psb_iovrlm(x,desc_a,info,jx,ik,work,update,mode) - use psb_desc_mod + subroutine psb_iovrlm(x,desc_a,info,jx,ik,work,update,mode) + import + implicit none integer(psb_ipk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_iovrlm - subroutine psb_iovrlv(x,desc_a,info,work,update,mode) - use psb_desc_mod + subroutine psb_iovrlv(x,desc_a,info,work,update,mode) + import + implicit none integer(psb_ipk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_iovrlv - subroutine psb_iovrl_vect(x,desc_a,info,work,update,mode) - use psb_desc_mod - use psb_i_vect_mod + subroutine psb_iovrl_vect(x,desc_a,info,work,update,mode) + import + implicit none type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -60,33 +65,32 @@ module psb_i_comm_mod end interface psb_ovrl interface psb_halo - subroutine psb_ihalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) - use psb_desc_mod + subroutine psb_ihalom(x,desc_a,info,jx,ik,work,tran,mode,data) + import + implicit none integer(psb_ipk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: alpha integer(psb_ipk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran end subroutine psb_ihalom - subroutine psb_ihalov(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod + subroutine psb_ihalov(x,desc_a,info,work,tran,mode,data) + import + implicit none integer(psb_ipk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: alpha integer(psb_ipk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_ihalov - subroutine psb_ihalo_vect(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod - use psb_i_vect_mod + subroutine psb_ihalo_vect(x,desc_a,info,work,tran,mode,data) + import + implicit none type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: alpha integer(psb_ipk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -95,16 +99,18 @@ module psb_i_comm_mod interface psb_scatter - subroutine psb_iscatterm(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_iscatterm(globx, locx, desc_a, info, root) + import + implicit none integer(psb_ipk_), intent(out) :: locx(:,:) integer(psb_ipk_), intent(in) :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_iscatterm - subroutine psb_iscatterv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_iscatterv(globx, locx, desc_a, info, root) + import + implicit none integer(psb_ipk_), intent(out) :: locx(:) integer(psb_ipk_), intent(in) :: globx(:) type(psb_desc_type), intent(in) :: desc_a @@ -114,36 +120,27 @@ module psb_i_comm_mod end interface psb_scatter interface psb_gather -!!$ subroutine psb_isp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) -!!$ use psb_desc_mod -!!$ use psb_mat_mod -!!$ implicit none -!!$ type(psb_ispmat_type), intent(inout) :: loca -!!$ type(psb_ispmat_type), intent(out) :: globa -!!$ type(psb_desc_type), intent(in) :: desc_a -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_), intent(in), optional :: root,dupl -!!$ logical, intent(in), optional :: keepnum,keeploc -!!$ end subroutine psb_isp_allgather subroutine psb_igatherm(globx, locx, desc_a, info, root) - use psb_desc_mod + import + implicit none integer(psb_ipk_), intent(in) :: locx(:,:) integer(psb_ipk_), intent(out), allocatable :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_igatherm - subroutine psb_igatherv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_igatherv(globx, locx, desc_a, info, root) + import + implicit none integer(psb_ipk_), intent(in) :: locx(:) integer(psb_ipk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_igatherv - subroutine psb_igather_vect(globx, locx, desc_a, info, root) - use psb_desc_mod - use psb_i_vect_mod + subroutine psb_igather_vect(globx, locx, desc_a, info, root) + import + implicit none type(psb_i_vect_type), intent(inout) :: locx integer(psb_ipk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/psb_i_tools_mod.f90 b/base/modules/psb_i_tools_mod.f90 index 880874e7..d85dfa28 100644 --- a/base/modules/psb_i_tools_mod.f90 +++ b/base/modules/psb_i_tools_mod.f90 @@ -29,37 +29,38 @@ !!$ POSSIBILITY OF SUCH DAMAGE. !!$ !!$ -module psb_i_tools_mod +Module psb_i_tools_mod use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_success_ use psb_i_vect_mod, only : psb_i_base_vect_type, psb_i_vect_type - interface psb_geall - subroutine psb_ialloc(x, desc_a, info,n, lb) - import :: psb_ipk_, psb_desc_type - integer(psb_ipk_), allocatable, intent(out) :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, intent(in) :: n, lb + subroutine psb_ialloc(x, desc_a, info, n, lb) + import + implicit none + integer(psb_ipk_), allocatable, intent(out) :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: n, lb end subroutine psb_ialloc subroutine psb_iallocv(x, desc_a,info,n) - import :: psb_ipk_, psb_desc_type - integer(psb_ipk_), allocatable, intent(out) :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, intent(in) :: n + import + implicit none + integer(psb_ipk_), allocatable, intent(out) :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_iallocv subroutine psb_ialloc_vect(x, desc_a,info,n) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none type(psb_i_vect_type), intent(out) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_ialloc_vect subroutine psb_ialloc_vect_r2(x, desc_a,info,n,lb) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none type(psb_i_vect_type), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info @@ -70,20 +71,22 @@ module psb_i_tools_mod interface psb_geasb subroutine psb_iasb(x, desc_a, info) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), allocatable, intent(inout) :: x(:,:) + integer(psb_ipk_), allocatable, intent(inout) :: x(:,:) integer(psb_ipk_), intent(out) :: info end subroutine psb_iasb subroutine psb_iasbv(x, desc_a, info) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_iasbv subroutine psb_iasb_vect(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -91,8 +94,8 @@ module psb_i_tools_mod logical, intent(in), optional :: scratch end subroutine psb_iasb_vect subroutine psb_iasb_vect_r2(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -101,62 +104,66 @@ module psb_i_tools_mod end subroutine psb_iasb_vect_r2 end interface - interface psb_gefree subroutine psb_ifree(x, desc_a, info) - import :: psb_ipk_, psb_desc_type - integer(psb_ipk_),allocatable, intent(inout) :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + import + implicit none + integer(psb_ipk_),allocatable, intent(inout) :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psb_ifree subroutine psb_ifreev(x, desc_a, info) - import :: psb_ipk_, psb_desc_type - integer(psb_ipk_), allocatable, intent(inout) :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + import + implicit none + integer(psb_ipk_),allocatable, intent(inout) :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psb_ifreev subroutine psb_ifree_vect(x, desc_a, info) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info end subroutine psb_ifree_vect subroutine psb_ifree_vect_r2(x, desc_a, info) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_ifree_vect_r2 end interface + interface psb_geins - subroutine psb_iinsi(m,irw,val, x,desc_a,info,dupl,local) - import :: psb_ipk_, psb_desc_type + subroutine psb_iinsi(m,irw,val, x, desc_a,info,dupl,local) + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_),intent(inout) :: x(:,:) + integer(psb_ipk_),intent(inout) :: x(:,:) integer(psb_ipk_), intent(in) :: irw(:) - integer(psb_ipk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional, intent(in) :: dupl logical, intent(in), optional :: local end subroutine psb_iinsi subroutine psb_iinsvi(m, irw,val, x,desc_a,info,dupl,local) - import :: psb_ipk_, psb_desc_type - integer(psb_ipk_), intent(in) :: m - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_),intent(inout) :: x(:) - integer(psb_ipk_), intent(in) :: irw(:) - integer(psb_ipk_), intent(in) :: val(:) - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, intent(in) :: dupl + import + implicit none + integer(psb_ipk_), intent(in) :: m + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_),intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: irw(:) + integer(psb_ipk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl logical, intent(in), optional :: local end subroutine psb_iinsvi subroutine psb_iins_vect(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), intent(inout) :: x @@ -167,8 +174,8 @@ module psb_i_tools_mod logical, intent(in), optional :: local end subroutine psb_iins_vect subroutine psb_iins_vect_v(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), intent(inout) :: x @@ -179,8 +186,8 @@ module psb_i_tools_mod logical, intent(in), optional :: local end subroutine psb_iins_vect_v subroutine psb_iins_vect_r2(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_ipk_, & - & psb_i_base_vect_type, psb_i_vect_type + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_i_vect_type), intent(inout) :: x(:) @@ -195,7 +202,8 @@ module psb_i_tools_mod interface psb_glob_to_loc subroutine psb_glob_to_loc2v(x,y,desc_a,info,iact,owned) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(in) :: x(:) integer(psb_ipk_),intent(out) :: y(:) @@ -204,7 +212,8 @@ module psb_i_tools_mod character, intent(in), optional :: iact end subroutine psb_glob_to_loc2v subroutine psb_glob_to_loc1v(x,desc_a,info,iact,owned) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -212,7 +221,7 @@ module psb_i_tools_mod character, intent(in), optional :: iact end subroutine psb_glob_to_loc1v subroutine psb_glob_to_loc2s(x,y,desc_a,info,iact,owned) - import :: psb_ipk_, psb_desc_type + import implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(in) :: x @@ -222,7 +231,7 @@ module psb_i_tools_mod logical, intent(in), optional :: owned end subroutine psb_glob_to_loc2s subroutine psb_glob_to_loc1s(x,desc_a,info,iact,owned) - import :: psb_ipk_, psb_desc_type + import implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(inout) :: x @@ -234,7 +243,8 @@ module psb_i_tools_mod interface psb_loc_to_glob subroutine psb_loc_to_glob2v(x,y,desc_a,info,iact) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(in) :: x(:) integer(psb_ipk_),intent(out) :: y(:) @@ -242,14 +252,15 @@ module psb_i_tools_mod character, intent(in), optional :: iact end subroutine psb_loc_to_glob2v subroutine psb_loc_to_glob1v(x,desc_a,info,iact) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info character, intent(in), optional :: iact end subroutine psb_loc_to_glob1v subroutine psb_loc_to_glob2s(x,y,desc_a,info,iact) - import :: psb_ipk_, psb_desc_type + import implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(in) :: x @@ -258,7 +269,8 @@ module psb_i_tools_mod character, intent(in), optional :: iact end subroutine psb_loc_to_glob2s subroutine psb_loc_to_glob1s(x,desc_a,info,iact) - import :: psb_ipk_, psb_desc_type + import + implicit none type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -373,4 +385,3 @@ contains end subroutine psb_local_index_v end module psb_i_tools_mod - diff --git a/base/modules/psb_i_vect_mod.F90 b/base/modules/psb_i_vect_mod.F90 index 4a9f175d..eda63b5d 100644 --- a/base/modules/psb_i_vect_mod.F90 +++ b/base/modules/psb_i_vect_mod.F90 @@ -47,24 +47,6 @@ module psb_i_vect_mod procedure, pass(x) :: get_nrows => i_vect_get_nrows procedure, pass(x) :: sizeof => i_vect_sizeof procedure, pass(x) :: get_fmt => i_vect_get_fmt - procedure, pass(x) :: dot_v => i_vect_dot_v - procedure, pass(x) :: dot_a => i_vect_dot_a - generic, public :: dot => dot_v, dot_a - procedure, pass(y) :: axpby_v => i_vect_axpby_v - procedure, pass(y) :: axpby_a => i_vect_axpby_a - generic, public :: axpby => axpby_v, axpby_a - procedure, pass(y) :: mlt_v => i_vect_mlt_v - procedure, pass(y) :: mlt_a => i_vect_mlt_a - procedure, pass(z) :: mlt_a_2 => i_vect_mlt_a_2 - procedure, pass(z) :: mlt_v_2 => i_vect_mlt_v_2 - procedure, pass(z) :: mlt_va => i_vect_mlt_va - procedure, pass(z) :: mlt_av => i_vect_mlt_av - generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& - & mlt_v_2, mlt_av, mlt_va - procedure, pass(x) :: scal => i_vect_scal - procedure, pass(x) :: nrm2 => i_vect_nrm2 - procedure, pass(x) :: amax => i_vect_amax - procedure, pass(x) :: asum => i_vect_asum procedure, pass(x) :: all => i_vect_all procedure, pass(x) :: reall => i_vect_reall procedure, pass(x) :: zero => i_vect_zero @@ -160,11 +142,14 @@ contains subroutine i_vect_bld_x(x,invect,mold) integer(psb_ipk_), intent(in) :: invect(:) - class(psb_i_vect_type), intent(out) :: x + class(psb_i_vect_type), intent(inout) :: x class(psb_i_base_vect_type), intent(in), optional :: mold integer(psb_ipk_) :: info class(psb_i_base_vect_type), pointer :: mld + if (allocated(x%v)) & + & call x%free(info) + if (present(mold)) then #ifdef HAVE_MOLD allocate(x%v,stat=info,mold=mold) @@ -187,11 +172,15 @@ contains subroutine i_vect_bld_n(x,n,mold) integer(psb_ipk_), intent(in) :: n - class(psb_i_vect_type), intent(out) :: x + class(psb_i_vect_type), intent(inout) :: x class(psb_i_base_vect_type), intent(in), optional :: mold integer(psb_ipk_) :: info class(psb_i_base_vect_type), pointer :: mld + + if (allocated(x%v)) & + & call x%free(info) + if (present(mold)) then #ifdef HAVE_MOLD allocate(x%v,stat=info,mold=mold) @@ -220,21 +209,23 @@ contains end if end function i_vect_get_vect - subroutine i_vect_set_scal(x,val) + subroutine i_vect_set_scal(x,val,first,last) class(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: val + integer(psb_ipk_), optional :: first, last integer(psb_ipk_) :: info - if (allocated(x%v)) call x%v%set(val) + if (allocated(x%v)) call x%v%set(val,first,last) end subroutine i_vect_set_scal - subroutine i_vect_set_vect(x,val) + subroutine i_vect_set_vect(x,val,first,last) class(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last integer(psb_ipk_) :: info - if (allocated(x%v)) call x%v%set(val) + if (allocated(x%v)) call x%v%set(val,first,last) end subroutine i_vect_set_vect @@ -283,223 +274,17 @@ contains res = 'NULL' if (allocated(x%v)) res = x%v%get_fmt() end function i_vect_get_fmt - - function i_vect_dot_v(n,x,y) result(res) - implicit none - class(psb_i_vect_type), intent(inout) :: x, y - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - res = izero - if (allocated(x%v).and.allocated(y%v)) & - & res = x%v%dot(n,y%v) - - end function i_vect_dot_v - - function i_vect_dot_a(n,x,y) result(res) - implicit none - class(psb_i_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: y(:) - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - res = izero - if (allocated(x%v)) & - & res = x%v%dot(n,y) - - end function i_vect_dot_a - - subroutine i_vect_axpby_v(m,alpha, x, beta, y, info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: m - class(psb_i_vect_type), intent(inout) :: x - class(psb_i_vect_type), intent(inout) :: y - integer(psb_ipk_), intent (in) :: alpha, beta - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v).and.allocated(y%v)) then - call y%v%axpby(m,alpha,x%v,beta,info) - else - info = psb_err_invalid_vect_state_ - end if - - end subroutine i_vect_axpby_v - - subroutine i_vect_axpby_a(m,alpha, x, beta, y, info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: m - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_vect_type), intent(inout) :: y - integer(psb_ipk_), intent (in) :: alpha, beta - integer(psb_ipk_), intent(out) :: info - - if (allocated(y%v)) & - & call y%v%axpby(m,alpha,x,beta,info) - - end subroutine i_vect_axpby_a - - - subroutine i_vect_mlt_v(x, y, info) - use psi_serial_mod - implicit none - class(psb_i_vect_type), intent(inout) :: x - class(psb_i_vect_type), intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (allocated(x%v).and.allocated(y%v)) & - & call y%v%mlt(x%v,info) - - end subroutine i_vect_mlt_v - - subroutine i_vect_mlt_a(x, y, info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_vect_type), intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - - info = 0 - if (allocated(y%v)) & - & call y%v%mlt(x,info) - - end subroutine i_vect_mlt_a - - - subroutine i_vect_mlt_a_2(alpha,x,y,beta,z,info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - integer(psb_ipk_), intent(in) :: y(:) - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (allocated(z%v)) & - & call z%v%mlt(alpha,x,y,beta,info) - - end subroutine i_vect_mlt_a_2 - - subroutine i_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - class(psb_i_vect_type), intent(inout) :: x - class(psb_i_vect_type), intent(inout) :: y - class(psb_i_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - character(len=1), intent(in), optional :: conjgx, conjgy - - integer(psb_ipk_) :: i, n - - info = 0 - if (allocated(x%v).and.allocated(y%v).and.& - & allocated(z%v)) & - & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) - - end subroutine i_vect_mlt_v_2 - - subroutine i_vect_mlt_av(alpha,x,y,beta,z,info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - integer(psb_ipk_), intent(in) :: x(:) - class(psb_i_vect_type), intent(inout) :: y - class(psb_i_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - if (allocated(z%v).and.allocated(y%v)) & - & call z%v%mlt(alpha,x,y%v,beta,info) - - end subroutine i_vect_mlt_av - - subroutine i_vect_mlt_va(alpha,x,y,beta,z,info) - use psi_serial_mod - implicit none - integer(psb_ipk_), intent(in) :: alpha,beta - integer(psb_ipk_), intent(in) :: y(:) - class(psb_i_vect_type), intent(inout) :: x - class(psb_i_vect_type), intent(inout) :: z - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, n - - info = 0 - - if (allocated(z%v).and.allocated(x%v)) & - & call z%v%mlt(alpha,x%v,y,beta,info) - - end subroutine i_vect_mlt_va - - subroutine i_vect_scal(alpha, x) - use psi_serial_mod - implicit none - class(psb_i_vect_type), intent(inout) :: x - integer(psb_ipk_), intent (in) :: alpha - - if (allocated(x%v)) call x%v%scal(alpha) - - end subroutine i_vect_scal - - - function i_vect_nrm2(n,x) result(res) - implicit none - class(psb_i_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - if (allocated(x%v)) then - res = x%v%nrm2(n) - else - res = izero - end if + subroutine i_vect_all(n, x, info, mold) - end function i_vect_nrm2 - - function i_vect_amax(n,x) result(res) implicit none - class(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - if (allocated(x%v)) then - res = x%v%amax(n) - else - res = izero - end if - - end function i_vect_amax - - function i_vect_asum(n,x) result(res) - implicit none class(psb_i_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_) :: res - - if (allocated(x%v)) then - res = x%v%asum(n) - else - res = izero - end if - - end function i_vect_asum - - subroutine i_vect_all(n, x, info, mold) - - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_i_vect_type), intent(out) :: x class(psb_i_base_vect_type), intent(in), optional :: mold integer(psb_ipk_), intent(out) :: info + if (allocated(x%v)) & + & call x%free(info) + if (present(mold)) then #ifdef HAVE_MOLD allocate(x%v,stat=info,mold=mold) @@ -653,6 +438,7 @@ contains end subroutine i_vect_ins_v + subroutine i_vect_cnv(x,mold) class(psb_i_vect_type), intent(inout) :: x class(psb_i_base_vect_type), intent(in), optional :: mold @@ -683,7 +469,7 @@ module psb_i_multivect_mod use psb_i_base_multivect_mod use psb_const_mod - private + !private type psb_i_multivect_type class(psb_i_base_multivect_type), allocatable :: v @@ -692,34 +478,12 @@ module psb_i_multivect_mod procedure, pass(x) :: get_ncols => i_vect_get_ncols procedure, pass(x) :: sizeof => i_vect_sizeof procedure, pass(x) :: get_fmt => i_vect_get_fmt -!!$ procedure, pass(x) :: dot_v => i_vect_dot_v -!!$ procedure, pass(x) :: dot_a => i_vect_dot_a -!!$ generic, public :: dot => dot_v, dot_a -!!$ procedure, pass(y) :: axpby_v => i_vect_axpby_v -!!$ procedure, pass(y) :: axpby_a => i_vect_axpby_a -!!$ generic, public :: axpby => axpby_v, axpby_a -!!$ procedure, pass(y) :: mlt_v => i_vect_mlt_v -!!$ procedure, pass(y) :: mlt_a => i_vect_mlt_a -!!$ procedure, pass(z) :: mlt_a_2 => i_vect_mlt_a_2 -!!$ procedure, pass(z) :: mlt_v_2 => i_vect_mlt_v_2 -!!$ procedure, pass(z) :: mlt_va => i_vect_mlt_va -!!$ procedure, pass(z) :: mlt_av => i_vect_mlt_av -!!$ generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& -!!$ & mlt_v_2, mlt_av, mlt_va -!!$ procedure, pass(x) :: scal => i_vect_scal -!!$ procedure, pass(x) :: nrm2 => i_vect_nrm2 -!!$ procedure, pass(x) :: amax => i_vect_amax -!!$ procedure, pass(x) :: asum => i_vect_asum + procedure, pass(x) :: all => i_vect_all procedure, pass(x) :: reall => i_vect_reall procedure, pass(x) :: zero => i_vect_zero procedure, pass(x) :: asb => i_vect_asb procedure, pass(x) :: sync => i_vect_sync -!!$ procedure, pass(x) :: gthab => i_vect_gthab -!!$ procedure, pass(x) :: gthzv => i_vect_gthzv -!!$ generic, public :: gth => gthab, gthzv -!!$ procedure, pass(y) :: sctb => i_vect_sctb -!!$ generic, public :: sct => sctb procedure, pass(x) :: free => i_vect_free procedure, pass(x) :: ins => i_vect_ins procedure, pass(x) :: bld_x => i_vect_bld_x @@ -731,11 +495,17 @@ module psb_i_multivect_mod procedure, pass(x) :: set_vect => i_vect_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: clone => i_vect_clone +!!$ procedure, pass(x) :: gthab => i_vect_gthab +!!$ procedure, pass(x) :: gthzv => i_vect_gthzv +!!$ generic, public :: gth => gthab, gthzv +!!$ procedure, pass(y) :: sctb => i_vect_sctb +!!$ generic, public :: sct => sctb end type psb_i_multivect_type public :: psb_i_multivect, psb_i_multivect_type,& & psb_set_multivect_default, psb_get_multivect_default + private interface psb_i_multivect module procedure constructor, size_const end interface @@ -907,7 +677,7 @@ contains function i_vect_get_nrows(x) result(res) implicit none class(psb_i_multivect_type), intent(in) :: x - integer(psb_ipk_) :: res + integer(psb_ipk_) :: res res = 0 if (allocated(x%v)) res = x%v%get_nrows() end function i_vect_get_nrows @@ -936,214 +706,6 @@ contains if (allocated(x%v)) res = x%v%get_fmt() end function i_vect_get_fmt -!!$ function i_vect_dot_v(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x, y -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ res = izero -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & res = x%v%dot(n,y%v) -!!$ -!!$ end function i_vect_dot_v -!!$ -!!$ function i_vect_dot_a(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ res = izero -!!$ if (allocated(x%v)) & -!!$ & res = x%v%dot(n,y) -!!$ -!!$ end function i_vect_dot_a -!!$ -!!$ subroutine i_vect_axpby_v(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ class(psb_i_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(x%v).and.allocated(y%v)) then -!!$ call y%v%axpby(m,alpha,x%v,beta,info) -!!$ else -!!$ info = psb_err_invalid_vect_state_ -!!$ end if -!!$ -!!$ end subroutine i_vect_axpby_v -!!$ -!!$ subroutine i_vect_axpby_a(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(y%v)) & -!!$ & call y%v%axpby(m,alpha,x,beta,info) -!!$ -!!$ end subroutine i_vect_axpby_a -!!$ -!!$ -!!$ subroutine i_vect_mlt_v(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ class(psb_i_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & call y%v%mlt(x%v,info) -!!$ -!!$ end subroutine i_vect_mlt_v -!!$ -!!$ subroutine i_vect_mlt_a(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ -!!$ info = 0 -!!$ if (allocated(y%v)) & -!!$ & call y%v%mlt(x,info) -!!$ -!!$ end subroutine i_vect_mlt_a -!!$ -!!$ -!!$ subroutine i_vect_mlt_a_2(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ integer(psb_ipk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x,y,beta,info) -!!$ -!!$ end subroutine i_vect_mlt_a_2 -!!$ -!!$ subroutine i_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ class(psb_i_multivect_type), intent(inout) :: y -!!$ class(psb_i_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ character(len=1), intent(in), optional :: conjgx, conjgy -!!$ -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v).and.& -!!$ & allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) -!!$ -!!$ end subroutine i_vect_mlt_v_2 -!!$ -!!$ subroutine i_vect_mlt_av(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ integer(psb_ipk_), intent(in) :: x(:) -!!$ class(psb_i_multivect_type), intent(inout) :: y -!!$ class(psb_i_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v).and.allocated(y%v)) & -!!$ & call z%v%mlt(alpha,x,y%v,beta,info) -!!$ -!!$ end subroutine i_vect_mlt_av -!!$ -!!$ subroutine i_vect_mlt_va(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: alpha,beta -!!$ integer(psb_ipk_), intent(in) :: y(:) -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ class(psb_i_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ if (allocated(z%v).and.allocated(x%v)) & -!!$ & call z%v%mlt(alpha,x%v,y,beta,info) -!!$ -!!$ end subroutine i_vect_mlt_va -!!$ -!!$ subroutine i_vect_scal(alpha, x) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent (in) :: alpha -!!$ -!!$ if (allocated(x%v)) call x%v%scal(alpha) -!!$ -!!$ end subroutine i_vect_scal -!!$ -!!$ -!!$ function i_vect_nrm2(n,x) result(res) -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%nrm2(n) -!!$ else -!!$ res = izero -!!$ end if -!!$ -!!$ end function i_vect_nrm2 -!!$ -!!$ function i_vect_amax(n,x) result(res) -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%amax(n) -!!$ else -!!$ res = izero -!!$ end if -!!$ -!!$ end function i_vect_amax -!!$ -!!$ function i_vect_asum(n,x) result(res) -!!$ implicit none -!!$ class(psb_i_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ integer(psb_ipk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%asum(n) -!!$ else -!!$ res = izero -!!$ end if -!!$ -!!$ end function i_vect_asum - subroutine i_vect_all(m,n, x, info, mold) implicit none @@ -1306,4 +868,5 @@ contains end if end subroutine i_vect_cnv + end module psb_i_multivect_mod diff --git a/base/modules/psb_s_base_vect_mod.f90 b/base/modules/psb_s_base_vect_mod.f90 index cac0c43a..27940dcb 100644 --- a/base/modules/psb_s_base_vect_mod.f90 +++ b/base/modules/psb_s_base_vect_mod.f90 @@ -46,8 +46,8 @@ module psb_s_base_vect_mod use psb_const_mod use psb_error_mod - use psb_i_base_vect_mod use psb_realloc_mod + use psb_i_base_vect_mod !> \namespace psb_base_mod \class psb_s_base_vect_type !! The psb_s_base_vect_type @@ -123,6 +123,20 @@ module psb_s_base_vect_mod procedure, pass(x) :: set_scal => s_base_set_scal procedure, pass(x) :: set_vect => s_base_set_vect generic, public :: set => set_vect, set_scal + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => s_base_gthab + procedure, pass(x) :: gthzv => s_base_gthzv + procedure, pass(x) :: gthzv_x => s_base_gthzv_x + procedure, pass(x) :: gthzbuf => s_base_gthzbuf + generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => s_base_sctb + procedure, pass(y) :: sctb_x => s_base_sctb_x + procedure, pass(y) :: sctb_buf => s_base_sctb_buf + generic, public :: sct => sctb, sctb_x, sctb_buf + ! ! Dot product and AXPBY @@ -154,19 +168,7 @@ module psb_s_base_vect_mod procedure, pass(x) :: nrm2 => s_base_nrm2 procedure, pass(x) :: amax => s_base_amax procedure, pass(x) :: asum => s_base_asum - ! - ! Gather/scatter. These are needed for MPI interfacing. - ! May have to be reworked. - ! - procedure, pass(x) :: gthab => s_base_gthab - procedure, pass(x) :: gthzv => s_base_gthzv - procedure, pass(x) :: gthzv_x => s_base_gthzv_x - procedure, pass(x) :: gthzbuf => s_base_gthzbuf - generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf - procedure, pass(y) :: sctb => s_base_sctb - procedure, pass(y) :: sctb_x => s_base_sctb_x - procedure, pass(y) :: sctb_buf => s_base_sctb_buf - generic, public :: sct => sctb, sctb_x, sctb_buf + end type psb_s_base_vect_type public :: psb_s_base_vect @@ -668,6 +670,36 @@ contains end subroutine s_base_set_scal + + ! + !> Function base_set_vect + !! \memberof psb_s_base_vect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine s_base_set_vect(x,val,first,last) + class(psb_s_base_vect_type), intent(inout) :: x + real(psb_spk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info, first_, last_, nr + + first_=1 + last_=min(psb_size(x%v),size(val)) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(first_:last_) = val(1:last_-first_+1) + else + x%v = val + end if + call x%set_host() + + end subroutine s_base_set_vect + + ! ! Overwrite with absolute value ! @@ -680,7 +712,7 @@ contains class(psb_s_base_vect_type), intent(inout) :: x if (allocated(x%v)) then - if (.not.x%is_host()) call x%sync() + if (x%is_dev()) call x%sync() x%v = abs(x%v) call x%set_host() end if @@ -693,40 +725,12 @@ contains if (.not.x%is_host()) call x%sync() if (allocated(x%v)) then - call y%bld(x%v) + call y%axpby(min(x%get_nrows(),y%get_nrows()),sone,x,szero,info) call y%absval() - call y%set_host() end if end subroutine s_base_absval2 - ! - !> Function base_set_vect - !! \memberof psb_s_base_vect_type - !! \brief Set all entries - !! \param val(:) The vector to be copied in - !! - subroutine s_base_set_vect(x,val,first,last) - class(psb_s_base_vect_type), intent(inout) :: x - real(psb_spk_), intent(in) :: val(:) - integer(psb_ipk_), optional :: first, last - - integer(psb_ipk_) :: info, first_, last_, nr - - first_=1 - last_=min(psb_size(x%v),size(val)) - if (present(first)) first_ = max(1,first) - if (present(last)) last_ = min(last,last_) - - if (allocated(x%v)) then - x%v(first_:last_) = val(1:last_-first_+1) - else - x%v = val - end if - call x%set_host() - - end subroutine s_base_set_vect - ! ! Dot products ! @@ -2422,6 +2426,5 @@ contains !!$ call y%sct(n,idx%v(i:),x,beta) !!$ !!$ end subroutine s_base_mv_sctb_x - end module psb_s_base_multivect_mod diff --git a/base/modules/psb_s_comm_mod.f90 b/base/modules/psb_s_comm_mod.f90 index bc859a92..a0fba209 100644 --- a/base/modules/psb_s_comm_mod.f90 +++ b/base/modules/psb_s_comm_mod.f90 @@ -30,27 +30,33 @@ !!$ !!$ module psb_s_comm_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_spk_ + use psb_mat_mod, only : psb_sspmat_type + + use psb_s_vect_mod, only : psb_s_vect_type, psb_s_base_vect_type interface psb_ovrl - subroutine psb_sovrlm(x,desc_a,info,jx,ik,work,update,mode) - use psb_desc_mod + subroutine psb_sovrlm(x,desc_a,info,jx,ik,work,update,mode) + import + implicit none real(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info real(psb_spk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_sovrlm - subroutine psb_sovrlv(x,desc_a,info,work,update,mode) - use psb_desc_mod + subroutine psb_sovrlv(x,desc_a,info,work,update,mode) + import + implicit none real(psb_spk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info real(psb_spk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_sovrlv - subroutine psb_sovrl_vect(x,desc_a,info,work,update,mode) - use psb_desc_mod - use psb_s_vect_mod + subroutine psb_sovrl_vect(x,desc_a,info,work,update,mode) + import + implicit none type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -60,33 +66,32 @@ module psb_s_comm_mod end interface psb_ovrl interface psb_halo - subroutine psb_shalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) - use psb_desc_mod + subroutine psb_shalom(x,desc_a,info,jx,ik,work,tran,mode,data) + import + implicit none real(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(in), optional :: alpha real(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran end subroutine psb_shalom - subroutine psb_shalov(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod + subroutine psb_shalov(x,desc_a,info,work,tran,mode,data) + import + implicit none real(psb_spk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(in), optional :: alpha real(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_shalov - subroutine psb_shalo_vect(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod - use psb_s_vect_mod + subroutine psb_shalo_vect(x,desc_a,info,work,tran,mode,data) + import + implicit none type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(in), optional :: alpha real(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -95,16 +100,18 @@ module psb_s_comm_mod interface psb_scatter - subroutine psb_sscatterm(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_sscatterm(globx, locx, desc_a, info, root) + import + implicit none real(psb_spk_), intent(out) :: locx(:,:) real(psb_spk_), intent(in) :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_sscatterm - subroutine psb_sscatterv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_sscatterv(globx, locx, desc_a, info, root) + import + implicit none real(psb_spk_), intent(out) :: locx(:) real(psb_spk_), intent(in) :: globx(:) type(psb_desc_type), intent(in) :: desc_a @@ -114,9 +121,8 @@ module psb_s_comm_mod end interface psb_scatter interface psb_gather - subroutine psb_ssp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) - use psb_desc_mod - use psb_mat_mod + subroutine psb_ssp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) + import implicit none type(psb_sspmat_type), intent(inout) :: loca type(psb_sspmat_type), intent(out) :: globa @@ -126,24 +132,26 @@ module psb_s_comm_mod logical, intent(in), optional :: keepnum,keeploc end subroutine psb_ssp_allgather subroutine psb_sgatherm(globx, locx, desc_a, info, root) - use psb_desc_mod + import + implicit none real(psb_spk_), intent(in) :: locx(:,:) real(psb_spk_), intent(out), allocatable :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_sgatherm - subroutine psb_sgatherv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_sgatherv(globx, locx, desc_a, info, root) + import + implicit none real(psb_spk_), intent(in) :: locx(:) real(psb_spk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_sgatherv - subroutine psb_sgather_vect(globx, locx, desc_a, info, root) - use psb_desc_mod - use psb_s_vect_mod + subroutine psb_sgather_vect(globx, locx, desc_a, info, root) + import + implicit none type(psb_s_vect_type), intent(inout) :: locx real(psb_spk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/psb_s_tools_mod.f90 b/base/modules/psb_s_tools_mod.f90 index 3f2bb1e0..6710fd61 100644 --- a/base/modules/psb_s_tools_mod.f90 +++ b/base/modules/psb_s_tools_mod.f90 @@ -36,9 +36,7 @@ Module psb_s_tools_mod interface psb_geall subroutine psb_salloc(x, desc_a, info, n, lb) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import implicit none real(psb_spk_), allocatable, intent(out) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -46,27 +44,24 @@ Module psb_s_tools_mod integer(psb_ipk_), optional, intent(in) :: n, lb end subroutine psb_salloc subroutine psb_sallocv(x, desc_a,info,n) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none real(psb_spk_), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_sallocv subroutine psb_salloc_vect(x, desc_a,info,n) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_s_vect_type), intent(out) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_salloc_vect subroutine psb_salloc_vect_r2(x, desc_a,info,n,lb) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_s_vect_type), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info @@ -77,25 +72,22 @@ Module psb_s_tools_mod interface psb_geasb subroutine psb_sasb(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a real(psb_spk_), allocatable, intent(inout) :: x(:,:) integer(psb_ipk_), intent(out) :: info end subroutine psb_sasb subroutine psb_sasbv(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a real(psb_spk_), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_sasbv subroutine psb_sasb_vect(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -103,9 +95,8 @@ Module psb_s_tools_mod logical, intent(in), optional :: scratch end subroutine psb_sasb_vect subroutine psb_sasb_vect_r2(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -114,51 +105,31 @@ Module psb_s_tools_mod end subroutine psb_sasb_vect_r2 end interface - interface psb_sphalo - Subroutine psb_ssphalo(a,desc_a,blk,info,rowcnv,colcnv,& - & rowscale,colscale,outfmt,data) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat - Type(psb_sspmat_type),Intent(in) :: a - Type(psb_sspmat_type),Intent(inout) :: blk - Type(psb_desc_type),Intent(in), target :: desc_a - integer(psb_ipk_), intent(out) :: info - logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale - character(len=5), optional :: outfmt - integer(psb_ipk_), intent(in), optional :: data - end Subroutine psb_ssphalo - end interface - interface psb_gefree subroutine psb_sfree(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none real(psb_spk_),allocatable, intent(inout) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_sfree subroutine psb_sfreev(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none real(psb_spk_),allocatable, intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_sfreev subroutine psb_sfree_vect(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info end subroutine psb_sfree_vect subroutine psb_sfree_vect_r2(x, desc_a, info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -168,9 +139,8 @@ Module psb_s_tools_mod interface psb_geins subroutine psb_sinsi(m,irw,val, x, desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a real(psb_spk_),intent(inout) :: x(:,:) @@ -181,9 +151,8 @@ Module psb_s_tools_mod logical, intent(in), optional :: local end subroutine psb_sinsi subroutine psb_sinsvi(m, irw,val, x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a real(psb_spk_),intent(inout) :: x(:) @@ -194,9 +163,8 @@ Module psb_s_tools_mod logical, intent(in), optional :: local end subroutine psb_sinsvi subroutine psb_sins_vect(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), intent(inout) :: x @@ -207,9 +175,8 @@ Module psb_s_tools_mod logical, intent(in), optional :: local end subroutine psb_sins_vect subroutine psb_sins_vect_v(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, psb_i_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), intent(inout) :: x @@ -220,9 +187,8 @@ Module psb_s_tools_mod logical, intent(in), optional :: local end subroutine psb_sins_vect_v subroutine psb_sins_vect_r2(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_s_vect_type), intent(inout) :: x(:) @@ -236,9 +202,8 @@ Module psb_s_tools_mod interface psb_cdbldext Subroutine psb_scdbldext(a,desc_a,novr,desc_ov,info,extype) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: novr Type(psb_sspmat_type), Intent(in) :: a Type(psb_desc_type), Intent(inout), target :: desc_a @@ -248,11 +213,26 @@ Module psb_s_tools_mod end Subroutine psb_scdbldext end interface + interface psb_sphalo + Subroutine psb_ssphalo(a,desc_a,blk,info,rowcnv,colcnv,& + & rowscale,colscale,outfmt,data) + import + implicit none + Type(psb_sspmat_type),Intent(in) :: a + Type(psb_sspmat_type),Intent(inout) :: blk + Type(psb_desc_type),Intent(in), target :: desc_a + integer(psb_ipk_), intent(out) :: info + logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale + character(len=5), optional :: outfmt + integer(psb_ipk_), intent(in), optional :: data + end Subroutine psb_ssphalo + end interface + + interface psb_spall subroutine psb_sspalloc(a, desc_a, info, nnz) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_sspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info @@ -262,9 +242,8 @@ Module psb_s_tools_mod interface psb_spasb subroutine psb_sspasb(a,desc_a, info, afmt, upd, dupl,mold) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_sspmat_type), intent (inout) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -276,9 +255,8 @@ Module psb_s_tools_mod interface psb_spfree subroutine psb_sspfree(a, desc_a,info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_sspmat_type), intent(inout) ::a integer(psb_ipk_), intent(out) :: info @@ -288,9 +266,8 @@ Module psb_s_tools_mod interface psb_spins subroutine psb_sspins(nz,ia,ja,val,a,desc_a,info,rebuild,local) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_sspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz,ia(:),ja(:) @@ -301,9 +278,8 @@ Module psb_s_tools_mod end subroutine psb_sspins subroutine psb_sspins_v(nz,ia,ja,val,a,desc_a,info,rebuild,local) use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type,& - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_sspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz @@ -314,9 +290,8 @@ Module psb_s_tools_mod logical, intent(in), optional :: local end subroutine psb_sspins_v subroutine psb_sspins_2desc(nz,ia,ja,val,a,desc_ar,desc_ac,info) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_ar type(psb_desc_type), intent(inout) :: desc_ac type(psb_sspmat_type), intent(inout) :: a @@ -329,9 +304,8 @@ Module psb_s_tools_mod interface psb_sprn subroutine psb_ssprn(a, desc_a,info,clear) - import :: psb_desc_type, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_s_vect_type, & - & psb_sspmat_type, psb_s_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_sspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/psb_s_vect_mod.F90 b/base/modules/psb_s_vect_mod.F90 index 9145d71a..15a75ac6 100644 --- a/base/modules/psb_s_vect_mod.F90 +++ b/base/modules/psb_s_vect_mod.F90 @@ -48,27 +48,6 @@ module psb_s_vect_mod procedure, pass(x) :: get_nrows => s_vect_get_nrows procedure, pass(x) :: sizeof => s_vect_sizeof procedure, pass(x) :: get_fmt => s_vect_get_fmt - procedure, pass(x) :: dot_v => s_vect_dot_v - procedure, pass(x) :: dot_a => s_vect_dot_a - generic, public :: dot => dot_v, dot_a - procedure, pass(y) :: axpby_v => s_vect_axpby_v - procedure, pass(y) :: axpby_a => s_vect_axpby_a - generic, public :: axpby => axpby_v, axpby_a - procedure, pass(y) :: mlt_v => s_vect_mlt_v - procedure, pass(y) :: mlt_a => s_vect_mlt_a - procedure, pass(z) :: mlt_a_2 => s_vect_mlt_a_2 - procedure, pass(z) :: mlt_v_2 => s_vect_mlt_v_2 - procedure, pass(z) :: mlt_va => s_vect_mlt_va - procedure, pass(z) :: mlt_av => s_vect_mlt_av - generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& - & mlt_v_2, mlt_av, mlt_va - procedure, pass(x) :: scal => s_vect_scal - procedure, pass(x) :: absval1 => s_vect_absval1 - procedure, pass(x) :: absval2 => s_vect_absval2 - generic, public :: absval => absval1, absval2 - procedure, pass(x) :: nrm2 => s_vect_nrm2 - procedure, pass(x) :: amax => s_vect_amax - procedure, pass(x) :: asum => s_vect_asum procedure, pass(x) :: all => s_vect_all procedure, pass(x) :: reall => s_vect_reall procedure, pass(x) :: zero => s_vect_zero @@ -92,6 +71,27 @@ module psb_s_vect_mod procedure, pass(x) :: set_vect => s_vect_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: clone => s_vect_clone + procedure, pass(x) :: dot_v => s_vect_dot_v + procedure, pass(x) :: dot_a => s_vect_dot_a + generic, public :: dot => dot_v, dot_a + procedure, pass(y) :: axpby_v => s_vect_axpby_v + procedure, pass(y) :: axpby_a => s_vect_axpby_a + generic, public :: axpby => axpby_v, axpby_a + procedure, pass(y) :: mlt_v => s_vect_mlt_v + procedure, pass(y) :: mlt_a => s_vect_mlt_a + procedure, pass(z) :: mlt_a_2 => s_vect_mlt_a_2 + procedure, pass(z) :: mlt_v_2 => s_vect_mlt_v_2 + procedure, pass(z) :: mlt_va => s_vect_mlt_va + procedure, pass(z) :: mlt_av => s_vect_mlt_av + generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& + & mlt_v_2, mlt_av, mlt_va + procedure, pass(x) :: scal => s_vect_scal + procedure, pass(x) :: absval1 => s_vect_absval1 + procedure, pass(x) :: absval2 => s_vect_absval2 + generic, public :: absval => absval1, absval2 + procedure, pass(x) :: nrm2 => s_vect_nrm2 + procedure, pass(x) :: amax => s_vect_amax + procedure, pass(x) :: asum => s_vect_asum end type psb_s_vect_type public :: psb_s_vect @@ -296,6 +296,191 @@ contains res = 'NULL' if (allocated(x%v)) res = x%v%get_fmt() end function s_vect_get_fmt + subroutine s_vect_all(n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_s_vect_type), intent(inout) :: x + class(psb_s_base_vect_type), intent(in), optional :: mold + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(x%v,stat=info,mold=mold) +#else + call mold%mold(x%v,info) +#endif + else + allocate(psb_s_base_vect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(n,info) + else + info = psb_err_alloc_dealloc_ + end if + + end subroutine s_vect_all + + subroutine s_vect_reall(n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(n,info) + if (info == 0) & + & call x%asb(n,info) + + end subroutine s_vect_reall + + subroutine s_vect_zero(x) + use psi_serial_mod + implicit none + class(psb_s_vect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine s_vect_zero + + subroutine s_vect_asb(n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%v%asb(n,info) + + end subroutine s_vect_asb + + subroutine s_vect_sync(x) + implicit none + class(psb_s_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine s_vect_sync + + subroutine s_vect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + real(psb_spk_) :: alpha, beta, y(:) + class(psb_s_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine s_vect_gthab + + subroutine s_vect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + real(psb_spk_) :: y(:) + class(psb_s_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine s_vect_gthzv + + subroutine s_vect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + real(psb_spk_) :: beta, x(:) + class(psb_s_vect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine s_vect_sctb + + subroutine s_vect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine s_vect_free + + subroutine s_vect_ins_a(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: irl(:) + real(psb_spk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl,val,dupl,info) + + end subroutine s_vect_ins_a + + subroutine s_vect_ins_v(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + class(psb_i_vect_type), intent(inout) :: irl + class(psb_s_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl%v,val%v,dupl,info) + + end subroutine s_vect_ins_v + + + subroutine s_vect_cnv(x,mold) + class(psb_s_vect_type), intent(inout) :: x + class(psb_s_base_vect_type), intent(in), optional :: mold + class(psb_s_base_vect_type), allocatable :: tmp + integer(psb_ipk_) :: info + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(tmp,stat=info,mold=mold) +#else + call mold%mold(tmp,info) +#endif + if (allocated(x%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%free(info) + end if + call move_alloc(tmp,x%v) + end if + end subroutine s_vect_cnv function s_vect_dot_v(n,x,y) result(res) implicit none @@ -522,197 +707,12 @@ contains end function s_vect_asum - subroutine s_vect_all(n, x, info, mold) - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_s_vect_type), intent(inout) :: x - class(psb_s_base_vect_type), intent(in), optional :: mold - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%free(info) +end module psb_s_vect_mod - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(x%v,stat=info,mold=mold) -#else - call mold%mold(x%v,info) -#endif - else - allocate(psb_s_base_vect_type :: x%v,stat=info) - endif - if (info == 0) then - call x%v%all(n,info) - else - info = psb_err_alloc_dealloc_ - end if - end subroutine s_vect_all - subroutine s_vect_reall(n, x, info) - - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (.not.allocated(x%v)) & - & call x%all(n,info) - if (info == 0) & - & call x%asb(n,info) - - end subroutine s_vect_reall - - subroutine s_vect_zero(x) - use psi_serial_mod - implicit none - class(psb_s_vect_type), intent(inout) :: x - - if (allocated(x%v)) call x%v%zero() - - end subroutine s_vect_zero - - subroutine s_vect_asb(n, x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%v%asb(n,info) - - end subroutine s_vect_asb - - subroutine s_vect_sync(x) - implicit none - class(psb_s_vect_type), intent(inout) :: x - - if (allocated(x%v)) & - & call x%v%sync() - - end subroutine s_vect_sync - - subroutine s_vect_gthab(n,idx,alpha,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - real(psb_spk_) :: alpha, beta, y(:) - class(psb_s_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,alpha,beta,y) - - end subroutine s_vect_gthab - - subroutine s_vect_gthzv(n,idx,x,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - real(psb_spk_) :: y(:) - class(psb_s_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,y) - - end subroutine s_vect_gthzv - - subroutine s_vect_sctb(n,idx,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - real(psb_spk_) :: beta, x(:) - class(psb_s_vect_type) :: y - - if (allocated(y%v)) & - & call y%v%sct(n,idx,x,beta) - - end subroutine s_vect_sctb - - subroutine s_vect_free(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (allocated(x%v)) then - call x%v%free(info) - if (info == 0) deallocate(x%v,stat=info) - end if - - end subroutine s_vect_free - - subroutine s_vect_ins_a(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - integer(psb_ipk_), intent(in) :: irl(:) - real(psb_spk_), intent(in) :: val(:) - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl,val,dupl,info) - - end subroutine s_vect_ins_a - - subroutine s_vect_ins_v(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - class(psb_i_vect_type), intent(inout) :: irl - class(psb_s_vect_type), intent(inout) :: val - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl%v,val%v,dupl,info) - - end subroutine s_vect_ins_v - - - subroutine s_vect_cnv(x,mold) - class(psb_s_vect_type), intent(inout) :: x - class(psb_s_base_vect_type), intent(in), optional :: mold - class(psb_s_base_vect_type), allocatable :: tmp - integer(psb_ipk_) :: info - - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(tmp,stat=info,mold=mold) -#else - call mold%mold(tmp,info) -#endif - if (allocated(x%v)) then - call x%v%sync() - if (info == psb_success_) call tmp%bld(x%v%v) - call x%v%free(info) - end if - call move_alloc(tmp,x%v) - end if - end subroutine s_vect_cnv - -end module psb_s_vect_mod - - - -module psb_s_multivect_mod +module psb_s_multivect_mod use psb_s_base_multivect_mod use psb_const_mod @@ -726,6 +726,28 @@ module psb_s_multivect_mod procedure, pass(x) :: get_ncols => s_vect_get_ncols procedure, pass(x) :: sizeof => s_vect_sizeof procedure, pass(x) :: get_fmt => s_vect_get_fmt + + procedure, pass(x) :: all => s_vect_all + procedure, pass(x) :: reall => s_vect_reall + procedure, pass(x) :: zero => s_vect_zero + procedure, pass(x) :: asb => s_vect_asb + procedure, pass(x) :: sync => s_vect_sync + procedure, pass(x) :: free => s_vect_free + procedure, pass(x) :: ins => s_vect_ins + procedure, pass(x) :: bld_x => s_vect_bld_x + procedure, pass(x) :: bld_n => s_vect_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: get_vect => s_vect_get_vect + procedure, pass(x) :: cnv => s_vect_cnv + procedure, pass(x) :: set_scal => s_vect_set_scal + procedure, pass(x) :: set_vect => s_vect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => s_vect_clone +!!$ procedure, pass(x) :: gthab => s_vect_gthab +!!$ procedure, pass(x) :: gthzv => s_vect_gthzv +!!$ generic, public :: gth => gthab, gthzv +!!$ procedure, pass(y) :: sctb => s_vect_sctb +!!$ generic, public :: sct => sctb !!$ procedure, pass(x) :: dot_v => s_vect_dot_v !!$ procedure, pass(x) :: dot_a => s_vect_dot_a !!$ generic, public :: dot => dot_v, dot_a @@ -744,27 +766,6 @@ module psb_s_multivect_mod !!$ procedure, pass(x) :: nrm2 => s_vect_nrm2 !!$ procedure, pass(x) :: amax => s_vect_amax !!$ procedure, pass(x) :: asum => s_vect_asum - procedure, pass(x) :: all => s_vect_all - procedure, pass(x) :: reall => s_vect_reall - procedure, pass(x) :: zero => s_vect_zero - procedure, pass(x) :: asb => s_vect_asb - procedure, pass(x) :: sync => s_vect_sync -!!$ procedure, pass(x) :: gthab => s_vect_gthab -!!$ procedure, pass(x) :: gthzv => s_vect_gthzv -!!$ generic, public :: gth => gthab, gthzv -!!$ procedure, pass(y) :: sctb => s_vect_sctb -!!$ generic, public :: sct => sctb - procedure, pass(x) :: free => s_vect_free - procedure, pass(x) :: ins => s_vect_ins - procedure, pass(x) :: bld_x => s_vect_bld_x - procedure, pass(x) :: bld_n => s_vect_bld_n - generic, public :: bld => bld_x, bld_n - procedure, pass(x) :: get_vect => s_vect_get_vect - procedure, pass(x) :: cnv => s_vect_cnv - procedure, pass(x) :: set_scal => s_vect_set_scal - procedure, pass(x) :: set_vect => s_vect_set_vect - generic, public :: set => set_vect, set_scal - procedure, pass(x) :: clone => s_vect_clone end type psb_s_multivect_type public :: psb_s_multivect, psb_s_multivect_type,& @@ -971,214 +972,6 @@ contains if (allocated(x%v)) res = x%v%get_fmt() end function s_vect_get_fmt -!!$ function s_vect_dot_v(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x, y -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ res = szero -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & res = x%v%dot(n,y%v) -!!$ -!!$ end function s_vect_dot_v -!!$ -!!$ function s_vect_dot_a(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ real(psb_spk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ res = szero -!!$ if (allocated(x%v)) & -!!$ & res = x%v%dot(n,y) -!!$ -!!$ end function s_vect_dot_a -!!$ -!!$ subroutine s_vect_axpby_v(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ class(psb_s_multivect_type), intent(inout) :: y -!!$ real(psb_spk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(x%v).and.allocated(y%v)) then -!!$ call y%v%axpby(m,alpha,x%v,beta,info) -!!$ else -!!$ info = psb_err_invalid_vect_state_ -!!$ end if -!!$ -!!$ end subroutine s_vect_axpby_v -!!$ -!!$ subroutine s_vect_axpby_a(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ real(psb_spk_), intent(in) :: x(:) -!!$ class(psb_s_multivect_type), intent(inout) :: y -!!$ real(psb_spk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(y%v)) & -!!$ & call y%v%axpby(m,alpha,x,beta,info) -!!$ -!!$ end subroutine s_vect_axpby_a -!!$ -!!$ -!!$ subroutine s_vect_mlt_v(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ class(psb_s_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & call y%v%mlt(x%v,info) -!!$ -!!$ end subroutine s_vect_mlt_v -!!$ -!!$ subroutine s_vect_mlt_a(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_spk_), intent(in) :: x(:) -!!$ class(psb_s_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ -!!$ info = 0 -!!$ if (allocated(y%v)) & -!!$ & call y%v%mlt(x,info) -!!$ -!!$ end subroutine s_vect_mlt_a -!!$ -!!$ -!!$ subroutine s_vect_mlt_a_2(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_spk_), intent(in) :: alpha,beta -!!$ real(psb_spk_), intent(in) :: y(:) -!!$ real(psb_spk_), intent(in) :: x(:) -!!$ class(psb_s_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x,y,beta,info) -!!$ -!!$ end subroutine s_vect_mlt_a_2 -!!$ -!!$ subroutine s_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_spk_), intent(in) :: alpha,beta -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ class(psb_s_multivect_type), intent(inout) :: y -!!$ class(psb_s_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ character(len=1), intent(in), optional :: conjgx, conjgy -!!$ -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v).and.& -!!$ & allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) -!!$ -!!$ end subroutine s_vect_mlt_v_2 -!!$ -!!$ subroutine s_vect_mlt_av(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_spk_), intent(in) :: alpha,beta -!!$ real(psb_spk_), intent(in) :: x(:) -!!$ class(psb_s_multivect_type), intent(inout) :: y -!!$ class(psb_s_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v).and.allocated(y%v)) & -!!$ & call z%v%mlt(alpha,x,y%v,beta,info) -!!$ -!!$ end subroutine s_vect_mlt_av -!!$ -!!$ subroutine s_vect_mlt_va(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ real(psb_spk_), intent(in) :: alpha,beta -!!$ real(psb_spk_), intent(in) :: y(:) -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ class(psb_s_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ if (allocated(z%v).and.allocated(x%v)) & -!!$ & call z%v%mlt(alpha,x%v,y,beta,info) -!!$ -!!$ end subroutine s_vect_mlt_va -!!$ -!!$ subroutine s_vect_scal(alpha, x) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ real(psb_spk_), intent (in) :: alpha -!!$ -!!$ if (allocated(x%v)) call x%v%scal(alpha) -!!$ -!!$ end subroutine s_vect_scal -!!$ -!!$ -!!$ function s_vect_nrm2(n,x) result(res) -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%nrm2(n) -!!$ else -!!$ res = szero -!!$ end if -!!$ -!!$ end function s_vect_nrm2 -!!$ -!!$ function s_vect_amax(n,x) result(res) -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%amax(n) -!!$ else -!!$ res = szero -!!$ end if -!!$ -!!$ end function s_vect_amax -!!$ -!!$ function s_vect_asum(n,x) result(res) -!!$ implicit none -!!$ class(psb_s_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_spk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%asum(n) -!!$ else -!!$ res = szero -!!$ end if -!!$ -!!$ end function s_vect_asum - subroutine s_vect_all(m,n, x, info, mold) implicit none @@ -1341,4 +1134,213 @@ contains end if end subroutine s_vect_cnv + +!!$ function s_vect_dot_v(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x, y +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ res = szero +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & res = x%v%dot(n,y%v) +!!$ +!!$ end function s_vect_dot_v +!!$ +!!$ function s_vect_dot_a(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ real(psb_spk_), intent(in) :: y(:) +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ res = szero +!!$ if (allocated(x%v)) & +!!$ & res = x%v%dot(n,y) +!!$ +!!$ end function s_vect_dot_a +!!$ +!!$ subroutine s_vect_axpby_v(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ class(psb_s_multivect_type), intent(inout) :: y +!!$ real(psb_spk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(x%v).and.allocated(y%v)) then +!!$ call y%v%axpby(m,alpha,x%v,beta,info) +!!$ else +!!$ info = psb_err_invalid_vect_state_ +!!$ end if +!!$ +!!$ end subroutine s_vect_axpby_v +!!$ +!!$ subroutine s_vect_axpby_a(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ real(psb_spk_), intent(in) :: x(:) +!!$ class(psb_s_multivect_type), intent(inout) :: y +!!$ real(psb_spk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(y%v)) & +!!$ & call y%v%axpby(m,alpha,x,beta,info) +!!$ +!!$ end subroutine s_vect_axpby_a +!!$ +!!$ +!!$ subroutine s_vect_mlt_v(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ class(psb_s_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & call y%v%mlt(x%v,info) +!!$ +!!$ end subroutine s_vect_mlt_v +!!$ +!!$ subroutine s_vect_mlt_a(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_spk_), intent(in) :: x(:) +!!$ class(psb_s_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ +!!$ info = 0 +!!$ if (allocated(y%v)) & +!!$ & call y%v%mlt(x,info) +!!$ +!!$ end subroutine s_vect_mlt_a +!!$ +!!$ +!!$ subroutine s_vect_mlt_a_2(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_spk_), intent(in) :: alpha,beta +!!$ real(psb_spk_), intent(in) :: y(:) +!!$ real(psb_spk_), intent(in) :: x(:) +!!$ class(psb_s_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x,y,beta,info) +!!$ +!!$ end subroutine s_vect_mlt_a_2 +!!$ +!!$ subroutine s_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_spk_), intent(in) :: alpha,beta +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ class(psb_s_multivect_type), intent(inout) :: y +!!$ class(psb_s_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ character(len=1), intent(in), optional :: conjgx, conjgy +!!$ +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v).and.& +!!$ & allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) +!!$ +!!$ end subroutine s_vect_mlt_v_2 +!!$ +!!$ subroutine s_vect_mlt_av(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_spk_), intent(in) :: alpha,beta +!!$ real(psb_spk_), intent(in) :: x(:) +!!$ class(psb_s_multivect_type), intent(inout) :: y +!!$ class(psb_s_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v).and.allocated(y%v)) & +!!$ & call z%v%mlt(alpha,x,y%v,beta,info) +!!$ +!!$ end subroutine s_vect_mlt_av +!!$ +!!$ subroutine s_vect_mlt_va(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ real(psb_spk_), intent(in) :: alpha,beta +!!$ real(psb_spk_), intent(in) :: y(:) +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ class(psb_s_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ +!!$ if (allocated(z%v).and.allocated(x%v)) & +!!$ & call z%v%mlt(alpha,x%v,y,beta,info) +!!$ +!!$ end subroutine s_vect_mlt_va +!!$ +!!$ subroutine s_vect_scal(alpha, x) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ real(psb_spk_), intent (in) :: alpha +!!$ +!!$ if (allocated(x%v)) call x%v%scal(alpha) +!!$ +!!$ end subroutine s_vect_scal +!!$ +!!$ +!!$ function s_vect_nrm2(n,x) result(res) +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%nrm2(n) +!!$ else +!!$ res = szero +!!$ end if +!!$ +!!$ end function s_vect_nrm2 +!!$ +!!$ function s_vect_amax(n,x) result(res) +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%amax(n) +!!$ else +!!$ res = szero +!!$ end if +!!$ +!!$ end function s_vect_amax +!!$ +!!$ function s_vect_asum(n,x) result(res) +!!$ implicit none +!!$ class(psb_s_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_spk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%asum(n) +!!$ else +!!$ res = szero +!!$ end if +!!$ +!!$ end function s_vect_asum + end module psb_s_multivect_mod diff --git a/base/modules/psb_z_base_vect_mod.f90 b/base/modules/psb_z_base_vect_mod.f90 index 9a37d196..19313199 100644 --- a/base/modules/psb_z_base_vect_mod.f90 +++ b/base/modules/psb_z_base_vect_mod.f90 @@ -46,8 +46,8 @@ module psb_z_base_vect_mod use psb_const_mod use psb_error_mod - use psb_i_base_vect_mod use psb_realloc_mod + use psb_i_base_vect_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -123,6 +123,20 @@ module psb_z_base_vect_mod procedure, pass(x) :: set_scal => z_base_set_scal procedure, pass(x) :: set_vect => z_base_set_vect generic, public :: set => set_vect, set_scal + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => z_base_gthab + procedure, pass(x) :: gthzv => z_base_gthzv + procedure, pass(x) :: gthzv_x => z_base_gthzv_x + procedure, pass(x) :: gthzbuf => z_base_gthzbuf + generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => z_base_sctb + procedure, pass(y) :: sctb_x => z_base_sctb_x + procedure, pass(y) :: sctb_buf => z_base_sctb_buf + generic, public :: sct => sctb, sctb_x, sctb_buf + ! ! Dot product and AXPBY @@ -154,19 +168,7 @@ module psb_z_base_vect_mod procedure, pass(x) :: nrm2 => z_base_nrm2 procedure, pass(x) :: amax => z_base_amax procedure, pass(x) :: asum => z_base_asum - ! - ! Gather/scatter. These are needed for MPI interfacing. - ! May have to be reworked. - ! - procedure, pass(x) :: gthab => z_base_gthab - procedure, pass(x) :: gthzv => z_base_gthzv - procedure, pass(x) :: gthzv_x => z_base_gthzv_x - procedure, pass(x) :: gthzbuf => z_base_gthzbuf - generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf - procedure, pass(y) :: sctb => z_base_sctb - procedure, pass(y) :: sctb_x => z_base_sctb_x - procedure, pass(y) :: sctb_buf => z_base_sctb_buf - generic, public :: sct => sctb, sctb_x, sctb_buf + end type psb_z_base_vect_type public :: psb_z_base_vect @@ -668,6 +670,36 @@ contains end subroutine z_base_set_scal + + ! + !> Function base_set_vect + !! \memberof psb_z_base_vect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine z_base_set_vect(x,val,first,last) + class(psb_z_base_vect_type), intent(inout) :: x + complex(psb_dpk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info, first_, last_, nr + + first_=1 + last_=min(psb_size(x%v),size(val)) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(first_:last_) = val(1:last_-first_+1) + else + x%v = val + end if + call x%set_host() + + end subroutine z_base_set_vect + + ! ! Overwrite with absolute value ! @@ -680,7 +712,7 @@ contains class(psb_z_base_vect_type), intent(inout) :: x if (allocated(x%v)) then - if (.not.x%is_host()) call x%sync() + if (x%is_dev()) call x%sync() x%v = abs(x%v) call x%set_host() end if @@ -693,40 +725,12 @@ contains if (.not.x%is_host()) call x%sync() if (allocated(x%v)) then - call y%bld(x%v) + call y%axpby(min(x%get_nrows(),y%get_nrows()),zone,x,zzero,info) call y%absval() - call y%set_host() end if end subroutine z_base_absval2 - ! - !> Function base_set_vect - !! \memberof psb_z_base_vect_type - !! \brief Set all entries - !! \param val(:) The vector to be copied in - !! - subroutine z_base_set_vect(x,val,first,last) - class(psb_z_base_vect_type), intent(inout) :: x - complex(psb_dpk_), intent(in) :: val(:) - integer(psb_ipk_), optional :: first, last - - integer(psb_ipk_) :: info, first_, last_, nr - - first_=1 - last_=min(psb_size(x%v),size(val)) - if (present(first)) first_ = max(1,first) - if (present(last)) last_ = min(last,last_) - - if (allocated(x%v)) then - x%v(first_:last_) = val(1:last_-first_+1) - else - x%v = val - end if - call x%set_host() - - end subroutine z_base_set_vect - ! ! Dot products ! @@ -2422,6 +2426,5 @@ contains !!$ call y%sct(n,idx%v(i:),x,beta) !!$ !!$ end subroutine z_base_mv_sctb_x - end module psb_z_base_multivect_mod diff --git a/base/modules/psb_z_comm_mod.f90 b/base/modules/psb_z_comm_mod.f90 index 387c5ce9..8ecd98ef 100644 --- a/base/modules/psb_z_comm_mod.f90 +++ b/base/modules/psb_z_comm_mod.f90 @@ -30,27 +30,33 @@ !!$ !!$ module psb_z_comm_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_dpk_ + use psb_mat_mod, only : psb_zspmat_type + + use psb_z_vect_mod, only : psb_z_vect_type, psb_z_base_vect_type interface psb_ovrl - subroutine psb_zovrlm(x,desc_a,info,jx,ik,work,update,mode) - use psb_desc_mod + subroutine psb_zovrlm(x,desc_a,info,jx,ik,work,update,mode) + import + implicit none complex(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info complex(psb_dpk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_zovrlm - subroutine psb_zovrlv(x,desc_a,info,work,update,mode) - use psb_desc_mod + subroutine psb_zovrlv(x,desc_a,info,work,update,mode) + import + implicit none complex(psb_dpk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info complex(psb_dpk_), intent(inout), optional, target :: work(:) integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_zovrlv - subroutine psb_zovrl_vect(x,desc_a,info,work,update,mode) - use psb_desc_mod - use psb_z_vect_mod + subroutine psb_zovrl_vect(x,desc_a,info,work,update,mode) + import + implicit none type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -60,33 +66,32 @@ module psb_z_comm_mod end interface psb_ovrl interface psb_halo - subroutine psb_zhalom(x,desc_a,info,alpha,jx,ik,work,tran,mode,data) - use psb_desc_mod + subroutine psb_zhalom(x,desc_a,info,jx,ik,work,tran,mode,data) + import + implicit none complex(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(in), optional :: alpha complex(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data character, intent(in), optional :: tran end subroutine psb_zhalom - subroutine psb_zhalov(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod + subroutine psb_zhalov(x,desc_a,info,work,tran,mode,data) + import + implicit none complex(psb_dpk_), intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(in), optional :: alpha complex(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_zhalov - subroutine psb_zhalo_vect(x,desc_a,info,alpha,work,tran,mode,data) - use psb_desc_mod - use psb_z_vect_mod + subroutine psb_zhalo_vect(x,desc_a,info,work,tran,mode,data) + import + implicit none type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(in), optional :: alpha complex(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran @@ -95,16 +100,18 @@ module psb_z_comm_mod interface psb_scatter - subroutine psb_zscatterm(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_zscatterm(globx, locx, desc_a, info, root) + import + implicit none complex(psb_dpk_), intent(out) :: locx(:,:) complex(psb_dpk_), intent(in) :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_zscatterm - subroutine psb_zscatterv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_zscatterv(globx, locx, desc_a, info, root) + import + implicit none complex(psb_dpk_), intent(out) :: locx(:) complex(psb_dpk_), intent(in) :: globx(:) type(psb_desc_type), intent(in) :: desc_a @@ -114,9 +121,8 @@ module psb_z_comm_mod end interface psb_scatter interface psb_gather - subroutine psb_zsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) - use psb_desc_mod - use psb_mat_mod + subroutine psb_zsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keeploc) + import implicit none type(psb_zspmat_type), intent(inout) :: loca type(psb_zspmat_type), intent(out) :: globa @@ -126,24 +132,26 @@ module psb_z_comm_mod logical, intent(in), optional :: keepnum,keeploc end subroutine psb_zsp_allgather subroutine psb_zgatherm(globx, locx, desc_a, info, root) - use psb_desc_mod + import + implicit none complex(psb_dpk_), intent(in) :: locx(:,:) complex(psb_dpk_), intent(out), allocatable :: globx(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_zgatherm - subroutine psb_zgatherv(globx, locx, desc_a, info, root) - use psb_desc_mod + subroutine psb_zgatherv(globx, locx, desc_a, info, root) + import + implicit none complex(psb_dpk_), intent(in) :: locx(:) complex(psb_dpk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: root end subroutine psb_zgatherv - subroutine psb_zgather_vect(globx, locx, desc_a, info, root) - use psb_desc_mod - use psb_z_vect_mod + subroutine psb_zgather_vect(globx, locx, desc_a, info, root) + import + implicit none type(psb_z_vect_type), intent(inout) :: locx complex(psb_dpk_), intent(out), allocatable :: globx(:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/psb_z_tools_mod.f90 b/base/modules/psb_z_tools_mod.f90 index 529b2ef6..3de0bd94 100644 --- a/base/modules/psb_z_tools_mod.f90 +++ b/base/modules/psb_z_tools_mod.f90 @@ -36,9 +36,7 @@ Module psb_z_tools_mod interface psb_geall subroutine psb_zalloc(x, desc_a, info, n, lb) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import implicit none complex(psb_dpk_), allocatable, intent(out) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -46,27 +44,24 @@ Module psb_z_tools_mod integer(psb_ipk_), optional, intent(in) :: n, lb end subroutine psb_zalloc subroutine psb_zallocv(x, desc_a,info,n) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none complex(psb_dpk_), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_zallocv subroutine psb_zalloc_vect(x, desc_a,info,n) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_z_vect_type), intent(out) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info integer(psb_ipk_), optional, intent(in) :: n end subroutine psb_zalloc_vect subroutine psb_zalloc_vect_r2(x, desc_a,info,n,lb) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_z_vect_type), allocatable, intent(out) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_),intent(out) :: info @@ -77,25 +72,22 @@ Module psb_z_tools_mod interface psb_geasb subroutine psb_zasb(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a complex(psb_dpk_), allocatable, intent(inout) :: x(:,:) integer(psb_ipk_), intent(out) :: info end subroutine psb_zasb subroutine psb_zasbv(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a complex(psb_dpk_), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_zasbv subroutine psb_zasb_vect(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -103,9 +95,8 @@ Module psb_z_tools_mod logical, intent(in), optional :: scratch end subroutine psb_zasb_vect subroutine psb_zasb_vect_r2(x, desc_a, info,mold, scratch) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -114,51 +105,31 @@ Module psb_z_tools_mod end subroutine psb_zasb_vect_r2 end interface - interface psb_sphalo - Subroutine psb_zsphalo(a,desc_a,blk,info,rowcnv,colcnv,& - & rowscale,colscale,outfmt,data) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat - Type(psb_zspmat_type),Intent(in) :: a - Type(psb_zspmat_type),Intent(inout) :: blk - Type(psb_desc_type),Intent(in), target :: desc_a - integer(psb_ipk_), intent(out) :: info - logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale - character(len=5), optional :: outfmt - integer(psb_ipk_), intent(in), optional :: data - end Subroutine psb_zsphalo - end interface - interface psb_gefree subroutine psb_zfree(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none complex(psb_dpk_),allocatable, intent(inout) :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_zfree subroutine psb_zfreev(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none complex(psb_dpk_),allocatable, intent(inout) :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psb_zfreev subroutine psb_zfree_vect(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info end subroutine psb_zfree_vect subroutine psb_zfree_vect_r2(x, desc_a, info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), allocatable, intent(inout) :: x(:) integer(psb_ipk_), intent(out) :: info @@ -168,9 +139,8 @@ Module psb_z_tools_mod interface psb_geins subroutine psb_zinsi(m,irw,val, x, desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a complex(psb_dpk_),intent(inout) :: x(:,:) @@ -181,9 +151,8 @@ Module psb_z_tools_mod logical, intent(in), optional :: local end subroutine psb_zinsi subroutine psb_zinsvi(m, irw,val, x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a complex(psb_dpk_),intent(inout) :: x(:) @@ -194,9 +163,8 @@ Module psb_z_tools_mod logical, intent(in), optional :: local end subroutine psb_zinsvi subroutine psb_zins_vect(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), intent(inout) :: x @@ -207,9 +175,8 @@ Module psb_z_tools_mod logical, intent(in), optional :: local end subroutine psb_zins_vect subroutine psb_zins_vect_v(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, psb_i_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), intent(inout) :: x @@ -220,9 +187,8 @@ Module psb_z_tools_mod logical, intent(in), optional :: local end subroutine psb_zins_vect_v subroutine psb_zins_vect_r2(m,irw,val,x,desc_a,info,dupl,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: m type(psb_desc_type), intent(in) :: desc_a type(psb_z_vect_type), intent(inout) :: x(:) @@ -236,9 +202,8 @@ Module psb_z_tools_mod interface psb_cdbldext Subroutine psb_zcdbldext(a,desc_a,novr,desc_ov,info,extype) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none integer(psb_ipk_), intent(in) :: novr Type(psb_zspmat_type), Intent(in) :: a Type(psb_desc_type), Intent(inout), target :: desc_a @@ -248,11 +213,26 @@ Module psb_z_tools_mod end Subroutine psb_zcdbldext end interface + interface psb_sphalo + Subroutine psb_zsphalo(a,desc_a,blk,info,rowcnv,colcnv,& + & rowscale,colscale,outfmt,data) + import + implicit none + Type(psb_zspmat_type),Intent(in) :: a + Type(psb_zspmat_type),Intent(inout) :: blk + Type(psb_desc_type),Intent(in), target :: desc_a + integer(psb_ipk_), intent(out) :: info + logical, optional, intent(in) :: rowcnv,colcnv,rowscale,colscale + character(len=5), optional :: outfmt + integer(psb_ipk_), intent(in), optional :: data + end Subroutine psb_zsphalo + end interface + + interface psb_spall subroutine psb_zspalloc(a, desc_a, info, nnz) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_zspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info @@ -262,9 +242,8 @@ Module psb_z_tools_mod interface psb_spasb subroutine psb_zspasb(a,desc_a, info, afmt, upd, dupl,mold) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_zspmat_type), intent (inout) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info @@ -276,9 +255,8 @@ Module psb_z_tools_mod interface psb_spfree subroutine psb_zspfree(a, desc_a,info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_zspmat_type), intent(inout) ::a integer(psb_ipk_), intent(out) :: info @@ -288,9 +266,8 @@ Module psb_z_tools_mod interface psb_spins subroutine psb_zspins(nz,ia,ja,val,a,desc_a,info,rebuild,local) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_zspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz,ia(:),ja(:) @@ -301,9 +278,8 @@ Module psb_z_tools_mod end subroutine psb_zspins subroutine psb_zspins_v(nz,ia,ja,val,a,desc_a,info,rebuild,local) use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type,& - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(inout) :: desc_a type(psb_zspmat_type), intent(inout) :: a integer(psb_ipk_), intent(in) :: nz @@ -314,9 +290,8 @@ Module psb_z_tools_mod logical, intent(in), optional :: local end subroutine psb_zspins_v subroutine psb_zspins_2desc(nz,ia,ja,val,a,desc_ar,desc_ac,info) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_ar type(psb_desc_type), intent(inout) :: desc_ac type(psb_zspmat_type), intent(inout) :: a @@ -329,9 +304,8 @@ Module psb_z_tools_mod interface psb_sprn subroutine psb_zsprn(a, desc_a,info,clear) - import :: psb_desc_type, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_z_vect_type, & - & psb_zspmat_type, psb_z_base_sparse_mat + import + implicit none type(psb_desc_type), intent(in) :: desc_a type(psb_zspmat_type), intent(inout) :: a integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/psb_z_vect_mod.F90 b/base/modules/psb_z_vect_mod.F90 index 4ea4b0a3..f01512f9 100644 --- a/base/modules/psb_z_vect_mod.F90 +++ b/base/modules/psb_z_vect_mod.F90 @@ -48,27 +48,6 @@ module psb_z_vect_mod procedure, pass(x) :: get_nrows => z_vect_get_nrows procedure, pass(x) :: sizeof => z_vect_sizeof procedure, pass(x) :: get_fmt => z_vect_get_fmt - procedure, pass(x) :: dot_v => z_vect_dot_v - procedure, pass(x) :: dot_a => z_vect_dot_a - generic, public :: dot => dot_v, dot_a - procedure, pass(y) :: axpby_v => z_vect_axpby_v - procedure, pass(y) :: axpby_a => z_vect_axpby_a - generic, public :: axpby => axpby_v, axpby_a - procedure, pass(y) :: mlt_v => z_vect_mlt_v - procedure, pass(y) :: mlt_a => z_vect_mlt_a - procedure, pass(z) :: mlt_a_2 => z_vect_mlt_a_2 - procedure, pass(z) :: mlt_v_2 => z_vect_mlt_v_2 - procedure, pass(z) :: mlt_va => z_vect_mlt_va - procedure, pass(z) :: mlt_av => z_vect_mlt_av - generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& - & mlt_v_2, mlt_av, mlt_va - procedure, pass(x) :: scal => z_vect_scal - procedure, pass(x) :: absval1 => z_vect_absval1 - procedure, pass(x) :: absval2 => z_vect_absval2 - generic, public :: absval => absval1, absval2 - procedure, pass(x) :: nrm2 => z_vect_nrm2 - procedure, pass(x) :: amax => z_vect_amax - procedure, pass(x) :: asum => z_vect_asum procedure, pass(x) :: all => z_vect_all procedure, pass(x) :: reall => z_vect_reall procedure, pass(x) :: zero => z_vect_zero @@ -92,6 +71,27 @@ module psb_z_vect_mod procedure, pass(x) :: set_vect => z_vect_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: clone => z_vect_clone + procedure, pass(x) :: dot_v => z_vect_dot_v + procedure, pass(x) :: dot_a => z_vect_dot_a + generic, public :: dot => dot_v, dot_a + procedure, pass(y) :: axpby_v => z_vect_axpby_v + procedure, pass(y) :: axpby_a => z_vect_axpby_a + generic, public :: axpby => axpby_v, axpby_a + procedure, pass(y) :: mlt_v => z_vect_mlt_v + procedure, pass(y) :: mlt_a => z_vect_mlt_a + procedure, pass(z) :: mlt_a_2 => z_vect_mlt_a_2 + procedure, pass(z) :: mlt_v_2 => z_vect_mlt_v_2 + procedure, pass(z) :: mlt_va => z_vect_mlt_va + procedure, pass(z) :: mlt_av => z_vect_mlt_av + generic, public :: mlt => mlt_v, mlt_a, mlt_a_2,& + & mlt_v_2, mlt_av, mlt_va + procedure, pass(x) :: scal => z_vect_scal + procedure, pass(x) :: absval1 => z_vect_absval1 + procedure, pass(x) :: absval2 => z_vect_absval2 + generic, public :: absval => absval1, absval2 + procedure, pass(x) :: nrm2 => z_vect_nrm2 + procedure, pass(x) :: amax => z_vect_amax + procedure, pass(x) :: asum => z_vect_asum end type psb_z_vect_type public :: psb_z_vect @@ -296,6 +296,191 @@ contains res = 'NULL' if (allocated(x%v)) res = x%v%get_fmt() end function z_vect_get_fmt + subroutine z_vect_all(n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_z_vect_type), intent(inout) :: x + class(psb_z_base_vect_type), intent(in), optional :: mold + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(x%v,stat=info,mold=mold) +#else + call mold%mold(x%v,info) +#endif + else + allocate(psb_z_base_vect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(n,info) + else + info = psb_err_alloc_dealloc_ + end if + + end subroutine z_vect_all + + subroutine z_vect_reall(n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(n,info) + if (info == 0) & + & call x%asb(n,info) + + end subroutine z_vect_reall + + subroutine z_vect_zero(x) + use psi_serial_mod + implicit none + class(psb_z_vect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine z_vect_zero + + subroutine z_vect_asb(n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%v%asb(n,info) + + end subroutine z_vect_asb + + subroutine z_vect_sync(x) + implicit none + class(psb_z_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine z_vect_sync + + subroutine z_vect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + complex(psb_dpk_) :: alpha, beta, y(:) + class(psb_z_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine z_vect_gthab + + subroutine z_vect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + complex(psb_dpk_) :: y(:) + class(psb_z_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine z_vect_gthzv + + subroutine z_vect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_ipk_) :: n, idx(:) + complex(psb_dpk_) :: beta, x(:) + class(psb_z_vect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine z_vect_sctb + + subroutine z_vect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine z_vect_free + + subroutine z_vect_ins_a(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: irl(:) + complex(psb_dpk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl,val,dupl,info) + + end subroutine z_vect_ins_a + + subroutine z_vect_ins_v(n,irl,val,dupl,x,info) + use psi_serial_mod + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl + class(psb_i_vect_type), intent(inout) :: irl + class(psb_z_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i + + info = 0 + if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then + info = psb_err_invalid_vect_state_ + return + end if + + call x%v%ins(n,irl%v,val%v,dupl,info) + + end subroutine z_vect_ins_v + + + subroutine z_vect_cnv(x,mold) + class(psb_z_vect_type), intent(inout) :: x + class(psb_z_base_vect_type), intent(in), optional :: mold + class(psb_z_base_vect_type), allocatable :: tmp + integer(psb_ipk_) :: info + + if (present(mold)) then +#ifdef HAVE_MOLD + allocate(tmp,stat=info,mold=mold) +#else + call mold%mold(tmp,info) +#endif + if (allocated(x%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%free(info) + end if + call move_alloc(tmp,x%v) + end if + end subroutine z_vect_cnv function z_vect_dot_v(n,x,y) result(res) implicit none @@ -522,197 +707,12 @@ contains end function z_vect_asum - subroutine z_vect_all(n, x, info, mold) - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_z_vect_type), intent(inout) :: x - class(psb_z_base_vect_type), intent(in), optional :: mold - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%free(info) +end module psb_z_vect_mod - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(x%v,stat=info,mold=mold) -#else - call mold%mold(x%v,info) -#endif - else - allocate(psb_z_base_vect_type :: x%v,stat=info) - endif - if (info == 0) then - call x%v%all(n,info) - else - info = psb_err_alloc_dealloc_ - end if - end subroutine z_vect_all - subroutine z_vect_reall(n, x, info) - - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (.not.allocated(x%v)) & - & call x%all(n,info) - if (info == 0) & - & call x%asb(n,info) - - end subroutine z_vect_reall - - subroutine z_vect_zero(x) - use psi_serial_mod - implicit none - class(psb_z_vect_type), intent(inout) :: x - - if (allocated(x%v)) call x%v%zero() - - end subroutine z_vect_zero - - subroutine z_vect_asb(n, x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - integer(psb_ipk_), intent(in) :: n - class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) & - & call x%v%asb(n,info) - - end subroutine z_vect_asb - - subroutine z_vect_sync(x) - implicit none - class(psb_z_vect_type), intent(inout) :: x - - if (allocated(x%v)) & - & call x%v%sync() - - end subroutine z_vect_sync - - subroutine z_vect_gthab(n,idx,alpha,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - complex(psb_dpk_) :: alpha, beta, y(:) - class(psb_z_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,alpha,beta,y) - - end subroutine z_vect_gthab - - subroutine z_vect_gthzv(n,idx,x,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - complex(psb_dpk_) :: y(:) - class(psb_z_vect_type) :: x - - if (allocated(x%v)) & - & call x%v%gth(n,idx,y) - - end subroutine z_vect_gthzv - - subroutine z_vect_sctb(n,idx,x,beta,y) - use psi_serial_mod - integer(psb_ipk_) :: n, idx(:) - complex(psb_dpk_) :: beta, x(:) - class(psb_z_vect_type) :: y - - if (allocated(y%v)) & - & call y%v%sct(n,idx,x,beta) - - end subroutine z_vect_sctb - - subroutine z_vect_free(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - info = 0 - if (allocated(x%v)) then - call x%v%free(info) - if (info == 0) deallocate(x%v,stat=info) - end if - - end subroutine z_vect_free - - subroutine z_vect_ins_a(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - integer(psb_ipk_), intent(in) :: irl(:) - complex(psb_dpk_), intent(in) :: val(:) - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl,val,dupl,info) - - end subroutine z_vect_ins_a - - subroutine z_vect_ins_v(n,irl,val,dupl,x,info) - use psi_serial_mod - implicit none - class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl - class(psb_i_vect_type), intent(inout) :: irl - class(psb_z_vect_type), intent(inout) :: val - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: i - - info = 0 - if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then - info = psb_err_invalid_vect_state_ - return - end if - - call x%v%ins(n,irl%v,val%v,dupl,info) - - end subroutine z_vect_ins_v - - - subroutine z_vect_cnv(x,mold) - class(psb_z_vect_type), intent(inout) :: x - class(psb_z_base_vect_type), intent(in), optional :: mold - class(psb_z_base_vect_type), allocatable :: tmp - integer(psb_ipk_) :: info - - if (present(mold)) then -#ifdef HAVE_MOLD - allocate(tmp,stat=info,mold=mold) -#else - call mold%mold(tmp,info) -#endif - if (allocated(x%v)) then - call x%v%sync() - if (info == psb_success_) call tmp%bld(x%v%v) - call x%v%free(info) - end if - call move_alloc(tmp,x%v) - end if - end subroutine z_vect_cnv - -end module psb_z_vect_mod - - - -module psb_z_multivect_mod +module psb_z_multivect_mod use psb_z_base_multivect_mod use psb_const_mod @@ -726,6 +726,28 @@ module psb_z_multivect_mod procedure, pass(x) :: get_ncols => z_vect_get_ncols procedure, pass(x) :: sizeof => z_vect_sizeof procedure, pass(x) :: get_fmt => z_vect_get_fmt + + procedure, pass(x) :: all => z_vect_all + procedure, pass(x) :: reall => z_vect_reall + procedure, pass(x) :: zero => z_vect_zero + procedure, pass(x) :: asb => z_vect_asb + procedure, pass(x) :: sync => z_vect_sync + procedure, pass(x) :: free => z_vect_free + procedure, pass(x) :: ins => z_vect_ins + procedure, pass(x) :: bld_x => z_vect_bld_x + procedure, pass(x) :: bld_n => z_vect_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: get_vect => z_vect_get_vect + procedure, pass(x) :: cnv => z_vect_cnv + procedure, pass(x) :: set_scal => z_vect_set_scal + procedure, pass(x) :: set_vect => z_vect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => z_vect_clone +!!$ procedure, pass(x) :: gthab => z_vect_gthab +!!$ procedure, pass(x) :: gthzv => z_vect_gthzv +!!$ generic, public :: gth => gthab, gthzv +!!$ procedure, pass(y) :: sctb => z_vect_sctb +!!$ generic, public :: sct => sctb !!$ procedure, pass(x) :: dot_v => z_vect_dot_v !!$ procedure, pass(x) :: dot_a => z_vect_dot_a !!$ generic, public :: dot => dot_v, dot_a @@ -744,27 +766,6 @@ module psb_z_multivect_mod !!$ procedure, pass(x) :: nrm2 => z_vect_nrm2 !!$ procedure, pass(x) :: amax => z_vect_amax !!$ procedure, pass(x) :: asum => z_vect_asum - procedure, pass(x) :: all => z_vect_all - procedure, pass(x) :: reall => z_vect_reall - procedure, pass(x) :: zero => z_vect_zero - procedure, pass(x) :: asb => z_vect_asb - procedure, pass(x) :: sync => z_vect_sync -!!$ procedure, pass(x) :: gthab => z_vect_gthab -!!$ procedure, pass(x) :: gthzv => z_vect_gthzv -!!$ generic, public :: gth => gthab, gthzv -!!$ procedure, pass(y) :: sctb => z_vect_sctb -!!$ generic, public :: sct => sctb - procedure, pass(x) :: free => z_vect_free - procedure, pass(x) :: ins => z_vect_ins - procedure, pass(x) :: bld_x => z_vect_bld_x - procedure, pass(x) :: bld_n => z_vect_bld_n - generic, public :: bld => bld_x, bld_n - procedure, pass(x) :: get_vect => z_vect_get_vect - procedure, pass(x) :: cnv => z_vect_cnv - procedure, pass(x) :: set_scal => z_vect_set_scal - procedure, pass(x) :: set_vect => z_vect_set_vect - generic, public :: set => set_vect, set_scal - procedure, pass(x) :: clone => z_vect_clone end type psb_z_multivect_type public :: psb_z_multivect, psb_z_multivect_type,& @@ -971,214 +972,6 @@ contains if (allocated(x%v)) res = x%v%get_fmt() end function z_vect_get_fmt -!!$ function z_vect_dot_v(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x, y -!!$ integer(psb_ipk_), intent(in) :: n -!!$ complex(psb_dpk_) :: res -!!$ -!!$ res = zzero -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & res = x%v%dot(n,y%v) -!!$ -!!$ end function z_vect_dot_v -!!$ -!!$ function z_vect_dot_a(n,x,y) result(res) -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ complex(psb_dpk_), intent(in) :: y(:) -!!$ integer(psb_ipk_), intent(in) :: n -!!$ complex(psb_dpk_) :: res -!!$ -!!$ res = zzero -!!$ if (allocated(x%v)) & -!!$ & res = x%v%dot(n,y) -!!$ -!!$ end function z_vect_dot_a -!!$ -!!$ subroutine z_vect_axpby_v(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ class(psb_z_multivect_type), intent(inout) :: y -!!$ complex(psb_dpk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(x%v).and.allocated(y%v)) then -!!$ call y%v%axpby(m,alpha,x%v,beta,info) -!!$ else -!!$ info = psb_err_invalid_vect_state_ -!!$ end if -!!$ -!!$ end subroutine z_vect_axpby_v -!!$ -!!$ subroutine z_vect_axpby_a(m,alpha, x, beta, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ integer(psb_ipk_), intent(in) :: m -!!$ complex(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_z_multivect_type), intent(inout) :: y -!!$ complex(psb_dpk_), intent (in) :: alpha, beta -!!$ integer(psb_ipk_), intent(out) :: info -!!$ -!!$ if (allocated(y%v)) & -!!$ & call y%v%axpby(m,alpha,x,beta,info) -!!$ -!!$ end subroutine z_vect_axpby_a -!!$ -!!$ -!!$ subroutine z_vect_mlt_v(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ class(psb_z_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v)) & -!!$ & call y%v%mlt(x%v,info) -!!$ -!!$ end subroutine z_vect_mlt_v -!!$ -!!$ subroutine z_vect_mlt_a(x, y, info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_z_multivect_type), intent(inout) :: y -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ -!!$ info = 0 -!!$ if (allocated(y%v)) & -!!$ & call y%v%mlt(x,info) -!!$ -!!$ end subroutine z_vect_mlt_a -!!$ -!!$ -!!$ subroutine z_vect_mlt_a_2(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_dpk_), intent(in) :: alpha,beta -!!$ complex(psb_dpk_), intent(in) :: y(:) -!!$ complex(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_z_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x,y,beta,info) -!!$ -!!$ end subroutine z_vect_mlt_a_2 -!!$ -!!$ subroutine z_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_dpk_), intent(in) :: alpha,beta -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ class(psb_z_multivect_type), intent(inout) :: y -!!$ class(psb_z_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ character(len=1), intent(in), optional :: conjgx, conjgy -!!$ -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(x%v).and.allocated(y%v).and.& -!!$ & allocated(z%v)) & -!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) -!!$ -!!$ end subroutine z_vect_mlt_v_2 -!!$ -!!$ subroutine z_vect_mlt_av(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_dpk_), intent(in) :: alpha,beta -!!$ complex(psb_dpk_), intent(in) :: x(:) -!!$ class(psb_z_multivect_type), intent(inout) :: y -!!$ class(psb_z_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ if (allocated(z%v).and.allocated(y%v)) & -!!$ & call z%v%mlt(alpha,x,y%v,beta,info) -!!$ -!!$ end subroutine z_vect_mlt_av -!!$ -!!$ subroutine z_vect_mlt_va(alpha,x,y,beta,z,info) -!!$ use psi_serial_mod -!!$ implicit none -!!$ complex(psb_dpk_), intent(in) :: alpha,beta -!!$ complex(psb_dpk_), intent(in) :: y(:) -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ class(psb_z_multivect_type), intent(inout) :: z -!!$ integer(psb_ipk_), intent(out) :: info -!!$ integer(psb_ipk_) :: i, n -!!$ -!!$ info = 0 -!!$ -!!$ if (allocated(z%v).and.allocated(x%v)) & -!!$ & call z%v%mlt(alpha,x%v,y,beta,info) -!!$ -!!$ end subroutine z_vect_mlt_va -!!$ -!!$ subroutine z_vect_scal(alpha, x) -!!$ use psi_serial_mod -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ complex(psb_dpk_), intent (in) :: alpha -!!$ -!!$ if (allocated(x%v)) call x%v%scal(alpha) -!!$ -!!$ end subroutine z_vect_scal -!!$ -!!$ -!!$ function z_vect_nrm2(n,x) result(res) -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%nrm2(n) -!!$ else -!!$ res = dzero -!!$ end if -!!$ -!!$ end function z_vect_nrm2 -!!$ -!!$ function z_vect_amax(n,x) result(res) -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%amax(n) -!!$ else -!!$ res = dzero -!!$ end if -!!$ -!!$ end function z_vect_amax -!!$ -!!$ function z_vect_asum(n,x) result(res) -!!$ implicit none -!!$ class(psb_z_multivect_type), intent(inout) :: x -!!$ integer(psb_ipk_), intent(in) :: n -!!$ real(psb_dpk_) :: res -!!$ -!!$ if (allocated(x%v)) then -!!$ res = x%v%asum(n) -!!$ else -!!$ res = dzero -!!$ end if -!!$ -!!$ end function z_vect_asum - subroutine z_vect_all(m,n, x, info, mold) implicit none @@ -1341,4 +1134,213 @@ contains end if end subroutine z_vect_cnv + +!!$ function z_vect_dot_v(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x, y +!!$ integer(psb_ipk_), intent(in) :: n +!!$ complex(psb_dpk_) :: res +!!$ +!!$ res = zzero +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & res = x%v%dot(n,y%v) +!!$ +!!$ end function z_vect_dot_v +!!$ +!!$ function z_vect_dot_a(n,x,y) result(res) +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ complex(psb_dpk_), intent(in) :: y(:) +!!$ integer(psb_ipk_), intent(in) :: n +!!$ complex(psb_dpk_) :: res +!!$ +!!$ res = zzero +!!$ if (allocated(x%v)) & +!!$ & res = x%v%dot(n,y) +!!$ +!!$ end function z_vect_dot_a +!!$ +!!$ subroutine z_vect_axpby_v(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ class(psb_z_multivect_type), intent(inout) :: y +!!$ complex(psb_dpk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(x%v).and.allocated(y%v)) then +!!$ call y%v%axpby(m,alpha,x%v,beta,info) +!!$ else +!!$ info = psb_err_invalid_vect_state_ +!!$ end if +!!$ +!!$ end subroutine z_vect_axpby_v +!!$ +!!$ subroutine z_vect_axpby_a(m,alpha, x, beta, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ integer(psb_ipk_), intent(in) :: m +!!$ complex(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_z_multivect_type), intent(inout) :: y +!!$ complex(psb_dpk_), intent (in) :: alpha, beta +!!$ integer(psb_ipk_), intent(out) :: info +!!$ +!!$ if (allocated(y%v)) & +!!$ & call y%v%axpby(m,alpha,x,beta,info) +!!$ +!!$ end subroutine z_vect_axpby_a +!!$ +!!$ +!!$ subroutine z_vect_mlt_v(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ class(psb_z_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v)) & +!!$ & call y%v%mlt(x%v,info) +!!$ +!!$ end subroutine z_vect_mlt_v +!!$ +!!$ subroutine z_vect_mlt_a(x, y, info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_z_multivect_type), intent(inout) :: y +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ +!!$ info = 0 +!!$ if (allocated(y%v)) & +!!$ & call y%v%mlt(x,info) +!!$ +!!$ end subroutine z_vect_mlt_a +!!$ +!!$ +!!$ subroutine z_vect_mlt_a_2(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_dpk_), intent(in) :: alpha,beta +!!$ complex(psb_dpk_), intent(in) :: y(:) +!!$ complex(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_z_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x,y,beta,info) +!!$ +!!$ end subroutine z_vect_mlt_a_2 +!!$ +!!$ subroutine z_vect_mlt_v_2(alpha,x,y,beta,z,info,conjgx,conjgy) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_dpk_), intent(in) :: alpha,beta +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ class(psb_z_multivect_type), intent(inout) :: y +!!$ class(psb_z_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ character(len=1), intent(in), optional :: conjgx, conjgy +!!$ +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(x%v).and.allocated(y%v).and.& +!!$ & allocated(z%v)) & +!!$ & call z%v%mlt(alpha,x%v,y%v,beta,info,conjgx,conjgy) +!!$ +!!$ end subroutine z_vect_mlt_v_2 +!!$ +!!$ subroutine z_vect_mlt_av(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_dpk_), intent(in) :: alpha,beta +!!$ complex(psb_dpk_), intent(in) :: x(:) +!!$ class(psb_z_multivect_type), intent(inout) :: y +!!$ class(psb_z_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ if (allocated(z%v).and.allocated(y%v)) & +!!$ & call z%v%mlt(alpha,x,y%v,beta,info) +!!$ +!!$ end subroutine z_vect_mlt_av +!!$ +!!$ subroutine z_vect_mlt_va(alpha,x,y,beta,z,info) +!!$ use psi_serial_mod +!!$ implicit none +!!$ complex(psb_dpk_), intent(in) :: alpha,beta +!!$ complex(psb_dpk_), intent(in) :: y(:) +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ class(psb_z_multivect_type), intent(inout) :: z +!!$ integer(psb_ipk_), intent(out) :: info +!!$ integer(psb_ipk_) :: i, n +!!$ +!!$ info = 0 +!!$ +!!$ if (allocated(z%v).and.allocated(x%v)) & +!!$ & call z%v%mlt(alpha,x%v,y,beta,info) +!!$ +!!$ end subroutine z_vect_mlt_va +!!$ +!!$ subroutine z_vect_scal(alpha, x) +!!$ use psi_serial_mod +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ complex(psb_dpk_), intent (in) :: alpha +!!$ +!!$ if (allocated(x%v)) call x%v%scal(alpha) +!!$ +!!$ end subroutine z_vect_scal +!!$ +!!$ +!!$ function z_vect_nrm2(n,x) result(res) +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%nrm2(n) +!!$ else +!!$ res = dzero +!!$ end if +!!$ +!!$ end function z_vect_nrm2 +!!$ +!!$ function z_vect_amax(n,x) result(res) +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%amax(n) +!!$ else +!!$ res = dzero +!!$ end if +!!$ +!!$ end function z_vect_amax +!!$ +!!$ function z_vect_asum(n,x) result(res) +!!$ implicit none +!!$ class(psb_z_multivect_type), intent(inout) :: x +!!$ integer(psb_ipk_), intent(in) :: n +!!$ real(psb_dpk_) :: res +!!$ +!!$ if (allocated(x%v)) then +!!$ res = x%v%asum(n) +!!$ else +!!$ res = dzero +!!$ end if +!!$ +!!$ end function z_vect_asum + end module psb_z_multivect_mod diff --git a/base/modules/psi_c_mod.f90 b/base/modules/psi_c_mod.f90 index b02a7d8e..4dd7d478 100644 --- a/base/modules/psi_c_mod.f90 +++ b/base/modules/psi_c_mod.f90 @@ -33,6 +33,7 @@ module psi_c_mod use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_spk_, psb_i_base_vect_type use psb_c_vect_mod, only : psb_c_base_vect_type + interface psi_swapdata subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) import :: psb_desc_type, psb_ipk_, psb_spk_, psb_c_base_vect_type diff --git a/base/modules/psi_d_mod.f90 b/base/modules/psi_d_mod.f90 index 3f682873..7f07fe3b 100644 --- a/base/modules/psi_d_mod.f90 +++ b/base/modules/psi_d_mod.f90 @@ -33,6 +33,7 @@ module psi_d_mod use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_dpk_, psb_i_base_vect_type use psb_d_vect_mod, only : psb_d_base_vect_type + interface psi_swapdata subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) import :: psb_desc_type, psb_ipk_, psb_dpk_, psb_d_base_vect_type diff --git a/base/modules/psi_i_mod.f90 b/base/modules/psi_i_mod.f90 index 48005d6f..464e7de4 100644 --- a/base/modules/psi_i_mod.f90 +++ b/base/modules/psi_i_mod.f90 @@ -31,7 +31,7 @@ !!$ module psi_i_mod use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpik_ - use psb_i_vect_mod, only : psb_i_base_vect_type + use psb_i_vect_mod, only : psb_i_base_vect_type interface subroutine psi_compute_size(desc_data,& @@ -196,63 +196,53 @@ module psi_i_mod interface psi_swapdata subroutine psi_iswapdatam(flag,n,beta,y,desc_a,work,info,data) - import :: psb_desc_type, psb_ipk_ + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: flag, n integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:,:), beta - integer(psb_ipk_), target :: work(:) + integer(psb_ipk_) :: y(:,:), beta + integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdatam subroutine psi_iswapdatav(flag,beta,y,desc_a,work,info,data) - import :: psb_desc_type, psb_ipk_ + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:), beta - integer(psb_ipk_), target :: work(:) + integer(psb_ipk_) :: y(:), beta + integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdatav subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) + integer(psb_ipk_) :: beta + integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_vect subroutine psi_iswapidxm(ictxt,icomm,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(in) :: ictxt,icomm,flag, n - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:,:), beta - integer(psb_ipk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(in) :: ictxt,icomm,flag, n + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: y(:,:), beta + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_iswapidxm subroutine psi_iswapidxv(ictxt,icomm,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(in) :: ictxt,icomm,flag - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:), beta - integer(psb_ipk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv - end subroutine psi_iswapidxv - subroutine psi_iswapidx_vect(ictxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type - integer(psb_ipk_), intent(in) :: ictxt,icomm,flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(in) :: ictxt,icomm,flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: y(:), beta integer(psb_ipk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv - end subroutine psi_iswapidx_vect + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_iswapidxv subroutine psi_iswap_vidx_vect(iictxt,iicomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y @@ -266,80 +256,80 @@ module psi_i_mod interface psi_swaptran subroutine psi_iswaptranm(flag,n,beta,y,desc_a,work,info,data) - import :: psb_desc_type, psb_ipk_ + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: flag, n integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:,:), beta - integer(psb_ipk_),target :: work(:) + integer(psb_ipk_) :: y(:,:), beta + integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptranm subroutine psi_iswaptranv(flag,beta,y,desc_a,work,info,data) - import :: psb_desc_type, psb_ipk_ + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:), beta - integer(psb_ipk_),target :: work(:) + integer(psb_ipk_) :: y(:), beta + integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptranv subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) + integer(psb_ipk_) :: beta + integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_vect subroutine psi_itranidxm(ictxt,icomm,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(in) :: ictxt,icomm,flag, n - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:,:), beta - integer(psb_ipk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(in) :: ictxt,icomm,flag, n + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: y(:,:), beta + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_itranidxm subroutine psi_itranidxv(ictxt,icomm,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(in) :: ictxt,icomm,flag - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: y(:), beta - integer(psb_ipk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(in) :: ictxt,icomm,flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: y(:), beta + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_itranidxv subroutine psi_itranidx_vect(ictxt,icomm,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type - integer(psb_ipk_), intent(in) :: ictxt,icomm,flag - integer(psb_ipk_), intent(out) :: info + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(in) :: ictxt,icomm,flag + integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + integer(psb_ipk_) :: beta + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_itranidx_vect end interface interface psi_ovrl_upd subroutine psi_iovrl_updr1(x,desc_a,update,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_updr1 subroutine psi_iovrl_updr2(x,desc_a,update,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_updr2 subroutine psi_iovrl_upd_vect(x,desc_a,update,info) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type class(psb_i_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -349,23 +339,23 @@ module psi_i_mod interface psi_ovrl_save subroutine psi_iovrl_saver1(x,xs,desc_a,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(inout) :: x(:) - integer(psb_ipk_), allocatable :: xs(:) + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(inout) :: x(:) + integer(psb_ipk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_saver1 subroutine psi_iovrl_saver2(x,xs,desc_a,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(inout) :: x(:,:) - integer(psb_ipk_), allocatable :: xs(:,:) + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(inout) :: x(:,:) + integer(psb_ipk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_saver2 subroutine psi_iovrl_save_vect(x,xs,desc_a,info) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type class(psb_i_base_vect_type) :: x - integer(psb_ipk_), allocatable :: xs(:) + integer(psb_ipk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_save_vect @@ -373,23 +363,23 @@ module psi_i_mod interface psi_ovrl_restore subroutine psi_iovrl_restrr1(x,xs,desc_a,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(inout) :: x(:) - integer(psb_ipk_) :: xs(:) + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(inout) :: x(:) + integer(psb_ipk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_restrr1 subroutine psi_iovrl_restrr2(x,xs,desc_a,info) - import :: psb_desc_type, psb_ipk_ - integer(psb_ipk_), intent(inout) :: x(:,:) - integer(psb_ipk_) :: xs(:,:) + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type + integer(psb_ipk_), intent(inout) :: x(:,:) + integer(psb_ipk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_restrr2 subroutine psi_iovrl_restr_vect(x,xs,desc_a,info) - import :: psb_desc_type, psb_ipk_, psb_i_base_vect_type + import :: psb_desc_type, psb_ipk_, psb_ipk_, psb_i_base_vect_type class(psb_i_base_vect_type) :: x - integer(psb_ipk_) :: xs(:) + integer(psb_ipk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_restr_vect diff --git a/base/modules/psi_s_mod.f90 b/base/modules/psi_s_mod.f90 index 5a8ba6d1..62e97732 100644 --- a/base/modules/psi_s_mod.f90 +++ b/base/modules/psi_s_mod.f90 @@ -33,6 +33,7 @@ module psi_s_mod use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_spk_, psb_i_base_vect_type use psb_s_vect_mod, only : psb_s_base_vect_type + interface psi_swapdata subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) import :: psb_desc_type, psb_ipk_, psb_spk_, psb_s_base_vect_type diff --git a/base/modules/psi_z_mod.f90 b/base/modules/psi_z_mod.f90 index c634b8af..88553e63 100644 --- a/base/modules/psi_z_mod.f90 +++ b/base/modules/psi_z_mod.f90 @@ -33,6 +33,7 @@ module psi_z_mod use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_dpk_, psb_i_base_vect_type use psb_z_vect_mod, only : psb_z_base_vect_type + interface psi_swapdata subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) import :: psb_desc_type, psb_ipk_, psb_dpk_, psb_z_base_vect_type diff --git a/docs/psblas-3.2.pdf b/docs/psblas-3.4.pdf similarity index 93% rename from docs/psblas-3.2.pdf rename to docs/psblas-3.4.pdf index 5d899b1a..dea484bc 100644 --- a/docs/psblas-3.2.pdf +++ b/docs/psblas-3.4.pdf @@ -4,7 +4,7 @@ << /S /GoTo /D (title.0) >> endobj 8 0 obj -(PSBLAS-v3.2 User's Guide) +(PSBLAS-v3.4 User's Guide) endobj 9 0 obj << /S /GoTo /D (section.1) >> @@ -784,7 +784,7 @@ endobj << /S /GoTo /D [526 0 R /Fit ] >> endobj 528 0 obj << -/Length 692 +/Length 682 >> stream 0 g 0 G @@ -793,7 +793,7 @@ stream 0 g 0 G 0 g 0 G BT -/F16 24.7871 Tf 157.142 570.847 Td [(PSBLAS)-375(3.2)-375(User's)-375(guide)]TJ +/F16 24.7871 Tf 157.142 570.847 Td [(PSBLAS)-375(3.4)-375(User's)-375(guide)]TJ ET q 1 0 0 1 125.3 554.602 cm @@ -803,7 +803,7 @@ BT /F18 14.3462 Tf 132.314 532.919 Td [(A)-350(r)50(efer)50(enc)50(e)-350(guide)-350(for)-350(the)-350(Par)50(al)-50(lel)-350(Sp)50(arse)-350(BLAS)-350(libr)50(ary)]TJ 0 g 0 G 0 g 0 G -/F27 9.9626 Tf 223.567 -127.777 Td [(b)32(y)-383(Salv)63(atore)-383(Filipp)-32(one)]TJ 12.889 -11.955 Td [(and)-383(Alfredo)-384(Buttari)]TJ/F8 9.9626 Tf -52.52 -11.955 Td [(Univ)28(ersit)28(y)-334(of)-333(Rome)-333(\134T)83(or)-333(V)83(ergata".)]TJ 75.191 -24.824 Td [(Marc)28(h)-333(31s)-1(t,)-333(2014.)]TJ +/F27 9.9626 Tf 223.567 -127.777 Td [(b)32(y)-383(Salv)63(atore)-383(Filipp)-32(one)]TJ 12.889 -11.955 Td [(and)-383(Alfredo)-384(Buttari)]TJ/F8 9.9626 Tf -52.52 -11.955 Td [(Univ)28(ersit)28(y)-334(of)-333(Rome)-333(\134T)83(or)-333(V)83(ergata".)]TJ 88.253 -24.824 Td [(April)-333(30,)-334(2015.)]TJ 0 g 0 G 0 g 0 G ET @@ -10701,7 +10701,7 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1089 0 obj << -/Length 7269 +/Length 7259 >> stream 0 g 0 G @@ -10714,9 +10714,9 @@ q []0 d 0 J 0.398 w 0 0 m 4.035 0 l S Q BT -/F16 11.9552 Tf 124.986 706.129 Td [(halo)-375(|)-375(Halo)-375(Data)-375(Comm)31(unication)]TJ/F8 9.9626 Tf -25.091 -18.389 Td [(These)-257(subroutines)-257(gathers)-258(the)-257(v)56(alues)-258(of)-257(the)-257(halo)-257(elemen)28(ts,)-273(and)-257(\050optionally\051)-257(scale)]TJ 0 -11.956 Td [(the)-333(result:)]TJ/F11 9.9626 Tf 155.208 -20.029 Td [(x)]TJ/F14 9.9626 Tf 8.462 0 Td [(\040)]TJ/F11 9.9626 Tf 12.73 0 Td [(\013)-4(x)]TJ/F8 9.9626 Tf -176.4 -20.028 Td [(where:)]TJ +/F16 11.9552 Tf 124.986 706.129 Td [(halo)-375(|)-375(Halo)-375(Data)-375(Comm)31(unication)]TJ/F8 9.9626 Tf -25.091 -18.389 Td [(These)-333(s)-1(u)1(broutines)-334(gathers)-333(the)-333(v)55(alues)-333(of)-334(th)1(e)-334(halo)-333(elemen)28(ts:)]TJ/F11 9.9626 Tf 158.413 -23.188 Td [(x)]TJ/F14 9.9626 Tf 8.462 0 Td [(\040)]TJ/F11 9.9626 Tf 12.73 0 Td [(x)]TJ/F8 9.9626 Tf -179.605 -21.251 Td [(where:)]TJ 0 g 0 G -/F11 9.9626 Tf 0 -18.415 Td [(x)]TJ +/F11 9.9626 Tf 0 -19.391 Td [(x)]TJ 0 g 0 G /F8 9.9626 Tf 10.676 0 Td [(is)-333(a)-334(global)-333(dense)-333(submatrix.)]TJ 0 g 0 G @@ -10724,128 +10724,128 @@ BT 0 g 0 G ET q -1 0 0 1 177.988 597.517 cm +1 0 0 1 177.988 602.649 cm []0 d 0 J 0.398 w 0 0 m 187.526 0 l S Q BT -/F11 9.9626 Tf 183.966 588.95 Td [(\013)]TJ/F8 9.9626 Tf 6.41 0 Td [(,)]TJ/F11 9.9626 Tf 6.088 0 Td [(x)]TJ/F27 9.9626 Tf 107.911 0 Td [(Subroutine)]TJ +/F11 9.9626 Tf 183.966 594.081 Td [(\013)]TJ/F8 9.9626 Tf 6.41 0 Td [(,)]TJ/F11 9.9626 Tf 6.088 0 Td [(x)]TJ/F27 9.9626 Tf 107.911 0 Td [(Subroutine)]TJ ET q -1 0 0 1 177.988 585.164 cm +1 0 0 1 177.988 590.295 cm []0 d 0 J 0.398 w 0 0 m 187.526 0 l S Q BT -/F8 9.9626 Tf 183.966 576.596 Td [(In)28(teger)-9028(psb)]TJ +/F8 9.9626 Tf 183.966 581.727 Td [(In)28(teger)-9028(psb)]TJ ET q -1 0 0 1 319.972 576.795 cm +1 0 0 1 319.972 581.926 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 322.961 576.596 Td [(halo)]TJ -138.995 -11.955 Td [(Short)-333(Precision)-333(R)-1(eal)-3102(psb)]TJ +/F8 9.9626 Tf 322.961 581.727 Td [(halo)]TJ -138.995 -11.955 Td [(Short)-333(Precision)-333(R)-1(eal)-3102(psb)]TJ ET q -1 0 0 1 319.972 564.84 cm +1 0 0 1 319.972 569.971 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 322.961 564.641 Td [(halo)]TJ -138.995 -11.955 Td [(Long)-333(Precision)-334(Real)-3314(p)1(s)-1(b)]TJ +/F8 9.9626 Tf 322.961 569.772 Td [(halo)]TJ -138.995 -11.955 Td [(Long)-333(Precision)-334(Real)-3314(p)1(s)-1(b)]TJ ET q -1 0 0 1 319.972 552.885 cm +1 0 0 1 319.972 558.016 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 322.961 552.686 Td [(halo)]TJ -138.995 -11.956 Td [(Short)-333(Precision)-333(C)-1(omplex)-1200(p)1(s)-1(b)]TJ +/F8 9.9626 Tf 322.961 557.817 Td [(halo)]TJ -138.995 -11.955 Td [(Short)-333(Precision)-333(C)-1(omplex)-1200(p)1(s)-1(b)]TJ ET q -1 0 0 1 319.972 540.93 cm +1 0 0 1 319.972 546.061 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 322.961 540.73 Td [(halo)]TJ -138.995 -11.955 Td [(Long)-333(Precision)-334(Complex)-1411(psb)]TJ +/F8 9.9626 Tf 322.961 545.862 Td [(halo)]TJ -138.995 -11.956 Td [(Long)-333(Precision)-334(Complex)-1411(psb)]TJ ET q -1 0 0 1 319.972 528.974 cm +1 0 0 1 319.972 534.106 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 322.961 528.775 Td [(halo)]TJ +/F8 9.9626 Tf 322.961 533.906 Td [(halo)]TJ ET q -1 0 0 1 177.988 524.989 cm +1 0 0 1 177.988 530.121 cm []0 d 0 J 0.398 w 0 0 m 187.526 0 l S Q 0 g 0 G BT -/F8 9.9626 Tf 225.577 496.95 Td [(T)83(able)-333(14:)-444(Data)-334(t)28(yp)-28(es)]TJ +/F8 9.9626 Tf 225.577 502.081 Td [(T)83(able)-333(14:)-444(Data)-334(t)28(yp)-28(es)]TJ 0 g 0 G 0 g 0 G -/F27 9.9626 Tf -124.305 -28.377 Td [(c)-138(a)-138(l)-139(l)]TJ/F8 9.9626 Tf 29.731 0 Td [(p)-122(s)-123(b)]TJ +/F27 9.9626 Tf -124.305 -29.354 Td [(c)-138(a)-138(l)-139(l)]TJ/F8 9.9626 Tf 29.731 0 Td [(p)-122(s)-123(b)]TJ ET q -1 0 0 1 150.256 468.773 cm +1 0 0 1 150.256 472.926 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.464 468.573 Td [(h)-122(a)-123(l)-122(o)-228(\050)-130(x)-209(,)-874(d)-112(e)-113(s)-113(c)]TJ +/F8 9.9626 Tf 154.464 472.727 Td [(h)-122(a)-123(l)-122(o)-228(\050)-130(x)-209(,)-874(d)-112(e)-113(s)-113(c)]TJ ET q -1 0 0 1 226.044 468.773 cm +1 0 0 1 226.044 472.926 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 230.155 468.573 Td [(a)-386(,)-914(i)-152(n)-152(f)-152(o)-258(\051)]TJ/F27 9.9626 Tf -128.883 -11.955 Td [(c)-138(a)-138(l)-139(l)]TJ/F8 9.9626 Tf 29.731 0 Td [(p)-122(s)-123(b)]TJ +/F8 9.9626 Tf 230.155 472.727 Td [(a)-386(,)-914(i)-152(n)-152(f)-152(o)-258(\051)]TJ/F27 9.9626 Tf -128.883 -11.955 Td [(c)-138(a)-138(l)-139(l)]TJ/F8 9.9626 Tf 29.731 0 Td [(p)-122(s)-123(b)]TJ ET q -1 0 0 1 150.256 456.817 cm +1 0 0 1 150.256 460.971 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.464 456.618 Td [(h)-122(a)-123(l)-122(o)-228(\050)-130(x)-209(,)-874(d)-112(e)-113(s)-113(c)]TJ +/F8 9.9626 Tf 154.464 460.772 Td [(h)-122(a)-123(l)-122(o)-228(\050)-130(x)-209(,)-874(d)-112(e)-113(s)-113(c)]TJ ET q -1 0 0 1 226.044 456.817 cm +1 0 0 1 226.044 460.971 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 230.155 456.618 Td [(a)-386(,)-888(i)-127(n)-127(f)-127(o)-415(,)-848(a)-87(l)-88(p)-87(h)-87(a)-336(,)-804(w)-43(o)-43(r)-43(k)-248(,)]TJ/F27 9.9626 Tf 133.147 0 Td [(d)-39(a)-39(t)-40(a)]TJ/F8 9.9626 Tf 24.572 0 Td [(\051)]TJ +/F8 9.9626 Tf 230.155 460.772 Td [(a)-386(,)-888(i)-127(n)-127(f)-127(o)-415(,)-804(w)-43(o)-43(r)-43(k)-247(,)]TJ/F27 9.9626 Tf 91.304 0 Td [(d)-39(a)-39(t)-40(a)]TJ/F8 9.9626 Tf 24.571 0 Td [(\051)]TJ 0 g 0 G 0 g 0 G 0 g 0 G -/F27 9.9626 Tf -287.979 -25.251 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf -246.135 -26.961 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G /F8 9.9626 Tf 33.797 0 Td [(Sync)28(hronous.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -19.169 Td [(On)-383(En)32(try)]TJ +/F27 9.9626 Tf -33.797 -19.659 Td [(On)-383(En)32(try)]TJ 0 g 0 G 0 g 0 G - 0 -19.17 Td [(x)]TJ + 0 -19.658 Td [(x)]TJ 0 g 0 G -/F8 9.9626 Tf 11.028 0 Td [(global)-333(dense)-334(matrix)]TJ/F11 9.9626 Tf 88.917 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ -80.732 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Sp)-28(eci\014ed)-255(as:)-405(a)-255(rank)-254(one)-255(or)-255(t)28(w)27(o)-254(arra)27(y)-254(or)-255(an)-255(ob)-55(jec)-1(t)-254(of)-255(t)28(yp)-28(e)]TJ +/F8 9.9626 Tf 11.028 0 Td [(global)-333(dense)-334(matrix)]TJ/F11 9.9626 Tf 88.917 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ -80.732 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Sp)-28(eci\014ed)-255(as:)-405(a)-255(rank)-254(one)-255(or)-255(t)28(w)27(o)-254(arra)27(y)-254(or)-255(an)-255(ob)-55(jec)-1(t)-254(of)-255(t)28(yp)-28(e)]TJ 0 0 1 rg 0 0 1 RG /F30 9.9626 Tf 244.743 0 Td [(psb)]TJ ET q -1 0 0 1 385.864 345.406 cm +1 0 0 1 385.864 346.872 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 389.002 345.207 Td [(T)]TJ +/F30 9.9626 Tf 389.002 346.673 Td [(T)]TJ ET q -1 0 0 1 394.86 345.406 cm +1 0 0 1 394.86 346.872 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 397.998 345.207 Td [(vect)]TJ +/F30 9.9626 Tf 397.998 346.673 Td [(vect)]TJ ET q -1 0 0 1 419.547 345.406 cm +1 0 0 1 419.547 346.872 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 422.685 345.207 Td [(type)]TJ +/F30 9.9626 Tf 422.685 346.673 Td [(type)]TJ 0 g 0 G /F8 9.9626 Tf -297.883 -11.955 Td [(con)28(taining)-333(n)27(um)28(b)-28(ers)-333(of)-333(t)28(yp)-28(e)-334(sp)-27(eci\014ed)-334(in)-333(T)83(able)]TJ 0 0 1 rg 0 0 1 RG @@ -10853,48 +10853,44 @@ BT 0 g 0 G [(.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.17 Td [(desc)]TJ +/F27 9.9626 Tf -24.907 -19.658 Td [(desc)]TJ ET q -1 0 0 1 121.81 314.282 cm +1 0 0 1 121.81 315.259 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 125.247 314.082 Td [(a)]TJ +/F27 9.9626 Tf 125.247 315.06 Td [(a)]TJ 0 g 0 G -/F8 9.9626 Tf 10.551 0 Td [(con)28(tains)-334(d)1(ata)-334(structures)-333(for)-333(com)-1(m)28(unications.)]TJ -10.996 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ +/F8 9.9626 Tf 10.551 0 Td [(con)28(tains)-334(d)1(ata)-334(structures)-333(for)-333(com)-1(m)28(unications.)]TJ -10.996 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ 0 0 1 rg 0 0 1 RG /F30 9.9626 Tf 170.915 0 Td [(psb)]TJ ET q -1 0 0 1 312.036 266.461 cm +1 0 0 1 312.036 267.438 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 315.174 266.262 Td [(desc)]TJ +/F30 9.9626 Tf 315.174 267.239 Td [(desc)]TJ ET q -1 0 0 1 336.723 266.461 cm +1 0 0 1 336.723 267.438 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 339.861 266.262 Td [(type)]TJ +/F30 9.9626 Tf 339.861 267.239 Td [(type)]TJ 0 g 0 G /F8 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G -/F27 9.9626 Tf -260.887 -19.17 Td [(alpha)]TJ -0 g 0 G -/F8 9.9626 Tf 32.033 0 Td [(the)-333(scalar)]TJ/F11 9.9626 Tf 45.468 0 Td [(\013)]TJ/F8 9.9626 Tf 6.41 0 Td [(.)]TJ -59.004 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(optional)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Default:)]TJ/F11 9.9626 Tf 39.436 0 Td [(al)-20(pha)]TJ/F8 9.9626 Tf 27.22 0 Td [(=)-278(1)]TJ -66.656 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(n)28(um)28(b)-28(er)-333(of)-334(the)-333(data)-333(t)28(yp)-28(e)-334(ind)1(ic)-1(ated)-333(in)-333(T)83(able)]TJ -0 0 1 rg 0 0 1 RG - [-333(14)]TJ +/F27 9.9626 Tf -260.887 -19.658 Td [(w)32(ork)]TJ 0 g 0 G - [(.)]TJ +/F8 9.9626 Tf 29.432 0 Td [(the)-333(w)27(ork)-333(arra)28(y)83(.)]TJ -4.525 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(optional)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(rank)-333(one)-333(arra)27(y)-333(of)-333(the)-334(same)-333(t)28(yp)-28(e)-333(of)]TJ/F11 9.9626 Tf 220.756 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.17 Td [(w)32(ork)]TJ +/F27 9.9626 Tf -251.357 -19.659 Td [(data)]TJ 0 g 0 G -/F8 9.9626 Tf 29.432 0 Td [(the)-333(w)27(ork)-333(arra)28(y)83(.)]TJ -4.525 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(optional)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(rank)-333(one)-333(arra)27(y)-333(of)-333(the)-334(same)-333(t)28(yp)-28(e)-333(of)]TJ/F11 9.9626 Tf 220.756 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ +/F8 9.9626 Tf 26.941 0 Td [(index)-333(list)-334(selector.)]TJ -2.034 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(optional)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(Sp)-28(eci\014ed)-222(as:)-389(an)-222(in)28(teger.)-408(V)84(alues:)]TJ/F30 9.9626 Tf 136.479 0 Td [(psb_comm_halo_)]TJ/F8 9.9626 Tf 73.225 0 Td [(,)]TJ/F30 9.9626 Tf 2.767 0 Td [(psb_comm_mov_)]TJ/F8 9.9626 Tf 67.995 0 Td [(,)]TJ/F30 9.9626 Tf 5.202 0 Td [(psb_comm_ext_)]TJ/F8 9.9626 Tf 67.995 0 Td [(,)]TJ -353.663 -11.955 Td [(default:)]TJ/F30 9.9626 Tf 39.089 0 Td [(psb_comm_halo_)]TJ/F8 9.9626 Tf 73.224 0 Td [(.)-705(Cho)-27(os)-1(es)-420(the)-420(index)-420(list)-420(on)-420(whic)28(h)-420(to)-420(base)-420(the)]TJ -112.313 -11.955 Td [(data)-333(exc)27(hange.)]TJ 0 g 0 G - -84.482 -29.888 Td [(47)]TJ + 141.968 -29.888 Td [(47)]TJ 0 g 0 G ET endstream @@ -10905,36 +10901,29 @@ endobj /Resources 1087 0 R /MediaBox [0 0 595.276 841.89] /Parent 1061 0 R -/Annots [ 1083 0 R 1084 0 R 1085 0 R 1086 0 R ] +/Annots [ 1083 0 R 1084 0 R 1085 0 R ] >> endobj 1083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [368.549 341.997 444.603 353.122] +/Rect [368.549 343.463 444.603 354.588] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj 1084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [325.411 330.319 337.366 341.167] +/Rect [325.411 331.785 337.366 342.633] /Subtype /Link /A << /S /GoTo /D (table.14) >> >> endobj 1085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 263.051 361.779 274.176] +/Rect [294.721 264.029 361.779 275.154] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1086 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [382.088 184.383 394.043 195.231] -/Subtype /Link -/A << /S /GoTo /D (table.14) >> ->> endobj 1090 0 obj << /D [1088 0 R /XYZ 99.895 740.998 null] >> endobj @@ -10942,39 +10931,35 @@ endobj /D [1088 0 R /XYZ 99.895 697.37 null] >> endobj 1091 0 obj << -/D [1088 0 R /XYZ 270.132 508.905 null] +/D [1088 0 R /XYZ 270.132 514.036 null] >> endobj 1092 0 obj << -/D [1088 0 R /XYZ 99.895 478.591 null] +/D [1088 0 R /XYZ 99.895 482.745 null] >> endobj 1093 0 obj << -/D [1088 0 R /XYZ 99.895 480.528 null] +/D [1088 0 R /XYZ 99.895 484.682 null] >> endobj 1094 0 obj << -/D [1088 0 R /XYZ 99.895 468.573 null] +/D [1088 0 R /XYZ 99.895 472.727 null] >> endobj 1087 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F11 719 0 R /F14 737 0 R /F27 533 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1100 0 obj << -/Length 4119 +1099 0 obj << +/Length 3219 >> stream 0 g 0 G 0 g 0 G 0 g 0 G BT -/F27 9.9626 Tf 150.705 706.129 Td [(data)]TJ -0 g 0 G -/F8 9.9626 Tf 26.94 0 Td [(index)-333(list)-334(selector.)]TJ -2.034 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(optional)]TJ/F8 9.9626 Tf -29.612 -11.956 Td [(Sp)-28(eci\014ed)-222(as:)-389(an)-222(in)28(teger.)-408(V)84(alues:)]TJ/F30 9.9626 Tf 136.48 0 Td [(psb_comm_halo_)]TJ/F8 9.9626 Tf 73.224 0 Td [(,)]TJ/F30 9.9626 Tf 2.768 0 Td [(psb_comm_mov_)]TJ/F8 9.9626 Tf 67.994 0 Td [(,)]TJ/F30 9.9626 Tf 5.203 0 Td [(psb_comm_ext_)]TJ/F8 9.9626 Tf 67.994 0 Td [(,)]TJ -353.663 -11.955 Td [(default:)]TJ/F30 9.9626 Tf 39.089 0 Td [(psb_comm_halo_)]TJ/F8 9.9626 Tf 73.225 0 Td [(.)-705(Cho)-27(ose)-1(s)-420(the)-420(index)-420(list)-420(on)-420(whic)28(h)-420(to)-420(base)-420(the)]TJ -112.314 -11.955 Td [(data)-333(exc)27(hange.)]TJ +/F27 9.9626 Tf 150.705 706.129 Td [(On)-383(Return)]TJ 0 g 0 G -/F27 9.9626 Tf -24.906 -19.925 Td [(On)-383(Return)]TJ 0 g 0 G + 0 -19.925 Td [(x)]TJ 0 g 0 G - 0 -19.926 Td [(x)]TJ -0 g 0 G -/F8 9.9626 Tf 11.028 0 Td [(global)-333(dense)-334(result)-333(matrix)]TJ/F11 9.9626 Tf 116.674 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ -108.49 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Returned)-271(as:)-414(a)-271(rank)-271(one)-271(or)-272(t)28(w)28(o)-271(arra)28(y)-272(con)28(taining)-271(n)28(um)28(b)-28(ers)-271(of)-272(t)28(yp)-28(e)-271(sp)-28(eci\014ed)]TJ 0 -11.955 Td [(in)-333(T)83(able)]TJ +/F8 9.9626 Tf 11.028 0 Td [(global)-333(dense)-334(result)-333(matrix)]TJ/F11 9.9626 Tf 116.674 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ -108.49 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Returned)-271(as:)-414(a)-271(rank)-271(one)-271(or)-272(t)28(w)28(o)-271(arra)28(y)-272(con)28(taining)-271(n)28(um)28(b)-28(ers)-271(of)-272(t)28(yp)-28(e)-271(sp)-28(eci\014ed)]TJ 0 -11.955 Td [(in)-333(T)83(able)]TJ 0 0 1 rg 0 0 1 RG [-333(14)]TJ 0 g 0 G @@ -10987,7 +10972,7 @@ BT 0 g 0 G 0 g 0 G ET -1 0 0 1 210.961 455.126 cm +1 0 0 1 210.961 534.827 cm q 0 -1 1 0 0 0 cm q @@ -10999,45 +10984,45 @@ Q Q Q 0 g 0 G -1 0 0 1 -210.961 -455.126 cm +1 0 0 1 -210.961 -534.827 cm BT -/F8 9.9626 Tf 240.078 231.087 Td [(Figure)-333(7:)-445(Sample)-333(discretization)-333(mesh.)]TJ +/F8 9.9626 Tf 240.078 310.789 Td [(Figure)-333(7:)-445(Sample)-333(discretization)-333(mesh.)]TJ 0 g 0 G 0 g 0 G -/F16 11.9552 Tf -89.373 -23.91 Td [(Usage)-381(Example)]TJ/F8 9.9626 Tf 93.98 0 Td [(Consider)-338(the)-339(discretization)-338(mesh)-339(depicted)-338(in)-338(\014g.)]TJ +/F16 11.9552 Tf -89.373 -23.911 Td [(Usage)-381(Example)]TJ/F8 9.9626 Tf 93.98 0 Td [(Consider)-338(the)-339(discretization)-338(mesh)-339(depicted)-338(in)-338(\014g.)]TJ 0 0 1 rg 0 0 1 RG [-339(7)]TJ 0 g 0 G - [(,)-339(parti-)]TJ -93.98 -11.955 Td [(tioned)-334(among)-334(t)27(w)28(o)-334(pro)-28(cesses)-334(as)-335(sho)28(wn)-334(b)28(y)-334(the)-335(dashed)-334(line;)-334(the)-335(data)-334(distribution)]TJ 0 -11.955 Td [(is)-422(suc)28(h)-422(that)-422(eac)28(h)-422(pro)-28(cess)-422(will)-421(o)27(wn)-422(32)-421(en)27(tries)-421(in)-422(the)-422(index)-422(space,)-444(with)-422(a)-422(halo)]TJ 0 -11.955 Td [(made)-340(of)-341(8)-340(en)28(tries)-341(placed)-340(at)-340(lo)-28(cal)-341(in)1(dices)-341(33)-340(through)-340(40.)-466(If)-340(pro)-28(cess)-341(0)-340(assigns)-340(an)]TJ 0 -11.956 Td [(initial)-423(v)55(alue)-423(of)-424(1)-423(to)-424(its)-423(en)28(tries)-424(in)-423(the)]TJ/F11 9.9626 Tf 169.005 0 Td [(x)]TJ/F8 9.9626 Tf 9.913 0 Td [(v)28(ector,)-446(and)-424(pro)-27(cess)-424(1)-423(ass)-1(i)1(g)-1(n)1(s)-424(a)-423(v)55(alue)]TJ -178.918 -11.955 Td [(of)-349(2,)-353(then)-349(after)-349(a)-349(call)-349(to)]TJ/F30 9.9626 Tf 108.539 0 Td [(psb_halo)]TJ/F8 9.9626 Tf 45.32 0 Td [(the)-349(con)28(ten)27(t)1(s)-350(of)-349(the)-349(lo)-27(cal)-350(v)28(ectors)-349(will)-349(b)-28(e)-349(the)]TJ -153.859 -11.955 Td [(follo)28(wing:)]TJ + [(,)-339(parti-)]TJ -93.98 -11.955 Td [(tioned)-334(among)-334(t)27(w)28(o)-334(pro)-28(cesses)-334(as)-335(sho)28(wn)-334(b)28(y)-334(the)-335(dashed)-334(line;)-334(the)-335(data)-334(distribution)]TJ 0 -11.955 Td [(is)-422(suc)28(h)-422(that)-422(eac)28(h)-422(pro)-28(cess)-422(will)-421(o)27(wn)-422(32)-421(en)27(tries)-421(in)-422(the)-422(index)-422(space,)-444(with)-422(a)-422(halo)]TJ 0 -11.955 Td [(made)-340(of)-341(8)-340(en)28(tries)-341(placed)-340(at)-340(lo)-28(cal)-341(in)1(dices)-341(33)-340(through)-340(40.)-466(If)-340(pro)-28(cess)-341(0)-340(assigns)-340(an)]TJ 0 -11.955 Td [(initial)-423(v)55(alue)-423(of)-424(1)-423(to)-424(its)-423(en)28(tries)-424(in)-423(the)]TJ/F11 9.9626 Tf 169.005 0 Td [(x)]TJ/F8 9.9626 Tf 9.913 0 Td [(v)28(ector,)-446(and)-424(pro)-27(cess)-424(1)-423(ass)-1(i)1(g)-1(n)1(s)-424(a)-423(v)55(alue)]TJ -178.918 -11.956 Td [(of)-349(2,)-353(then)-349(after)-349(a)-349(call)-349(to)]TJ/F30 9.9626 Tf 108.539 0 Td [(psb_halo)]TJ/F8 9.9626 Tf 45.32 0 Td [(the)-349(con)28(ten)27(t)1(s)-350(of)-349(the)-349(lo)-27(cal)-350(v)28(ectors)-349(will)-349(b)-28(e)-349(the)]TJ -153.859 -11.955 Td [(follo)28(wing:)]TJ 0 g 0 G - 166.874 -45.008 Td [(48)]TJ + 166.874 -124.709 Td [(48)]TJ 0 g 0 G ET endstream endobj -1099 0 obj << +1098 0 obj << /Type /Page -/Contents 1100 0 R -/Resources 1098 0 R +/Contents 1099 0 R +/Resources 1097 0 R /MediaBox [0 0 595.276 841.89] /Parent 1061 0 R -/Annots [ 1095 0 R 1097 0 R ] +/Annots [ 1086 0 R 1096 0 R ] >> endobj -1096 0 obj << +1095 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/try8x8.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 1103 0 R +/PTEX.InfoDict 1102 0 R /BBox [0 0 436 496] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 1104 0 R ->>/Font << /R8 1105 0 R/R9 1106 0 R>> +/R7 1103 0 R +>>/Font << /R8 1104 0 R/R9 1105 0 R>> >> -/Length 1107 0 R +/Length 1106 0 R /Filter /FlateDecode >> stream @@ -11053,62 +11038,62 @@ QI* d)eI%}QÉ'?+ä°~I*écÂ\‚?XO#~Ã[!©äX‚?fJÇüÁaî‹J8ù9â÷%©¤ s‰ù`=ø Ÿ× ,ªƒ1Œ|?ª$6ŠázžAª@}¡J¢¿R©’#‡z|]ñd•9ÔãýL G„z8¯—÷¬’Ï€äcD¾P%ùàgÌcå‘#<¾®x²J2³jˆÏÕpD„ó¢¼g•mø»ãoÇßþžŸúö§Ç6Úë¸w¶W~ûùñéØ?ûçãK߯åÌÞ>Øíƒ]?Øeµûü`ŸìqÛ{éÏ/m;±ù"×~¢WëÖëj¾Z…3lï²ÛÂ?|Ïz¼Ú½m[{힦„iÿb¬m»¦øóe•Ï¿{üáÛã¯×¿ÿ-3‡à endstream endobj -1103 0 obj +1102 0 obj << /Producer (ESP Ghostscript 815.03) /CreationDate (D:20070118112257) /ModDate (D:20070118112257) >> endobj -1104 0 obj +1103 0 obj << /Type /ExtGState /OPM 1 >> endobj -1105 0 obj +1104 0 obj << /BaseFont /Times-Roman /Type /Font /Subtype /Type1 >> endobj -1106 0 obj +1105 0 obj << /BaseFont /Times-Bold /Type /Font /Subtype /Type1 >> endobj -1107 0 obj +1106 0 obj 3571 endobj -1095 0 obj << +1086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [213.636 545.73 225.591 554.641] +/Rect [213.636 625.431 225.591 634.343] /Subtype /Link /A << /S /GoTo /D (table.14) >> >> endobj -1097 0 obj << +1096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.906 203.856 464.88 216.476] +/Rect [457.906 283.557 464.88 296.177] /Subtype /Link /A << /S /GoTo /D (figure.7) >> >> endobj -1101 0 obj << -/D [1099 0 R /XYZ 150.705 740.998 null] +1100 0 obj << +/D [1098 0 R /XYZ 150.705 740.998 null] >> endobj -1102 0 obj << -/D [1099 0 R /XYZ 283.692 243.043 null] +1101 0 obj << +/D [1098 0 R /XYZ 283.692 322.744 null] >> endobj -1098 0 obj << -/Font << /F27 533 0 R /F8 534 0 R /F30 734 0 R /F11 719 0 R /F16 531 0 R >> -/XObject << /Im3 1096 0 R >> +1097 0 obj << +/Font << /F27 533 0 R /F8 534 0 R /F11 719 0 R /F16 531 0 R /F30 734 0 R >> +/XObject << /Im3 1095 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1110 0 obj << +1109 0 obj << /Length 3050 >> stream @@ -11126,21 +11111,21 @@ BT ET endstream endobj -1109 0 obj << +1108 0 obj << /Type /Page -/Contents 1110 0 R -/Resources 1108 0 R +/Contents 1109 0 R +/Resources 1107 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1113 0 R +/Parent 1112 0 R >> endobj -1111 0 obj << -/D [1109 0 R /XYZ 99.895 740.998 null] +1110 0 obj << +/D [1108 0 R /XYZ 99.895 740.998 null] >> endobj -1108 0 obj << -/Font << /F45 1112 0 R /F8 534 0 R >> +1107 0 obj << +/Font << /F45 1111 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1119 0 obj << +1118 0 obj << /Length 8482 >> stream @@ -11407,58 +11392,58 @@ BT ET endstream endobj -1118 0 obj << +1117 0 obj << /Type /Page -/Contents 1119 0 R -/Resources 1117 0 R +/Contents 1118 0 R +/Resources 1116 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1113 0 R -/Annots [ 1114 0 R 1115 0 R 1116 0 R ] +/Parent 1112 0 R +/Annots [ 1113 0 R 1114 0 R 1115 0 R ] >> endobj -1114 0 obj << +1113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.358 343.981 495.412 355.106] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1115 0 obj << +1114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.221 332.303 388.176 343.151] /Subtype /Link /A << /S /GoTo /D (table.15) >> >> endobj -1116 0 obj << +1115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 264.991 412.588 276.116] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1120 0 obj << -/D [1118 0 R /XYZ 150.705 740.998 null] +1119 0 obj << +/D [1117 0 R /XYZ 150.705 740.998 null] >> endobj 254 0 obj << -/D [1118 0 R /XYZ 150.705 697.37 null] +/D [1117 0 R /XYZ 150.705 697.37 null] +>> endobj +1120 0 obj << +/D [1117 0 R /XYZ 320.941 511.222 null] >> endobj 1121 0 obj << -/D [1118 0 R /XYZ 320.941 511.222 null] +/D [1117 0 R /XYZ 150.705 480.819 null] >> endobj 1122 0 obj << -/D [1118 0 R /XYZ 150.705 480.819 null] +/D [1117 0 R /XYZ 150.705 482.756 null] >> endobj 1123 0 obj << -/D [1118 0 R /XYZ 150.705 482.756 null] +/D [1117 0 R /XYZ 150.705 470.801 null] >> endobj -1124 0 obj << -/D [1118 0 R /XYZ 150.705 470.801 null] ->> endobj -1117 0 obj << +1116 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F11 719 0 R /F14 737 0 R /F10 736 0 R /F27 533 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1131 0 obj << +1130 0 obj << /Length 5866 >> stream @@ -11510,52 +11495,52 @@ BT ET endstream endobj -1130 0 obj << +1129 0 obj << /Type /Page -/Contents 1131 0 R -/Resources 1129 0 R +/Contents 1130 0 R +/Resources 1128 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1113 0 R -/Annots [ 1125 0 R 1127 0 R 1128 0 R ] +/Parent 1112 0 R +/Annots [ 1124 0 R 1126 0 R 1127 0 R ] >> endobj -1125 0 obj << +1124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 555.748 214.964 566.597] /Subtype /Link /A << /S /GoTo /D (table.15) >> >> endobj -1127 0 obj << +1126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.019 326.22 413.993 338.84] /Subtype /Link /A << /S /GoTo /D (figure.8) >> >> endobj -1128 0 obj << +1127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.759 302.697 313.733 313.546] /Subtype /Link /A << /S /GoTo /D (figure.7) >> >> endobj +1131 0 obj << +/D [1129 0 R /XYZ 99.895 740.998 null] +>> endobj 1132 0 obj << -/D [1130 0 R /XYZ 99.895 740.998 null] +/D [1129 0 R /XYZ 99.895 465.033 null] >> endobj 1133 0 obj << -/D [1130 0 R /XYZ 99.895 465.033 null] +/D [1129 0 R /XYZ 99.895 431.215 null] >> endobj 1134 0 obj << -/D [1130 0 R /XYZ 99.895 431.215 null] +/D [1129 0 R /XYZ 99.895 387.38 null] >> endobj -1135 0 obj << -/D [1130 0 R /XYZ 99.895 387.38 null] ->> endobj -1129 0 obj << +1128 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F11 719 0 R /F16 531 0 R /F10 736 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1139 0 obj << +1138 0 obj << /Length 3619 >> stream @@ -11573,21 +11558,21 @@ BT ET endstream endobj -1138 0 obj << +1137 0 obj << /Type /Page -/Contents 1139 0 R -/Resources 1137 0 R +/Contents 1138 0 R +/Resources 1136 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1113 0 R +/Parent 1112 0 R >> endobj -1140 0 obj << -/D [1138 0 R /XYZ 150.705 740.998 null] +1139 0 obj << +/D [1137 0 R /XYZ 150.705 740.998 null] >> endobj -1137 0 obj << +1136 0 obj << /Font << /F31 740 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1143 0 obj << +1142 0 obj << /Length 347 >> stream @@ -11619,28 +11604,28 @@ BT ET endstream endobj -1142 0 obj << +1141 0 obj << /Type /Page -/Contents 1143 0 R -/Resources 1141 0 R +/Contents 1142 0 R +/Resources 1140 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1113 0 R +/Parent 1112 0 R >> endobj -1126 0 obj << +1125 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/try8x8_ov.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 1145 0 R +/PTEX.InfoDict 1144 0 R /BBox [0 0 436 514] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 1146 0 R ->>/Font << /R8 1147 0 R/R9 1148 0 R>> +/R7 1145 0 R +>>/Font << /R8 1146 0 R/R9 1147 0 R>> >> -/Length 1149 0 R +/Length 1148 0 R /Filter /FlateDecode >> stream @@ -11654,48 +11639,48 @@ V óá!Zäÿ/L)ÇÇ8ú:ß=þ êë¼® endstream endobj -1145 0 obj +1144 0 obj << /Producer (ESP Ghostscript 815.03) /CreationDate (D:20070118114343) /ModDate (D:20070118114343) >> endobj -1146 0 obj +1145 0 obj << /Type /ExtGState /OPM 1 >> endobj -1147 0 obj +1146 0 obj << /BaseFont /Times-Roman /Type /Font /Subtype /Type1 >> endobj -1148 0 obj +1147 0 obj << /BaseFont /Times-Bold /Type /Font /Subtype /Type1 >> endobj -1149 0 obj +1148 0 obj 3652 endobj -1144 0 obj << -/D [1142 0 R /XYZ 99.895 740.998 null] +1143 0 obj << +/D [1141 0 R /XYZ 99.895 740.998 null] >> endobj -1136 0 obj << -/D [1142 0 R /XYZ 232.883 275.514 null] +1135 0 obj << +/D [1141 0 R /XYZ 232.883 275.514 null] >> endobj -1141 0 obj << +1140 0 obj << /Font << /F8 534 0 R >> -/XObject << /Im4 1126 0 R >> +/XObject << /Im4 1125 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1155 0 obj << +1154 0 obj << /Length 9366 >> stream @@ -11974,58 +11959,58 @@ BT ET endstream endobj -1154 0 obj << +1153 0 obj << /Type /Page -/Contents 1155 0 R -/Resources 1153 0 R +/Contents 1154 0 R +/Resources 1152 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1113 0 R -/Annots [ 1150 0 R 1151 0 R 1152 0 R ] +/Parent 1112 0 R +/Annots [ 1149 0 R 1150 0 R 1151 0 R ] >> endobj -1150 0 obj << +1149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.358 295.182 495.412 306.307] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1151 0 obj << +1150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.807 285.441 268.762 294.352] /Subtype /Link /A << /S /GoTo /D (table.16) >> >> endobj -1152 0 obj << +1151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 215.901 412.588 227.026] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1156 0 obj << -/D [1154 0 R /XYZ 150.705 740.998 null] +1155 0 obj << +/D [1153 0 R /XYZ 150.705 740.998 null] >> endobj 258 0 obj << -/D [1154 0 R /XYZ 150.705 697.37 null] +/D [1153 0 R /XYZ 150.705 697.37 null] +>> endobj +1156 0 obj << +/D [1153 0 R /XYZ 320.941 466.542 null] >> endobj 1157 0 obj << -/D [1154 0 R /XYZ 320.941 466.542 null] +/D [1153 0 R /XYZ 150.705 435.558 null] >> endobj 1158 0 obj << -/D [1154 0 R /XYZ 150.705 435.558 null] +/D [1153 0 R /XYZ 150.705 435.558 null] >> endobj 1159 0 obj << -/D [1154 0 R /XYZ 150.705 435.558 null] +/D [1153 0 R /XYZ 150.705 423.603 null] >> endobj -1160 0 obj << -/D [1154 0 R /XYZ 150.705 423.603 null] ->> endobj -1153 0 obj << +1152 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F11 719 0 R /F14 737 0 R /F10 736 0 R /F7 735 0 R /F27 533 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1163 0 obj << +1162 0 obj << /Length 1455 >> stream @@ -12053,21 +12038,21 @@ BT ET endstream endobj -1162 0 obj << +1161 0 obj << /Type /Page -/Contents 1163 0 R -/Resources 1161 0 R +/Contents 1162 0 R +/Resources 1160 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R +/Parent 1164 0 R >> endobj -1164 0 obj << -/D [1162 0 R /XYZ 99.895 740.998 null] +1163 0 obj << +/D [1161 0 R /XYZ 99.895 740.998 null] >> endobj -1161 0 obj << +1160 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1170 0 obj << +1169 0 obj << /Length 8563 >> stream @@ -12310,44 +12295,44 @@ BT ET endstream endobj -1169 0 obj << +1168 0 obj << /Type /Page -/Contents 1170 0 R -/Resources 1168 0 R +/Contents 1169 0 R +/Resources 1167 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R -/Annots [ 1166 0 R ] +/Parent 1164 0 R +/Annots [ 1165 0 R ] >> endobj -1166 0 obj << +1165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 217.135 412.588 228.26] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1171 0 obj << -/D [1169 0 R /XYZ 150.705 740.998 null] +1170 0 obj << +/D [1168 0 R /XYZ 150.705 740.998 null] >> endobj 262 0 obj << -/D [1169 0 R /XYZ 150.705 697.328 null] +/D [1168 0 R /XYZ 150.705 697.328 null] +>> endobj +1171 0 obj << +/D [1168 0 R /XYZ 320.941 460.425 null] >> endobj 1172 0 obj << -/D [1169 0 R /XYZ 320.941 460.425 null] +/D [1168 0 R /XYZ 150.705 428.452 null] >> endobj 1173 0 obj << -/D [1169 0 R /XYZ 150.705 428.452 null] +/D [1168 0 R /XYZ 150.705 428.452 null] >> endobj 1174 0 obj << -/D [1169 0 R /XYZ 150.705 428.452 null] ->> endobj -1175 0 obj << -/D [1169 0 R /XYZ 150.705 416.497 null] +/D [1168 0 R /XYZ 150.705 416.497 null] >> endobj -1168 0 obj << +1167 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F11 719 0 R /F10 736 0 R /F14 737 0 R /F7 735 0 R /F27 533 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1178 0 obj << +1177 0 obj << /Length 1718 >> stream @@ -12386,29 +12371,29 @@ BT ET endstream endobj -1177 0 obj << +1176 0 obj << /Type /Page -/Contents 1178 0 R -/Resources 1176 0 R +/Contents 1177 0 R +/Resources 1175 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R -/Annots [ 1167 0 R ] +/Parent 1164 0 R +/Annots [ 1166 0 R ] >> endobj -1167 0 obj << +1166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.998 645.357 217.953 654.268] /Subtype /Link /A << /S /GoTo /D (table.17) >> >> endobj -1179 0 obj << -/D [1177 0 R /XYZ 99.895 740.998 null] +1178 0 obj << +/D [1176 0 R /XYZ 99.895 740.998 null] >> endobj -1176 0 obj << +1175 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1182 0 obj << +1181 0 obj << /Length 6539 >> stream @@ -12463,27 +12448,27 @@ BT ET endstream endobj -1181 0 obj << +1180 0 obj << /Type /Page -/Contents 1182 0 R -/Resources 1180 0 R +/Contents 1181 0 R +/Resources 1179 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R +/Parent 1164 0 R >> endobj -1183 0 obj << -/D [1181 0 R /XYZ 150.705 740.998 null] +1182 0 obj << +/D [1180 0 R /XYZ 150.705 740.998 null] >> endobj 266 0 obj << -/D [1181 0 R /XYZ 150.705 716.092 null] +/D [1180 0 R /XYZ 150.705 716.092 null] >> endobj 270 0 obj << -/D [1181 0 R /XYZ 150.705 673.557 null] +/D [1180 0 R /XYZ 150.705 673.557 null] >> endobj -1180 0 obj << +1179 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1187 0 obj << +1186 0 obj << /Length 6637 >> stream @@ -12559,32 +12544,32 @@ BT ET endstream endobj -1186 0 obj << +1185 0 obj << /Type /Page -/Contents 1187 0 R -/Resources 1185 0 R +/Contents 1186 0 R +/Resources 1184 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R -/Annots [ 1184 0 R ] +/Parent 1164 0 R +/Annots [ 1183 0 R ] >> endobj -1184 0 obj << +1183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 325.282 361.779 336.407] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1188 0 obj << -/D [1186 0 R /XYZ 99.895 740.998 null] +1187 0 obj << +/D [1185 0 R /XYZ 99.895 740.998 null] >> endobj -1189 0 obj << -/D [1186 0 R /XYZ 99.895 234.372 null] +1188 0 obj << +/D [1185 0 R /XYZ 99.895 234.372 null] >> endobj -1185 0 obj << +1184 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F30 734 0 R /F11 719 0 R /F16 531 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1193 0 obj << +1192 0 obj << /Length 10049 >> stream @@ -12653,32 +12638,32 @@ BT ET endstream endobj -1192 0 obj << +1191 0 obj << /Type /Page -/Contents 1193 0 R -/Resources 1191 0 R +/Contents 1192 0 R +/Resources 1190 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R -/Annots [ 1190 0 R ] +/Parent 1164 0 R +/Annots [ 1189 0 R ] >> endobj -1190 0 obj << +1189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.792 215.702 431.263 226.827] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.1) >> >> endobj -1194 0 obj << -/D [1192 0 R /XYZ 150.705 740.998 null] +1193 0 obj << +/D [1191 0 R /XYZ 150.705 740.998 null] >> endobj -1195 0 obj << -/D [1192 0 R /XYZ 150.705 134.155 null] +1194 0 obj << +/D [1191 0 R /XYZ 150.705 134.155 null] >> endobj -1191 0 obj << +1190 0 obj << /Font << /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R /F10 736 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1198 0 obj << +1197 0 obj << /Length 2660 >> stream @@ -12711,36 +12696,36 @@ BT ET endstream endobj -1197 0 obj << +1196 0 obj << /Type /Page -/Contents 1198 0 R -/Resources 1196 0 R +/Contents 1197 0 R +/Resources 1195 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R +/Parent 1204 0 R +>> endobj +1198 0 obj << +/D [1196 0 R /XYZ 99.895 740.998 null] >> endobj 1199 0 obj << -/D [1197 0 R /XYZ 99.895 740.998 null] +/D [1196 0 R /XYZ 99.895 716.092 null] >> endobj 1200 0 obj << -/D [1197 0 R /XYZ 99.895 716.092 null] +/D [1196 0 R /XYZ 99.895 688.251 null] >> endobj 1201 0 obj << -/D [1197 0 R /XYZ 99.895 688.251 null] +/D [1196 0 R /XYZ 99.895 668.049 null] >> endobj 1202 0 obj << -/D [1197 0 R /XYZ 99.895 668.049 null] +/D [1196 0 R /XYZ 99.895 626.428 null] >> endobj 1203 0 obj << -/D [1197 0 R /XYZ 99.895 626.428 null] +/D [1196 0 R /XYZ 99.895 568.7 null] >> endobj -1204 0 obj << -/D [1197 0 R /XYZ 99.895 568.7 null] ->> endobj -1196 0 obj << +1195 0 obj << /Font << /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1209 0 obj << +1208 0 obj << /Length 7171 >> stream @@ -12823,32 +12808,32 @@ BT ET endstream endobj -1208 0 obj << +1207 0 obj << /Type /Page -/Contents 1209 0 R -/Resources 1207 0 R +/Contents 1208 0 R +/Resources 1206 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1206 0 R ] +/Parent 1204 0 R +/Annots [ 1205 0 R ] >> endobj -1206 0 obj << +1205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 117.115 412.588 128.24] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1210 0 obj << -/D [1208 0 R /XYZ 150.705 740.998 null] +1209 0 obj << +/D [1207 0 R /XYZ 150.705 740.998 null] >> endobj 274 0 obj << -/D [1208 0 R /XYZ 150.705 697.37 null] +/D [1207 0 R /XYZ 150.705 697.37 null] >> endobj -1207 0 obj << +1206 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F11 719 0 R /F27 533 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1214 0 obj << +1213 0 obj << /Length 3156 >> stream @@ -12889,38 +12874,38 @@ BT ET endstream endobj -1213 0 obj << +1212 0 obj << /Type /Page -/Contents 1214 0 R -/Resources 1212 0 R +/Contents 1213 0 R +/Resources 1211 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1211 0 R ] +/Parent 1204 0 R +/Annots [ 1210 0 R ] >> endobj -1211 0 obj << +1210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [274.574 402.324 297.045 413.172] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.1) >> >> endobj +1214 0 obj << +/D [1212 0 R /XYZ 99.895 740.998 null] +>> endobj 1215 0 obj << -/D [1213 0 R /XYZ 99.895 740.998 null] +/D [1212 0 R /XYZ 99.895 496.913 null] >> endobj 1216 0 obj << -/D [1213 0 R /XYZ 99.895 496.913 null] +/D [1212 0 R /XYZ 99.895 475.051 null] >> endobj 1217 0 obj << -/D [1213 0 R /XYZ 99.895 475.051 null] ->> endobj -1218 0 obj << -/D [1213 0 R /XYZ 99.895 431.215 null] +/D [1212 0 R /XYZ 99.895 431.215 null] >> endobj -1212 0 obj << +1211 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F11 719 0 R /F16 531 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1223 0 obj << +1222 0 obj << /Length 3493 >> stream @@ -13020,42 +13005,42 @@ BT ET endstream endobj -1222 0 obj << +1221 0 obj << /Type /Page -/Contents 1223 0 R -/Resources 1221 0 R +/Contents 1222 0 R +/Resources 1220 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1219 0 R 1220 0 R ] +/Parent 1204 0 R +/Annots [ 1218 0 R 1219 0 R ] >> endobj -1219 0 obj << +1218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 412.588 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1220 0 obj << +1219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 485.277 412.588 496.401] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1224 0 obj << -/D [1222 0 R /XYZ 150.705 740.998 null] +1223 0 obj << +/D [1221 0 R /XYZ 150.705 740.998 null] >> endobj 278 0 obj << -/D [1222 0 R /XYZ 150.705 697.37 null] +/D [1221 0 R /XYZ 150.705 697.37 null] >> endobj -1225 0 obj << -/D [1222 0 R /XYZ 150.705 394.838 null] +1224 0 obj << +/D [1221 0 R /XYZ 150.705 394.838 null] >> endobj -1221 0 obj << +1220 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1230 0 obj << +1229 0 obj << /Length 3277 >> stream @@ -13151,39 +13136,39 @@ BT ET endstream endobj -1229 0 obj << +1228 0 obj << /Type /Page -/Contents 1230 0 R -/Resources 1228 0 R +/Contents 1229 0 R +/Resources 1227 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1226 0 R 1227 0 R ] +/Parent 1204 0 R +/Annots [ 1225 0 R 1226 0 R ] >> endobj -1226 0 obj << +1225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 361.779 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1227 0 obj << +1226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 485.277 361.779 496.401] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1231 0 obj << -/D [1229 0 R /XYZ 99.895 740.998 null] +1230 0 obj << +/D [1228 0 R /XYZ 99.895 740.998 null] >> endobj 282 0 obj << -/D [1229 0 R /XYZ 99.895 697.37 null] +/D [1228 0 R /XYZ 99.895 697.37 null] >> endobj -1228 0 obj << +1227 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1235 0 obj << +1234 0 obj << /Length 2243 >> stream @@ -13250,32 +13235,32 @@ BT ET endstream endobj -1234 0 obj << +1233 0 obj << /Type /Page -/Contents 1235 0 R -/Resources 1233 0 R +/Contents 1234 0 R +/Resources 1232 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1232 0 R ] +/Parent 1204 0 R +/Annots [ 1231 0 R ] >> endobj -1232 0 obj << +1231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 412.588 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1236 0 obj << -/D [1234 0 R /XYZ 150.705 740.998 null] +1235 0 obj << +/D [1233 0 R /XYZ 150.705 740.998 null] >> endobj 286 0 obj << -/D [1234 0 R /XYZ 150.705 697.37 null] +/D [1233 0 R /XYZ 150.705 697.37 null] >> endobj -1233 0 obj << +1232 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1241 0 obj << +1240 0 obj << /Length 5927 >> stream @@ -13383,39 +13368,39 @@ BT ET endstream endobj -1240 0 obj << +1239 0 obj << /Type /Page -/Contents 1241 0 R -/Resources 1239 0 R +/Contents 1240 0 R +/Resources 1238 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1243 0 R -/Annots [ 1237 0 R 1238 0 R ] +/Parent 1242 0 R +/Annots [ 1236 0 R 1237 0 R ] >> endobj -1237 0 obj << +1236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 453.24 372.239 464.364] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1238 0 obj << +1237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 209.896 361.779 221.021] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1242 0 obj << -/D [1240 0 R /XYZ 99.895 740.998 null] +1241 0 obj << +/D [1239 0 R /XYZ 99.895 740.998 null] >> endobj 290 0 obj << -/D [1240 0 R /XYZ 99.895 685.412 null] +/D [1239 0 R /XYZ 99.895 685.412 null] >> endobj -1239 0 obj << +1238 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1246 0 obj << +1245 0 obj << /Length 1587 >> stream @@ -13436,27 +13421,27 @@ BT ET endstream endobj -1245 0 obj << +1244 0 obj << /Type /Page -/Contents 1246 0 R -/Resources 1244 0 R +/Contents 1245 0 R +/Resources 1243 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1243 0 R +/Parent 1242 0 R +>> endobj +1246 0 obj << +/D [1244 0 R /XYZ 150.705 740.998 null] >> endobj 1247 0 obj << -/D [1245 0 R /XYZ 150.705 740.998 null] +/D [1244 0 R /XYZ 150.705 716.092 null] >> endobj 1248 0 obj << -/D [1245 0 R /XYZ 150.705 716.092 null] +/D [1244 0 R /XYZ 150.705 664.341 null] >> endobj -1249 0 obj << -/D [1245 0 R /XYZ 150.705 664.341 null] ->> endobj -1244 0 obj << +1243 0 obj << /Font << /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1254 0 obj << +1253 0 obj << /Length 4887 >> stream @@ -13561,48 +13546,48 @@ BT ET endstream endobj -1253 0 obj << +1252 0 obj << /Type /Page -/Contents 1254 0 R -/Resources 1252 0 R +/Contents 1253 0 R +/Resources 1251 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1243 0 R -/Annots [ 1250 0 R 1251 0 R ] +/Parent 1242 0 R +/Annots [ 1249 0 R 1250 0 R ] >> endobj -1250 0 obj << +1249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 361.779 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1251 0 obj << +1250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 405.575 372.239 416.7] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1255 0 obj << -/D [1253 0 R /XYZ 99.895 740.998 null] +1254 0 obj << +/D [1252 0 R /XYZ 99.895 740.998 null] >> endobj 294 0 obj << -/D [1253 0 R /XYZ 99.895 697.37 null] +/D [1252 0 R /XYZ 99.895 697.37 null] +>> endobj +1255 0 obj << +/D [1252 0 R /XYZ 99.895 315.137 null] >> endobj 1256 0 obj << -/D [1253 0 R /XYZ 99.895 315.137 null] +/D [1252 0 R /XYZ 99.895 293.274 null] >> endobj 1257 0 obj << -/D [1253 0 R /XYZ 99.895 293.274 null] +/D [1252 0 R /XYZ 99.895 273.349 null] >> endobj -1258 0 obj << -/D [1253 0 R /XYZ 99.895 273.349 null] ->> endobj -1252 0 obj << +1251 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1264 0 obj << +1263 0 obj << /Length 6453 >> stream @@ -13707,39 +13692,39 @@ BT ET endstream endobj -1263 0 obj << +1262 0 obj << /Type /Page -/Contents 1264 0 R -/Resources 1262 0 R +/Contents 1263 0 R +/Resources 1261 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1243 0 R -/Annots [ 1259 0 R 1260 0 R ] +/Parent 1242 0 R +/Annots [ 1258 0 R 1259 0 R ] >> endobj -1259 0 obj << +1258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.962 288.004 379.019 299.129] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1260 0 obj << +1259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 117.115 423.049 128.24] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1265 0 obj << -/D [1263 0 R /XYZ 150.705 740.998 null] +1264 0 obj << +/D [1262 0 R /XYZ 150.705 740.998 null] >> endobj 298 0 obj << -/D [1263 0 R /XYZ 150.705 697.251 null] +/D [1262 0 R /XYZ 150.705 697.251 null] >> endobj -1262 0 obj << +1261 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1268 0 obj << +1267 0 obj << /Length 6087 >> stream @@ -13821,56 +13806,56 @@ BT ET endstream endobj -1267 0 obj << +1266 0 obj << /Type /Page -/Contents 1268 0 R -/Resources 1266 0 R +/Contents 1267 0 R +/Resources 1265 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1243 0 R -/Annots [ 1261 0 R ] +/Parent 1242 0 R +/Annots [ 1260 0 R ] >> endobj -1261 0 obj << +1260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.152 655.098 328.21 666.223] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj +1268 0 obj << +/D [1266 0 R /XYZ 99.895 740.998 null] +>> endobj 1269 0 obj << -/D [1267 0 R /XYZ 99.895 740.998 null] +/D [1266 0 R /XYZ 99.895 552.704 null] >> endobj 1270 0 obj << -/D [1267 0 R /XYZ 99.895 552.704 null] +/D [1266 0 R /XYZ 99.895 520.824 null] >> endobj 1271 0 obj << -/D [1267 0 R /XYZ 99.895 520.824 null] +/D [1266 0 R /XYZ 99.895 487.006 null] >> endobj 1272 0 obj << -/D [1267 0 R /XYZ 99.895 487.006 null] +/D [1266 0 R /XYZ 99.895 419.26 null] >> endobj 1273 0 obj << -/D [1267 0 R /XYZ 99.895 419.26 null] +/D [1266 0 R /XYZ 99.895 363.469 null] >> endobj 1274 0 obj << -/D [1267 0 R /XYZ 99.895 363.469 null] +/D [1266 0 R /XYZ 99.895 319.634 null] >> endobj 1275 0 obj << -/D [1267 0 R /XYZ 99.895 319.634 null] +/D [1266 0 R /XYZ 99.895 287.753 null] >> endobj 1276 0 obj << -/D [1267 0 R /XYZ 99.895 287.753 null] +/D [1266 0 R /XYZ 99.895 255.873 null] >> endobj 1277 0 obj << -/D [1267 0 R /XYZ 99.895 255.873 null] +/D [1266 0 R /XYZ 99.895 212.037 null] >> endobj -1278 0 obj << -/D [1267 0 R /XYZ 99.895 212.037 null] ->> endobj -1266 0 obj << +1265 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F30 734 0 R /F16 531 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1283 0 obj << +1282 0 obj << /Length 6648 >> stream @@ -14003,39 +13988,39 @@ BT ET endstream endobj -1282 0 obj << +1281 0 obj << /Type /Page -/Contents 1283 0 R -/Resources 1281 0 R +/Contents 1282 0 R +/Resources 1280 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1243 0 R -/Annots [ 1279 0 R 1280 0 R ] +/Parent 1242 0 R +/Annots [ 1278 0 R 1279 0 R ] >> endobj -1279 0 obj << +1278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 576.23 412.588 587.355] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1280 0 obj << +1279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 205.776 423.049 216.901] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1284 0 obj << -/D [1282 0 R /XYZ 150.705 740.998 null] +1283 0 obj << +/D [1281 0 R /XYZ 150.705 740.998 null] >> endobj 302 0 obj << -/D [1282 0 R /XYZ 150.705 697.37 null] +/D [1281 0 R /XYZ 150.705 697.37 null] >> endobj -1281 0 obj << +1280 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1287 0 obj << +1286 0 obj << /Length 2248 >> stream @@ -14072,39 +14057,39 @@ BT ET endstream endobj -1286 0 obj << +1285 0 obj << /Type /Page -/Contents 1287 0 R -/Resources 1285 0 R +/Contents 1286 0 R +/Resources 1284 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1295 0 R +/Parent 1294 0 R +>> endobj +1287 0 obj << +/D [1285 0 R /XYZ 99.895 740.998 null] >> endobj 1288 0 obj << -/D [1286 0 R /XYZ 99.895 740.998 null] +/D [1285 0 R /XYZ 99.895 716.092 null] >> endobj 1289 0 obj << -/D [1286 0 R /XYZ 99.895 716.092 null] +/D [1285 0 R /XYZ 99.895 687.975 null] >> endobj 1290 0 obj << -/D [1286 0 R /XYZ 99.895 687.975 null] +/D [1285 0 R /XYZ 99.895 668.326 null] >> endobj 1291 0 obj << -/D [1286 0 R /XYZ 99.895 668.326 null] +/D [1285 0 R /XYZ 99.895 624.491 null] >> endobj 1292 0 obj << -/D [1286 0 R /XYZ 99.895 624.491 null] +/D [1285 0 R /XYZ 99.895 580.655 null] >> endobj 1293 0 obj << -/D [1286 0 R /XYZ 99.895 580.655 null] ->> endobj -1294 0 obj << -/D [1286 0 R /XYZ 99.895 560.73 null] +/D [1285 0 R /XYZ 99.895 560.73 null] >> endobj -1285 0 obj << +1284 0 obj << /Font << /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1300 0 obj << +1299 0 obj << /Length 3084 >> stream @@ -14193,39 +14178,39 @@ BT ET endstream endobj -1299 0 obj << +1298 0 obj << /Type /Page -/Contents 1300 0 R -/Resources 1298 0 R +/Contents 1299 0 R +/Resources 1297 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1295 0 R -/Annots [ 1296 0 R 1297 0 R ] +/Parent 1294 0 R +/Annots [ 1295 0 R 1296 0 R ] >> endobj -1296 0 obj << +1295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 423.049 586.065] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1297 0 obj << +1296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 507.194 412.588 518.319] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1301 0 obj << -/D [1299 0 R /XYZ 150.705 740.998 null] +1300 0 obj << +/D [1298 0 R /XYZ 150.705 740.998 null] >> endobj 306 0 obj << -/D [1299 0 R /XYZ 150.705 697.37 null] +/D [1298 0 R /XYZ 150.705 697.37 null] >> endobj -1298 0 obj << +1297 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1306 0 obj << +1305 0 obj << /Length 3991 >> stream @@ -14322,42 +14307,42 @@ BT ET endstream endobj -1305 0 obj << +1304 0 obj << /Type /Page -/Contents 1306 0 R -/Resources 1304 0 R +/Contents 1305 0 R +/Resources 1303 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1295 0 R -/Annots [ 1302 0 R 1303 0 R ] +/Parent 1294 0 R +/Annots [ 1301 0 R 1302 0 R ] >> endobj -1302 0 obj << +1301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 560.993 372.239 572.118] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1303 0 obj << +1302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 493.247 361.779 504.372] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1307 0 obj << -/D [1305 0 R /XYZ 99.895 740.998 null] +1306 0 obj << +/D [1304 0 R /XYZ 99.895 740.998 null] >> endobj 310 0 obj << -/D [1305 0 R /XYZ 99.895 685.747 null] +/D [1304 0 R /XYZ 99.895 685.747 null] >> endobj -1308 0 obj << -/D [1305 0 R /XYZ 99.895 313.144 null] +1307 0 obj << +/D [1304 0 R /XYZ 99.895 313.144 null] >> endobj -1304 0 obj << +1303 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1313 0 obj << +1312 0 obj << /Length 5111 >> stream @@ -14461,39 +14446,39 @@ BT ET endstream endobj -1312 0 obj << +1311 0 obj << /Type /Page -/Contents 1313 0 R -/Resources 1311 0 R +/Contents 1312 0 R +/Resources 1310 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1295 0 R -/Annots [ 1309 0 R 1310 0 R ] +/Parent 1294 0 R +/Annots [ 1308 0 R 1309 0 R ] >> endobj -1309 0 obj << +1308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.962 574.94 379.019 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1310 0 obj << +1309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [264.584 290.009 340.638 301.134] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1314 0 obj << -/D [1312 0 R /XYZ 150.705 740.998 null] +1313 0 obj << +/D [1311 0 R /XYZ 150.705 740.998 null] >> endobj 314 0 obj << -/D [1312 0 R /XYZ 150.705 697.37 null] +/D [1311 0 R /XYZ 150.705 697.37 null] >> endobj -1311 0 obj << +1310 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1319 0 obj << +1318 0 obj << /Length 6817 >> stream @@ -14605,39 +14590,39 @@ BT ET endstream endobj -1318 0 obj << +1317 0 obj << /Type /Page -/Contents 1319 0 R -/Resources 1317 0 R +/Contents 1318 0 R +/Resources 1316 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1295 0 R -/Annots [ 1315 0 R 1316 0 R ] +/Parent 1294 0 R +/Annots [ 1314 0 R 1315 0 R ] >> endobj -1315 0 obj << +1314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 363.459 361.779 374.584] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1316 0 obj << +1315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.781 141.026 441.835 152.151] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1320 0 obj << -/D [1318 0 R /XYZ 99.895 740.998 null] +1319 0 obj << +/D [1317 0 R /XYZ 99.895 740.998 null] >> endobj 318 0 obj << -/D [1318 0 R /XYZ 99.895 697.37 null] +/D [1317 0 R /XYZ 99.895 697.37 null] >> endobj -1317 0 obj << +1316 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1323 0 obj << +1322 0 obj << /Length 1115 >> stream @@ -14662,27 +14647,27 @@ BT ET endstream endobj -1322 0 obj << +1321 0 obj << /Type /Page -/Contents 1323 0 R -/Resources 1321 0 R +/Contents 1322 0 R +/Resources 1320 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1295 0 R +/Parent 1294 0 R +>> endobj +1323 0 obj << +/D [1321 0 R /XYZ 150.705 740.998 null] >> endobj 1324 0 obj << -/D [1322 0 R /XYZ 150.705 740.998 null] +/D [1321 0 R /XYZ 150.705 632.405 null] >> endobj 1325 0 obj << -/D [1322 0 R /XYZ 150.705 632.405 null] ->> endobj -1326 0 obj << -/D [1322 0 R /XYZ 150.705 609.989 null] +/D [1321 0 R /XYZ 150.705 609.989 null] >> endobj -1321 0 obj << +1320 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F16 531 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1332 0 obj << +1331 0 obj << /Length 5215 >> stream @@ -14835,46 +14820,46 @@ BT ET endstream endobj -1331 0 obj << +1330 0 obj << /Type /Page -/Contents 1332 0 R -/Resources 1330 0 R +/Contents 1331 0 R +/Resources 1329 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1334 0 R -/Annots [ 1327 0 R 1328 0 R 1329 0 R ] +/Parent 1333 0 R +/Annots [ 1326 0 R 1327 0 R 1328 0 R ] >> endobj -1327 0 obj << +1326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.152 574.94 328.21 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1328 0 obj << +1327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.918 483.284 345.972 494.409] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1329 0 obj << +1328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.733 381.665 263.787 392.79] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1333 0 obj << -/D [1331 0 R /XYZ 99.895 740.998 null] +1332 0 obj << +/D [1330 0 R /XYZ 99.895 740.998 null] >> endobj 322 0 obj << -/D [1331 0 R /XYZ 99.895 697.37 null] +/D [1330 0 R /XYZ 99.895 697.37 null] >> endobj -1330 0 obj << +1329 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1339 0 obj << +1338 0 obj << /Length 3379 >> stream @@ -14970,39 +14955,39 @@ BT ET endstream endobj -1338 0 obj << +1337 0 obj << /Type /Page -/Contents 1339 0 R -/Resources 1337 0 R +/Contents 1338 0 R +/Resources 1336 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1334 0 R -/Annots [ 1335 0 R 1336 0 R ] +/Parent 1333 0 R +/Annots [ 1334 0 R 1335 0 R ] >> endobj -1335 0 obj << +1334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.542 562.985 314.596 574.11] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1336 0 obj << +1335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.962 483.284 379.019 494.409] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1340 0 obj << -/D [1338 0 R /XYZ 150.705 740.998 null] +1339 0 obj << +/D [1337 0 R /XYZ 150.705 740.998 null] >> endobj 326 0 obj << -/D [1338 0 R /XYZ 150.705 697.37 null] +/D [1337 0 R /XYZ 150.705 697.37 null] >> endobj -1337 0 obj << +1336 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1343 0 obj << +1342 0 obj << /Length 3437 >> stream @@ -15052,24 +15037,24 @@ BT ET endstream endobj -1342 0 obj << +1341 0 obj << /Type /Page -/Contents 1343 0 R -/Resources 1341 0 R +/Contents 1342 0 R +/Resources 1340 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1334 0 R +/Parent 1333 0 R >> endobj -1344 0 obj << -/D [1342 0 R /XYZ 99.895 740.998 null] +1343 0 obj << +/D [1341 0 R /XYZ 99.895 740.998 null] >> endobj 330 0 obj << -/D [1342 0 R /XYZ 99.895 697.37 null] +/D [1341 0 R /XYZ 99.895 697.37 null] >> endobj -1341 0 obj << +1340 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R /F10 736 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1348 0 obj << +1347 0 obj << /Length 6547 >> stream @@ -15170,32 +15155,32 @@ BT ET endstream endobj -1347 0 obj << +1346 0 obj << /Type /Page -/Contents 1348 0 R -/Resources 1346 0 R +/Contents 1347 0 R +/Resources 1345 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1334 0 R -/Annots [ 1345 0 R ] +/Parent 1333 0 R +/Annots [ 1344 0 R ] >> endobj -1345 0 obj << +1344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 484.86 412.588 495.985] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1349 0 obj << -/D [1347 0 R /XYZ 150.705 740.998 null] +1348 0 obj << +/D [1346 0 R /XYZ 150.705 740.998 null] >> endobj 334 0 obj << -/D [1347 0 R /XYZ 150.705 697.37 null] +/D [1346 0 R /XYZ 150.705 697.37 null] >> endobj -1346 0 obj << +1345 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1352 0 obj << +1351 0 obj << /Length 692 >> stream @@ -15216,27 +15201,27 @@ BT ET endstream endobj -1351 0 obj << +1350 0 obj << /Type /Page -/Contents 1352 0 R -/Resources 1350 0 R +/Contents 1351 0 R +/Resources 1349 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1334 0 R +/Parent 1333 0 R +>> endobj +1352 0 obj << +/D [1350 0 R /XYZ 99.895 740.998 null] >> endobj 1353 0 obj << -/D [1351 0 R /XYZ 99.895 740.998 null] +/D [1350 0 R /XYZ 99.895 716.092 null] >> endobj 1354 0 obj << -/D [1351 0 R /XYZ 99.895 716.092 null] +/D [1350 0 R /XYZ 99.895 688.251 null] >> endobj -1355 0 obj << -/D [1351 0 R /XYZ 99.895 688.251 null] ->> endobj -1350 0 obj << +1349 0 obj << /Font << /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1359 0 obj << +1358 0 obj << /Length 5736 >> stream @@ -15333,32 +15318,32 @@ BT ET endstream endobj -1358 0 obj << +1357 0 obj << /Type /Page -/Contents 1359 0 R -/Resources 1357 0 R +/Contents 1358 0 R +/Resources 1356 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1334 0 R -/Annots [ 1356 0 R ] +/Parent 1333 0 R +/Annots [ 1355 0 R ] >> endobj -1356 0 obj << +1355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 483.284 412.588 494.409] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1360 0 obj << -/D [1358 0 R /XYZ 150.705 740.998 null] +1359 0 obj << +/D [1357 0 R /XYZ 150.705 740.998 null] >> endobj 338 0 obj << -/D [1358 0 R /XYZ 150.705 697.37 null] +/D [1357 0 R /XYZ 150.705 697.37 null] >> endobj -1357 0 obj << +1356 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1364 0 obj << +1363 0 obj << /Length 3271 >> stream @@ -15440,35 +15425,35 @@ BT ET endstream endobj -1363 0 obj << +1362 0 obj << /Type /Page -/Contents 1364 0 R -/Resources 1362 0 R +/Contents 1363 0 R +/Resources 1361 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1367 0 R -/Annots [ 1361 0 R ] +/Parent 1366 0 R +/Annots [ 1360 0 R ] >> endobj -1361 0 obj << +1360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 495.239 361.779 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1365 0 obj << -/D [1363 0 R /XYZ 99.895 740.998 null] +1364 0 obj << +/D [1362 0 R /XYZ 99.895 740.998 null] >> endobj 342 0 obj << -/D [1363 0 R /XYZ 99.895 697.37 null] +/D [1362 0 R /XYZ 99.895 697.37 null] >> endobj -1366 0 obj << -/D [1363 0 R /XYZ 99.895 382.883 null] +1365 0 obj << +/D [1362 0 R /XYZ 99.895 382.883 null] >> endobj -1362 0 obj << +1361 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1371 0 obj << +1370 0 obj << /Length 4983 >> stream @@ -15558,35 +15543,35 @@ BT ET endstream endobj -1370 0 obj << +1369 0 obj << /Type /Page -/Contents 1371 0 R -/Resources 1369 0 R +/Contents 1370 0 R +/Resources 1368 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1367 0 R -/Annots [ 1368 0 R ] +/Parent 1366 0 R +/Annots [ 1367 0 R ] >> endobj -1368 0 obj << +1367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 495.239 412.588 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1372 0 obj << -/D [1370 0 R /XYZ 150.705 740.998 null] +1371 0 obj << +/D [1369 0 R /XYZ 150.705 740.998 null] >> endobj 346 0 obj << -/D [1370 0 R /XYZ 150.705 697.37 null] +/D [1369 0 R /XYZ 150.705 697.37 null] >> endobj -1373 0 obj << -/D [1370 0 R /XYZ 150.705 259.346 null] +1372 0 obj << +/D [1369 0 R /XYZ 150.705 259.346 null] >> endobj -1369 0 obj << +1368 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1377 0 obj << +1376 0 obj << /Length 3240 >> stream @@ -15668,35 +15653,35 @@ BT ET endstream endobj -1376 0 obj << +1375 0 obj << /Type /Page -/Contents 1377 0 R -/Resources 1375 0 R +/Contents 1376 0 R +/Resources 1374 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1367 0 R -/Annots [ 1374 0 R ] +/Parent 1366 0 R +/Annots [ 1373 0 R ] >> endobj -1374 0 obj << +1373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 495.239 361.779 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1378 0 obj << -/D [1376 0 R /XYZ 99.895 740.998 null] +1377 0 obj << +/D [1375 0 R /XYZ 99.895 740.998 null] >> endobj 350 0 obj << -/D [1376 0 R /XYZ 99.895 697.37 null] +/D [1375 0 R /XYZ 99.895 697.37 null] >> endobj -1379 0 obj << -/D [1376 0 R /XYZ 99.895 382.883 null] +1378 0 obj << +/D [1375 0 R /XYZ 99.895 382.883 null] >> endobj -1375 0 obj << +1374 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1383 0 obj << +1382 0 obj << /Length 4992 >> stream @@ -15786,35 +15771,35 @@ BT ET endstream endobj -1382 0 obj << +1381 0 obj << /Type /Page -/Contents 1383 0 R -/Resources 1381 0 R +/Contents 1382 0 R +/Resources 1380 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1367 0 R -/Annots [ 1380 0 R ] +/Parent 1366 0 R +/Annots [ 1379 0 R ] >> endobj -1380 0 obj << +1379 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 495.239 412.588 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1384 0 obj << -/D [1382 0 R /XYZ 150.705 740.998 null] +1383 0 obj << +/D [1381 0 R /XYZ 150.705 740.998 null] >> endobj 354 0 obj << -/D [1382 0 R /XYZ 150.705 697.37 null] +/D [1381 0 R /XYZ 150.705 697.37 null] >> endobj -1385 0 obj << -/D [1382 0 R /XYZ 150.705 259.346 null] +1384 0 obj << +/D [1381 0 R /XYZ 150.705 259.346 null] >> endobj -1381 0 obj << +1380 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1389 0 obj << +1388 0 obj << /Length 3821 >> stream @@ -15893,38 +15878,38 @@ BT ET endstream endobj -1388 0 obj << +1387 0 obj << /Type /Page -/Contents 1389 0 R -/Resources 1387 0 R +/Contents 1388 0 R +/Resources 1386 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1367 0 R -/Annots [ 1386 0 R ] +/Parent 1366 0 R +/Annots [ 1385 0 R ] >> endobj -1386 0 obj << +1385 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 361.779 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1390 0 obj << -/D [1388 0 R /XYZ 99.895 740.998 null] +1389 0 obj << +/D [1387 0 R /XYZ 99.895 740.998 null] >> endobj 358 0 obj << -/D [1388 0 R /XYZ 99.895 697.37 null] +/D [1387 0 R /XYZ 99.895 697.37 null] >> endobj -1391 0 obj << -/D [1388 0 R /XYZ 99.895 370.928 null] +1390 0 obj << +/D [1387 0 R /XYZ 99.895 370.928 null] >> endobj -1392 0 obj << -/D [1388 0 R /XYZ 99.895 327.092 null] +1391 0 obj << +/D [1387 0 R /XYZ 99.895 327.092 null] >> endobj -1387 0 obj << +1386 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1396 0 obj << +1395 0 obj << /Length 3654 >> stream @@ -16003,38 +15988,38 @@ BT ET endstream endobj -1395 0 obj << +1394 0 obj << /Type /Page -/Contents 1396 0 R -/Resources 1394 0 R +/Contents 1395 0 R +/Resources 1393 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1367 0 R -/Annots [ 1393 0 R ] +/Parent 1366 0 R +/Annots [ 1392 0 R ] >> endobj -1393 0 obj << +1392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 412.588 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1397 0 obj << -/D [1395 0 R /XYZ 150.705 740.998 null] +1396 0 obj << +/D [1394 0 R /XYZ 150.705 740.998 null] >> endobj 362 0 obj << -/D [1395 0 R /XYZ 150.705 697.37 null] +/D [1394 0 R /XYZ 150.705 697.37 null] >> endobj -1398 0 obj << -/D [1395 0 R /XYZ 150.705 370.928 null] +1397 0 obj << +/D [1394 0 R /XYZ 150.705 370.928 null] >> endobj -1399 0 obj << -/D [1395 0 R /XYZ 150.705 339.047 null] +1398 0 obj << +/D [1394 0 R /XYZ 150.705 339.047 null] >> endobj -1394 0 obj << +1393 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1403 0 obj << +1402 0 obj << /Length 5783 >> stream @@ -16121,32 +16106,32 @@ BT ET endstream endobj -1402 0 obj << +1401 0 obj << /Type /Page -/Contents 1403 0 R -/Resources 1401 0 R +/Contents 1402 0 R +/Resources 1400 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1405 0 R -/Annots [ 1400 0 R ] +/Parent 1404 0 R +/Annots [ 1399 0 R ] >> endobj -1400 0 obj << +1399 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 492.904 372.239 504.029] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1404 0 obj << -/D [1402 0 R /XYZ 99.895 740.998 null] +1403 0 obj << +/D [1401 0 R /XYZ 99.895 740.998 null] >> endobj 366 0 obj << -/D [1402 0 R /XYZ 99.895 696.587 null] +/D [1401 0 R /XYZ 99.895 696.587 null] >> endobj -1401 0 obj << +1400 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1408 0 obj << +1407 0 obj << /Length 3711 >> stream @@ -16183,30 +16168,30 @@ BT ET endstream endobj -1407 0 obj << +1406 0 obj << /Type /Page -/Contents 1408 0 R -/Resources 1406 0 R +/Contents 1407 0 R +/Resources 1405 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1405 0 R +/Parent 1404 0 R +>> endobj +1408 0 obj << +/D [1406 0 R /XYZ 150.705 740.998 null] >> endobj 1409 0 obj << -/D [1407 0 R /XYZ 150.705 740.998 null] +/D [1406 0 R /XYZ 150.705 496.913 null] >> endobj 1410 0 obj << -/D [1407 0 R /XYZ 150.705 496.913 null] +/D [1406 0 R /XYZ 150.705 439.185 null] >> endobj 1411 0 obj << -/D [1407 0 R /XYZ 150.705 439.185 null] ->> endobj -1412 0 obj << -/D [1407 0 R /XYZ 150.705 418.983 null] +/D [1406 0 R /XYZ 150.705 418.983 null] >> endobj -1406 0 obj << +1405 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F30 734 0 R /F16 531 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1418 0 obj << +1417 0 obj << /Length 4123 >> stream @@ -16317,46 +16302,46 @@ BT ET endstream endobj -1417 0 obj << +1416 0 obj << /Type /Page -/Contents 1418 0 R -/Resources 1416 0 R +/Contents 1417 0 R +/Resources 1415 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1405 0 R -/Annots [ 1413 0 R 1414 0 R 1415 0 R ] +/Parent 1404 0 R +/Annots [ 1412 0 R 1413 0 R 1414 0 R ] >> endobj -1413 0 obj << +1412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 529.112 372.239 540.237] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1414 0 obj << +1413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 461.366 361.779 472.491] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1415 0 obj << +1414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.343 405.575 388.401 416.7] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1419 0 obj << -/D [1417 0 R /XYZ 99.895 740.998 null] +1418 0 obj << +/D [1416 0 R /XYZ 99.895 740.998 null] >> endobj 370 0 obj << -/D [1417 0 R /XYZ 99.895 697.37 null] +/D [1416 0 R /XYZ 99.895 697.37 null] >> endobj -1416 0 obj << +1415 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F30 734 0 R /F27 533 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1422 0 obj << +1421 0 obj << /Length 5773 >> stream @@ -16436,24 +16421,24 @@ BT ET endstream endobj -1421 0 obj << +1420 0 obj << /Type /Page -/Contents 1422 0 R -/Resources 1420 0 R +/Contents 1421 0 R +/Resources 1419 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1405 0 R +/Parent 1404 0 R >> endobj -1423 0 obj << -/D [1421 0 R /XYZ 150.705 740.998 null] +1422 0 obj << +/D [1420 0 R /XYZ 150.705 740.998 null] >> endobj 374 0 obj << -/D [1421 0 R /XYZ 150.705 696.813 null] +/D [1420 0 R /XYZ 150.705 696.813 null] >> endobj -1420 0 obj << +1419 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F11 719 0 R /F27 533 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1426 0 obj << +1425 0 obj << /Length 6993 >> stream @@ -16559,48 +16544,48 @@ BT ET endstream endobj -1425 0 obj << +1424 0 obj << /Type /Page -/Contents 1426 0 R -/Resources 1424 0 R +/Contents 1425 0 R +/Resources 1423 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1405 0 R +/Parent 1404 0 R +>> endobj +1426 0 obj << +/D [1424 0 R /XYZ 99.895 740.998 null] >> endobj 1427 0 obj << -/D [1425 0 R /XYZ 99.895 740.998 null] +/D [1424 0 R /XYZ 99.895 702.144 null] >> endobj 1428 0 obj << -/D [1425 0 R /XYZ 99.895 702.144 null] +/D [1424 0 R /XYZ 99.895 668.326 null] >> endobj 1429 0 obj << -/D [1425 0 R /XYZ 99.895 668.326 null] +/D [1424 0 R /XYZ 99.895 624.491 null] >> endobj 1430 0 obj << -/D [1425 0 R /XYZ 99.895 624.491 null] +/D [1424 0 R /XYZ 99.895 556.745 null] >> endobj 1431 0 obj << -/D [1425 0 R /XYZ 99.895 556.745 null] +/D [1424 0 R /XYZ 99.895 500.954 null] >> endobj 1432 0 obj << -/D [1425 0 R /XYZ 99.895 500.954 null] +/D [1424 0 R /XYZ 99.895 468.52 null] >> endobj 1433 0 obj << -/D [1425 0 R /XYZ 99.895 468.52 null] +/D [1424 0 R /XYZ 99.895 425.182 null] >> endobj 1434 0 obj << -/D [1425 0 R /XYZ 99.895 425.182 null] +/D [1424 0 R /XYZ 99.895 383.395 null] >> endobj 1435 0 obj << -/D [1425 0 R /XYZ 99.895 383.395 null] ->> endobj -1436 0 obj << -/D [1425 0 R /XYZ 99.895 355.499 null] +/D [1424 0 R /XYZ 99.895 355.499 null] >> endobj -1424 0 obj << +1423 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F11 719 0 R /F14 737 0 R /F7 735 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1439 0 obj << +1438 0 obj << /Length 186 >> stream @@ -16614,24 +16599,24 @@ BT ET endstream endobj -1438 0 obj << +1437 0 obj << /Type /Page -/Contents 1439 0 R -/Resources 1437 0 R +/Contents 1438 0 R +/Resources 1436 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1405 0 R +/Parent 1404 0 R >> endobj -1440 0 obj << -/D [1438 0 R /XYZ 150.705 740.998 null] +1439 0 obj << +/D [1437 0 R /XYZ 150.705 740.998 null] >> endobj 378 0 obj << -/D [1438 0 R /XYZ 150.705 716.092 null] +/D [1437 0 R /XYZ 150.705 716.092 null] >> endobj -1437 0 obj << +1436 0 obj << /Font << /F16 531 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1443 0 obj << +1442 0 obj << /Length 5566 >> stream @@ -16703,30 +16688,30 @@ BT ET endstream endobj -1442 0 obj << +1441 0 obj << /Type /Page -/Contents 1443 0 R -/Resources 1441 0 R +/Contents 1442 0 R +/Resources 1440 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1447 0 R +/Parent 1446 0 R >> endobj -1444 0 obj << -/D [1442 0 R /XYZ 99.895 740.998 null] +1443 0 obj << +/D [1441 0 R /XYZ 99.895 740.998 null] >> endobj 382 0 obj << -/D [1442 0 R /XYZ 99.895 697.37 null] +/D [1441 0 R /XYZ 99.895 697.37 null] >> endobj -1445 0 obj << -/D [1442 0 R /XYZ 99.895 235.436 null] +1444 0 obj << +/D [1441 0 R /XYZ 99.895 235.436 null] >> endobj -1446 0 obj << -/D [1442 0 R /XYZ 99.895 213.573 null] +1445 0 obj << +/D [1441 0 R /XYZ 99.895 213.573 null] >> endobj -1441 0 obj << +1440 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1450 0 obj << +1449 0 obj << /Length 4638 >> stream @@ -16780,30 +16765,30 @@ BT ET endstream endobj -1449 0 obj << +1448 0 obj << /Type /Page -/Contents 1450 0 R -/Resources 1448 0 R +/Contents 1449 0 R +/Resources 1447 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1447 0 R +/Parent 1446 0 R >> endobj -1451 0 obj << -/D [1449 0 R /XYZ 150.705 740.998 null] +1450 0 obj << +/D [1448 0 R /XYZ 150.705 740.998 null] >> endobj 386 0 obj << -/D [1449 0 R /XYZ 150.705 685.747 null] +/D [1448 0 R /XYZ 150.705 685.747 null] >> endobj -1452 0 obj << -/D [1449 0 R /XYZ 150.705 349.01 null] +1451 0 obj << +/D [1448 0 R /XYZ 150.705 349.01 null] >> endobj -1453 0 obj << -/D [1449 0 R /XYZ 150.705 315.192 null] +1452 0 obj << +/D [1448 0 R /XYZ 150.705 315.192 null] >> endobj -1448 0 obj << +1447 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1456 0 obj << +1455 0 obj << /Length 4355 >> stream @@ -16854,33 +16839,33 @@ BT ET endstream endobj -1455 0 obj << +1454 0 obj << /Type /Page -/Contents 1456 0 R -/Resources 1454 0 R +/Contents 1455 0 R +/Resources 1453 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1447 0 R +/Parent 1446 0 R >> endobj -1457 0 obj << -/D [1455 0 R /XYZ 99.895 740.998 null] +1456 0 obj << +/D [1454 0 R /XYZ 99.895 740.998 null] >> endobj 390 0 obj << -/D [1455 0 R /XYZ 99.895 697.37 null] +/D [1454 0 R /XYZ 99.895 697.37 null] +>> endobj +1457 0 obj << +/D [1454 0 R /XYZ 99.895 442.659 null] >> endobj 1458 0 obj << -/D [1455 0 R /XYZ 99.895 442.659 null] +/D [1454 0 R /XYZ 99.895 396.886 null] >> endobj 1459 0 obj << -/D [1455 0 R /XYZ 99.895 396.886 null] ->> endobj -1460 0 obj << -/D [1455 0 R /XYZ 99.895 365.005 null] +/D [1454 0 R /XYZ 99.895 365.005 null] >> endobj -1454 0 obj << +1453 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1463 0 obj << +1462 0 obj << /Length 2160 >> stream @@ -16929,24 +16914,24 @@ BT ET endstream endobj -1462 0 obj << +1461 0 obj << /Type /Page -/Contents 1463 0 R -/Resources 1461 0 R +/Contents 1462 0 R +/Resources 1460 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1447 0 R +/Parent 1446 0 R >> endobj -1464 0 obj << -/D [1462 0 R /XYZ 150.705 740.998 null] +1463 0 obj << +/D [1461 0 R /XYZ 150.705 740.998 null] >> endobj 394 0 obj << -/D [1462 0 R /XYZ 150.705 697.37 null] +/D [1461 0 R /XYZ 150.705 697.37 null] >> endobj -1461 0 obj << +1460 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1467 0 obj << +1466 0 obj << /Length 3020 >> stream @@ -16999,24 +16984,24 @@ BT ET endstream endobj -1466 0 obj << +1465 0 obj << /Type /Page -/Contents 1467 0 R -/Resources 1465 0 R +/Contents 1466 0 R +/Resources 1464 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1447 0 R +/Parent 1446 0 R >> endobj -1468 0 obj << -/D [1466 0 R /XYZ 99.895 740.998 null] +1467 0 obj << +/D [1465 0 R /XYZ 99.895 740.998 null] >> endobj 398 0 obj << -/D [1466 0 R /XYZ 99.895 697.37 null] +/D [1465 0 R /XYZ 99.895 697.37 null] >> endobj -1465 0 obj << +1464 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F11 719 0 R /F27 533 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1471 0 obj << +1470 0 obj << /Length 1202 >> stream @@ -17051,24 +17036,24 @@ BT ET endstream endobj -1470 0 obj << +1469 0 obj << /Type /Page -/Contents 1471 0 R -/Resources 1469 0 R +/Contents 1470 0 R +/Resources 1468 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1447 0 R +/Parent 1446 0 R >> endobj -1472 0 obj << -/D [1470 0 R /XYZ 150.705 740.998 null] +1471 0 obj << +/D [1469 0 R /XYZ 150.705 740.998 null] >> endobj 402 0 obj << -/D [1470 0 R /XYZ 150.705 697.37 null] +/D [1469 0 R /XYZ 150.705 697.37 null] >> endobj -1469 0 obj << +1468 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1475 0 obj << +1474 0 obj << /Length 1484 >> stream @@ -17103,24 +17088,24 @@ BT ET endstream endobj -1474 0 obj << +1473 0 obj << /Type /Page -/Contents 1475 0 R -/Resources 1473 0 R +/Contents 1474 0 R +/Resources 1472 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1477 0 R +/Parent 1476 0 R >> endobj -1476 0 obj << -/D [1474 0 R /XYZ 99.895 740.998 null] +1475 0 obj << +/D [1473 0 R /XYZ 99.895 740.998 null] >> endobj 406 0 obj << -/D [1474 0 R /XYZ 99.895 697.37 null] +/D [1473 0 R /XYZ 99.895 697.37 null] >> endobj -1473 0 obj << +1472 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1480 0 obj << +1479 0 obj << /Length 1357 >> stream @@ -17155,24 +17140,24 @@ BT ET endstream endobj -1479 0 obj << +1478 0 obj << /Type /Page -/Contents 1480 0 R -/Resources 1478 0 R +/Contents 1479 0 R +/Resources 1477 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1477 0 R +/Parent 1476 0 R >> endobj -1481 0 obj << -/D [1479 0 R /XYZ 150.705 740.998 null] +1480 0 obj << +/D [1478 0 R /XYZ 150.705 740.998 null] >> endobj 410 0 obj << -/D [1479 0 R /XYZ 150.705 697.37 null] +/D [1478 0 R /XYZ 150.705 697.37 null] >> endobj -1478 0 obj << +1477 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1484 0 obj << +1483 0 obj << /Length 4552 >> stream @@ -17222,24 +17207,24 @@ BT ET endstream endobj -1483 0 obj << +1482 0 obj << /Type /Page -/Contents 1484 0 R -/Resources 1482 0 R +/Contents 1483 0 R +/Resources 1481 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1477 0 R +/Parent 1476 0 R >> endobj -1485 0 obj << -/D [1483 0 R /XYZ 99.895 740.998 null] +1484 0 obj << +/D [1482 0 R /XYZ 99.895 740.998 null] >> endobj 414 0 obj << -/D [1483 0 R /XYZ 99.895 697.37 null] +/D [1482 0 R /XYZ 99.895 697.37 null] >> endobj -1482 0 obj << +1481 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1488 0 obj << +1487 0 obj << /Length 5199 >> stream @@ -17297,30 +17282,30 @@ BT ET endstream endobj -1487 0 obj << +1486 0 obj << /Type /Page -/Contents 1488 0 R -/Resources 1486 0 R +/Contents 1487 0 R +/Resources 1485 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1477 0 R +/Parent 1476 0 R >> endobj -1489 0 obj << -/D [1487 0 R /XYZ 150.705 740.998 null] +1488 0 obj << +/D [1486 0 R /XYZ 150.705 740.998 null] >> endobj 418 0 obj << -/D [1487 0 R /XYZ 150.705 697.37 null] +/D [1486 0 R /XYZ 150.705 697.37 null] >> endobj -1490 0 obj << -/D [1487 0 R /XYZ 150.705 247.391 null] +1489 0 obj << +/D [1486 0 R /XYZ 150.705 247.391 null] >> endobj -1491 0 obj << -/D [1487 0 R /XYZ 150.705 213.573 null] +1490 0 obj << +/D [1486 0 R /XYZ 150.705 213.573 null] >> endobj -1486 0 obj << +1485 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1494 0 obj << +1493 0 obj << /Length 5151 >> stream @@ -17378,30 +17363,30 @@ BT ET endstream endobj -1493 0 obj << +1492 0 obj << /Type /Page -/Contents 1494 0 R -/Resources 1492 0 R +/Contents 1493 0 R +/Resources 1491 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1477 0 R +/Parent 1476 0 R >> endobj -1495 0 obj << -/D [1493 0 R /XYZ 99.895 740.998 null] +1494 0 obj << +/D [1492 0 R /XYZ 99.895 740.998 null] >> endobj 422 0 obj << -/D [1493 0 R /XYZ 99.895 697.37 null] +/D [1492 0 R /XYZ 99.895 697.37 null] >> endobj -1496 0 obj << -/D [1493 0 R /XYZ 99.895 247.391 null] +1495 0 obj << +/D [1492 0 R /XYZ 99.895 247.391 null] >> endobj -1497 0 obj << -/D [1493 0 R /XYZ 99.895 213.573 null] +1496 0 obj << +/D [1492 0 R /XYZ 99.895 213.573 null] >> endobj -1492 0 obj << +1491 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1500 0 obj << +1499 0 obj << /Length 5183 >> stream @@ -17459,30 +17444,30 @@ BT ET endstream endobj -1499 0 obj << +1498 0 obj << /Type /Page -/Contents 1500 0 R -/Resources 1498 0 R +/Contents 1499 0 R +/Resources 1497 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1477 0 R +/Parent 1476 0 R >> endobj -1501 0 obj << -/D [1499 0 R /XYZ 150.705 740.998 null] +1500 0 obj << +/D [1498 0 R /XYZ 150.705 740.998 null] >> endobj 426 0 obj << -/D [1499 0 R /XYZ 150.705 697.37 null] +/D [1498 0 R /XYZ 150.705 697.37 null] >> endobj -1502 0 obj << -/D [1499 0 R /XYZ 150.705 247.391 null] +1501 0 obj << +/D [1498 0 R /XYZ 150.705 247.391 null] >> endobj -1503 0 obj << -/D [1499 0 R /XYZ 150.705 213.573 null] +1502 0 obj << +/D [1498 0 R /XYZ 150.705 213.573 null] >> endobj -1498 0 obj << +1497 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1506 0 obj << +1505 0 obj << /Length 5239 >> stream @@ -17540,30 +17525,30 @@ BT ET endstream endobj -1505 0 obj << +1504 0 obj << /Type /Page -/Contents 1506 0 R -/Resources 1504 0 R +/Contents 1505 0 R +/Resources 1503 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1510 0 R +/Parent 1509 0 R >> endobj -1507 0 obj << -/D [1505 0 R /XYZ 99.895 740.998 null] +1506 0 obj << +/D [1504 0 R /XYZ 99.895 740.998 null] >> endobj 430 0 obj << -/D [1505 0 R /XYZ 99.895 697.37 null] +/D [1504 0 R /XYZ 99.895 697.37 null] >> endobj -1508 0 obj << -/D [1505 0 R /XYZ 99.895 235.436 null] +1507 0 obj << +/D [1504 0 R /XYZ 99.895 235.436 null] >> endobj -1509 0 obj << -/D [1505 0 R /XYZ 99.895 201.618 null] +1508 0 obj << +/D [1504 0 R /XYZ 99.895 201.618 null] >> endobj -1504 0 obj << +1503 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1513 0 obj << +1512 0 obj << /Length 5273 >> stream @@ -17621,30 +17606,30 @@ BT ET endstream endobj -1512 0 obj << +1511 0 obj << /Type /Page -/Contents 1513 0 R -/Resources 1511 0 R +/Contents 1512 0 R +/Resources 1510 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1510 0 R +/Parent 1509 0 R >> endobj -1514 0 obj << -/D [1512 0 R /XYZ 150.705 740.998 null] +1513 0 obj << +/D [1511 0 R /XYZ 150.705 740.998 null] >> endobj 434 0 obj << -/D [1512 0 R /XYZ 150.705 697.37 null] +/D [1511 0 R /XYZ 150.705 697.37 null] >> endobj -1515 0 obj << -/D [1512 0 R /XYZ 150.705 235.436 null] +1514 0 obj << +/D [1511 0 R /XYZ 150.705 235.436 null] >> endobj -1516 0 obj << -/D [1512 0 R /XYZ 150.705 201.618 null] +1515 0 obj << +/D [1511 0 R /XYZ 150.705 201.618 null] >> endobj -1511 0 obj << +1510 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F14 737 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1519 0 obj << +1518 0 obj << /Length 5346 >> stream @@ -17699,27 +17684,27 @@ BT ET endstream endobj -1518 0 obj << +1517 0 obj << /Type /Page -/Contents 1519 0 R -/Resources 1517 0 R +/Contents 1518 0 R +/Resources 1516 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1510 0 R +/Parent 1509 0 R >> endobj -1520 0 obj << -/D [1518 0 R /XYZ 99.895 740.998 null] +1519 0 obj << +/D [1517 0 R /XYZ 99.895 740.998 null] >> endobj 438 0 obj << -/D [1518 0 R /XYZ 99.895 697.37 null] +/D [1517 0 R /XYZ 99.895 697.37 null] >> endobj -1521 0 obj << -/D [1518 0 R /XYZ 99.895 223.48 null] +1520 0 obj << +/D [1517 0 R /XYZ 99.895 223.48 null] >> endobj -1517 0 obj << +1516 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1524 0 obj << +1523 0 obj << /Length 5364 >> stream @@ -17773,27 +17758,27 @@ BT ET endstream endobj -1523 0 obj << +1522 0 obj << /Type /Page -/Contents 1524 0 R -/Resources 1522 0 R +/Contents 1523 0 R +/Resources 1521 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1510 0 R +/Parent 1509 0 R >> endobj -1525 0 obj << -/D [1523 0 R /XYZ 150.705 740.998 null] +1524 0 obj << +/D [1522 0 R /XYZ 150.705 740.998 null] >> endobj 442 0 obj << -/D [1523 0 R /XYZ 150.705 697.37 null] +/D [1522 0 R /XYZ 150.705 697.37 null] >> endobj -1526 0 obj << -/D [1523 0 R /XYZ 150.705 223.48 null] +1525 0 obj << +/D [1522 0 R /XYZ 150.705 223.48 null] >> endobj -1522 0 obj << +1521 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F8 534 0 R /F27 533 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1531 0 obj << +1530 0 obj << /Length 6381 >> stream @@ -17815,39 +17800,39 @@ BT ET endstream endobj -1530 0 obj << +1529 0 obj << /Type /Page -/Contents 1531 0 R -/Resources 1529 0 R +/Contents 1530 0 R +/Resources 1528 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1510 0 R -/Annots [ 1527 0 R 1528 0 R ] +/Parent 1509 0 R +/Annots [ 1526 0 R 1527 0 R ] >> endobj -1527 0 obj << +1526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.477 501.77 152.451 512.895] /Subtype /Link /A << /S /GoTo /D (figure.9) >> >> endobj -1528 0 obj << +1527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.734 346.63 158.689 357.478] /Subtype /Link /A << /S /GoTo /D (figure.10) >> >> endobj -1532 0 obj << -/D [1530 0 R /XYZ 99.895 740.998 null] +1531 0 obj << +/D [1529 0 R /XYZ 99.895 740.998 null] >> endobj 446 0 obj << -/D [1530 0 R /XYZ 99.895 716.092 null] +/D [1529 0 R /XYZ 99.895 716.092 null] >> endobj -1529 0 obj << +1528 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1537 0 obj << +1536 0 obj << /Length 7110 >> stream @@ -17998,102 +17983,102 @@ BT ET endstream endobj -1536 0 obj << +1535 0 obj << /Type /Page -/Contents 1537 0 R -/Resources 1535 0 R +/Contents 1536 0 R +/Resources 1534 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1510 0 R +/Parent 1509 0 R +>> endobj +1537 0 obj << +/D [1535 0 R /XYZ 150.705 740.998 null] >> endobj 1538 0 obj << -/D [1536 0 R /XYZ 150.705 740.998 null] +/D [1535 0 R /XYZ 159.073 687.737 null] >> endobj 1539 0 obj << -/D [1536 0 R /XYZ 159.073 687.737 null] +/D [1535 0 R /XYZ 159.073 691.025 null] >> endobj -1540 0 obj << -/D [1536 0 R /XYZ 159.073 691.025 null] +1541 0 obj << +/D [1535 0 R /XYZ 159.073 680.066 null] >> endobj 1542 0 obj << -/D [1536 0 R /XYZ 159.073 680.066 null] +/D [1535 0 R /XYZ 159.073 669.107 null] >> endobj 1543 0 obj << -/D [1536 0 R /XYZ 159.073 669.107 null] +/D [1535 0 R /XYZ 159.073 658.148 null] >> endobj 1544 0 obj << -/D [1536 0 R /XYZ 159.073 658.148 null] +/D [1535 0 R /XYZ 159.073 647.189 null] >> endobj 1545 0 obj << -/D [1536 0 R /XYZ 159.073 647.189 null] +/D [1535 0 R /XYZ 159.073 636.23 null] >> endobj 1546 0 obj << -/D [1536 0 R /XYZ 159.073 636.23 null] +/D [1535 0 R /XYZ 159.073 625.271 null] >> endobj 1547 0 obj << -/D [1536 0 R /XYZ 159.073 625.271 null] +/D [1535 0 R /XYZ 159.073 614.312 null] >> endobj 1548 0 obj << -/D [1536 0 R /XYZ 159.073 614.312 null] +/D [1535 0 R /XYZ 159.073 603.353 null] >> endobj 1549 0 obj << -/D [1536 0 R /XYZ 159.073 603.353 null] +/D [1535 0 R /XYZ 159.073 592.394 null] >> endobj 1550 0 obj << -/D [1536 0 R /XYZ 159.073 592.394 null] +/D [1535 0 R /XYZ 159.073 581.436 null] >> endobj 1551 0 obj << -/D [1536 0 R /XYZ 159.073 581.436 null] +/D [1535 0 R /XYZ 159.073 570.477 null] >> endobj 1552 0 obj << -/D [1536 0 R /XYZ 159.073 570.477 null] +/D [1535 0 R /XYZ 159.073 559.518 null] >> endobj 1553 0 obj << -/D [1536 0 R /XYZ 159.073 559.518 null] +/D [1535 0 R /XYZ 159.073 548.559 null] >> endobj 1554 0 obj << -/D [1536 0 R /XYZ 159.073 548.559 null] +/D [1535 0 R /XYZ 159.073 537.6 null] >> endobj 1555 0 obj << -/D [1536 0 R /XYZ 159.073 537.6 null] +/D [1535 0 R /XYZ 159.073 526.641 null] >> endobj 1556 0 obj << -/D [1536 0 R /XYZ 159.073 526.641 null] +/D [1535 0 R /XYZ 159.073 515.682 null] >> endobj 1557 0 obj << -/D [1536 0 R /XYZ 159.073 515.682 null] +/D [1535 0 R /XYZ 159.073 504.723 null] >> endobj 1558 0 obj << -/D [1536 0 R /XYZ 159.073 504.723 null] +/D [1535 0 R /XYZ 159.073 493.764 null] >> endobj 1559 0 obj << -/D [1536 0 R /XYZ 159.073 493.764 null] +/D [1535 0 R /XYZ 159.073 482.805 null] >> endobj 1560 0 obj << -/D [1536 0 R /XYZ 159.073 482.805 null] +/D [1535 0 R /XYZ 159.073 471.847 null] >> endobj 1561 0 obj << -/D [1536 0 R /XYZ 159.073 471.847 null] +/D [1535 0 R /XYZ 159.073 460.888 null] >> endobj 1562 0 obj << -/D [1536 0 R /XYZ 159.073 460.888 null] +/D [1535 0 R /XYZ 159.073 449.929 null] >> endobj 1563 0 obj << -/D [1536 0 R /XYZ 159.073 449.929 null] +/D [1535 0 R /XYZ 159.073 438.97 null] >> endobj -1564 0 obj << -/D [1536 0 R /XYZ 159.073 438.97 null] +1532 0 obj << +/D [1535 0 R /XYZ 194.261 394.492 null] >> endobj 1533 0 obj << -/D [1536 0 R /XYZ 194.261 394.492 null] +/D [1535 0 R /XYZ 200.884 149.223 null] >> endobj 1534 0 obj << -/D [1536 0 R /XYZ 200.884 149.223 null] ->> endobj -1535 0 obj << -/Font << /F52 1541 0 R /F45 1112 0 R /F8 534 0 R /F30 734 0 R >> +/Font << /F52 1540 0 R /F45 1111 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1567 0 obj << +1566 0 obj << /Length 3725 >> stream @@ -18204,30 +18189,30 @@ BT ET endstream endobj -1566 0 obj << +1565 0 obj << /Type /Page -/Contents 1567 0 R -/Resources 1565 0 R +/Contents 1566 0 R +/Resources 1564 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1571 0 R +/Parent 1570 0 R >> endobj -1568 0 obj << -/D [1566 0 R /XYZ 99.895 740.998 null] +1567 0 obj << +/D [1565 0 R /XYZ 99.895 740.998 null] >> endobj 450 0 obj << -/D [1566 0 R /XYZ 99.895 644.457 null] +/D [1565 0 R /XYZ 99.895 644.457 null] >> endobj -1569 0 obj << -/D [1566 0 R /XYZ 99.895 638.48 null] +1568 0 obj << +/D [1565 0 R /XYZ 99.895 638.48 null] >> endobj -1570 0 obj << -/D [1566 0 R /XYZ 99.895 638.48 null] +1569 0 obj << +/D [1565 0 R /XYZ 99.895 638.48 null] >> endobj -1565 0 obj << +1564 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1574 0 obj << +1573 0 obj << /Length 1400 >> stream @@ -18270,30 +18255,30 @@ BT ET endstream endobj -1573 0 obj << +1572 0 obj << /Type /Page -/Contents 1574 0 R -/Resources 1572 0 R +/Contents 1573 0 R +/Resources 1571 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1571 0 R +/Parent 1570 0 R >> endobj -1575 0 obj << -/D [1573 0 R /XYZ 150.705 740.998 null] +1574 0 obj << +/D [1572 0 R /XYZ 150.705 740.998 null] >> endobj 454 0 obj << -/D [1573 0 R /XYZ 150.705 644.457 null] +/D [1572 0 R /XYZ 150.705 644.457 null] >> endobj -1576 0 obj << -/D [1573 0 R /XYZ 150.705 638.48 null] +1575 0 obj << +/D [1572 0 R /XYZ 150.705 638.48 null] >> endobj -1577 0 obj << -/D [1573 0 R /XYZ 150.705 638.48 null] +1576 0 obj << +/D [1572 0 R /XYZ 150.705 638.48 null] >> endobj -1572 0 obj << +1571 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1580 0 obj << +1579 0 obj << /Length 1631 >> stream @@ -18350,30 +18335,30 @@ BT ET endstream endobj -1579 0 obj << +1578 0 obj << /Type /Page -/Contents 1580 0 R -/Resources 1578 0 R +/Contents 1579 0 R +/Resources 1577 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1571 0 R +/Parent 1570 0 R >> endobj -1581 0 obj << -/D [1579 0 R /XYZ 99.895 740.998 null] +1580 0 obj << +/D [1578 0 R /XYZ 99.895 740.998 null] >> endobj 458 0 obj << -/D [1579 0 R /XYZ 99.895 641.668 null] +/D [1578 0 R /XYZ 99.895 641.668 null] >> endobj -1582 0 obj << -/D [1579 0 R /XYZ 99.895 635.69 null] +1581 0 obj << +/D [1578 0 R /XYZ 99.895 635.69 null] >> endobj -1583 0 obj << -/D [1579 0 R /XYZ 99.895 638.48 null] +1582 0 obj << +/D [1578 0 R /XYZ 99.895 638.48 null] >> endobj -1578 0 obj << +1577 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1586 0 obj << +1585 0 obj << /Length 2106 >> stream @@ -18444,30 +18429,30 @@ BT ET endstream endobj -1585 0 obj << +1584 0 obj << /Type /Page -/Contents 1586 0 R -/Resources 1584 0 R +/Contents 1585 0 R +/Resources 1583 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1571 0 R +/Parent 1570 0 R >> endobj -1587 0 obj << -/D [1585 0 R /XYZ 150.705 740.998 null] +1586 0 obj << +/D [1584 0 R /XYZ 150.705 740.998 null] >> endobj 462 0 obj << -/D [1585 0 R /XYZ 150.705 641.668 null] +/D [1584 0 R /XYZ 150.705 641.668 null] >> endobj -1588 0 obj << -/D [1585 0 R /XYZ 150.705 635.69 null] +1587 0 obj << +/D [1584 0 R /XYZ 150.705 635.69 null] >> endobj -1589 0 obj << -/D [1585 0 R /XYZ 150.705 638.48 null] +1588 0 obj << +/D [1584 0 R /XYZ 150.705 638.48 null] >> endobj -1584 0 obj << +1583 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1592 0 obj << +1591 0 obj << /Length 525 >> stream @@ -18481,24 +18466,24 @@ BT ET endstream endobj -1591 0 obj << +1590 0 obj << /Type /Page -/Contents 1592 0 R -/Resources 1590 0 R +/Contents 1591 0 R +/Resources 1589 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1571 0 R +/Parent 1570 0 R >> endobj -1593 0 obj << -/D [1591 0 R /XYZ 99.895 740.998 null] +1592 0 obj << +/D [1590 0 R /XYZ 99.895 740.998 null] >> endobj 466 0 obj << -/D [1591 0 R /XYZ 99.895 716.092 null] +/D [1590 0 R /XYZ 99.895 716.092 null] >> endobj -1590 0 obj << +1589 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1597 0 obj << +1596 0 obj << /Length 4778 >> stream @@ -18580,38 +18565,38 @@ BT ET endstream endobj -1596 0 obj << +1595 0 obj << /Type /Page -/Contents 1597 0 R -/Resources 1595 0 R +/Contents 1596 0 R +/Resources 1594 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1571 0 R -/Annots [ 1594 0 R ] +/Parent 1570 0 R +/Annots [ 1593 0 R ] >> endobj -1594 0 obj << +1593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 449.411 423.049 460.536] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1598 0 obj << -/D [1596 0 R /XYZ 150.705 740.998 null] +1597 0 obj << +/D [1595 0 R /XYZ 150.705 740.998 null] >> endobj 470 0 obj << -/D [1596 0 R /XYZ 150.705 683.422 null] +/D [1595 0 R /XYZ 150.705 683.422 null] >> endobj -1599 0 obj << -/D [1596 0 R /XYZ 150.705 677.445 null] +1598 0 obj << +/D [1595 0 R /XYZ 150.705 677.445 null] >> endobj -1600 0 obj << -/D [1596 0 R /XYZ 150.705 679.769 null] +1599 0 obj << +/D [1595 0 R /XYZ 150.705 679.769 null] >> endobj -1595 0 obj << +1594 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1604 0 obj << +1603 0 obj << /Length 5258 >> stream @@ -18697,38 +18682,38 @@ BT ET endstream endobj -1603 0 obj << +1602 0 obj << /Type /Page -/Contents 1604 0 R -/Resources 1602 0 R +/Contents 1603 0 R +/Resources 1601 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1608 0 R -/Annots [ 1601 0 R ] +/Parent 1607 0 R +/Annots [ 1600 0 R ] >> endobj -1601 0 obj << +1600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 582.91 372.239 594.035] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1605 0 obj << -/D [1603 0 R /XYZ 99.895 740.998 null] +1604 0 obj << +/D [1602 0 R /XYZ 99.895 740.998 null] >> endobj 474 0 obj << -/D [1603 0 R /XYZ 99.895 683.422 null] +/D [1602 0 R /XYZ 99.895 683.422 null] >> endobj -1606 0 obj << -/D [1603 0 R /XYZ 99.895 677.445 null] +1605 0 obj << +/D [1602 0 R /XYZ 99.895 677.445 null] >> endobj -1607 0 obj << -/D [1603 0 R /XYZ 99.895 679.769 null] +1606 0 obj << +/D [1602 0 R /XYZ 99.895 679.769 null] >> endobj -1602 0 obj << +1601 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1612 0 obj << +1611 0 obj << /Length 3654 >> stream @@ -18816,38 +18801,38 @@ BT ET endstream endobj -1611 0 obj << +1610 0 obj << /Type /Page -/Contents 1612 0 R -/Resources 1610 0 R +/Contents 1611 0 R +/Resources 1609 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1608 0 R -/Annots [ 1609 0 R ] +/Parent 1607 0 R +/Annots [ 1608 0 R ] >> endobj -1609 0 obj << +1608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 449.411 423.049 460.536] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1613 0 obj << -/D [1611 0 R /XYZ 150.705 740.998 null] +1612 0 obj << +/D [1610 0 R /XYZ 150.705 740.998 null] >> endobj 478 0 obj << -/D [1611 0 R /XYZ 150.705 685.747 null] +/D [1610 0 R /XYZ 150.705 685.747 null] >> endobj -1614 0 obj << -/D [1611 0 R /XYZ 150.705 679.769 null] +1613 0 obj << +/D [1610 0 R /XYZ 150.705 679.769 null] >> endobj -1615 0 obj << -/D [1611 0 R /XYZ 150.705 679.769 null] +1614 0 obj << +/D [1610 0 R /XYZ 150.705 679.769 null] >> endobj -1610 0 obj << +1609 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1618 0 obj << +1617 0 obj << /Length 3705 >> stream @@ -18917,30 +18902,30 @@ BT ET endstream endobj -1617 0 obj << +1616 0 obj << /Type /Page -/Contents 1618 0 R -/Resources 1616 0 R +/Contents 1617 0 R +/Resources 1615 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1608 0 R +/Parent 1607 0 R >> endobj -1619 0 obj << -/D [1617 0 R /XYZ 99.895 740.998 null] +1618 0 obj << +/D [1616 0 R /XYZ 99.895 740.998 null] >> endobj 482 0 obj << -/D [1617 0 R /XYZ 99.895 685.747 null] +/D [1616 0 R /XYZ 99.895 685.747 null] >> endobj -1620 0 obj << -/D [1617 0 R /XYZ 99.895 679.769 null] +1619 0 obj << +/D [1616 0 R /XYZ 99.895 679.769 null] >> endobj -1621 0 obj << -/D [1617 0 R /XYZ 99.895 679.769 null] +1620 0 obj << +/D [1616 0 R /XYZ 99.895 679.769 null] >> endobj -1616 0 obj << +1615 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1625 0 obj << +1624 0 obj << /Length 4185 >> stream @@ -19032,38 +19017,38 @@ BT ET endstream endobj -1624 0 obj << +1623 0 obj << /Type /Page -/Contents 1625 0 R -/Resources 1623 0 R +/Contents 1624 0 R +/Resources 1622 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1608 0 R -/Annots [ 1622 0 R ] +/Parent 1607 0 R +/Annots [ 1621 0 R ] >> endobj -1622 0 obj << +1621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 582.91 423.049 594.035] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1626 0 obj << -/D [1624 0 R /XYZ 150.705 740.998 null] +1625 0 obj << +/D [1623 0 R /XYZ 150.705 740.998 null] >> endobj 486 0 obj << -/D [1624 0 R /XYZ 150.705 685.747 null] +/D [1623 0 R /XYZ 150.705 685.747 null] >> endobj -1627 0 obj << -/D [1624 0 R /XYZ 150.705 679.769 null] +1626 0 obj << +/D [1623 0 R /XYZ 150.705 679.769 null] >> endobj -1628 0 obj << -/D [1624 0 R /XYZ 150.705 679.769 null] +1627 0 obj << +/D [1623 0 R /XYZ 150.705 679.769 null] >> endobj -1623 0 obj << +1622 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1631 0 obj << +1630 0 obj << /Length 3381 >> stream @@ -19133,30 +19118,30 @@ BT ET endstream endobj -1630 0 obj << +1629 0 obj << /Type /Page -/Contents 1631 0 R -/Resources 1629 0 R +/Contents 1630 0 R +/Resources 1628 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1608 0 R +/Parent 1607 0 R >> endobj -1632 0 obj << -/D [1630 0 R /XYZ 99.895 740.998 null] +1631 0 obj << +/D [1629 0 R /XYZ 99.895 740.998 null] >> endobj 490 0 obj << -/D [1630 0 R /XYZ 99.895 685.747 null] +/D [1629 0 R /XYZ 99.895 685.747 null] >> endobj -1633 0 obj << -/D [1630 0 R /XYZ 99.895 679.769 null] +1632 0 obj << +/D [1629 0 R /XYZ 99.895 679.769 null] >> endobj -1634 0 obj << -/D [1630 0 R /XYZ 99.895 679.769 null] +1633 0 obj << +/D [1629 0 R /XYZ 99.895 679.769 null] >> endobj -1629 0 obj << +1628 0 obj << /Font << /F16 531 0 R /F27 533 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1637 0 obj << +1636 0 obj << /Length 912 >> stream @@ -19178,24 +19163,24 @@ BT ET endstream endobj -1636 0 obj << +1635 0 obj << /Type /Page -/Contents 1637 0 R -/Resources 1635 0 R +/Contents 1636 0 R +/Resources 1634 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1608 0 R +/Parent 1607 0 R >> endobj -1638 0 obj << -/D [1636 0 R /XYZ 150.705 740.998 null] +1637 0 obj << +/D [1635 0 R /XYZ 150.705 740.998 null] >> endobj 494 0 obj << -/D [1636 0 R /XYZ 150.705 716.092 null] +/D [1635 0 R /XYZ 150.705 716.092 null] >> endobj -1635 0 obj << +1634 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F14 737 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1643 0 obj << +1642 0 obj << /Length 4642 >> stream @@ -19284,42 +19269,42 @@ BT ET endstream endobj -1642 0 obj << +1641 0 obj << /Type /Page -/Contents 1643 0 R -/Resources 1641 0 R +/Contents 1642 0 R +/Resources 1640 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1646 0 R -/Annots [ 1639 0 R 1640 0 R ] +/Parent 1645 0 R +/Annots [ 1638 0 R 1639 0 R ] >> endobj -1639 0 obj << +1638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.343 511.179 388.401 522.304] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1640 0 obj << +1639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.831 421.792 175.293 433.832] /Subtype /Link /A << /S /GoTo /D (Hfootnote.3) >> >> endobj -1644 0 obj << -/D [1642 0 R /XYZ 99.895 740.998 null] +1643 0 obj << +/D [1641 0 R /XYZ 99.895 740.998 null] >> endobj 498 0 obj << -/D [1642 0 R /XYZ 99.895 697.37 null] +/D [1641 0 R /XYZ 99.895 697.37 null] >> endobj -1645 0 obj << -/D [1642 0 R /XYZ 115.138 129.79 null] +1644 0 obj << +/D [1641 0 R /XYZ 115.138 129.79 null] >> endobj -1641 0 obj << +1640 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R /F11 719 0 R /F7 735 0 R /F32 738 0 R /F31 740 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1653 0 obj << +1652 0 obj << /Length 7157 >> stream @@ -19514,53 +19499,53 @@ BT ET endstream endobj -1652 0 obj << +1651 0 obj << /Type /Page -/Contents 1653 0 R -/Resources 1651 0 R +/Contents 1652 0 R +/Resources 1650 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1646 0 R -/Annots [ 1647 0 R 1648 0 R 1649 0 R 1650 0 R ] +/Parent 1645 0 R +/Annots [ 1646 0 R 1647 0 R 1648 0 R 1649 0 R ] >> endobj -1647 0 obj << +1646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.666 586.895 446.184 598.02] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1648 0 obj << +1647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.73 519.15 514.788 530.274] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1649 0 obj << +1648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.298 451.404 489.356 462.529] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1650 0 obj << +1649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.385 226.248 436.443 237.373] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1654 0 obj << -/D [1652 0 R /XYZ 150.705 740.998 null] +1653 0 obj << +/D [1651 0 R /XYZ 150.705 740.998 null] >> endobj 502 0 obj << -/D [1652 0 R /XYZ 150.705 697.37 null] +/D [1651 0 R /XYZ 150.705 697.37 null] >> endobj -1651 0 obj << +1650 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1661 0 obj << +1660 0 obj << /Length 5988 >> stream @@ -19715,53 +19700,53 @@ BT ET endstream endobj -1660 0 obj << +1659 0 obj << /Type /Page -/Contents 1661 0 R -/Resources 1659 0 R +/Contents 1660 0 R +/Resources 1658 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1646 0 R -/Annots [ 1655 0 R 1656 0 R 1657 0 R 1658 0 R ] +/Parent 1645 0 R +/Annots [ 1654 0 R 1655 0 R 1656 0 R 1657 0 R ] >> endobj -1655 0 obj << +1654 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.343 574.94 388.401 586.065] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1656 0 obj << +1655 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.301 519.15 423.355 530.274] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1657 0 obj << +1656 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.885 463.359 391.943 474.484] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1658 0 obj << +1657 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.301 274.069 423.355 285.194] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1662 0 obj << -/D [1660 0 R /XYZ 99.895 740.998 null] +1661 0 obj << +/D [1659 0 R /XYZ 99.895 740.998 null] >> endobj 506 0 obj << -/D [1660 0 R /XYZ 99.895 697.37 null] +/D [1659 0 R /XYZ 99.895 697.37 null] >> endobj -1659 0 obj << +1658 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1666 0 obj << +1665 0 obj << /Length 1996 >> stream @@ -19818,32 +19803,32 @@ BT ET endstream endobj -1665 0 obj << +1664 0 obj << /Type /Page -/Contents 1666 0 R -/Resources 1664 0 R +/Contents 1665 0 R +/Resources 1663 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1646 0 R -/Annots [ 1663 0 R ] +/Parent 1645 0 R +/Annots [ 1662 0 R ] >> endobj -1663 0 obj << +1662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.153 560.993 439.211 572.118] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1667 0 obj << -/D [1665 0 R /XYZ 150.705 740.998 null] +1666 0 obj << +/D [1664 0 R /XYZ 150.705 740.998 null] >> endobj 510 0 obj << -/D [1665 0 R /XYZ 150.705 685.747 null] +/D [1664 0 R /XYZ 150.705 685.747 null] >> endobj -1664 0 obj << +1663 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1670 0 obj << +1669 0 obj << /Length 989 >> stream @@ -19882,24 +19867,24 @@ BT ET endstream endobj -1669 0 obj << +1668 0 obj << /Type /Page -/Contents 1670 0 R -/Resources 1668 0 R +/Contents 1669 0 R +/Resources 1667 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1646 0 R +/Parent 1645 0 R >> endobj -1671 0 obj << -/D [1669 0 R /XYZ 99.895 740.998 null] +1670 0 obj << +/D [1668 0 R /XYZ 99.895 740.998 null] >> endobj 514 0 obj << -/D [1669 0 R /XYZ 99.895 697.37 null] +/D [1668 0 R /XYZ 99.895 697.37 null] >> endobj -1668 0 obj << +1667 0 obj << /Font << /F16 531 0 R /F30 734 0 R /F27 533 0 R /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1674 0 obj << +1673 0 obj << /Length 608 >> stream @@ -19913,24 +19898,24 @@ BT ET endstream endobj -1673 0 obj << +1672 0 obj << /Type /Page -/Contents 1674 0 R -/Resources 1672 0 R +/Contents 1673 0 R +/Resources 1671 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1646 0 R +/Parent 1645 0 R >> endobj -1675 0 obj << -/D [1673 0 R /XYZ 150.705 740.998 null] +1674 0 obj << +/D [1672 0 R /XYZ 150.705 740.998 null] >> endobj 518 0 obj << -/D [1673 0 R /XYZ 150.705 716.092 null] +/D [1672 0 R /XYZ 150.705 716.092 null] >> endobj -1672 0 obj << +1671 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1682 0 obj << +1681 0 obj << /Length 8495 >> stream @@ -20089,55 +20074,55 @@ BT ET endstream endobj -1681 0 obj << +1680 0 obj << /Type /Page -/Contents 1682 0 R -/Resources 1680 0 R +/Contents 1681 0 R +/Resources 1679 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1687 0 R -/Annots [ 1676 0 R 1677 0 R 1678 0 R ] +/Parent 1686 0 R +/Annots [ 1675 0 R 1676 0 R 1677 0 R ] >> endobj -1676 0 obj << +1675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 250.725 372.239 261.849] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1677 0 obj << +1676 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 183.92 361.779 195.045] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1678 0 obj << +1677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.301 117.115 423.355 128.24] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1683 0 obj << -/D [1681 0 R /XYZ 99.895 740.998 null] +1682 0 obj << +/D [1680 0 R /XYZ 99.895 740.998 null] >> endobj 522 0 obj << -/D [1681 0 R /XYZ 99.895 697.37 null] +/D [1680 0 R /XYZ 99.895 697.37 null] +>> endobj +1683 0 obj << +/D [1680 0 R /XYZ 99.895 525.106 null] >> endobj 1684 0 obj << -/D [1681 0 R /XYZ 99.895 525.106 null] +/D [1680 0 R /XYZ 99.895 525.106 null] >> endobj 1685 0 obj << -/D [1681 0 R /XYZ 99.895 525.106 null] +/D [1680 0 R /XYZ 99.895 513.151 null] >> endobj -1686 0 obj << -/D [1681 0 R /XYZ 99.895 513.151 null] ->> endobj -1680 0 obj << +1679 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F11 719 0 R /F14 737 0 R /F10 736 0 R /F7 735 0 R /F27 533 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1692 0 obj << +1691 0 obj << /Length 6690 >> stream @@ -20260,43 +20245,43 @@ BT ET endstream endobj -1691 0 obj << +1690 0 obj << /Type /Page -/Contents 1692 0 R -/Resources 1690 0 R +/Contents 1691 0 R +/Resources 1689 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1687 0 R -/Annots [ 1679 0 R 1688 0 R 1689 0 R ] +/Parent 1686 0 R +/Annots [ 1678 0 R 1687 0 R 1688 0 R ] >> endobj -1679 0 obj << +1678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [398.111 655.098 474.165 666.223] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1688 0 obj << +1687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 520.602 412.588 531.727] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1689 0 obj << +1688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [398.111 117.115 474.165 128.24] /Subtype /Link /A << /S /GoTo /D (vdata) >> >> endobj -1693 0 obj << -/D [1691 0 R /XYZ 150.705 740.998 null] +1692 0 obj << +/D [1690 0 R /XYZ 150.705 740.998 null] >> endobj -1690 0 obj << +1689 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F30 734 0 R /F11 719 0 R /F14 737 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1696 0 obj << +1695 0 obj << /Length 2478 >> stream @@ -20325,21 +20310,21 @@ BT ET endstream endobj -1695 0 obj << +1694 0 obj << /Type /Page -/Contents 1696 0 R -/Resources 1694 0 R +/Contents 1695 0 R +/Resources 1693 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1687 0 R +/Parent 1686 0 R >> endobj -1697 0 obj << -/D [1695 0 R /XYZ 99.895 740.998 null] +1696 0 obj << +/D [1694 0 R /XYZ 99.895 740.998 null] >> endobj -1694 0 obj << +1693 0 obj << /Font << /F27 533 0 R /F8 534 0 R /F11 719 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1700 0 obj << +1699 0 obj << /Length 80 >> stream @@ -20352,21 +20337,21 @@ BT ET endstream endobj -1699 0 obj << +1698 0 obj << /Type /Page -/Contents 1700 0 R -/Resources 1698 0 R +/Contents 1699 0 R +/Resources 1697 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1687 0 R +/Parent 1686 0 R >> endobj -1701 0 obj << -/D [1699 0 R /XYZ 150.705 740.998 null] +1700 0 obj << +/D [1698 0 R /XYZ 150.705 740.998 null] >> endobj -1698 0 obj << +1697 0 obj << /Font << /F8 534 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1704 0 obj << +1703 0 obj << /Length 7014 >> stream @@ -20428,60 +20413,60 @@ BT ET endstream endobj -1703 0 obj << +1702 0 obj << /Type /Page -/Contents 1704 0 R -/Resources 1702 0 R +/Contents 1703 0 R +/Resources 1701 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1687 0 R +/Parent 1686 0 R >> endobj -1705 0 obj << -/D [1703 0 R /XYZ 99.895 740.998 null] +1704 0 obj << +/D [1702 0 R /XYZ 99.895 740.998 null] >> endobj -1706 0 obj << -/D [1703 0 R /XYZ 99.895 696.263 null] +1705 0 obj << +/D [1702 0 R /XYZ 99.895 696.263 null] >> endobj 703 0 obj << -/D [1703 0 R /XYZ 99.895 699.619 null] +/D [1702 0 R /XYZ 99.895 699.619 null] >> endobj -1707 0 obj << -/D [1703 0 R /XYZ 99.895 643.15 null] +1706 0 obj << +/D [1702 0 R /XYZ 99.895 643.15 null] >> endobj 756 0 obj << -/D [1703 0 R /XYZ 99.895 588.618 null] +/D [1702 0 R /XYZ 99.895 588.618 null] >> endobj 755 0 obj << -/D [1703 0 R /XYZ 99.895 534.087 null] +/D [1702 0 R /XYZ 99.895 534.087 null] >> endobj 709 0 obj << -/D [1703 0 R /XYZ 99.895 479.555 null] +/D [1702 0 R /XYZ 99.895 479.555 null] >> endobj 710 0 obj << -/D [1703 0 R /XYZ 99.895 436.978 null] +/D [1702 0 R /XYZ 99.895 436.978 null] >> endobj 727 0 obj << -/D [1703 0 R /XYZ 99.895 394.402 null] +/D [1702 0 R /XYZ 99.895 394.402 null] >> endobj 706 0 obj << -/D [1703 0 R /XYZ 99.895 351.272 null] +/D [1702 0 R /XYZ 99.895 351.272 null] >> endobj 707 0 obj << -/D [1703 0 R /XYZ 99.895 308.696 null] +/D [1702 0 R /XYZ 99.895 308.696 null] >> endobj -1708 0 obj << -/D [1703 0 R /XYZ 99.895 266.119 null] +1707 0 obj << +/D [1702 0 R /XYZ 99.895 266.119 null] >> endobj 702 0 obj << -/D [1703 0 R /XYZ 99.895 223.543 null] +/D [1702 0 R /XYZ 99.895 223.543 null] >> endobj -1709 0 obj << -/D [1703 0 R /XYZ 99.895 180.966 null] +1708 0 obj << +/D [1702 0 R /XYZ 99.895 180.966 null] >> endobj -1702 0 obj << +1701 0 obj << /Font << /F16 531 0 R /F8 534 0 R /F17 699 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1712 0 obj << +1711 0 obj << /Length 3124 >> stream @@ -20522,93 +20507,93 @@ BT ET endstream endobj -1711 0 obj << +1710 0 obj << /Type /Page -/Contents 1712 0 R -/Resources 1710 0 R +/Contents 1711 0 R +/Resources 1709 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1687 0 R +/Parent 1686 0 R >> endobj -1713 0 obj << -/D [1711 0 R /XYZ 150.705 740.998 null] +1712 0 obj << +/D [1710 0 R /XYZ 150.705 740.998 null] >> endobj 854 0 obj << -/D [1711 0 R /XYZ 150.705 716.092 null] +/D [1710 0 R /XYZ 150.705 716.092 null] >> endobj 742 0 obj << -/D [1711 0 R /XYZ 150.705 688.251 null] +/D [1710 0 R /XYZ 150.705 688.251 null] >> endobj 708 0 obj << -/D [1711 0 R /XYZ 150.705 632.184 null] +/D [1710 0 R /XYZ 150.705 632.184 null] >> endobj 705 0 obj << -/D [1711 0 R /XYZ 150.705 590.562 null] +/D [1710 0 R /XYZ 150.705 590.562 null] >> endobj 701 0 obj << -/D [1711 0 R /XYZ 150.705 544.789 null] +/D [1710 0 R /XYZ 150.705 544.789 null] >> endobj 704 0 obj << -/D [1711 0 R /XYZ 150.705 512.909 null] +/D [1710 0 R /XYZ 150.705 512.909 null] >> endobj -1714 0 obj << -/D [1711 0 R /XYZ 150.705 480.475 null] +1713 0 obj << +/D [1710 0 R /XYZ 150.705 480.475 null] >> endobj -1710 0 obj << +1709 0 obj << /Font << /F8 534 0 R /F17 699 0 R /F30 734 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1715 0 obj +1714 0 obj [575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4] endobj -1716 0 obj +1715 0 obj [285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4 456.8] endobj -1717 0 obj +1716 0 obj [892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4 1138.9] endobj -1718 0 obj +1717 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj -1719 0 obj +1718 0 obj [533.6] endobj -1720 0 obj +1719 0 obj [413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8] endobj -1721 0 obj +1720 0 obj [611.1 611.1 611.1] endobj -1722 0 obj +1721 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4] endobj -1723 0 obj +1722 0 obj [339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2] endobj -1724 0 obj +1723 0 obj [569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4] endobj -1725 0 obj +1724 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj -1726 0 obj +1725 0 obj [639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 465.1] endobj -1727 0 obj +1726 0 obj [613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6] endobj -1728 0 obj +1727 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500] endobj -1729 0 obj +1728 0 obj [670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150] endobj -1730 0 obj +1729 0 obj [726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] endobj -1731 0 obj +1730 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125] endobj -1732 0 obj << +1731 0 obj << /Length1 1779 /Length2 12324 /Length3 0 @@ -20764,7 +20749,7 @@ xLE3 AŒô7}ùŠN³7Ž–.Æ~é’Ó¼Úä?qÝêxûUÏÆãjR|¿®´]¿ü?o`«x x VÌTÅ yü¦ g4½øT›e‡ˆlì±L/ÇI´_¿Ð endstream endobj -1733 0 obj << +1732 0 obj << /Type /FontDescriptor /FontName /GKACTJ+CMBX10 /Flags 4 @@ -20776,9 +20761,9 @@ endobj /StemV 114 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/Z/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/ff/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/q/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1732 0 R +/FontFile 1731 0 R >> endobj -1734 0 obj << +1733 0 obj << /Length1 1734 /Length2 10564 /Length3 0 @@ -20908,7 +20893,7 @@ BO ­Œ$*Jü1õ‘J{Y^>y†ˆKÃ=ÿb>'¿M¾9Ì|6ðÊN¤ã®ýµì%ÍíWœýÀSù5´öL6Œ_<ûTgÊM3€ìuÆÍ,€\\Co #Ž§Ñ£Gû&òä!=D×*…0DWÙÇÙÏ)@4[ÃZIz1°‹Ö˜y©‹ÄþeRaµi=˜£( Ÿ~7aÙ„¬Üæ<¢ÞÓfë@ÇJ†,˜ì^3Ç«\`D•¦€Úþ²-@ÎÒ‡)e]R³•YÖË&–½ÐÞIÆŒ½OW,aëh俯Ԯb:âôºá÷b€ðHU65uC(½"ÂmÙKxz·˜²›èMtì¯xpÙ§èlª‘¹\€7”S9žcЬjuðÀXlØ\‰|f6ƒxD6WYèKr±c]ûŒþ‘)êò Ž÷@Ojñß?цnšiªûJÑ:ˆ{{ž5{b° endstream endobj -1735 0 obj << +1734 0 obj << /Type /FontDescriptor /FontName /GBHFLB+CMBX12 /Flags 4 @@ -20920,9 +20905,9 @@ endobj /StemV 109 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/a/b/c/d/e/eight/emdash/endash/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1734 0 R +/FontFile 1733 0 R >> endobj -1736 0 obj << +1735 0 obj << /Length1 957 /Length2 3230 /Length3 0 @@ -20980,7 +20965,7 @@ TM $Àsîý5ž¥NfÓ ›‚>¬-^­ŠWÝwîek¯œ©ó$-VËH¨™ëËâÖz:4ø^0A΢,·Z/¦†ª€YCAÇd÷âË»F+aæ+IÅö6ÚG©€ ¥~/Š²Ô¸öVᦴoâUm3b,Ä/¡ŸÛh»)Ô¹öÑe>ÐÍ!ª¼áqkº½W¹ÂéW÷âJRÛ—Å1æ„V€j$¯½X¹YÄfÿÖà ¾3íÖAO`öŸ¥†¸L",ˆ©#ö­SoÔ9Š–ËÐÕ…ãfL%îF$BWF[õ%‘(G™»¢š’1‰+ 0]JäßJíFÎeÜú—P¢tsZy-OšBò ]Q£*Ú–«Ñ•‘1ÙÃúÃvï㥙ˆÜž(Vèח}Ú3y]Ûk]¬¹éeþ|›¿"¼E¯õÄŸæ1ÚL<6I’7"BýÞSw£J½ToÎuFÔYe¹O›xز¦õ¿ 3=âAÀIjÍìgÌôý/Œ>pB”ÓSÂD>ΠÁzV>ì÷üÓTËá~mÄZÂ*1¯D©Xé|eÖˆ61bm”¤‚…@€#JÊ:Ò’ÏFÑ$Û{ß1R6ûÿ³³—D˜ŽâP|šãœ¬óŽ -PæVÍÑëCœ§Ÿ¿¹ D&>IÖÒ°oòé?:|7±¨+ÅIÃå×>´sýíºÎ#{⎗0¥ÈïÈÊôþa¾Ý» ü–ÿä¤*æåü£©÷õΣÔ@#ú^™„Ê…¯0ò^eDô7[ÈËjdogæ%ü‹™Ì3K/Üä=_±Ïƃ€ì,ÑQ'7U„s8ôf¼Ò£9@z$kW@ÈKõâ¨nHae]äI$Md+aÀ¸ t-Êà(U endstream endobj -1737 0 obj << +1736 0 obj << /Type /FontDescriptor /FontName /GNEKJP+CMBX9 /Flags 4 @@ -20992,13 +20977,13 @@ endobj /StemV 117 /XHeight 444 /CharSet (/a/b/c/d/e/f/g/h/i/l/n/o/r/s/t/u) -/FontFile 1736 0 R +/FontFile 1735 0 R >> endobj -1738 0 obj << -/Length1 1397 -/Length2 9610 +1737 0 obj << +/Length1 1382 +/Length2 9380 /Length3 0 -/Length 11007 +/Length 10762 >> stream %!PS-AdobeFont-1.1: CMMI10 1.100 @@ -21014,7 +20999,7 @@ stream /ItalicAngle -14.04 def /isFixedPitch false def end readonly def -/FontName /XOPWSZ+CMMI10 def +/FontName /PUWBWT+CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def @@ -21044,7 +21029,6 @@ dup 101 /e put dup 102 /f put dup 103 /g put dup 62 /greater put -dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put @@ -21072,38 +21056,49 @@ currentfile eexec ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ 1›kÙXž9JS:6ÔV ™ =!™X>¹¸KMîãÑ)9ã!™ ÒI‚}–HWIUöª¡c©l=G¥e°ÂZ¿m>nÁ‡ä°Q‚k°Ð2=”1p·•%R`ùý%ò$ô]ûûÞ÷ÿ‹¿ïc{!®W+8›?v(+ë)Ì0ÓˆÇ!Yah“çtA?HÞ @‹ÆmÎ?á|¹øM X9Õ€Ö¨ˆ#Ù2 é:ùm— ,MZ+²¸Ç’\Ex9YÄn<á¢ðêÄ¿‹›2^FC[Þ`¼T×+ȬµÀ£D¬‡]ǸFF£$¸oØãB!>;A\äT hŽÙÁÒxìh½|5úù«:6Òü;åÏ–UÇ·í§6~åƒkŽ.ìT*{8î¾K¬`yÐ8¬³ÇÉ'—dT|-Q—k«©K©†myñ9 •ª9°ð1 |½ôA¸ÅfŸr ¯(Kõ*)Æ%_ʬñtPû¢`.rY?¼¿Ânrnä®ù{v2¼O_5;\gþÒ>§R¤¥{ïñ×4‰_ -: áØã9pEz–~ÿ„öØGu E¸Ì[Ùn窙ÝÉài9ヽ¤u#=X­&>¿¯Àâø@Q-2fT{0lY+Šáú%d¹¢m¬%däÈBag(ÙÇMÃIônǹp‹†Ft%¦ý³£–V/~äØ@´6!tLø¢:nS&I¶l*Ýøó–äõrÓH7µ Žd?Ü¡PZö¡ú=ßÑúu€ÊíŠÍÛ»3MfMÿ[S•`fpwqÄ%4>ãaLÆÐÔ麵ù­6÷ ¨oéE[Îi “êÕQ2þ”Ýñr*èí¢× ÞAžÌ¾ÑçÓ­{«nžøÜyêc„+²{äÔ¬ñ“ûOTšŒµyÛéUð[ØfÄÉÂX: ´A OÌ}3VÂX>g5Mµ`ò ùî&”ç–Œ^€ûƒA’ÂùE^^ ì.(ŒK^I2ÁÈ4%Õ"ÔRå­’³Ù1JëM¹‰¦_$¤¡@¡¾ê†¨©êg«¸ˆƒm›ç¸Øòó``,%g:~?†¹ænqêâseë“ÇÈ4ÁekïMЮ[oa†j-Eši·ÈÏ ôÀAÞÊõ´=kŠi˜7í [,‹†¯v}œ×ÈÑŽ€65÷ÔÎFƒNØùHXõÇÞ‚üd÷f7d¢> {˜EÐkf‚­ÕÁGÎÕ£­p¨¸§ÖccêvŒ&.‘Äãà?!š˜«¡ÓV½Øbð6‘2’óX2ÌžÓž¾„E&¾¨3¦`óYf6 fÔy£®Q¼]ü»ò V±ß€×aÙEÿ¤Ò(‘8õU`Q&KS2‹rÖÖ_¡¢sE +¦9€¨âŒ¼7ü… l/ŸKLø•s@$¨ñ™_<ÏùOÀ@:iÝ6жDýÚTYb  šn÷v#bÇ#ƒØBŸÙD‰×R>áFRb%]*Ö'@Oûƒ€Fªaúº ¦Žj|y84_p]£©N^§™ÉRn ÷¡úÂõY44ŠòC‡¨~EfÚ —$ØÁa“¿L6ÙìABZ.§&´Á{¥(“ÚoêÇ_­%|„Û,V;ûãšÑ¶˜ÝÄlOƒ;ÌäñG%c7ßø‹ßŸ½›ßRÆÚvS]¿ûQDë2«*Ò!¥Ñ`´K‰+ R!¹~fÓ››NÙPÅÕÆã>»YŸ1ÏS:¤vœ¯œë?/±ÀûÝjŸQx(ÃüXÿöc¶š9”ot¡Ô.F?æ)³ð†ô:#R·àÑÍSÜŠ¼é…,Îw $ýZb‡‘ô¾™Ý‚hÊôÝ)×máPù+8åg½â¯2 TØÉ [íV ¶Mn{ellZK‹&ÖÔãJßS¹ÈGx‹Ž J7µ˜RQƒŽ½TÖüÔ;Ëjå(&üP‘ïž0?˜Ï¹É†=¥R,V -\õñ~é×À)6#`ÀþÚtïBs/íÚgÚEâÚËö=ÊíyT¸•޶‹âg_|Ôæ|ÕÜRÈ­ÛíòH¥~K‡óc×é¹É2"#~µƒXû×°Zqì¼â¼räŠhG'ó-ñO_Ó×U0B®~ò%/~&š\”Ú“']›eWñfbµÊcÖÏûJdÍ‘ŠFA!‘?@›VÙ¸Rn¨Êò“¯ÑÜù©ÉåÓ.VÊŒšp; ð¹à‘~¿»h¤K˜(ëCÚÛâlÙj¬|ÏpÏÝ -@Я° ÃªÆØ¼_êÛ~ ùó"$a “sî¶îò“Þù‘.‡ÑK6à‚6Þe ¾žü3±º`[Ïàt,”œÕHúíµŽhf5鯙þšŽXqJûðvòûóæS~Ô )Ûòq`VþF4Æl7ÊäÕqÛðè·Ô0®[`ròœoÀ˜w;Ò«ÃËb|]zåœêXÞþ‡B(íS”¹ˆ>à2ˆŽ©Z‡^±—•Óý’ˆõmÀå1Ú 5¹Ñ½KPvçÇ.Ö;`7 «BjŸ )6nãÜë.™‚Ž#…SÒ(ªyKíP;§Ò ¯^çÛ½¾/¬¤ñŒi׫’à"a}ÞO˜C‰ã¾Zj¤ÜIšâö?TcË.õ†éðnx‰‰HVк20?rŸÒ ÐHÂQTô¡N”æ³j,ÝI>ß¿ œ¹2CÌ míi{p\‹hk oQº#ÜE³é·†…ëŽBkë±/¤”°œ Ë£,0ªí1¼pY›g®T]á9¥¶as‰-Ôƒ¸§eBæxš½qµûÏ:œŠ7_Ë™#—pcþw€?ͼÂ%Ë}FÐI\ôZóLJ—ˆëÉ·3è3ptFŒœŸÉܚ̖:ɲL[I{‹dÙ7<ëqãÁB¡ö\LØ/¯éŠ…”±1D{ÿ¶šóÓx?6CO"‡Ò‡ãù&«èòÊ}(*W ¦™Ï¦ )‰AëÀl¥¹ç—;©›Z9ôú†œ@œZ ŒÈF‘³cƒsõÚ{W _¸ÄVH·E‡ÉøvÒÆàeŽûIéPÌÎ4d 6 ;ÈÚü7Ú¡?¹ò Šð²®ÛñŽø˜7âžêËÞà¢DçöÀ|Ü™ñl™ n™Œ9ÃZ{}Áûï%ø<Ô›zLŠLÖÈ$é¬;ªŽÀ^ì.ÙàëêÒ|p‚œKpje­Aµi*;¡.²ÜÞ ¤vp£2¯ŒVE ‰…£Öá8¬䛎i’"pf̆\ûîÎø\§ñ•5e›X4ÀF2ÿŸÆº¨Ï·þÙë›4JÓÒ¸DŠ%¬…ŸØÀfWr‹ÐŸ£ª'9—[j;K\áB-ÕæôüLônâçÛWzJl©#ãûUˆ—´c|’/±®ËÑÍÒR"…d¸£`Lym:ô7µ[nì®ÂŽZ/13]B9Ó#˜EK ºÿ Ý3h…v@1ØG–؇•Oæñ/¢õSDÏûrn/¼ÿatÔ0>„Gæ£çUœÐf.À°Â-Åv|¨/°µf"8ÿ#ŽoÙDeÐÙ“3D­ °<áÐá<ÁZé7(é=H«üMÄ_Bj®Œ¥y÷­«Žþ[ÓØËÚíÑEô nmº©¢Ž;ÃJB©ÛN¶ÀÝÙ­FÝ5HtbÖÜ’ïEêsà"Û2b¤k«^„ý5‘ï¼x ónü×S¸RƒàÇìußâCq~êŸÊGè]ô?^ˆ<±¶¨D{smøË“fž6a†ÓA½/qþ^ƒ¸tYÞ¤\óžÙéáÔ2TÖ—/d¬œ‘]u> yJ4àß©3·HoŒçQ$îȯRÌ…Úu¸öIm 6 6_Ž’ÉcWS©mnæÓ‡Ñº½óMúSËõ>sü+™ 803*ºmŽlÏdDZ꣨ëœÎCãÖÖzTW"÷N/ÌÅ| -ϧÀ gµf:æ1ÁCMõAÁRº‰[9ÜÁЇ¨»êÍÜ€—69aë‹›hÓ ZÁŒºYÊ”zÝ÷—‡\/bj ºx)`]r逘âÎGçhäß³¹Ec?F**Íñ£A\ÙCÕ(£Y“ER¢mNó­Æ®éÜÿ+Anƒ5¹È}Ã,®Euè/ã€ïŸØ‰-%]èKñÊÞgÿŒ=BóaÏ‹ÀÈýŸwç«In½©¬/q&‹³Ârk¸‡.Œ§bE:Æ‘ŒrrøæA‘(s:ÒGàaÓNŠAé»þ_BµìQ3¨[ä¿RšaO·gš+º¬Ôùú×sÍ/HÑGÆ×B¼PŸ—ø±èci¥`µu\q K¿ ß©5(5,`ã#¡PâÚ¨}=F¢1‡}(bbª»Þvc“Ûò¸ä¾à´l™2Ÿìz×ÿàbAQVT¼ôBoqHÞy¦™Çô%«‡Íf©è#ÉKR";1÷ð Â{ãsÞZMaÀ„{‡FÔT„älôq|ßÖ¹åu­Vk‹•Ü8 ÃKcCWÒ^]â!Œ§¡m6@éÑ'glW@4:k†ƒ ·wXаªØÛ²éˆÁP‰1ÐY!g½Ðï),Ü°Í ¸)L”H•A¦u¢<«7Éq²UBêö³¤øšÖCßDž « -á[û-)‚±¡ÏuO_Œ3‘‹U°hhßÅemÆ]Ë:认Úöz®ªñ­HäùgW/°MÖ7ê½eÓ,î/¥»wu®8oÖª_+OgÌ]iдWf›Ù/ïÎÈâΑŸ>L›%)ÄBÚÄ#|)sõÞ-° ©aÝKHp¡”áóÖ4ï-b˜Æ´kméf”œáÕ·üpbš% Ë*œîÚ$²„ƒiÄr^ÿ²m§rFñ[º úØ|ú¡W#CAb±Î¼›Ñê„÷‡õS8mnwÆŽQ)²#Úâj»!b8¿ì»ŠÂÖ\SoJ†²ál»…×¥·~ôåOâuº `ÓgF=ð+t”Y»vE¤b ÅÕ=ðÁÀîè™H¯¿Xÿâ”Fô™íw‡Œ“²[ xÒhÄøÌmîD'l—»E§z à/»rUÛšŽu›E_“/Ø3žU$uþ6’•ÐÌ]¿©ŠF²Wpù¿wì½`{6`tŠ®ÒÌÈj·°yik}7"£r޳J…i¼J9$Í?“æÜa›cTÙŠþ˜“ «Å m2óëýw%¬žâF&bMB½¶a:}\ï’ˆ×|u÷.¸bÝQ©9p2æUòû|žÉý¨í gÉ8"`"·æ-Þìddì°ò®bãkàðò™]‘s©÷W- -ÀÍuñ½d—¯“ýp 5éõþõOú¶Ð*‹,<¥¦¡ÃÚ¤Ã&€€™ÑÊvõ«lu“S¹Ý£Žz|S£Nžk•ÀdH •þÄ1(¤íÅšw¯‰±]  -Úì¡ÕœAXÉû| ~chL\‡F5.!"¿, (æˆ éc o“m÷3Lnk<»s6^¦`èRÎŒ!×}Ùƒv¤IUêà6c€§n9hù<ù'-lþ­ÂæU,[!§E…ôš~KZ¡ÁÓÖšLäš–‹n a‡Æ²«G¿Ó¾x’¾TÝ/DP /õ½,Ç„n}=µîø2'ŸaÚ*âKÎcå„ç^ýuë7‘¡KT®²Öá©X0w[•9EæöÇpÒ4ùõ®9€r¬Öòˆ9¿dYLiëŸÖgú¯êéBÕ #ý9Ppd3–¨€™Ú^4rj Íp¿9¼ÿ£:<¶Pʰ®;“}Ú˜c´%®—©³ƒF5;¬"bΞVRB3h  - -·ƒÈ[97Ñö;…G!²"’йûAQó6Å!nŽâz+3-‡ÈK†Wgªk"U ¯¥…ɼVW¡ÐbhÃ]—÷©ú`&:1Ø&a˜Ô¾†³°û_+YAÅdL{ -©Q¹ô­ã¥ž}ÚÖINA+T\ZÍó8¦Ï¦eñÿ8p (åÜYV’ŦLøÛà1U × Á0±¤%GÌÛ›´k% ypòB'xÖ·®çNh!Û(]3á=°£!…e=úÙxßõ÷òíÜÈœ8ôXN¨'®Áë}q°ÒN¬èvjŽT+ -}¸‹ÝÜXó6ñé{2Êdv½–lL™¾áþã–c’1Äå–G(ôÈG/™*Ü7ùळÃ{áºw-ºÆ˜FÌ&5w€v¡ˆöèÁªNcã<\PɲÄVíeÈ:—µµLo;Ý2ùÉEdÀn¡ hbÈ]ÞRX ©0É^‰”­ó &+ºFfßQ¶À§ÁÀqÀ"™«_:.r…5)g¿@:#µ„aUñý -ºZ>‚QìÛež”ÿ8o$8õIÝ8rzGJ„øŽðpQ?DÓTƒ†l0Ç¥0Œ}‹ -ÜíT—\V¤?ö6´cêƒ ¹7\¥åö_ç~¾ L‡¸éåç¶Bi²ƒ Ù'j¿?ŽOì#À%6÷P{éPœŸXÍ3Îoa‚ €ƒÖgßNø¹ÍÃ!'ŽKŒ¿3ôÄ6WuÌF«§8¯Ñ(pH¸ZÚ/×ß‘8Gû|?R­X¤0ï#ɀͧ9žXßyÔ-ÊeàváZ¿-T¹©¸50°5å%ó@Ξw=Ýâ¶Ç¡õlf¨—Þܼžù1S*óÎ[IÚÌ"V´Ÿ Àª •7Ö2€î&0¥0„ Ãî8ïà…2 -³®L f¹]»›ß¢D.”j{°^'ƒ`n†ü—¦=,æeÓnªá+2¤Öì¡jf¤[\„õ¶”Vú…¥­ÃÇ Ó‡@*Î*VTÜÝæ™vÀ™+B&Yg‚N,ÀqS¯lûM‰r2Þûø½U¤¯@ÐQÍErW&¿Fë(.;<íü¹RbµbˆåúÕžüðыȤ$VQ# -!¸Ï>ybnÔ¸¶Oïýí¸Ü„µÜÓ!*ÔãQ±r¶'K˜/wü§2¯§¹ÕÙµò~5ѱœSè6+íñ&½IœÍêœÜq ÊÅ‚~Õ˜<š,Ñ$d++õkyìžF *ß«™ŽÉkáEí⌑¹º)r‡²k…–Éûà׃¦ÿ/ °‚Ûÿ3èÙ=ètcÅå#(€yçÄ£´{RÂrTòîÊnq÷ö–82¹²*›0º'å!/ôž;Ö#iU·‹«—§ªîÚu]’Âv©®â<-ǤÕÓ‘eY#&U`ÍtÊØíÒ6 ã¾6Ùª!A€\‘9ÃþÃC´^¾JOUظ~|€o÷+9!äµÌ†J-‡÷Û‡Îéñõ‘¶]$â 8çëÙÞm48î< ‡A/ŠgEwŽã(ŸÌyƒÚOÏ /êø¿ 0yPÉ8v(ê B¹Æœñ_Y[>b‰Ðúß–=ºÕRæ8¹ÿë-~An’a¨ rêU¨ƒ†f{¥³!ò+_IvOÀ` w%%‘¦ºïÑS™‹®jÖISCSéß‘Ž0{¶ÄJ«ìÏ-ÅËýA àeH2-¢*?¢…&z²ÑLèÅ÷[ê_,­ñÁ¶Ô½µºŒÇ†±n𦛴ÿñ‘BçÞ•wb™2kàç8K³ZåvΊ‡M&Q$ÁÉìæ°mÃc) zb™à ì^$ñÑ¿µã§d -K_ -=€lƒm(šï×En3KŒ*cÄæ‰©“gÐ?>B6 VI'X3 š>¬j‰Ò³e²ÄæU,ÄV_LÝ÷MP™5ÇÍ¥œ`ËþèN¾è#9¢þÒ•'Æð w)°oÙ¤ *•ÐA÷ŸqÝ«mà š‘´FkäÔÂIA» »þ|\£`/± ”‹:†ºíduã{%Mt?Úxï˜þ⚬[¹õGcÆÊB.¸R›¸a{Þ¯ðiŽàMðd÷zÀD(Œµ$—‰¶@ \×ïlßÂá„•ÆË↖^õæç•Û~Õhì}þì™_— —9œ{†ñµÞÞóæVönjÓ°ÅHâSŒW-'¥á9‡dK±ûføUäkŒµ©× -Å£ˆâÙ†ÙÅ$×&úêÖæä̵¨¼v6L9ò­ÉNóJ_¹åy®˜MIMû‘ÖI¢¶ƒµ8ZIXxRz¨VκyÔĨá(´(4ì}H?ßǵ-¬äS%‰(¾#%¦×ölHøÿ¶#6³Ö€&²½,Ã=ò¾¹ün•YÇÃS®”¿³½Ë6å«Ql9\˳$ç%«ö^Å<.ð€hÎÖÕe2ôœ«MüQ 2_ð.K Á„l|{³0 6£¼á°ŒÆo"joÁ4cÊ,’“içV1äY£æ8 -õ˜O«È¥958CŒ¨*ùtù®€1°tÉNL$„¿þ ÌðÐÀë¾eÛ¶©®_’@ñµl Æx`O{ˆÎ×}vŸš”íE=êw=¤ºÃ’éÆl¨Zä\¢ÿGŽƒÌzJq?“Ýerؘ:B±o s%¯æñï#ÎÖÀàÈWaòÅ^/Í®=µ¶Ñ Mø 3¦š”Ë=˽=þµØe€¼?Ù©tdø@ßÒûz¦;Äü´UÿK-ë2ìVÕ‹ëx§:˜ -öÞ,¾ØÏg"ÝØÏª†. Û¹áÍÈ¥{y_–ÄBáŸ)Çž÷RTpÁx†÷™]Íä@ºsËÏBc´ßà™Œ°;’™Ÿyä·Z{‚!adBÎÇŸ)·(ó›ÃR öæ!à½Iüdê?—?péœ JÁƬjÌ[…Éí5++¢‘F0¿æ¸¾Œ©þºoØ(›Üg‰Ç¤èù™ëJȵ›Q/ dJ#µ) R°ÍQÄ' é›ïÿßå,>ð•ŽYR‡†êí¥‰}ù˜y¸Ÿ’›7³ÓÄ‘Jà¨Õù~õ4_éß”$Ù…‡Á·•Œ¤íÇÙjõÓ XÜà°U]ð½xÃ%à‰f¯u,#3€$ ÆÝ‘Ž|4ÔùSq¦x9M ™Èû·wÁU çâ”Ì-ž¿¯Àâø@Q-2fT{0lY+Šáú%d¹¢m¬%däÈBag(ÙÇMÃIônǹp‹†Ft%¦ý³£–V/~äØ@´6!tLø¢:nS&I¶l*Ýøó–äõrÓH7µ Žd?Ü¡PZö¡ú=ßÑúu€ÊíŠÍÛ»3MfMÿ[S•`fp€¨šdÛ)·jȪŠÔ[ži!Bd[ÌŸsÊnô~…z)·L¡½ž•-KÞµ<ñŒÄ×]_¼ï[gl¨•ÆïÝ|œÑcºRq2UÈõûÄUSvr$\Ã;Pùí9aŠq@2 Þ®Ñ€`õ`®k8aí“ë²gñøüÍm×J2ÕèŽOê•T ]å–á ñ=žê© üPÃQ~v‡%œŒ»)ºw&q¦ÑÔ*Úc ‚ä×fWÅ„]õ9;}&¼Ä`/ÉgA& +W† Y8¨îôGÕ—ô1åSsÝŽKyENEóÊC¨ +¥&¹+…øv™GÚ÷΂†P^:Ää"åò>^@I³aµ¾AÃ@úM¢2"BMvÈNe +…“©MÃ1jUàßõ‘ÆI‹!äq<îwZÈàð¾as‡ŸºiµšTÿ›w2 «ˆ°ðƒ¯ˆk‹Bޤx>5Š­(sî.Þ—‡“ ù¢¶yû#X³„4Ï*'<óÞBVË›cJã½ü0y¼ÄP(¦ÀêÌß劖VäO¦J*â6Ëßf3JäaK?ÛRæ<úr¹Sð…®ó!þÙUq¯Æ¢Ö8 >ûÀÄ©c3ͧæÖÄŒt°øãÏ畃n6Ž­ƒ¯ú-üm·LPà('*Ƶjµ¶®ËçvŒâ!Ó9/íÐ@ëâs^¯zžKz~†éÇ矲¸Øs¨ì’·6Åν2K«“¯õaï@•´ ›xù“¾v¢¡LÛ‹­ãA ͘Ajm±ÆçÌ*v0Ãæþ=­DðŽüIúîÕÆço¦¹ZMù?X–R­÷3?Žá'ùsӫ̽ëh<•¢}Öv特êáÜACP'5®t(£' +zñèÓ× :­ðÛ¾U˜øÿÒÓ`(Nâš+ +;ñ:’оy¬0ËÇ,žŒ×34c\gÅ•i¹fž"Ÿe=2Èäh23€µ–ÛÒtÿÖûF¤ÖüeH·^ÁîĬá½~D ߆{YñREÝV2`,2 c±Yªeâ¸Ùš„è°+F/I5Î~]F‹Íœž·}kKð/¸ † ¬Ò„E±;ê(wá’„ÆŠ/eªcäª<²•ÓІ¦üãÞ<=6Š?<‘رF8–¤Š'Û …S3ðª²ë×!»Üí95’1L⇓nµëboŠcµ<Õù"ù ÍR‘µ­1wªHe ”Ô.I»Ÿ™Ô¶ž\&zÔqjWˆ ?í]1ÃÑ-léÍUQËŠ°Ë%™Œ ‚Mw«m¸¬ZPô<É8-Îá£`$Å®?mPfC0&s£pûkÝ+ãb3øÿ2%¬ðûˆžÑBñ6ûèR:› ŠØÞž]2žTb±ìlUº>ý£#r1n©7\~, ˜+øE¿>½”ØD¼ëð*tkVNKdÀ? û”ªcIzácÆ1ÐH‘òºVu½$¤ÍdsuûµlÕ”)\D›/JÚ7p5ÍD)HXÍöså[*ê‚.rq'eYÓxÛ¯ÕlÞ1AøSg*¥ÓÁTæWrª–æ!ôÇ.û¸vµû“ô€Z×^„l—H<ÀÁ¥’–WÈFíA¡3ŒWÀYnhã.¬¼æÿþ?±®B¿*Ön¦^LÕOF£ð)vÒ7„ûÇó¶Àt¥µòð Ý/rMç +²Dë¶CWÙìA5è¿a` WEÉó—¿øŒÍÕ.œHwÜR(§„åñóœÖ‰(½lIh +u 6½“C.¬y~­y6¡ {i„eºm?‘z¶Ñˆ‰—EZ… t!!œe_Œ³£ér ØtwìÊŒWè\Щ¾ži &0%á4¼³9Ã7NÞ1Cݨµ<Œ›à]Ôf$J;ÀÆ +î9òWˆ­3{jØZ*¹ÕÌ%Àgpù‡ÑDA ‹n˜Iß×j¢ÑQ­¢ø0.èFŽW/×` ŒËq«Î¾ýñÐCäëv,‘-”†>„ÅSçü+D¢»áѨ·XÕ('gË’¹°0Ýcƹ³–¹OµùN_~Ý.Ê,˜•¶uç:åÎÙ†, )3‰n(„†â\ß´´ ÐËpù/¦”Íe6c!ÖC”\ß°aÂÌeU1Ò ¬²nßÀáOÁºå(ÍÇ ÓâükçŠeÞêl«¶¹ÓM„¬îÏ—^ê‚„Â7¾¢”š9ÙCŸOsDß|*¼\U‚;Е»È!Ÿ9†•­ÓIËŠRŒ.&Ô‹-ég¨—ßß™Ñí+»€‡B8Oƒ{gÎ÷¹¹ ìõg[[kYñ 2ò–É%­²|“– ©xË„œŸ%hM`}OGBRðݸ—•X©šÞ<š¶>Ôì¢ÃÛ+r0eW åâr«-5LeKñäË”µæ¦Ñ¤»šÒ¨ƒÙûÔìŽDÏbò¾9n6²B¸Ç×>¨ +ßü££oÁLYv&茟h²ÂÁk°fcA.›cZkÛ䇒1¾™ð%ÚÇU< ;«ú¸eØ¿©¡ž7èÄVCé¬JÑ2§-ÛìN"ÄeÒ6ÒéxÂÀ%*™Ë ”ϵj;sºSÖ:z06Œ+»³ÓO»Ð‡µ´n?U¬l—?CòƒÌó5cf›ãÒmöI’ÔÖ~«g~¯Ðñ·Ëû´¦cD—j)a}QWM Q½!µñë(aBx|µÆP!§rŠjôîÑagÛ˜õÕað~}!nåo¹ x¡ðÁðÇuòdYõo~o+6öÊÕíp5C–&46iìóŒKC^BwêZnYÇô¾š™Øp¦Jgêä˜SÕÈj݈y>ʇ§  D¬›’w©g¤sz,H寙6[ÜOD¹*×ʳǣÕÂJ*QFäòÿT6xEˆ€µèˆeŸÅ¼ò -ïéÝk!¶=»Îk¹ÉXå"ë¸-ƒÏ¡FWù®Ç´0%Ùülz1¿>!‘l3è\dPW +aŸ£`‚*‡[J)ÍQ—ý²ø ‰ý¶A5¢©²iÌXŒÆs5óš‘‹f&ÇD¥àï¥u‘3øaœr¤ò›Î¥«QÞ¬ŠOD‘C¼pLºVtßf[ K+¸ÁÜëšÝ‚,ÈvPä÷}Ïó'ÚÀ ´˜Œ2ºŠ!«9)BW¿* +Îæf´Ö`}ð;ÃÖd(~Z²ÛõS{™KC>õãþrœô³¾Ug†H] >ùÔZs<öâöÂ)Cóä…yök=”YöÃÿÊfWdˆK××ð”‚ðƒÅ¬ü,qHiºßðç÷mjMO¤ ¢=˜¼hÆ9)O;¼y3ò'›‡×sV8HLŸ³÷‚-—Hux (+Pê]ÔíY2ÔN®·QVÝørgZ=³a]ך>þÏ{Ýže¸dÈ©â¿lç³õÎp4VÐqsJ™"\ጱiƒ©'0ç̈ˆºL(` Ó¸cö¹bºÙî¤qŽØT¨ÀDáßF @"´8e× Ucgǘ¢YS=O­_ÚÛ¹à–BææËðŽ®– LyL÷׋psä¡¥¹×»½Âà¨$M‚ý?v+g€y%¡Tü‚ˆ=T„¯+ÇÆ§¢XKméÜÁ·ó µŒðàÒdŽtt)àß`µxR#)¿¯ ô U}¶…£:1&»öìMx‰IN¸Qr +¢‹ødáßK±æãóp@‚0ß@BS†>²ñغMhd] ‹ézÝŽžR\NÑ ©ú‘–i¯rÔC;ïú4¥ÐAù- &ù³ýµN)5 •S,²£b7ÍBYoÁµ³¤z!5§dM®mÞic´½RfØÌÊÁP¥È˹\/"Ñàø®(4Øÿëæå§Xá NÙw Mº…•ÉÕ†ªˆùɳ쇰-Íop$Äé&ðïÕ‰©ªÝ›Çã )  ªµV®oßËvî}P6ÃÅöÇeL¶žµbHJ÷ƒ&"A"h›?ñÈ/­ke6p„žþ‚]ZÈŠ2)E$ÊëC ÛÄfOf|æ›,š8‡gŸ¦6Ÿ†°{ãÒ”ì1dàÚRÒôx ²\&ôé= g´pC[Ó.R‘]ÒPtPš°‚o›tÅ$ ¢×§+P»ÞDEY@-Ýo­Öîà>òó‰¦úÆ +gÅpdÈEàQïú$ñá‘T¨‚6ÃbÕVíUð$ô ~ã» @9r.±">øÖÐX€ôì­û»›CHHÉ“/õؾKBo*º7Ô P /%f'„ìfbcÂËí¤Wúä‘äÔFÝkÙØ˜Ý¢”6îÏÍ ‰õˆ9…ê¯GfÚºoì•™ft&ó½†Kûν›ÖÏã«<ÁõáEÝ#2º/=ó¬Õ—Þš'ê3ZkfÉåh÷†0|4¸¢/·%ÃJ¹` 4LJÉ38.‹BdƒÌžžÍ—r`³†`yXæ´l¬ß +~L„:Ð]wo#º~eóG:Þ~o€î°NM:ÐÇÜàs|i肜ͷ®7o‡ð ò»­×Åæ1Ø +)Fbf6µU:ÅQŒ,ô¢*PÔ, +€Å¸}ý¯­?œaºÐSš¨¬ÀHñ²Ð¹Ãû‡Ù5õö‚A¦è[_›Ù½ƒÏ_"©\´PÅùBtö›åÕmg¤ºšÐqP òñ4ò /y€h]À\ ¨žôŽ"½‰¯ÙÜË3¿4À'v”¾|L/E0_d¯Ø(í™ÄõDÉb\-P„þ´{õqˆ¶Î*8Ö…* y’­àÀ²R:1ßò ÷ÆEŒ¾?Ô ÉcÇf–»“@tTxÉ÷±1mÇóßiØYzPNHL‚Ž_¾IõÙ¥ F¦Ñ9þZüŒS¢pÞÖ[™(×(å{Üôp¶„»ÖHgñ yvƒ +åñÞêü(ïo!ä5÷{Ï®K~¦CôC~!»z Ù>Ÿ‹£#"à‚.ú7¥+ÚЄN¤b]¦éÀ­HL[õÍûRË—Þ9FgÆ„8$‘Âpap%Õ+h»@°G‚Dbñ²ihŽÞ¶¥0)“ÖûômÜ~¤Ü{z_¯…Ó ñ Ÿá@¼¹¦Ÿöd„Ý‘+±©›}“qBãöv2€Á'2Ô:ó‚6^ÄßW÷´uÍsαP™¶±¬p eK‰®€cç,NyVþSå\ÇzR St?¼=Ÿk5gSôÈÀ×>£Þêñ¬A»®ÎB=I¹¸á2vÏdI.£"â‡Y–Ý E®òÕî‰{í×G+ꆿ€˜46à‘Ý8Hsý*a†$^©¯±„…jÛ–2Á‹Æç÷W¯V}0Mx™„M—0LÇ9œÏnlJ{`1OÔ2”÷T¤^Áu*©I¯(JpÆù§§³Ñiî3v)d¤Gÿ¨âüë@á¤}×P2i>€ãú±œòZÜížÓM傲v!;Áw›byŒ†;üÞ\_Ø1B;´YÖhÏ2£d~jñOX¥‰Ø–õO‘ïˆMjíHMÈFé¾€g·+ß"&e0‡. ­éÌÐ"˹šÝÃZÝŸ +†Óéõ6:<¯7ƒÏ‚Ôá: F–3rŒ úU–LÏõÖÚYuXGCöõâŸáØd¡¢1×ÙÙ˜ZŸa’b‰üM9œB‡:º‹€ÜLP5“¼ò1ç&| +'ŸX86óç·þ°¶ƒN\ K‚fhm àâØú—ÔW,ÚÎO’¹,m ýªÉm4¢Äa—GW„ë Ô¿ï´À9Ž8àÊ)I‰Àyß¡²ô@ëÿÈ9 pÕoAqráxÀ™ö£ö“OÅIȃÅ>=ÕFî¦Ï&;#æE´ä£]å÷Ì€%ךŽËÊ8¾î½l„<ÿ˜S¦Ñ%L¨¶íÔ¹æ¥) ’’Ø&¯rèJÅ™PÝÞ<›/Ô˨NiÅCÆÉüºáÏq¦Ç¬å×ch½BÔip¹jAâЂ7´äÙ>¼º0ŽEo©ý_¤-fÀ‡+JÎ5Ì!Ì–Œ> +Eyt9âî=M_¼ûy²õÿús+þVÔûù\%]¦l£¾Oǰ)ZjÊ4¯]#„\¬„£B2…ô áñ^µY8€x­3ëvi€1ò† fZ,Óø³x¶˜Î¢[=¼ÃÒÕ·˜z¡<`†™˜î˜™›Z˜ã¿¹ˆ3e@Žöiý¥Õ8îÝòxœ†è©é±1vM·ý:V§‰î-gǧÇñ(Móú×zϵ»lþ +¤äÖº3í@²KpSWvϱÞi9Âþ«LæÍI×W-HI:Çp’˜rÉ.G–;ýº)4rštŽpšóHý¬{:˜°Â™àŠ£*’Éo 64§.zk!ãKfuŽ2¼’yÀYЙ[4OßGx*Ýw#B'åóá;‰Ábó=ÙDŽíë'=xFcòŠ_j*"«>îÚ¹ø,zѦ +U ŒÇ‘E9%ĨÚé'¸¡¹÷–&TH@¹(uèÒN “©Bj¼à§qȼÜêˆÆÀ_–Š?…ò}!MNÒÚ²@}V=•­5úL"÷é²[’R†p\) +SÞ­ìé—vÃ6η,[X}¡Zš<'IÐö‚Ýå¨l¶ýžm92:–À ž¿!0Ør:¢—ê¸Z¯ñO¾|zûÆ¢—Ÿh¿¨5£\_ß Œû æÒšŷé"í/ÕÒ3·špvÏ®ƒ. ȾÉ<¢0ËŸk.·Uâ.l ihóõ¶Aß]R[0*Ñ µf¶·K×»m®rÚ`™y¹‰¶2§éTÄùÂþoî9 ¶¡¶z‡T8ÇG&úìrg‚‰Sl´nô„{’>Hò'Ô°£x­ZD’Ah0ª‹ ¨Xê¶D$Gx?‘&°ë;,ˆcSíJµ›‰Øzª½ìÅ}šÿ˜aĘÕ:h2L¢àjñ3;êàÒVùR›fæd¯_Ô!«Ñ*ÇSW±ž$è“©§ çž5^~ʿޚ° Ÿä–Y’GòmÈ48?úŒþb\÷ÙÂûãbгèÑærÒunFÌ%f”ÈlQ’µe¥|r>8že´ÏÏ «såœvž r?L“/öÔiýæ>rÜ8Íš % ÕK—1jÁólÍ9Âg™#m‘m@!mÞ?毾÷žcgHM6µ_ñ~‹Pz̼“êÓÉw›Aß­…ÏÀÕù£˜ï•NÙ.mUßÉõÃUÛ·¼gD¡& ±5À¹jMì¶U³172Ÿ›,YȨÂM…kv’GÖ|ï]Чú¯dó3°¾dnaŲAžˆT¬Ð.ì1ˆ^øhl³JTpf£ø§ °7o(óÊLMÚuX\ž5…ñc>ªƒµ=ªb¶svÏÙý[Ÿ¥j•gL[õWøPGK«öÅ.äÃ{‰‘µÙj‚AIÁêpQ›àÀØ69rî>Êçzcå ¬Ì ƒJZ¥5`þ}ä×ptÉäZºûÞÍÃ,£ÐZgu@*µ(­ÑìØ;æ_‰©ÍYŲIB¤ÃI‚HàkœUÙ‘Ê€M÷µ|‘©0'\ã:¿,d#·© Ò¬jǦºÓIr‹ÞJ˜(°rö«¾>¼4iË&ÓáZ¥ïß +ÅAèa¨n¢ËyMµ g„“ˆ~?rƒMÌðK¿ÖNÂ0êå„ÎP«]p æ‡ßu<™ïÔའ+È Ø_üÜÊI‰î! -¶Ñ‚ॢ9%Ùñÿ4ápàï§Ç(÷mÝGi.ÞŠc ýÿ²qH7ŒhŠé°Šo_“F5ýÍŒdÑ™GëÉ<Üjt0 nÙ³üâ?†y&[¤)Ãv6AÚÿ"¿§"w¨òñGªì+ZÉ¿„¡(vHI|«AJ‡,n–Ñþ¤â«ÛÎF:ºÈp@úUº%Pdâe³¨s:¡µ‹¼vNqÓˆUï—žb—ñ’üƒØòôLcSí|iˆáë~_›MDƒ4á="®†êF&ûCåµ2Y3ðŒ9“u‚j3i‰† å·ˆ+LÔ¶>(¬OVì—>À'Ü/á +JÁ'D ¸<º¿#Ó¢†G³ú–1ºdÄÊf¸Ån£ÕCæ Eñ~eê(¬äùQ c€5©àµ\€è +ò{’·n{Ö;¨ —Z/âLì8ä•$ÁÅ +6C}Ε?‰©»ÔÑõö¿?& ˽kµwÛŠ‚Î!y´ôŽ›Ïqa=ô“iNÙ»Èo¥y)?æw´%a$l¬†@bñfñçíNßËÖÒËÍ­¨ä¨È„`?R~C–3(íeáÍ’ oæŠÈµ¿h.Ü–æu*”[V1D™Î݈«-÷N(+Øœ™GZ¯ÈÕ·&4<¨"2X°˜6ÊÓ),Ò;#ùbÖàŸÔšgî¯YôMÄ2ÕÞob‚õF- +! /$6m ²œ€/ÆF‡¼qÄ^Dh—Fâ2³—wØÊŸlgjwNäQú/W)aŠéÃôÑ*sêÈþÃèÿI²P3¤Q££|1 ¤kÿ¿÷á@íCHÛç/–±‹…: ª¦,Íú‘$XÁ–ëkJ–ïY’3ÆÃÆtå*2›©F§7ë"˜²t…‚=ƒv_ÑÃþà)-. (:R$iëàƒ—ßõÙ~3`Ý–†aÎe§ê*Æ9²¦qVz® +cilþœêúÒž ÎåI‡³c­6¸]Yá†۴¶Ï]ÿÎÝ¿”È‘¥m<ú"e<ƒû³¶ÚFŠx$ïz*¤´>&÷rFâXTŸCÏdȆ§4QÕÄ·”\ÉìÝOSÐ!˜6Î=eÏÓ´ôÕ½´q좃¤-~¨<òì¹Ç®\ÅÿͪþûÕ ž&†{¡/^q_ÖðN[,tžÏü+É̯7ÁÒd9"‰:¾[æ>¼¯;­ zÏvµÉÔ4ç¦×e„>À’aO][ˆúòÉy"´Äܯ·€a`ùìM„0îÎÿý(Æ›þ9zÚlö1šxÿ¯%õ‰ç‡)ä5ÂlìÇ«–uúm;åI,+K6þ endstream endobj -1739 0 obj << +1738 0 obj << /Type /FontDescriptor -/FontName /XOPWSZ+CMMI10 +/FontName /PUWBWT+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 @@ -21112,10 +21107,10 @@ endobj /ItalicAngle -14 /StemV 72 /XHeight 431 -/CharSet (/A/C/D/G/I/L/N/O/P/Q/T/U/X/a/alpha/b/beta/c/comma/d/e/f/g/greater/h/i/j/k/l/less/m/n/o/p/period/r/s/t/u/v/w/x/y/z) -/FontFile 1738 0 R +/CharSet (/A/C/D/G/I/L/N/O/P/Q/T/U/X/a/alpha/b/beta/c/comma/d/e/f/g/greater/i/j/k/l/less/m/n/o/p/period/r/s/t/u/v/w/x/y/z) +/FontFile 1737 0 R >> endobj -1740 0 obj << +1739 0 obj << /Length1 745 /Length2 1242 /Length3 0 @@ -21153,7 +21148,7 @@ currentfile eexec ñPŠ?–_ %œD3´)‚/Å‘ˆdL£sw(wÞ&Mʺ™E¿Ât æ7â8k¬aò;BFåŸD¦(ÐéJø endstream endobj -1741 0 obj << +1740 0 obj << /Type /FontDescriptor /FontName /RVPZIX+CMMI5 /Flags 4 @@ -21165,9 +21160,9 @@ endobj /StemV 90 /XHeight 431 /CharSet (/i) -/FontFile 1740 0 R +/FontFile 1739 0 R >> endobj -1742 0 obj << +1741 0 obj << /Length1 878 /Length2 3214 /Length3 0 @@ -21215,7 +21210,7 @@ H ­š¤þ.6aÄ÷ÊwØÐ\p'N/ ‹ÀoXüzFk%IÛo‡³êÚi‚Kƒ²\ìÞ23ÌéS[§“ðxGÇ;·°53˜Ê6„Nhb3u…NƒeçwÕ&ÂIÃ*ê¸Ñk±¼¨gFîš#åLkÿ4.ÕÒ…[_bY ¾øa Ú ÿ“Iö{ÊÀªD×Ö,=Á;‘o+x ‹*°SßÏ‘(OǶzÝÉú¬bLçàè_¨§•¸Ž9ú‡ü÷ÖNŸ'FÀ]$7éØñòjQèk­£"œP Ì endstream endobj -1743 0 obj << +1742 0 obj << /Type /FontDescriptor /FontName /ZUYGVH+CMMI7 /Flags 4 @@ -21227,9 +21222,9 @@ endobj /StemV 81 /XHeight 431 /CharSet (/H/I/T/a/comma/i/j/k/m/n) -/FontFile 1742 0 R +/FontFile 1741 0 R >> endobj -1744 0 obj << +1743 0 obj << /Length1 2026 /Length2 14861 /Length3 0 @@ -21409,7 +21404,7 @@ z ›àã™üÿÀPŒáà•Ï€$y_ɰ¾a9›3“P_*Uþý“‹Ë3ï\(Ó‰Å)_0)ÄbÂãP*Qv¾×%–ޑ祫Ûù>ÍTAO˸UL`¯£'jìò¤Þ=ˆØ eðS)•Æ®¿îu*ïÎ-ô£ì•]2—æk0[] endstream endobj -1745 0 obj << +1744 0 obj << /Type /FontDescriptor /FontName /KYXPCE+CMR10 /Flags 4 @@ -21421,9 +21416,9 @@ endobj /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1744 0 R +/FontFile 1743 0 R >> endobj -1746 0 obj << +1745 0 obj << /Length1 769 /Length2 1408 /Length3 0 @@ -21465,7 +21460,7 @@ currentfile eexec µ)&ï¹ó)/@^Ð⵸PY.¾ê—(û½#´±SáRdíúmBq-‡_'ÈI-tñø‚¡ „/÷OþL»™Kô÷6§C€w\³v#ܶ>ì"L‹“+†ò¿ÜÓüà•½”þa+‹YEoÎ endstream endobj -1747 0 obj << +1746 0 obj << /Type /FontDescriptor /FontName /YPSQTS+CMR6 /Flags 4 @@ -21477,9 +21472,9 @@ endobj /StemV 83 /XHeight 431 /CharSet (/one/three/two) -/FontFile 1746 0 R +/FontFile 1745 0 R >> endobj -1748 0 obj << +1747 0 obj << /Length1 787 /Length2 1497 /Length3 0 @@ -21523,7 +21518,7 @@ _2 ¡b›x}‰èË÷…¹Òºz’™­ºs7'þõ¸­)Æãõ8-X“ûTåG`û‡9?óPíe•úã“:– “^­‘3¶›‚~§ÍhécîxbkÜå1!o^ëå™KÙWk«ìi7ݱ‚=3OÿÕá£ßø äô¼|ó endstream endobj -1749 0 obj << +1748 0 obj << /Type /FontDescriptor /FontName /EWABFK+CMR7 /Flags 4 @@ -21535,9 +21530,9 @@ endobj /StemV 79 /XHeight 431 /CharSet (/colon/one/three/two) -/FontFile 1748 0 R +/FontFile 1747 0 R >> endobj -1750 0 obj << +1749 0 obj << /Length1 1462 /Length2 8120 /Length3 0 @@ -21646,7 +21641,7 @@ j ë4×éùïwš4“n½]{­ŽÂô§–sú,r/Lˤ/ÝS.$Vܤ˜¶i¼+±WJvï¤‰Ž´*ö9Ã6\éu>£ÀtGÁ”Ûý¿Ò'3 (ªh[æ‚ð˜ÅWÿžu º×:=»´bA¦‡àBæ¶ŒÂMÄða§Ýw’rº“ºÏÛ–¥,Ë¿OÝS2 ?3w·;§Â/nÊJ0Rã}CpÒSé^™:Ò¶Õzâê3Ì|8¦Võg¾Ã¡µ`Æ~ä17Æ[|~9dy_*z€UIJ@ö®{t”¤åØVKƒÒ;S¯ˆÿ±’m¤£¥‰Hçî³¼ –$úX`ÝWçªÂúôÔ>Œ—:þ8ùæ÷¿³ÁE4•¾Ÿ¼3 w¼>0—Mñoƒ›vºÒL–xy÷rbQ¡ƒUˆ0_tœ¹ºu™'Iá^mÇÉ]*äÉÊ—:¬Ý\ ÛÝxK»gD÷«Ù³Õ=I8­ŠºÒ-œvx`%QÓ¢8ê™ÍEºïê+@eXnž"V¶¼ðæÅ"Ƀe‚¿Sñ:®wS%d›9Ñž#Ä`ž˜íÔ’Õ²ˆð¬ËmûMBeäPnpbÜ“^mäïbÅÃK0¾m1÷R\&òÄe{b"ŒŒW{u“ˆ)W2x cšµ9è¡|課#ᎹºJš¾ì—H1ÒTÚ³v®n-F `¢Çî5*…¨¸G™1–¯}YûŠª¹ª•ÛÚωà?ñõ‚dUfÒ o.nÔIƒ”fDg¬ðŒ/'@Tîø|Ú>1ÐØø£éU.Byþ.‘Ʀ¸25mª¹<Ês Ò—OËÇP œ®Ì÷·bM×v¬mšö¿ý²e…ö;ã{'½ì>Œ;×sáyâlµ’ØÀf9k Ƕz<È#Ž ý¤ËSðž>"zµQµ’N<)W”°ni}À;žá½!“@æe¬Þâ± šÃW&è‚=ù»ä÷óFÝÎXËÙå²Í1.8.†ˆvi˜äƒ. &×SÓ¬Ú74ÀÕRP¹ú´QC‹îNjÁ8Òq½ïàákYDå¢X4Ö±Htç7€ Azd5ZŒ†ã¿¾¹çÓ)05—ØN$HÑé=R§K+‚²h`Pèù†T¿3Œ®'/(#ž+UŠ5¤A³Î-¢ŒT endstream endobj -1751 0 obj << +1750 0 obj << /Type /FontDescriptor /FontName /TDRORS+CMR8 /Flags 4 @@ -21658,9 +21653,9 @@ endobj /StemV 76 /XHeight 431 /CharSet (/B/G/I/L/O/P/T/X/a/b/c/comma/d/e/eight/f/five/four/g/h/hyphen/i/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero) -/FontFile 1750 0 R +/FontFile 1749 0 R >> endobj -1752 0 obj << +1751 0 obj << /Length1 1407 /Length2 7564 /Length3 0 @@ -21766,7 +21761,7 @@ e 0? ¢ÀÍT7¦—$ünÕ?È6<ÛªôúL48‹N­úÑ žàTXòª,¯ëIµ¸¢©|¹cÚ`½=úË.Õ¾hémPÁ¤êkþcD÷ÄCx3ø;W6:Ûéf&àz#ôµ­šI˜z¾1¿¤°õÜ$šÕÇ{J»T¢LE/“C endstream endobj -1753 0 obj << +1752 0 obj << /Type /FontDescriptor /FontName /UIKOQU+CMR9 /Flags 4 @@ -21778,9 +21773,9 @@ endobj /StemV 74 /XHeight 431 /CharSet (/B/G/I/L/O/P/X/a/b/c/comma/d/e/eight/equal/f/five/four/g/h/i/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/t/three/two/u/x/z/zero) -/FontFile 1752 0 R +/FontFile 1751 0 R >> endobj -1754 0 obj << +1753 0 obj << /Length1 1050 /Length2 2900 /Length3 0 @@ -21847,7 +21842,7 @@ R c’$”݈9`l¶|‰2*2Nú´u4œýÕâôv=¤rl³MÌp+§’…¶5ô†ÔÀµ‡™iu1Y@ãœ1[;îLE›êGÓa]:œ”Ó³öã_‰Uš¨–‘Îo#¿ÞÅÌ!|NWüÚè endstream endobj -1755 0 obj << +1754 0 obj << /Type /FontDescriptor /FontName /IMOIOS+CMSY10 /Flags 4 @@ -21859,9 +21854,9 @@ endobj /StemV 85 /XHeight 431 /CharSet (/B/H/I/arrowleft/bar/bardbl/braceleft/braceright/bullet/element/greaterequal/lessequal/minus/negationslash/radical/section) -/FontFile 1754 0 R +/FontFile 1753 0 R >> endobj -1756 0 obj << +1755 0 obj << /Length1 766 /Length2 759 /Length3 0 @@ -21899,7 +21894,7 @@ h aaT'/D…/¦v2_ÅIô÷*’XÆé¼VMäGoÆéjeÃï÷‚x"¡‘<Õ©O=}µL¾8QWÃYΞ^L„רFHyü˜ÈB9Ê2Îo¯G¥¾bv0„òÆ… 4…Fv1wz MrÀs1§‡zå; r‘*)!´î Ý·Š´ÿÝÔÕVåÕG•8 z±» Ó(O»û+¸iruþdtîOª=eb®|˜Œ‘Ô¤c<…=>òƒ?†!ÒêuóÿG\ïD3/dÈZ2)#Yboµ£˜B§cn“d¿lXë0 ]Ò%ÉMEÚmu`ò©bNßʾ”ËL›ìsë7§F„“qò¿'Z¿TÇ©c9$À ÑPâü<”»ÏÚ endstream endobj -1757 0 obj << +1756 0 obj << /Type /FontDescriptor /FontName /XNLILI+CMSY7 /Flags 4 @@ -21911,9 +21906,9 @@ endobj /StemV 93 /XHeight 431 /CharSet (/infinity/minus) -/FontFile 1756 0 R +/FontFile 1755 0 R >> endobj -1758 0 obj << +1757 0 obj << /Length1 1572 /Length2 12132 /Length3 0 @@ -22060,7 +22055,7 @@ fi ƒ­Öc@^ÕÝË´rF_¯ŒX"1ÁÖbvßÁŠÀšûòÅ5þŽÎ˜Ž×þpŒÚš5ã0²'ºÞ” ÛJ§­¦ i÷ïI•€LU·+K¹ïø,xæã¤±„‰2Dwé†îÆ®7d-ÿ΀Ðê¡­Î/»€È­ÎÍËIÄÌÃ5|Ÿr¥JÍã3ú‰Ï& endstream endobj -1759 0 obj << +1758 0 obj << /Type /FontDescriptor /FontName /HBJLDT+CMTI10 /Flags 4 @@ -22072,9 +22067,9 @@ endobj /StemV 68 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/a/b/c/colon/d/e/f/ff/fi/five/g/h/hyphen/i/j/l/m/n/nine/o/one/p/period/q/quoteright/r/s/slash/t/three/two/u/v/w/x/y/zero) -/FontFile 1758 0 R +/FontFile 1757 0 R >> endobj -1760 0 obj << +1759 0 obj << /Length1 1067 /Length2 5106 /Length3 0 @@ -22149,7 +22144,7 @@ Hn4*/ éÆ 'dŠÿDZ@Oëÿ{Ll§æR%M…]> endobj -1762 0 obj << +1761 0 obj << /Length1 1849 /Length2 11542 /Length3 0 @@ -22316,7 +22311,7 @@ Lr~j S“JУt0jºB–¢7å7Ð[=©)ŒZPRЬ ‰•šâ ìùôée\ás° "̺Ùô~\oªÂÈ1É] ,Ø(WÁèT¢ë$¢æ=+Z|GËÒÉÿ ‹¸ÕÙž=٣Ȕ)Šûs‹9@™ÄÁ¿ ç£SÈ.ÃoUSl›Ÿt—<œì¼'棓`ÈÈð.Õ}ÑYCϦ <%ÔK\3/œ;“鹟“*ÍHÕ¦­ƒ{{´$$_gm$Jv‘xasHäÑ`…SºHo‹ß²BLó‰ÊVÑÅ´Œ ü}㣟ÀºO/Xÿ“RPEÃïúðï­|1XïH'˜Y”€b²áIŽh1†Ž*iòš®Ÿµ× CÙ„¼×S…<ŒnCM+dL‰*¼·Û¶)ôhï.³í©*zuv¼ü!ŠQÈ®zxTÿ‡þá+"€=,®>ŽÑW\=ê£+÷*ã.WFogö(Ìĺ§Ž+Ž‰Ë´ÍÀðªvvp΀›3Åós˜*!vBfýïdV,è¸/œSålJ¾î9‹tO%­ØJ×%`š:µ/R)²Wä^y$AϬLFÛX ŠD¸+þésj»qÒ¥”4h<ÕÇ%‡ü?ÙŠtX׌_ßn}{}”ÙÅEšF%–„U'3ê¿=µP„‚ý½¤¥8É:J u)âÖ‹4Û[n2–¨ŸL®tÏྴÖFTÌG[×Ñ#˜ïïÄV„«ìŒƒ†8M\ÊlôZ[ó.Pº¦û;ªbþ_Ù›Ä4Tzüv¨|4ò‘ÌèýNß+Bb¿XK¨v‘–[ÅâÁÿOñõk³xö¬eå«ÀU\bžã¸>}êšÎÈJ5S˜ÃÃIAÂõuâ¼þ'sieFµ·?iÐ3whöl´¼œÔ˜îÉñ:—²˜IÎQ|Ï2? @•–ÏËS¹Cu›â>ÎaŒóßÀÅ=cžÈák3BÑ;Ôb endstream endobj -1763 0 obj << +1762 0 obj << /Type /FontDescriptor /FontName /BGSLBR+CMTT10 /Flags 4 @@ -22328,9 +22323,9 @@ endobj /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/I/K/L/M/N/O/P/R/S/T/U/W/Y/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/equal/f/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1762 0 R +/FontFile 1761 0 R >> endobj -1764 0 obj << +1763 0 obj << /Length1 1029 /Length2 3340 /Length3 0 @@ -22399,7 +22394,7 @@ o võåŸØì¶DgmÜ×BSœx¦d¢¿b.…Õû~á:ت¸ó× 0î•«¡œ{)ì@¿›ù׸ð€¸wŒ¶ªèº¹Î(ß"›’/5>PkxÍBô­Ù¿ ø$?€õþ W(]ï6¶Ä endstream endobj -1765 0 obj << +1764 0 obj << /Type /FontDescriptor /FontName /KMUHVJ+CMTT9 /Flags 4 @@ -22411,335 +22406,335 @@ endobj /StemV 74 /XHeight 431 /CharSet (/T/a/b/c/colon/comma/d/e/l/n/o/p/parenleft/parenright/r/s/t/underscore/y) -/FontFile 1764 0 R +/FontFile 1763 0 R >> endobj 533 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GKACTJ+CMBX10 -/FontDescriptor 1733 0 R +/FontDescriptor 1732 0 R /FirstChar 11 /LastChar 124 -/Widths 1729 0 R +/Widths 1728 0 R >> endobj 531 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GBHFLB+CMBX12 -/FontDescriptor 1735 0 R +/FontDescriptor 1734 0 R /FirstChar 12 /LastChar 124 -/Widths 1731 0 R +/Widths 1730 0 R >> endobj -1541 0 obj << +1540 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GNEKJP+CMBX9 -/FontDescriptor 1737 0 R +/FontDescriptor 1736 0 R /FirstChar 97 /LastChar 117 -/Widths 1715 0 R +/Widths 1714 0 R >> endobj 719 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /XOPWSZ+CMMI10 -/FontDescriptor 1739 0 R +/BaseFont /PUWBWT+CMMI10 +/FontDescriptor 1738 0 R /FirstChar 11 /LastChar 122 -/Widths 1726 0 R +/Widths 1725 0 R >> endobj 767 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RVPZIX+CMMI5 -/FontDescriptor 1741 0 R +/FontDescriptor 1740 0 R /FirstChar 105 /LastChar 105 -/Widths 1719 0 R +/Widths 1718 0 R >> endobj 736 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZUYGVH+CMMI7 -/FontDescriptor 1743 0 R +/FontDescriptor 1742 0 R /FirstChar 59 /LastChar 110 -/Widths 1723 0 R +/Widths 1722 0 R >> endobj 534 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KYXPCE+CMR10 -/FontDescriptor 1745 0 R +/FontDescriptor 1744 0 R /FirstChar 11 /LastChar 123 -/Widths 1728 0 R +/Widths 1727 0 R >> endobj 738 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YPSQTS+CMR6 -/FontDescriptor 1747 0 R +/FontDescriptor 1746 0 R /FirstChar 49 /LastChar 51 -/Widths 1721 0 R +/Widths 1720 0 R >> endobj 735 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EWABFK+CMR7 -/FontDescriptor 1749 0 R +/FontDescriptor 1748 0 R /FirstChar 49 /LastChar 58 -/Widths 1724 0 R +/Widths 1723 0 R >> endobj 740 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TDRORS+CMR8 -/FontDescriptor 1751 0 R +/FontDescriptor 1750 0 R /FirstChar 40 /LastChar 121 -/Widths 1720 0 R +/Widths 1719 0 R >> endobj -1112 0 obj << +1111 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UIKOQU+CMR9 -/FontDescriptor 1753 0 R +/FontDescriptor 1752 0 R /FirstChar 39 /LastChar 122 -/Widths 1716 0 R +/Widths 1715 0 R >> endobj 737 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IMOIOS+CMSY10 -/FontDescriptor 1755 0 R +/FontDescriptor 1754 0 R /FirstChar 0 /LastChar 120 -/Widths 1722 0 R +/Widths 1721 0 R >> endobj 1028 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XNLILI+CMSY7 -/FontDescriptor 1757 0 R +/FontDescriptor 1756 0 R /FirstChar 0 /LastChar 49 -/Widths 1717 0 R +/Widths 1716 0 R >> endobj 699 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HBJLDT+CMTI10 -/FontDescriptor 1759 0 R +/FontDescriptor 1758 0 R /FirstChar 11 /LastChar 121 -/Widths 1727 0 R +/Widths 1726 0 R >> endobj 532 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OZJPZO+CMTI12 -/FontDescriptor 1761 0 R +/FontDescriptor 1760 0 R /FirstChar 65 /LastChar 121 -/Widths 1730 0 R +/Widths 1729 0 R >> endobj 734 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BGSLBR+CMTT10 -/FontDescriptor 1763 0 R +/FontDescriptor 1762 0 R /FirstChar 37 /LastChar 126 -/Widths 1725 0 R +/Widths 1724 0 R >> endobj 906 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KMUHVJ+CMTT9 -/FontDescriptor 1765 0 R +/FontDescriptor 1764 0 R /FirstChar 40 /LastChar 121 -/Widths 1718 0 R +/Widths 1717 0 R >> endobj 535 0 obj << /Type /Pages /Count 6 -/Parent 1766 0 R +/Parent 1765 0 R /Kids [526 0 R 537 0 R 587 0 R 639 0 R 679 0 R 683 0 R] >> endobj 700 0 obj << /Type /Pages /Count 6 -/Parent 1766 0 R +/Parent 1765 0 R /Kids [697 0 R 717 0 R 731 0 R 747 0 R 760 0 R 764 0 R] >> endobj 794 0 obj << /Type /Pages /Count 6 -/Parent 1766 0 R +/Parent 1765 0 R /Kids [778 0 R 797 0 R 808 0 R 814 0 R 826 0 R 838 0 R] >> endobj 845 0 obj << /Type /Pages /Count 6 -/Parent 1766 0 R +/Parent 1765 0 R /Kids [842 0 R 850 0 R 857 0 R 862 0 R 867 0 R 871 0 R] >> endobj 878 0 obj << /Type /Pages /Count 6 -/Parent 1766 0 R +/Parent 1765 0 R /Kids [875 0 R 880 0 R 884 0 R 890 0 R 897 0 R 902 0 R] >> endobj 912 0 obj << /Type /Pages /Count 6 -/Parent 1766 0 R +/Parent 1765 0 R /Kids [909 0 R 921 0 R 928 0 R 938 0 R 943 0 R 953 0 R] >> endobj 961 0 obj << /Type /Pages /Count 6 -/Parent 1767 0 R +/Parent 1766 0 R /Kids [958 0 R 966 0 R 974 0 R 982 0 R 990 0 R 995 0 R] >> endobj 1006 0 obj << /Type /Pages /Count 6 -/Parent 1767 0 R +/Parent 1766 0 R /Kids [1002 0 R 1011 0 R 1018 0 R 1025 0 R 1036 0 R 1051 0 R] >> endobj 1061 0 obj << /Type /Pages /Count 6 -/Parent 1767 0 R -/Kids [1057 0 R 1069 0 R 1075 0 R 1080 0 R 1088 0 R 1099 0 R] +/Parent 1766 0 R +/Kids [1057 0 R 1069 0 R 1075 0 R 1080 0 R 1088 0 R 1098 0 R] >> endobj -1113 0 obj << +1112 0 obj << /Type /Pages /Count 6 -/Parent 1767 0 R -/Kids [1109 0 R 1118 0 R 1130 0 R 1138 0 R 1142 0 R 1154 0 R] +/Parent 1766 0 R +/Kids [1108 0 R 1117 0 R 1129 0 R 1137 0 R 1141 0 R 1153 0 R] >> endobj -1165 0 obj << +1164 0 obj << /Type /Pages /Count 6 -/Parent 1767 0 R -/Kids [1162 0 R 1169 0 R 1177 0 R 1181 0 R 1186 0 R 1192 0 R] +/Parent 1766 0 R +/Kids [1161 0 R 1168 0 R 1176 0 R 1180 0 R 1185 0 R 1191 0 R] >> endobj -1205 0 obj << +1204 0 obj << +/Type /Pages +/Count 6 +/Parent 1766 0 R +/Kids [1196 0 R 1207 0 R 1212 0 R 1221 0 R 1228 0 R 1233 0 R] +>> endobj +1242 0 obj << /Type /Pages /Count 6 /Parent 1767 0 R -/Kids [1197 0 R 1208 0 R 1213 0 R 1222 0 R 1229 0 R 1234 0 R] +/Kids [1239 0 R 1244 0 R 1252 0 R 1262 0 R 1266 0 R 1281 0 R] >> endobj -1243 0 obj << +1294 0 obj << /Type /Pages /Count 6 -/Parent 1768 0 R -/Kids [1240 0 R 1245 0 R 1253 0 R 1263 0 R 1267 0 R 1282 0 R] +/Parent 1767 0 R +/Kids [1285 0 R 1298 0 R 1304 0 R 1311 0 R 1317 0 R 1321 0 R] >> endobj -1295 0 obj << +1333 0 obj << /Type /Pages /Count 6 -/Parent 1768 0 R -/Kids [1286 0 R 1299 0 R 1305 0 R 1312 0 R 1318 0 R 1322 0 R] +/Parent 1767 0 R +/Kids [1330 0 R 1337 0 R 1341 0 R 1346 0 R 1350 0 R 1357 0 R] >> endobj -1334 0 obj << +1366 0 obj << /Type /Pages /Count 6 -/Parent 1768 0 R -/Kids [1331 0 R 1338 0 R 1342 0 R 1347 0 R 1351 0 R 1358 0 R] +/Parent 1767 0 R +/Kids [1362 0 R 1369 0 R 1375 0 R 1381 0 R 1387 0 R 1394 0 R] >> endobj -1367 0 obj << +1404 0 obj << /Type /Pages /Count 6 -/Parent 1768 0 R -/Kids [1363 0 R 1370 0 R 1376 0 R 1382 0 R 1388 0 R 1395 0 R] +/Parent 1767 0 R +/Kids [1401 0 R 1406 0 R 1416 0 R 1420 0 R 1424 0 R 1437 0 R] >> endobj -1405 0 obj << +1446 0 obj << /Type /Pages /Count 6 -/Parent 1768 0 R -/Kids [1402 0 R 1407 0 R 1417 0 R 1421 0 R 1425 0 R 1438 0 R] +/Parent 1767 0 R +/Kids [1441 0 R 1448 0 R 1454 0 R 1461 0 R 1465 0 R 1469 0 R] >> endobj -1447 0 obj << +1476 0 obj << /Type /Pages /Count 6 /Parent 1768 0 R -/Kids [1442 0 R 1449 0 R 1455 0 R 1462 0 R 1466 0 R 1470 0 R] +/Kids [1473 0 R 1478 0 R 1482 0 R 1486 0 R 1492 0 R 1498 0 R] >> endobj -1477 0 obj << +1509 0 obj << /Type /Pages /Count 6 -/Parent 1769 0 R -/Kids [1474 0 R 1479 0 R 1483 0 R 1487 0 R 1493 0 R 1499 0 R] +/Parent 1768 0 R +/Kids [1504 0 R 1511 0 R 1517 0 R 1522 0 R 1529 0 R 1535 0 R] >> endobj -1510 0 obj << +1570 0 obj << /Type /Pages /Count 6 -/Parent 1769 0 R -/Kids [1505 0 R 1512 0 R 1518 0 R 1523 0 R 1530 0 R 1536 0 R] +/Parent 1768 0 R +/Kids [1565 0 R 1572 0 R 1578 0 R 1584 0 R 1590 0 R 1595 0 R] >> endobj -1571 0 obj << +1607 0 obj << /Type /Pages /Count 6 -/Parent 1769 0 R -/Kids [1566 0 R 1573 0 R 1579 0 R 1585 0 R 1591 0 R 1596 0 R] +/Parent 1768 0 R +/Kids [1602 0 R 1610 0 R 1616 0 R 1623 0 R 1629 0 R 1635 0 R] >> endobj -1608 0 obj << +1645 0 obj << /Type /Pages /Count 6 -/Parent 1769 0 R -/Kids [1603 0 R 1611 0 R 1617 0 R 1624 0 R 1630 0 R 1636 0 R] +/Parent 1768 0 R +/Kids [1641 0 R 1651 0 R 1659 0 R 1664 0 R 1668 0 R 1672 0 R] >> endobj -1646 0 obj << +1686 0 obj << /Type /Pages /Count 6 -/Parent 1769 0 R -/Kids [1642 0 R 1652 0 R 1660 0 R 1665 0 R 1669 0 R 1673 0 R] +/Parent 1768 0 R +/Kids [1680 0 R 1690 0 R 1694 0 R 1698 0 R 1702 0 R 1710 0 R] >> endobj -1687 0 obj << +1765 0 obj << /Type /Pages -/Count 6 +/Count 36 /Parent 1769 0 R -/Kids [1681 0 R 1691 0 R 1695 0 R 1699 0 R 1703 0 R 1711 0 R] +/Kids [535 0 R 700 0 R 794 0 R 845 0 R 878 0 R 912 0 R] >> endobj 1766 0 obj << /Type /Pages /Count 36 -/Parent 1770 0 R -/Kids [535 0 R 700 0 R 794 0 R 845 0 R 878 0 R 912 0 R] +/Parent 1769 0 R +/Kids [961 0 R 1006 0 R 1061 0 R 1112 0 R 1164 0 R 1204 0 R] >> endobj 1767 0 obj << /Type /Pages /Count 36 -/Parent 1770 0 R -/Kids [961 0 R 1006 0 R 1061 0 R 1113 0 R 1165 0 R 1205 0 R] +/Parent 1769 0 R +/Kids [1242 0 R 1294 0 R 1333 0 R 1366 0 R 1404 0 R 1446 0 R] >> endobj 1768 0 obj << /Type /Pages /Count 36 -/Parent 1770 0 R -/Kids [1243 0 R 1295 0 R 1334 0 R 1367 0 R 1405 0 R 1447 0 R] +/Parent 1769 0 R +/Kids [1476 0 R 1509 0 R 1570 0 R 1607 0 R 1645 0 R 1686 0 R] >> endobj 1769 0 obj << /Type /Pages -/Count 36 -/Parent 1770 0 R -/Kids [1477 0 R 1510 0 R 1571 0 R 1608 0 R 1646 0 R 1687 0 R] ->> endobj -1770 0 obj << -/Type /Pages /Count 144 -/Kids [1766 0 R 1767 0 R 1768 0 R 1769 0 R] +/Kids [1765 0 R 1766 0 R 1767 0 R 1768 0 R] >> endobj -1771 0 obj << +1770 0 obj << /Type /Outlines /First 7 0 R /Last 7 0 R @@ -23666,2336 +23661,2335 @@ endobj 7 0 obj << /Title 8 0 R /A 5 0 R -/Parent 1771 0 R +/Parent 1770 0 R /First 11 0 R /Last 519 0 R /Count -11 >> endobj -1772 0 obj << -/Names [(Doc-Start) 530 0 R (Hfootnote.1) 739 0 R (Hfootnote.2) 741 0 R (Hfootnote.3) 1645 0 R (Item.1) 768 0 R (Item.10) 782 0 R] +1771 0 obj << +/Names [(Doc-Start) 530 0 R (Hfootnote.1) 739 0 R (Hfootnote.2) 741 0 R (Hfootnote.3) 1644 0 R (Item.1) 768 0 R (Item.10) 782 0 R] /Limits [(Doc-Start) (Item.10)] >> endobj -1773 0 obj << -/Names [(Item.100) 1436 0 R (Item.101) 1445 0 R (Item.102) 1446 0 R (Item.103) 1452 0 R (Item.104) 1453 0 R (Item.105) 1458 0 R] +1772 0 obj << +/Names [(Item.100) 1435 0 R (Item.101) 1444 0 R (Item.102) 1445 0 R (Item.103) 1451 0 R (Item.104) 1452 0 R (Item.105) 1457 0 R] /Limits [(Item.100) (Item.105)] >> endobj -1774 0 obj << -/Names [(Item.106) 1459 0 R (Item.107) 1460 0 R (Item.108) 1490 0 R (Item.109) 1491 0 R (Item.11) 783 0 R (Item.110) 1496 0 R] +1773 0 obj << +/Names [(Item.106) 1458 0 R (Item.107) 1459 0 R (Item.108) 1489 0 R (Item.109) 1490 0 R (Item.11) 783 0 R (Item.110) 1495 0 R] /Limits [(Item.106) (Item.110)] >> endobj -1775 0 obj << -/Names [(Item.111) 1497 0 R (Item.112) 1502 0 R (Item.113) 1503 0 R (Item.114) 1508 0 R (Item.115) 1509 0 R (Item.116) 1515 0 R] +1774 0 obj << +/Names [(Item.111) 1496 0 R (Item.112) 1501 0 R (Item.113) 1502 0 R (Item.114) 1507 0 R (Item.115) 1508 0 R (Item.116) 1514 0 R] /Limits [(Item.111) (Item.116)] >> endobj -1776 0 obj << -/Names [(Item.117) 1516 0 R (Item.118) 1521 0 R (Item.119) 1526 0 R (Item.12) 784 0 R (Item.13) 785 0 R (Item.14) 786 0 R] +1775 0 obj << +/Names [(Item.117) 1515 0 R (Item.118) 1520 0 R (Item.119) 1525 0 R (Item.12) 784 0 R (Item.13) 785 0 R (Item.14) 786 0 R] /Limits [(Item.117) (Item.14)] >> endobj -1777 0 obj << +1776 0 obj << /Names [(Item.15) 787 0 R (Item.16) 788 0 R (Item.17) 789 0 R (Item.18) 790 0 R (Item.19) 791 0 R (Item.2) 769 0 R] /Limits [(Item.15) (Item.2)] >> endobj -1778 0 obj << +1777 0 obj << /Names [(Item.20) 792 0 R (Item.21) 793 0 R (Item.22) 800 0 R (Item.23) 801 0 R (Item.24) 802 0 R (Item.25) 803 0 R] /Limits [(Item.20) (Item.25)] >> endobj -1779 0 obj << +1778 0 obj << /Names [(Item.26) 804 0 R (Item.27) 805 0 R (Item.28) 817 0 R (Item.29) 818 0 R (Item.3) 770 0 R (Item.30) 819 0 R] /Limits [(Item.26) (Item.30)] >> endobj -1780 0 obj << +1779 0 obj << /Names [(Item.31) 820 0 R (Item.32) 821 0 R (Item.33) 822 0 R (Item.34) 823 0 R (Item.35) 824 0 R (Item.36) 829 0 R] /Limits [(Item.31) (Item.36)] >> endobj -1781 0 obj << +1780 0 obj << /Names [(Item.37) 830 0 R (Item.38) 831 0 R (Item.39) 832 0 R (Item.4) 771 0 R (Item.40) 833 0 R (Item.41) 865 0 R] /Limits [(Item.37) (Item.41)] >> endobj -1782 0 obj << -/Names [(Item.42) 1133 0 R (Item.43) 1134 0 R (Item.44) 1135 0 R (Item.45) 1189 0 R (Item.46) 1195 0 R (Item.47) 1200 0 R] +1781 0 obj << +/Names [(Item.42) 1132 0 R (Item.43) 1133 0 R (Item.44) 1134 0 R (Item.45) 1188 0 R (Item.46) 1194 0 R (Item.47) 1199 0 R] /Limits [(Item.42) (Item.47)] >> endobj -1783 0 obj << -/Names [(Item.48) 1201 0 R (Item.49) 1202 0 R (Item.5) 772 0 R (Item.50) 1203 0 R (Item.51) 1204 0 R (Item.52) 1216 0 R] +1782 0 obj << +/Names [(Item.48) 1200 0 R (Item.49) 1201 0 R (Item.5) 772 0 R (Item.50) 1202 0 R (Item.51) 1203 0 R (Item.52) 1215 0 R] /Limits [(Item.48) (Item.52)] >> endobj -1784 0 obj << -/Names [(Item.53) 1217 0 R (Item.54) 1218 0 R (Item.55) 1225 0 R (Item.56) 1248 0 R (Item.57) 1249 0 R (Item.58) 1256 0 R] +1783 0 obj << +/Names [(Item.53) 1216 0 R (Item.54) 1217 0 R (Item.55) 1224 0 R (Item.56) 1247 0 R (Item.57) 1248 0 R (Item.58) 1255 0 R] /Limits [(Item.53) (Item.58)] >> endobj -1785 0 obj << -/Names [(Item.59) 1257 0 R (Item.6) 773 0 R (Item.60) 1258 0 R (Item.61) 1270 0 R (Item.62) 1271 0 R (Item.63) 1272 0 R] +1784 0 obj << +/Names [(Item.59) 1256 0 R (Item.6) 773 0 R (Item.60) 1257 0 R (Item.61) 1269 0 R (Item.62) 1270 0 R (Item.63) 1271 0 R] /Limits [(Item.59) (Item.63)] >> endobj -1786 0 obj << -/Names [(Item.64) 1273 0 R (Item.65) 1274 0 R (Item.66) 1275 0 R (Item.67) 1276 0 R (Item.68) 1277 0 R (Item.69) 1278 0 R] +1785 0 obj << +/Names [(Item.64) 1272 0 R (Item.65) 1273 0 R (Item.66) 1274 0 R (Item.67) 1275 0 R (Item.68) 1276 0 R (Item.69) 1277 0 R] /Limits [(Item.64) (Item.69)] >> endobj -1787 0 obj << -/Names [(Item.7) 774 0 R (Item.70) 1289 0 R (Item.71) 1290 0 R (Item.72) 1291 0 R (Item.73) 1292 0 R (Item.74) 1293 0 R] +1786 0 obj << +/Names [(Item.7) 774 0 R (Item.70) 1288 0 R (Item.71) 1289 0 R (Item.72) 1290 0 R (Item.73) 1291 0 R (Item.74) 1292 0 R] /Limits [(Item.7) (Item.74)] >> endobj -1788 0 obj << -/Names [(Item.75) 1294 0 R (Item.76) 1308 0 R (Item.77) 1325 0 R (Item.78) 1326 0 R (Item.79) 1354 0 R (Item.8) 775 0 R] +1787 0 obj << +/Names [(Item.75) 1293 0 R (Item.76) 1307 0 R (Item.77) 1324 0 R (Item.78) 1325 0 R (Item.79) 1353 0 R (Item.8) 775 0 R] /Limits [(Item.75) (Item.8)] >> endobj -1789 0 obj << -/Names [(Item.80) 1355 0 R (Item.81) 1366 0 R (Item.82) 1373 0 R (Item.83) 1379 0 R (Item.84) 1385 0 R (Item.85) 1391 0 R] +1788 0 obj << +/Names [(Item.80) 1354 0 R (Item.81) 1365 0 R (Item.82) 1372 0 R (Item.83) 1378 0 R (Item.84) 1384 0 R (Item.85) 1390 0 R] /Limits [(Item.80) (Item.85)] >> endobj -1790 0 obj << -/Names [(Item.86) 1392 0 R (Item.87) 1398 0 R (Item.88) 1399 0 R (Item.89) 1410 0 R (Item.9) 781 0 R (Item.90) 1411 0 R] +1789 0 obj << +/Names [(Item.86) 1391 0 R (Item.87) 1397 0 R (Item.88) 1398 0 R (Item.89) 1409 0 R (Item.9) 781 0 R (Item.90) 1410 0 R] /Limits [(Item.86) (Item.90)] >> endobj -1791 0 obj << -/Names [(Item.91) 1412 0 R (Item.92) 1428 0 R (Item.93) 1429 0 R (Item.94) 1430 0 R (Item.95) 1431 0 R (Item.96) 1432 0 R] +1790 0 obj << +/Names [(Item.91) 1411 0 R (Item.92) 1427 0 R (Item.93) 1428 0 R (Item.94) 1429 0 R (Item.95) 1430 0 R (Item.96) 1431 0 R] /Limits [(Item.91) (Item.96)] >> endobj -1792 0 obj << -/Names [(Item.97) 1433 0 R (Item.98) 1434 0 R (Item.99) 1435 0 R (cite.2007c) 755 0 R (cite.2007d) 756 0 R (cite.BLACS) 727 0 R] +1791 0 obj << +/Names [(Item.97) 1432 0 R (Item.98) 1433 0 R (Item.99) 1434 0 R (cite.2007c) 755 0 R (cite.2007d) 756 0 R (cite.BLACS) 727 0 R] /Limits [(Item.97) (cite.BLACS)] >> endobj -1793 0 obj << -/Names [(cite.BLAS1) 708 0 R (cite.BLAS2) 709 0 R (cite.BLAS3) 710 0 R (cite.DesPat:11) 703 0 R (cite.DesignPatterns) 854 0 R (cite.KIVA3PSBLAS) 1709 0 R] +1792 0 obj << +/Names [(cite.BLAS1) 708 0 R (cite.BLAS2) 709 0 R (cite.BLAS3) 710 0 R (cite.DesPat:11) 703 0 R (cite.DesignPatterns) 854 0 R (cite.KIVA3PSBLAS) 1708 0 R] /Limits [(cite.BLAS1) (cite.KIVA3PSBLAS)] >> endobj -1794 0 obj << -/Names [(cite.METIS) 742 0 R (cite.MPI1) 1714 0 R (cite.PARA04FOREST) 1707 0 R (cite.PSBLAS) 1708 0 R (cite.RouXiaXu:11) 704 0 R (cite.Sparse03) 702 0 R] +1793 0 obj << +/Names [(cite.METIS) 742 0 R (cite.MPI1) 1713 0 R (cite.PARA04FOREST) 1706 0 R (cite.PSBLAS) 1707 0 R (cite.RouXiaXu:11) 704 0 R (cite.Sparse03) 702 0 R] /Limits [(cite.METIS) (cite.Sparse03)] >> endobj -1795 0 obj << +1794 0 obj << /Names [(cite.machiels) 705 0 R (cite.metcalf) 701 0 R (cite.sblas02) 707 0 R (cite.sblas97) 706 0 R (descdata) 811 0 R (equation.1) 1039 0 R] /Limits [(cite.machiels) (equation.1)] >> endobj -1796 0 obj << -/Names [(equation.2) 1040 0 R (equation.3) 1041 0 R (figure.1) 720 0 R (figure.10) 1534 0 R (figure.2) 750 0 R (figure.3) 834 0 R] +1795 0 obj << +/Names [(equation.2) 1040 0 R (equation.3) 1041 0 R (figure.1) 720 0 R (figure.10) 1533 0 R (figure.2) 750 0 R (figure.3) 834 0 R] /Limits [(equation.2) (figure.3)] >> endobj -1797 0 obj << -/Names [(figure.4) 855 0 R (figure.5) 895 0 R (figure.6) 907 0 R (figure.7) 1102 0 R (figure.8) 1136 0 R (figure.9) 1533 0 R] +1796 0 obj << +/Names [(figure.4) 855 0 R (figure.5) 895 0 R (figure.6) 907 0 R (figure.7) 1101 0 R (figure.8) 1135 0 R (figure.9) 1532 0 R] /Limits [(figure.4) (figure.9)] >> endobj -1798 0 obj << -/Names [(lstlisting.-1) 1092 0 R (lstlisting.-10) 1599 0 R (lstlisting.-11) 1606 0 R (lstlisting.-12) 1614 0 R (lstlisting.-13) 1620 0 R (lstlisting.-14) 1627 0 R] +1797 0 obj << +/Names [(lstlisting.-1) 1092 0 R (lstlisting.-10) 1598 0 R (lstlisting.-11) 1605 0 R (lstlisting.-12) 1613 0 R (lstlisting.-13) 1619 0 R (lstlisting.-14) 1626 0 R] /Limits [(lstlisting.-1) (lstlisting.-14)] >> endobj -1799 0 obj << -/Names [(lstlisting.-15) 1633 0 R (lstlisting.-16) 1684 0 R (lstlisting.-2) 1122 0 R (lstlisting.-3) 1158 0 R (lstlisting.-4) 1173 0 R (lstlisting.-5) 1539 0 R] +1798 0 obj << +/Names [(lstlisting.-15) 1632 0 R (lstlisting.-16) 1683 0 R (lstlisting.-2) 1121 0 R (lstlisting.-3) 1157 0 R (lstlisting.-4) 1172 0 R (lstlisting.-5) 1538 0 R] /Limits [(lstlisting.-15) (lstlisting.-5)] >> endobj -1800 0 obj << -/Names [(lstlisting.-6) 1569 0 R (lstlisting.-7) 1576 0 R (lstlisting.-8) 1582 0 R (lstlisting.-9) 1588 0 R (lstnumber.-1.1) 1093 0 R (lstnumber.-1.2) 1094 0 R] +1799 0 obj << +/Names [(lstlisting.-6) 1568 0 R (lstlisting.-7) 1575 0 R (lstlisting.-8) 1581 0 R (lstlisting.-9) 1587 0 R (lstnumber.-1.1) 1093 0 R (lstnumber.-1.2) 1094 0 R] /Limits [(lstlisting.-6) (lstnumber.-1.2)] >> endobj -1801 0 obj << -/Names [(lstnumber.-10.1) 1600 0 R (lstnumber.-11.1) 1607 0 R (lstnumber.-12.1) 1615 0 R (lstnumber.-13.1) 1621 0 R (lstnumber.-14.1) 1628 0 R (lstnumber.-15.1) 1634 0 R] +1800 0 obj << +/Names [(lstnumber.-10.1) 1599 0 R (lstnumber.-11.1) 1606 0 R (lstnumber.-12.1) 1614 0 R (lstnumber.-13.1) 1620 0 R (lstnumber.-14.1) 1627 0 R (lstnumber.-15.1) 1633 0 R] /Limits [(lstnumber.-10.1) (lstnumber.-15.1)] >> endobj -1802 0 obj << -/Names [(lstnumber.-16.1) 1685 0 R (lstnumber.-16.2) 1686 0 R (lstnumber.-2.1) 1123 0 R (lstnumber.-2.2) 1124 0 R (lstnumber.-3.1) 1159 0 R (lstnumber.-3.2) 1160 0 R] +1801 0 obj << +/Names [(lstnumber.-16.1) 1684 0 R (lstnumber.-16.2) 1685 0 R (lstnumber.-2.1) 1122 0 R (lstnumber.-2.2) 1123 0 R (lstnumber.-3.1) 1158 0 R (lstnumber.-3.2) 1159 0 R] /Limits [(lstnumber.-16.1) (lstnumber.-3.2)] >> endobj -1803 0 obj << -/Names [(lstnumber.-4.1) 1174 0 R (lstnumber.-4.2) 1175 0 R (lstnumber.-5.1) 1540 0 R (lstnumber.-5.10) 1550 0 R (lstnumber.-5.11) 1551 0 R (lstnumber.-5.12) 1552 0 R] +1802 0 obj << +/Names [(lstnumber.-4.1) 1173 0 R (lstnumber.-4.2) 1174 0 R (lstnumber.-5.1) 1539 0 R (lstnumber.-5.10) 1549 0 R (lstnumber.-5.11) 1550 0 R (lstnumber.-5.12) 1551 0 R] /Limits [(lstnumber.-4.1) (lstnumber.-5.12)] >> endobj -1804 0 obj << -/Names [(lstnumber.-5.13) 1553 0 R (lstnumber.-5.14) 1554 0 R (lstnumber.-5.15) 1555 0 R (lstnumber.-5.16) 1556 0 R (lstnumber.-5.17) 1557 0 R (lstnumber.-5.18) 1558 0 R] +1803 0 obj << +/Names [(lstnumber.-5.13) 1552 0 R (lstnumber.-5.14) 1553 0 R (lstnumber.-5.15) 1554 0 R (lstnumber.-5.16) 1555 0 R (lstnumber.-5.17) 1556 0 R (lstnumber.-5.18) 1557 0 R] /Limits [(lstnumber.-5.13) (lstnumber.-5.18)] >> endobj -1805 0 obj << -/Names [(lstnumber.-5.19) 1559 0 R (lstnumber.-5.2) 1542 0 R (lstnumber.-5.20) 1560 0 R (lstnumber.-5.21) 1561 0 R (lstnumber.-5.22) 1562 0 R (lstnumber.-5.23) 1563 0 R] +1804 0 obj << +/Names [(lstnumber.-5.19) 1558 0 R (lstnumber.-5.2) 1541 0 R (lstnumber.-5.20) 1559 0 R (lstnumber.-5.21) 1560 0 R (lstnumber.-5.22) 1561 0 R (lstnumber.-5.23) 1562 0 R] /Limits [(lstnumber.-5.19) (lstnumber.-5.23)] >> endobj -1806 0 obj << -/Names [(lstnumber.-5.24) 1564 0 R (lstnumber.-5.3) 1543 0 R (lstnumber.-5.4) 1544 0 R (lstnumber.-5.5) 1545 0 R (lstnumber.-5.6) 1546 0 R (lstnumber.-5.7) 1547 0 R] +1805 0 obj << +/Names [(lstnumber.-5.24) 1563 0 R (lstnumber.-5.3) 1542 0 R (lstnumber.-5.4) 1543 0 R (lstnumber.-5.5) 1544 0 R (lstnumber.-5.6) 1545 0 R (lstnumber.-5.7) 1546 0 R] /Limits [(lstnumber.-5.24) (lstnumber.-5.7)] >> endobj -1807 0 obj << -/Names [(lstnumber.-5.8) 1548 0 R (lstnumber.-5.9) 1549 0 R (lstnumber.-6.1) 1570 0 R (lstnumber.-7.1) 1577 0 R (lstnumber.-8.1) 1583 0 R (lstnumber.-9.1) 1589 0 R] +1806 0 obj << +/Names [(lstnumber.-5.8) 1547 0 R (lstnumber.-5.9) 1548 0 R (lstnumber.-6.1) 1569 0 R (lstnumber.-7.1) 1576 0 R (lstnumber.-8.1) 1582 0 R (lstnumber.-9.1) 1588 0 R] /Limits [(lstnumber.-5.8) (lstnumber.-9.1)] >> endobj -1808 0 obj << -/Names [(page.1) 529 0 R (page.10) 816 0 R (page.100) 1464 0 R (page.101) 1468 0 R (page.102) 1472 0 R (page.103) 1476 0 R] +1807 0 obj << +/Names [(page.1) 529 0 R (page.10) 816 0 R (page.100) 1463 0 R (page.101) 1467 0 R (page.102) 1471 0 R (page.103) 1475 0 R] /Limits [(page.1) (page.103)] >> endobj -1809 0 obj << -/Names [(page.104) 1481 0 R (page.105) 1485 0 R (page.106) 1489 0 R (page.107) 1495 0 R (page.108) 1501 0 R (page.109) 1507 0 R] +1808 0 obj << +/Names [(page.104) 1480 0 R (page.105) 1484 0 R (page.106) 1488 0 R (page.107) 1494 0 R (page.108) 1500 0 R (page.109) 1506 0 R] /Limits [(page.104) (page.109)] >> endobj -1810 0 obj << -/Names [(page.11) 828 0 R (page.110) 1514 0 R (page.111) 1520 0 R (page.112) 1525 0 R (page.113) 1532 0 R (page.114) 1538 0 R] +1809 0 obj << +/Names [(page.11) 828 0 R (page.110) 1513 0 R (page.111) 1519 0 R (page.112) 1524 0 R (page.113) 1531 0 R (page.114) 1537 0 R] /Limits [(page.11) (page.114)] >> endobj -1811 0 obj << -/Names [(page.115) 1568 0 R (page.116) 1575 0 R (page.117) 1581 0 R (page.118) 1587 0 R (page.119) 1593 0 R (page.12) 840 0 R] +1810 0 obj << +/Names [(page.115) 1567 0 R (page.116) 1574 0 R (page.117) 1580 0 R (page.118) 1586 0 R (page.119) 1592 0 R (page.12) 840 0 R] /Limits [(page.115) (page.12)] >> endobj -1812 0 obj << -/Names [(page.120) 1598 0 R (page.121) 1605 0 R (page.122) 1613 0 R (page.123) 1619 0 R (page.124) 1626 0 R (page.125) 1632 0 R] +1811 0 obj << +/Names [(page.120) 1597 0 R (page.121) 1604 0 R (page.122) 1612 0 R (page.123) 1618 0 R (page.124) 1625 0 R (page.125) 1631 0 R] /Limits [(page.120) (page.125)] >> endobj -1813 0 obj << -/Names [(page.126) 1638 0 R (page.127) 1644 0 R (page.128) 1654 0 R (page.129) 1662 0 R (page.13) 844 0 R (page.130) 1667 0 R] +1812 0 obj << +/Names [(page.126) 1637 0 R (page.127) 1643 0 R (page.128) 1653 0 R (page.129) 1661 0 R (page.13) 844 0 R (page.130) 1666 0 R] /Limits [(page.126) (page.130)] >> endobj -1814 0 obj << -/Names [(page.131) 1671 0 R (page.132) 1675 0 R (page.133) 1683 0 R (page.134) 1693 0 R (page.135) 1697 0 R (page.136) 1701 0 R] +1813 0 obj << +/Names [(page.131) 1670 0 R (page.132) 1674 0 R (page.133) 1682 0 R (page.134) 1692 0 R (page.135) 1696 0 R (page.136) 1700 0 R] /Limits [(page.131) (page.136)] >> endobj -1815 0 obj << -/Names [(page.137) 1705 0 R (page.138) 1713 0 R (page.14) 852 0 R (page.15) 859 0 R (page.16) 864 0 R (page.17) 869 0 R] +1814 0 obj << +/Names [(page.137) 1704 0 R (page.138) 1712 0 R (page.14) 852 0 R (page.15) 859 0 R (page.16) 864 0 R (page.17) 869 0 R] /Limits [(page.137) (page.17)] >> endobj -1816 0 obj << +1815 0 obj << /Names [(page.18) 873 0 R (page.19) 877 0 R (page.2) 539 0 R (page.20) 882 0 R (page.21) 886 0 R (page.22) 892 0 R] /Limits [(page.18) (page.22)] >> endobj -1817 0 obj << +1816 0 obj << /Names [(page.23) 899 0 R (page.24) 904 0 R (page.25) 911 0 R (page.26) 923 0 R (page.27) 930 0 R (page.28) 940 0 R] /Limits [(page.23) (page.28)] >> endobj -1818 0 obj << +1817 0 obj << /Names [(page.29) 945 0 R (page.3) 733 0 R (page.30) 955 0 R (page.31) 960 0 R (page.32) 968 0 R (page.33) 976 0 R] /Limits [(page.29) (page.33)] >> endobj -1819 0 obj << +1818 0 obj << /Names [(page.34) 984 0 R (page.35) 992 0 R (page.36) 997 0 R (page.37) 1004 0 R (page.38) 1013 0 R (page.39) 1020 0 R] /Limits [(page.34) (page.39)] >> endobj -1820 0 obj << +1819 0 obj << /Names [(page.4) 749 0 R (page.40) 1027 0 R (page.41) 1038 0 R (page.42) 1053 0 R (page.43) 1059 0 R (page.44) 1071 0 R] /Limits [(page.4) (page.44)] >> endobj -1821 0 obj << -/Names [(page.45) 1077 0 R (page.46) 1082 0 R (page.47) 1090 0 R (page.48) 1101 0 R (page.49) 1111 0 R (page.5) 762 0 R] +1820 0 obj << +/Names [(page.45) 1077 0 R (page.46) 1082 0 R (page.47) 1090 0 R (page.48) 1100 0 R (page.49) 1110 0 R (page.5) 762 0 R] /Limits [(page.45) (page.5)] >> endobj -1822 0 obj << -/Names [(page.50) 1120 0 R (page.51) 1132 0 R (page.52) 1140 0 R (page.53) 1144 0 R (page.54) 1156 0 R (page.55) 1164 0 R] +1821 0 obj << +/Names [(page.50) 1119 0 R (page.51) 1131 0 R (page.52) 1139 0 R (page.53) 1143 0 R (page.54) 1155 0 R (page.55) 1163 0 R] /Limits [(page.50) (page.55)] >> endobj -1823 0 obj << -/Names [(page.56) 1171 0 R (page.57) 1179 0 R (page.58) 1183 0 R (page.59) 1188 0 R (page.6) 766 0 R (page.60) 1194 0 R] +1822 0 obj << +/Names [(page.56) 1170 0 R (page.57) 1178 0 R (page.58) 1182 0 R (page.59) 1187 0 R (page.6) 766 0 R (page.60) 1193 0 R] /Limits [(page.56) (page.60)] >> endobj -1824 0 obj << -/Names [(page.61) 1199 0 R (page.62) 1210 0 R (page.63) 1215 0 R (page.64) 1224 0 R (page.65) 1231 0 R (page.66) 1236 0 R] +1823 0 obj << +/Names [(page.61) 1198 0 R (page.62) 1209 0 R (page.63) 1214 0 R (page.64) 1223 0 R (page.65) 1230 0 R (page.66) 1235 0 R] /Limits [(page.61) (page.66)] >> endobj -1825 0 obj << -/Names [(page.67) 1242 0 R (page.68) 1247 0 R (page.69) 1255 0 R (page.7) 780 0 R (page.70) 1265 0 R (page.71) 1269 0 R] +1824 0 obj << +/Names [(page.67) 1241 0 R (page.68) 1246 0 R (page.69) 1254 0 R (page.7) 780 0 R (page.70) 1264 0 R (page.71) 1268 0 R] /Limits [(page.67) (page.71)] >> endobj -1826 0 obj << -/Names [(page.72) 1284 0 R (page.73) 1288 0 R (page.74) 1301 0 R (page.75) 1307 0 R (page.76) 1314 0 R (page.77) 1320 0 R] +1825 0 obj << +/Names [(page.72) 1283 0 R (page.73) 1287 0 R (page.74) 1300 0 R (page.75) 1306 0 R (page.76) 1313 0 R (page.77) 1319 0 R] /Limits [(page.72) (page.77)] >> endobj -1827 0 obj << -/Names [(page.78) 1324 0 R (page.79) 1333 0 R (page.8) 799 0 R (page.80) 1340 0 R (page.81) 1344 0 R (page.82) 1349 0 R] +1826 0 obj << +/Names [(page.78) 1323 0 R (page.79) 1332 0 R (page.8) 799 0 R (page.80) 1339 0 R (page.81) 1343 0 R (page.82) 1348 0 R] /Limits [(page.78) (page.82)] >> endobj -1828 0 obj << -/Names [(page.83) 1353 0 R (page.84) 1360 0 R (page.85) 1365 0 R (page.86) 1372 0 R (page.87) 1378 0 R (page.88) 1384 0 R] +1827 0 obj << +/Names [(page.83) 1352 0 R (page.84) 1359 0 R (page.85) 1364 0 R (page.86) 1371 0 R (page.87) 1377 0 R (page.88) 1383 0 R] /Limits [(page.83) (page.88)] >> endobj -1829 0 obj << -/Names [(page.89) 1390 0 R (page.9) 810 0 R (page.90) 1397 0 R (page.91) 1404 0 R (page.92) 1409 0 R (page.93) 1419 0 R] +1828 0 obj << +/Names [(page.89) 1389 0 R (page.9) 810 0 R (page.90) 1396 0 R (page.91) 1403 0 R (page.92) 1408 0 R (page.93) 1418 0 R] /Limits [(page.89) (page.93)] >> endobj -1830 0 obj << -/Names [(page.94) 1423 0 R (page.95) 1427 0 R (page.96) 1440 0 R (page.97) 1444 0 R (page.98) 1451 0 R (page.99) 1457 0 R] +1829 0 obj << +/Names [(page.94) 1422 0 R (page.95) 1426 0 R (page.96) 1439 0 R (page.97) 1443 0 R (page.98) 1450 0 R (page.99) 1456 0 R] /Limits [(page.94) (page.99)] >> endobj -1831 0 obj << +1830 0 obj << /Names [(page.i) 589 0 R (page.ii) 641 0 R (page.iii) 681 0 R (page.iv) 685 0 R (precdata) 905 0 R (section*.1) 590 0 R] /Limits [(page.i) (section*.1)] >> endobj -1832 0 obj << +1831 0 obj << /Names [(section*.10) 94 0 R (section*.100) 498 0 R (section*.101) 502 0 R (section*.102) 506 0 R (section*.103) 510 0 R (section*.104) 514 0 R] /Limits [(section*.10) (section*.104)] >> endobj -1833 0 obj << -/Names [(section*.105) 522 0 R (section*.106) 1706 0 R (section*.11) 98 0 R (section*.12) 102 0 R (section*.13) 106 0 R (section*.14) 110 0 R] +1832 0 obj << +/Names [(section*.105) 522 0 R (section*.106) 1705 0 R (section*.11) 98 0 R (section*.12) 102 0 R (section*.13) 106 0 R (section*.14) 110 0 R] /Limits [(section*.105) (section*.14)] >> endobj -1834 0 obj << +1833 0 obj << /Names [(section*.15) 114 0 R (section*.16) 118 0 R (section*.17) 122 0 R (section*.18) 126 0 R (section*.19) 130 0 R (section*.2) 50 0 R] /Limits [(section*.15) (section*.2)] >> endobj -1835 0 obj << +1834 0 obj << /Names [(section*.20) 134 0 R (section*.21) 138 0 R (section*.22) 142 0 R (section*.23) 146 0 R (section*.24) 150 0 R (section*.25) 154 0 R] /Limits [(section*.20) (section*.25)] >> endobj -1836 0 obj << +1835 0 obj << /Names [(section*.26) 170 0 R (section*.27) 174 0 R (section*.28) 178 0 R (section*.29) 182 0 R (section*.3) 54 0 R (section*.30) 194 0 R] /Limits [(section*.26) (section*.30)] >> endobj -1837 0 obj << +1836 0 obj << /Names [(section*.31) 198 0 R (section*.32) 202 0 R (section*.33) 206 0 R (section*.34) 210 0 R (section*.35) 214 0 R (section*.36) 218 0 R] /Limits [(section*.31) (section*.36)] >> endobj -1838 0 obj << +1837 0 obj << /Names [(section*.37) 222 0 R (section*.38) 226 0 R (section*.39) 230 0 R (section*.4) 58 0 R (section*.40) 234 0 R (section*.41) 238 0 R] /Limits [(section*.37) (section*.41)] >> endobj -1839 0 obj << +1838 0 obj << /Names [(section*.42) 242 0 R (section*.43) 250 0 R (section*.44) 254 0 R (section*.45) 258 0 R (section*.46) 262 0 R (section*.47) 270 0 R] /Limits [(section*.42) (section*.47)] >> endobj -1840 0 obj << +1839 0 obj << /Names [(section*.48) 274 0 R (section*.49) 278 0 R (section*.5) 62 0 R (section*.50) 282 0 R (section*.51) 286 0 R (section*.52) 290 0 R] /Limits [(section*.48) (section*.52)] >> endobj -1841 0 obj << +1840 0 obj << /Names [(section*.53) 294 0 R (section*.54) 298 0 R (section*.55) 302 0 R (section*.56) 306 0 R (section*.57) 310 0 R (section*.58) 314 0 R] /Limits [(section*.53) (section*.58)] >> endobj -1842 0 obj << +1841 0 obj << /Names [(section*.59) 318 0 R (section*.6) 66 0 R (section*.60) 322 0 R (section*.61) 326 0 R (section*.62) 330 0 R (section*.63) 334 0 R] /Limits [(section*.59) (section*.63)] >> endobj -1843 0 obj << +1842 0 obj << /Names [(section*.64) 338 0 R (section*.65) 342 0 R (section*.66) 346 0 R (section*.67) 350 0 R (section*.68) 354 0 R (section*.69) 358 0 R] /Limits [(section*.64) (section*.69)] >> endobj -1844 0 obj << +1843 0 obj << /Names [(section*.7) 70 0 R (section*.70) 362 0 R (section*.71) 366 0 R (section*.72) 370 0 R (section*.73) 374 0 R (section*.74) 382 0 R] /Limits [(section*.7) (section*.74)] >> endobj -1845 0 obj << +1844 0 obj << /Names [(section*.75) 386 0 R (section*.76) 390 0 R (section*.77) 394 0 R (section*.78) 398 0 R (section*.79) 402 0 R (section*.8) 74 0 R] /Limits [(section*.75) (section*.8)] >> endobj -1846 0 obj << +1845 0 obj << /Names [(section*.80) 406 0 R (section*.81) 410 0 R (section*.82) 414 0 R (section*.83) 418 0 R (section*.84) 422 0 R (section*.85) 426 0 R] /Limits [(section*.80) (section*.85)] >> endobj -1847 0 obj << +1846 0 obj << /Names [(section*.86) 430 0 R (section*.87) 434 0 R (section*.88) 438 0 R (section*.89) 442 0 R (section*.9) 78 0 R (section*.90) 450 0 R] /Limits [(section*.86) (section*.90)] >> endobj -1848 0 obj << +1847 0 obj << /Names [(section*.91) 454 0 R (section*.92) 458 0 R (section*.93) 462 0 R (section*.94) 470 0 R (section*.95) 474 0 R (section*.96) 478 0 R] /Limits [(section*.91) (section*.96)] >> endobj -1849 0 obj << +1848 0 obj << /Names [(section*.97) 482 0 R (section*.98) 486 0 R (section*.99) 490 0 R (section.1) 10 0 R (section.10) 494 0 R (section.11) 518 0 R] /Limits [(section*.97) (section.11)] >> endobj -1850 0 obj << +1849 0 obj << /Names [(section.2) 14 0 R (section.3) 38 0 R (section.4) 190 0 R (section.5) 246 0 R (section.6) 266 0 R (section.7) 378 0 R] /Limits [(section.2) (section.7)] >> endobj -1851 0 obj << +1850 0 obj << /Names [(section.8) 446 0 R (section.9) 466 0 R (spbasedata) 860 0 R (spdata) 853 0 R (subsection.2.1) 18 0 R (subsection.2.2) 22 0 R] /Limits [(section.8) (subsection.2.2)] >> endobj -1852 0 obj << +1851 0 obj << /Names [(subsection.2.3) 26 0 R (subsection.2.4) 34 0 R (subsection.3.1) 42 0 R (subsection.3.2) 86 0 R (subsection.3.3) 162 0 R (subsection.3.4) 186 0 R] /Limits [(subsection.2.3) (subsection.3.4)] >> endobj -1853 0 obj << +1852 0 obj << /Names [(subsubsection.2.3.1) 30 0 R (subsubsection.3.1.1) 46 0 R (subsubsection.3.1.2) 82 0 R (subsubsection.3.2.1) 90 0 R (subsubsection.3.2.2) 158 0 R (subsubsection.3.3.1) 166 0 R] /Limits [(subsubsection.2.3.1) (subsubsection.3.3.1)] >> endobj -1854 0 obj << +1853 0 obj << /Names [(table.1) 924 0 R (table.10) 1021 0 R (table.11) 1029 0 R (table.12) 1042 0 R (table.13) 1060 0 R (table.14) 1091 0 R] /Limits [(table.1) (table.14)] >> endobj -1855 0 obj << -/Names [(table.15) 1121 0 R (table.16) 1157 0 R (table.17) 1172 0 R (table.2) 941 0 R (table.3) 956 0 R (table.4) 969 0 R] +1854 0 obj << +/Names [(table.15) 1120 0 R (table.16) 1156 0 R (table.17) 1171 0 R (table.2) 941 0 R (table.3) 956 0 R (table.4) 969 0 R] /Limits [(table.15) (table.4)] >> endobj -1856 0 obj << +1855 0 obj << /Names [(table.5) 977 0 R (table.6) 985 0 R (table.7) 993 0 R (table.8) 1005 0 R (table.9) 1014 0 R (title.0) 6 0 R] /Limits [(table.5) (title.0)] >> endobj -1857 0 obj << +1856 0 obj << /Names [(vbasedata) 894 0 R (vdata) 893 0 R] /Limits [(vbasedata) (vdata)] >> endobj -1858 0 obj << -/Kids [1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R] +1857 0 obj << +/Kids [1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R] /Limits [(Doc-Start) (Item.2)] >> endobj -1859 0 obj << -/Kids [1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R] +1858 0 obj << +/Kids [1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R] /Limits [(Item.20) (Item.52)] >> endobj -1860 0 obj << -/Kids [1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R] +1859 0 obj << +/Kids [1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R] /Limits [(Item.53) (Item.85)] >> endobj -1861 0 obj << -/Kids [1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R] +1860 0 obj << +/Kids [1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R] /Limits [(Item.86) (equation.1)] >> endobj -1862 0 obj << -/Kids [1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R] +1861 0 obj << +/Kids [1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R] /Limits [(equation.2) (lstnumber.-15.1)] >> endobj -1863 0 obj << -/Kids [1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R 1807 0 R] +1862 0 obj << +/Kids [1801 0 R 1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R] /Limits [(lstnumber.-16.1) (lstnumber.-9.1)] >> endobj -1864 0 obj << -/Kids [1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R] +1863 0 obj << +/Kids [1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R] /Limits [(page.1) (page.130)] >> endobj -1865 0 obj << -/Kids [1814 0 R 1815 0 R 1816 0 R 1817 0 R 1818 0 R 1819 0 R] +1864 0 obj << +/Kids [1813 0 R 1814 0 R 1815 0 R 1816 0 R 1817 0 R 1818 0 R] /Limits [(page.131) (page.39)] >> endobj -1866 0 obj << -/Kids [1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R] +1865 0 obj << +/Kids [1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R] /Limits [(page.4) (page.71)] >> endobj -1867 0 obj << -/Kids [1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R] +1866 0 obj << +/Kids [1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R] /Limits [(page.72) (section*.1)] >> endobj -1868 0 obj << -/Kids [1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R] +1867 0 obj << +/Kids [1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R] /Limits [(section*.10) (section*.36)] >> endobj -1869 0 obj << -/Kids [1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R] +1868 0 obj << +/Kids [1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R] /Limits [(section*.37) (section*.69)] >> endobj -1870 0 obj << -/Kids [1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R] +1869 0 obj << +/Kids [1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R] /Limits [(section*.7) (section.11)] >> endobj -1871 0 obj << -/Kids [1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R] +1870 0 obj << +/Kids [1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R] /Limits [(section.2) (table.4)] >> endobj -1872 0 obj << -/Kids [1856 0 R 1857 0 R] +1871 0 obj << +/Kids [1855 0 R 1856 0 R] /Limits [(table.5) (vdata)] >> endobj -1873 0 obj << -/Kids [1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R] +1872 0 obj << +/Kids [1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R] /Limits [(Doc-Start) (lstnumber.-9.1)] >> endobj -1874 0 obj << -/Kids [1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R] +1873 0 obj << +/Kids [1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R] /Limits [(page.1) (section*.69)] >> endobj -1875 0 obj << -/Kids [1870 0 R 1871 0 R 1872 0 R] +1874 0 obj << +/Kids [1869 0 R 1870 0 R 1871 0 R] /Limits [(section*.7) (vdata)] >> endobj -1876 0 obj << -/Kids [1873 0 R 1874 0 R 1875 0 R] +1875 0 obj << +/Kids [1872 0 R 1873 0 R 1874 0 R] /Limits [(Doc-Start) (vdata)] >> endobj -1877 0 obj << -/Dests 1876 0 R +1876 0 obj << +/Dests 1875 0 R >> endobj -1878 0 obj << +1877 0 obj << /Type /Catalog -/Pages 1770 0 R -/Outlines 1771 0 R -/Names 1877 0 R +/Pages 1769 0 R +/Outlines 1770 0 R +/Names 1876 0 R /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 2 << /S /r >> 6 << /S /D >> ] >> /OpenAction 525 0 R >> endobj -1879 0 obj << - /Title (Parallel Sparse BLAS V. 3.2) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id: userguide.tex 7725 2014-03-21 08:58:20Z sfilippo $) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords() -/CreationDate (D:20140327162744+01'00') -/ModDate (D:20140327162744+01'00') +1878 0 obj << + /Title (Parallel Sparse BLAS V. 3.4) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id: userguide.tex 7725 2014-03-21 08:58:20Z sfilippo $) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords() +/CreationDate (D:20150428183155+02'00') +/ModDate (D:20150428183155+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref -0 1880 +0 1879 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000015 00000 n -0000012148 00000 n -0001015602 00000 n +0000012138 00000 n +0001014275 00000 n 0000000058 00000 n 0000000100 00000 n -0000099003 00000 n -0001015530 00000 n +0000098993 00000 n +0001014203 00000 n 0000000145 00000 n 0000000178 00000 n -0000110613 00000 n -0001015407 00000 n +0000110603 00000 n +0001014080 00000 n 0000000224 00000 n 0000000261 00000 n -0000120446 00000 n -0001015333 00000 n +0000120436 00000 n +0001014006 00000 n 0000000312 00000 n 0000000353 00000 n -0000128785 00000 n -0001015246 00000 n +0000128775 00000 n +0001013919 00000 n 0000000404 00000 n 0000000443 00000 n -0000144049 00000 n -0001015122 00000 n +0000144039 00000 n +0001013795 00000 n 0000000494 00000 n 0000000538 00000 n -0000160796 00000 n -0001015061 00000 n +0000160786 00000 n +0001013734 00000 n 0000000594 00000 n 0000000646 00000 n -0000161229 00000 n -0001014987 00000 n +0000161219 00000 n +0001013660 00000 n 0000000697 00000 n 0000000737 00000 n -0000170289 00000 n -0001014862 00000 n +0000170279 00000 n +0001013535 00000 n 0000000783 00000 n 0000000831 00000 n -0000170349 00000 n -0001014751 00000 n +0000170339 00000 n +0001013424 00000 n 0000000882 00000 n 0000000930 00000 n -0000189788 00000 n -0001014640 00000 n +0000189778 00000 n +0001013313 00000 n 0000000986 00000 n 0000001029 00000 n -0000189849 00000 n -0001014566 00000 n +0000189839 00000 n +0001013239 00000 n 0000001076 00000 n 0000001115 00000 n -0000189910 00000 n -0001014479 00000 n +0000189900 00000 n +0001013152 00000 n 0000001162 00000 n 0000001201 00000 n -0000189971 00000 n -0001014392 00000 n +0000189961 00000 n +0001013065 00000 n 0000001248 00000 n 0000001288 00000 n -0000194649 00000 n -0001014305 00000 n +0000194639 00000 n +0001012978 00000 n 0000001335 00000 n 0000001375 00000 n -0000194709 00000 n -0001014218 00000 n +0000194699 00000 n +0001012891 00000 n 0000001422 00000 n 0000001455 00000 n -0000194767 00000 n -0001014131 00000 n +0000194757 00000 n +0001012804 00000 n 0000001502 00000 n 0000001526 00000 n -0000194827 00000 n -0001014044 00000 n +0000194817 00000 n +0001012717 00000 n 0000001573 00000 n 0000001630 00000 n -0000203678 00000 n -0001013970 00000 n +0000203668 00000 n +0001012643 00000 n 0000001677 00000 n 0000001734 00000 n -0000203739 00000 n -0001013896 00000 n +0000203729 00000 n +0001012569 00000 n 0000001790 00000 n 0000001830 00000 n -0000203800 00000 n -0001013770 00000 n +0000203790 00000 n +0001012443 00000 n 0000001881 00000 n 0000001923 00000 n -0000211274 00000 n -0001013656 00000 n +0000211264 00000 n +0001012329 00000 n 0000001979 00000 n 0000002025 00000 n -0000211334 00000 n -0001013582 00000 n +0000211324 00000 n +0001012255 00000 n 0000002073 00000 n 0000002104 00000 n -0000215752 00000 n -0001013493 00000 n +0000215742 00000 n +0001012166 00000 n 0000002152 00000 n 0000002184 00000 n -0000215813 00000 n -0001013402 00000 n +0000215803 00000 n +0001012075 00000 n 0000002233 00000 n 0000002267 00000 n -0000215937 00000 n -0001013310 00000 n +0000215927 00000 n +0001011983 00000 n 0000002316 00000 n 0000002348 00000 n -0000220036 00000 n -0001013218 00000 n +0000220026 00000 n +0001011891 00000 n 0000002397 00000 n 0000002424 00000 n -0000220097 00000 n -0001013126 00000 n +0000220087 00000 n +0001011799 00000 n 0000002473 00000 n 0000002504 00000 n -0000220158 00000 n -0001013034 00000 n +0000220148 00000 n +0001011707 00000 n 0000002553 00000 n 0000002605 00000 n -0000224861 00000 n -0001012942 00000 n +0000224851 00000 n +0001011615 00000 n 0000002654 00000 n 0000002726 00000 n -0000224923 00000 n -0001012850 00000 n +0000224913 00000 n +0001011523 00000 n 0000002775 00000 n 0000002800 00000 n -0000228986 00000 n -0001012758 00000 n +0000228976 00000 n +0001011431 00000 n 0000002849 00000 n 0000002875 00000 n -0000229047 00000 n -0001012666 00000 n +0000229037 00000 n +0001011339 00000 n 0000002924 00000 n 0000002955 00000 n -0000233784 00000 n -0001012574 00000 n +0000233774 00000 n +0001011247 00000 n 0000003004 00000 n 0000003036 00000 n -0000233846 00000 n -0001012482 00000 n +0000233836 00000 n +0001011155 00000 n 0000003085 00000 n 0000003109 00000 n -0000238962 00000 n -0001012390 00000 n +0000238952 00000 n +0001011063 00000 n 0000003158 00000 n 0000003182 00000 n -0000239023 00000 n -0001012298 00000 n +0000239013 00000 n +0001010971 00000 n 0000003231 00000 n 0000003279 00000 n -0000239084 00000 n -0001012220 00000 n +0000239074 00000 n +0001010893 00000 n 0000003328 00000 n 0000003353 00000 n -0000247606 00000 n -0001012143 00000 n +0000247596 00000 n +0001010816 00000 n 0000003410 00000 n 0000003451 00000 n -0000247668 00000 n -0001012013 00000 n +0000247658 00000 n +0001010686 00000 n 0000003503 00000 n 0000003554 00000 n -0000251299 00000 n -0001011909 00000 n +0000251289 00000 n +0001010582 00000 n 0000003611 00000 n 0000003651 00000 n -0000251360 00000 n -0001011830 00000 n +0000251350 00000 n +0001010503 00000 n 0000003700 00000 n 0000003732 00000 n -0000251421 00000 n -0001011737 00000 n +0000251411 00000 n +0001010410 00000 n 0000003781 00000 n 0000003808 00000 n -0000251482 00000 n -0001011644 00000 n +0000251472 00000 n +0001010317 00000 n 0000003857 00000 n 0000003889 00000 n -0000254992 00000 n -0001011565 00000 n +0000254982 00000 n +0001010238 00000 n 0000003938 00000 n 0000003963 00000 n -0000255054 00000 n -0001011487 00000 n +0000255044 00000 n +0001010160 00000 n 0000004015 00000 n 0000004068 00000 n -0000255759 00000 n -0001011357 00000 n +0000255749 00000 n +0001010030 00000 n 0000004115 00000 n 0000004159 00000 n -0000264421 00000 n -0001011278 00000 n +0000264411 00000 n +0001009951 00000 n 0000004208 00000 n 0000004242 00000 n -0000277259 00000 n -0001011185 00000 n +0000277249 00000 n +0001009858 00000 n 0000004291 00000 n 0000004323 00000 n -0000288089 00000 n -0001011092 00000 n +0000288079 00000 n +0001009765 00000 n 0000004372 00000 n 0000004405 00000 n -0000297128 00000 n -0001010999 00000 n +0000297118 00000 n +0001009672 00000 n 0000004454 00000 n 0000004486 00000 n -0000304449 00000 n -0001010906 00000 n +0000304439 00000 n +0001009579 00000 n 0000004535 00000 n 0000004569 00000 n -0000312174 00000 n -0001010813 00000 n +0000312164 00000 n +0001009486 00000 n 0000004618 00000 n 0000004650 00000 n -0000320497 00000 n -0001010720 00000 n +0000320487 00000 n +0001009393 00000 n 0000004699 00000 n 0000004733 00000 n -0000329237 00000 n -0001010627 00000 n +0000329227 00000 n +0001009300 00000 n 0000004782 00000 n 0000004814 00000 n -0000336411 00000 n -0001010534 00000 n +0000336401 00000 n +0001009207 00000 n 0000004863 00000 n 0000004897 00000 n -0000342780 00000 n -0001010441 00000 n +0000342770 00000 n +0001009114 00000 n 0000004946 00000 n 0000004978 00000 n -0000349156 00000 n -0001010348 00000 n +0000349146 00000 n +0001009021 00000 n 0000005027 00000 n 0000005059 00000 n -0000357658 00000 n -0001010255 00000 n +0000357648 00000 n +0001008928 00000 n 0000005108 00000 n 0000005139 00000 n -0000373978 00000 n -0001010176 00000 n +0000373968 00000 n +0001008849 00000 n 0000005188 00000 n 0000005219 00000 n -0000390012 00000 n -0001010046 00000 n +0000390002 00000 n +0001008719 00000 n 0000005266 00000 n 0000005310 00000 n -0000398328 00000 n -0001009967 00000 n +0000398147 00000 n +0001008640 00000 n 0000005359 00000 n 0000005390 00000 n -0000420536 00000 n -0001009874 00000 n +0000419456 00000 n +0001008547 00000 n 0000005439 00000 n 0000005470 00000 n -0000447071 00000 n -0001009781 00000 n +0000445991 00000 n +0001008454 00000 n 0000005519 00000 n 0000005552 00000 n -0000458331 00000 n -0001009702 00000 n +0000457251 00000 n +0001008375 00000 n 0000005601 00000 n 0000005635 00000 n -0000467833 00000 n -0001009571 00000 n +0000466753 00000 n +0001008244 00000 n 0000005682 00000 n 0000005728 00000 n -0000467896 00000 n -0001009492 00000 n +0000466816 00000 n +0001008165 00000 n 0000005777 00000 n 0000005809 00000 n -0000496913 00000 n -0001009399 00000 n +0000495833 00000 n +0001008072 00000 n 0000005858 00000 n 0000005890 00000 n -0000505056 00000 n -0001009306 00000 n +0000503976 00000 n +0001007979 00000 n 0000005939 00000 n 0000005971 00000 n -0000509149 00000 n -0001009213 00000 n +0000508069 00000 n +0001007886 00000 n 0000006020 00000 n 0000006052 00000 n -0000511982 00000 n -0001009120 00000 n +0000510902 00000 n +0001007793 00000 n 0000006101 00000 n 0000006134 00000 n -0000518659 00000 n -0001009027 00000 n +0000517579 00000 n +0001007700 00000 n 0000006183 00000 n 0000006218 00000 n -0000526367 00000 n -0001008934 00000 n +0000525287 00000 n +0001007607 00000 n 0000006267 00000 n 0000006299 00000 n -0000533771 00000 n -0001008841 00000 n +0000532691 00000 n +0001007514 00000 n 0000006348 00000 n 0000006380 00000 n -0000548377 00000 n -0001008748 00000 n +0000547297 00000 n +0001007421 00000 n 0000006429 00000 n 0000006461 00000 n -0000555166 00000 n -0001008655 00000 n +0000554086 00000 n +0001007328 00000 n 0000006510 00000 n 0000006543 00000 n -0000559908 00000 n -0001008562 00000 n +0000558828 00000 n +0001007235 00000 n 0000006592 00000 n 0000006623 00000 n -0000565832 00000 n -0001008469 00000 n +0000564752 00000 n +0001007142 00000 n 0000006672 00000 n 0000006704 00000 n -0000573412 00000 n -0001008376 00000 n +0000572332 00000 n +0001007049 00000 n 0000006753 00000 n 0000006785 00000 n -0000581132 00000 n -0001008283 00000 n +0000580052 00000 n +0001006956 00000 n 0000006834 00000 n 0000006866 00000 n -0000585273 00000 n -0001008190 00000 n +0000584193 00000 n +0001006863 00000 n 0000006915 00000 n 0000006948 00000 n -0000589129 00000 n -0001008097 00000 n +0000588049 00000 n +0001006770 00000 n 0000006997 00000 n 0000007028 00000 n -0000596292 00000 n -0001008004 00000 n +0000595212 00000 n +0001006677 00000 n 0000007077 00000 n 0000007121 00000 n -0000603782 00000 n -0001007911 00000 n +0000602702 00000 n +0001006584 00000 n 0000007170 00000 n 0000007214 00000 n -0000607658 00000 n -0001007818 00000 n +0000606578 00000 n +0001006491 00000 n 0000007263 00000 n 0000007302 00000 n -0000613308 00000 n -0001007725 00000 n +0000612228 00000 n +0001006398 00000 n 0000007351 00000 n 0000007393 00000 n -0000617217 00000 n -0001007632 00000 n +0000616137 00000 n +0001006305 00000 n 0000007442 00000 n 0000007481 00000 n -0000622876 00000 n -0001007539 00000 n +0000621796 00000 n +0001006212 00000 n 0000007530 00000 n 0000007572 00000 n -0000627365 00000 n -0001007446 00000 n +0000626285 00000 n +0001006119 00000 n 0000007621 00000 n 0000007663 00000 n -0000631735 00000 n -0001007353 00000 n +0000630655 00000 n +0001006026 00000 n 0000007712 00000 n 0000007753 00000 n -0000638236 00000 n -0001007260 00000 n +0000637156 00000 n +0001005933 00000 n 0000007802 00000 n 0000007841 00000 n -0000647556 00000 n -0001007167 00000 n +0000646476 00000 n +0001005840 00000 n 0000007890 00000 n 0000007923 00000 n -0000653761 00000 n -0001007088 00000 n +0000652681 00000 n +0001005761 00000 n 0000007972 00000 n 0000008009 00000 n -0000662309 00000 n -0001006957 00000 n +0000661229 00000 n +0001005630 00000 n 0000008056 00000 n 0000008107 00000 n -0000668269 00000 n -0001006878 00000 n +0000667189 00000 n +0001005551 00000 n 0000008156 00000 n 0000008187 00000 n -0000673478 00000 n -0001006785 00000 n +0000672398 00000 n +0001005458 00000 n 0000008236 00000 n 0000008267 00000 n -0000678406 00000 n -0001006692 00000 n +0000677326 00000 n +0001005365 00000 n 0000008316 00000 n 0000008347 00000 n -0000681200 00000 n -0001006599 00000 n +0000680120 00000 n +0001005272 00000 n 0000008396 00000 n 0000008437 00000 n -0000684639 00000 n -0001006506 00000 n +0000683559 00000 n +0001005179 00000 n 0000008486 00000 n 0000008524 00000 n -0000686286 00000 n -0001006413 00000 n +0000685206 00000 n +0001005086 00000 n 0000008573 00000 n 0000008605 00000 n -0000688189 00000 n -0001006320 00000 n +0000687109 00000 n +0001004993 00000 n 0000008654 00000 n 0000008688 00000 n -0000689965 00000 n -0001006227 00000 n +0000688885 00000 n +0001004900 00000 n 0000008737 00000 n 0000008769 00000 n -0000694936 00000 n -0001006134 00000 n +0000693856 00000 n +0001004807 00000 n 0000008818 00000 n 0000008850 00000 n -0000700580 00000 n -0001006041 00000 n +0000699500 00000 n +0001004714 00000 n 0000008899 00000 n 0000008929 00000 n -0000706304 00000 n -0001005948 00000 n +0000705224 00000 n +0001004621 00000 n 0000008978 00000 n 0000009008 00000 n -0000712058 00000 n -0001005855 00000 n +0000710978 00000 n +0001004528 00000 n 0000009057 00000 n 0000009087 00000 n -0000717870 00000 n -0001005762 00000 n +0000716790 00000 n +0001004435 00000 n 0000009136 00000 n 0000009166 00000 n -0000723714 00000 n -0001005669 00000 n +0000722634 00000 n +0001004342 00000 n 0000009215 00000 n 0000009245 00000 n -0000729633 00000 n -0001005576 00000 n +0000728553 00000 n +0001004249 00000 n 0000009294 00000 n 0000009324 00000 n -0000735504 00000 n -0001005497 00000 n +0000734424 00000 n +0001004170 00000 n 0000009373 00000 n 0000009403 00000 n -0000742726 00000 n -0001005367 00000 n +0000741646 00000 n +0001004040 00000 n 0000009450 00000 n 0000009486 00000 n -0000756051 00000 n -0001005288 00000 n +0000754971 00000 n +0001003961 00000 n 0000009535 00000 n 0000009569 00000 n -0000757982 00000 n -0001005195 00000 n +0000756902 00000 n +0001003868 00000 n 0000009618 00000 n 0000009650 00000 n -0000760146 00000 n -0001005102 00000 n +0000759066 00000 n +0001003775 00000 n 0000009699 00000 n 0000009745 00000 n -0000762783 00000 n -0001005023 00000 n +0000761703 00000 n +0001003696 00000 n 0000009794 00000 n 0000009837 00000 n -0000763854 00000 n -0001004893 00000 n +0000762774 00000 n +0001003566 00000 n 0000009884 00000 n 0000009915 00000 n -0000769209 00000 n -0001004814 00000 n +0000768129 00000 n +0001003487 00000 n 0000009964 00000 n 0000009994 00000 n -0000775185 00000 n -0001004721 00000 n +0000774105 00000 n +0001003394 00000 n 0000010043 00000 n 0000010074 00000 n -0000779555 00000 n -0001004628 00000 n +0000778475 00000 n +0001003301 00000 n 0000010123 00000 n 0000010160 00000 n -0000783808 00000 n -0001004535 00000 n +0000782728 00000 n +0001003208 00000 n 0000010209 00000 n 0000010248 00000 n -0000788708 00000 n -0001004442 00000 n +0000787628 00000 n +0001003115 00000 n 0000010297 00000 n 0000010335 00000 n -0000792637 00000 n -0001004363 00000 n +0000791557 00000 n +0001003036 00000 n 0000010384 00000 n 0000010424 00000 n -0000794095 00000 n -0001004233 00000 n +0000793015 00000 n +0001002906 00000 n 0000010472 00000 n 0000010518 00000 n -0000799494 00000 n -0001004154 00000 n +0000798414 00000 n +0001002827 00000 n 0000010568 00000 n 0000010603 00000 n -0000807835 00000 n -0001004061 00000 n +0000806755 00000 n +0001002734 00000 n 0000010653 00000 n 0000010687 00000 n -0000814890 00000 n -0001003968 00000 n +0000813810 00000 n +0001002641 00000 n 0000010737 00000 n 0000010772 00000 n -0000817478 00000 n -0001003875 00000 n +0000816398 00000 n +0001002548 00000 n 0000010822 00000 n 0000010858 00000 n -0000818887 00000 n -0001003796 00000 n +0000817807 00000 n +0001002469 00000 n 0000010908 00000 n 0000010933 00000 n -0000819914 00000 n -0001003680 00000 n +0000818834 00000 n +0001002353 00000 n 0000010981 00000 n 0000011021 00000 n -0000829304 00000 n -0001003615 00000 n +0000828224 00000 n +0001002288 00000 n 0000011071 00000 n 0000011104 00000 n -0000011907 00000 n -0000012207 00000 n +0000011897 00000 n +0000012197 00000 n 0000011156 00000 n -0000012026 00000 n -0000012087 00000 n -0000997680 00000 n -0000999564 00000 n -0000997534 00000 n -0000998409 00000 n -0001000001 00000 n -0000012634 00000 n -0000012453 00000 n -0000012317 00000 n -0000012572 00000 n -0000029777 00000 n -0000029927 00000 n -0000030078 00000 n -0000030235 00000 n -0000030392 00000 n -0000030549 00000 n -0000030711 00000 n -0000030868 00000 n -0000031019 00000 n -0000031176 00000 n -0000031338 00000 n -0000031491 00000 n -0000031644 00000 n -0000031797 00000 n -0000031949 00000 n -0000032102 00000 n -0000032255 00000 n -0000032407 00000 n -0000032560 00000 n -0000032722 00000 n -0000032878 00000 n -0000033039 00000 n -0000033193 00000 n -0000033345 00000 n -0000033499 00000 n -0000033652 00000 n -0000033806 00000 n -0000033960 00000 n -0000034114 00000 n -0000034267 00000 n -0000034420 00000 n -0000034574 00000 n -0000034728 00000 n -0000034882 00000 n -0000035036 00000 n -0000035190 00000 n -0000035344 00000 n -0000035498 00000 n -0000035660 00000 n -0000035815 00000 n -0000035977 00000 n -0000036131 00000 n -0000036284 00000 n -0000036438 00000 n -0000036592 00000 n -0000058812 00000 n -0000036870 00000 n -0000029286 00000 n -0000012705 00000 n -0000036748 00000 n -0000036809 00000 n -0000058964 00000 n -0000059118 00000 n -0000059271 00000 n -0000059423 00000 n -0000059577 00000 n -0000059731 00000 n -0000059885 00000 n -0000060035 00000 n -0000060188 00000 n -0000060341 00000 n -0000060495 00000 n -0000060649 00000 n -0000060800 00000 n -0000060952 00000 n -0000061104 00000 n -0000061258 00000 n -0000061412 00000 n -0000061566 00000 n -0000061720 00000 n -0000061871 00000 n -0000062024 00000 n -0000062178 00000 n -0000062332 00000 n -0000062486 00000 n -0000062640 00000 n -0000062794 00000 n -0000062948 00000 n -0000063102 00000 n -0000063256 00000 n -0000063410 00000 n -0000063564 00000 n -0000063718 00000 n -0000063872 00000 n -0000064026 00000 n -0000064180 00000 n -0000064334 00000 n -0000064487 00000 n -0000064640 00000 n -0000064794 00000 n -0000064948 00000 n -0000065102 00000 n -0000065254 00000 n -0000065406 00000 n -0000065558 00000 n -0000065712 00000 n -0000065866 00000 n -0000082450 00000 n -0000066081 00000 n -0000058305 00000 n -0000036967 00000 n -0000066019 00000 n -0000082601 00000 n -0000082754 00000 n -0000082908 00000 n -0000083061 00000 n -0000083214 00000 n -0000083367 00000 n -0000083521 00000 n -0000083675 00000 n -0000083829 00000 n -0000083983 00000 n -0000084137 00000 n -0000084291 00000 n -0000084445 00000 n -0000084599 00000 n -0000084752 00000 n -0000084906 00000 n -0000085060 00000 n -0000085211 00000 n -0000085364 00000 n -0000085518 00000 n -0000085672 00000 n -0000085826 00000 n -0000085977 00000 n -0000086131 00000 n -0000086285 00000 n -0000086439 00000 n -0000086593 00000 n -0000086747 00000 n -0000086901 00000 n -0000087053 00000 n -0000087208 00000 n -0000087363 00000 n -0000087517 00000 n -0000087672 00000 n -0000087826 00000 n -0000087977 00000 n -0000088192 00000 n -0000082023 00000 n -0000066165 00000 n -0000088131 00000 n -0000088595 00000 n -0000088414 00000 n -0000088276 00000 n -0000088533 00000 n -0000097454 00000 n -0000097608 00000 n -0000097764 00000 n -0000097921 00000 n -0000098080 00000 n -0000098236 00000 n -0000098390 00000 n -0000098544 00000 n -0000098697 00000 n -0000098850 00000 n -0000099063 00000 n -0000097243 00000 n -0000088666 00000 n -0000999418 00000 n -0001000119 00000 n -0000852275 00000 n -0000848429 00000 n -0000847808 00000 n -0000852338 00000 n -0000852212 00000 n -0000848242 00000 n -0000848304 00000 n -0000852149 00000 n -0000848056 00000 n -0000848118 00000 n -0000110158 00000 n -0000110308 00000 n -0000110461 00000 n -0000104955 00000 n -0000119927 00000 n -0000110734 00000 n -0000104800 00000 n -0000099160 00000 n -0000997972 00000 n -0000110674 00000 n -0000106165 00000 n -0000106411 00000 n -0000106458 00000 n -0000106851 00000 n -0000106872 00000 n -0000107179 00000 n -0000848180 00000 n -0000120078 00000 n -0000120232 00000 n -0000120630 00000 n -0000119772 00000 n -0000110859 00000 n -0000120385 00000 n -0000999710 00000 n -0000998697 00000 n -0000998264 00000 n -0000999129 00000 n -0000998554 00000 n -0000120506 00000 n -0000998840 00000 n -0000120568 00000 n -0000852086 00000 n -0000128355 00000 n -0000128508 00000 n -0000126384 00000 n -0000128846 00000 n -0000126237 00000 n -0000120830 00000 n -0000128661 00000 n -0000128723 00000 n -0000128093 00000 n -0000128212 00000 n -0000128259 00000 n -0000128333 00000 n -0000847994 00000 n -0000847932 00000 n -0000134678 00000 n -0000134829 00000 n -0000135042 00000 n -0000134531 00000 n -0000129010 00000 n -0000134981 00000 n -0000144606 00000 n -0000143868 00000 n -0000135152 00000 n -0000143987 00000 n -0000998118 00000 n -0000144110 00000 n -0000144172 00000 n -0000144234 00000 n -0000144296 00000 n -0000144358 00000 n -0000144420 00000 n -0000144482 00000 n -0000144544 00000 n -0000160425 00000 n -0000152662 00000 n -0000151693 00000 n -0000144741 00000 n -0000151812 00000 n -0000151873 00000 n -0000151934 00000 n -0000151995 00000 n -0000152056 00000 n -0000152116 00000 n -0000152177 00000 n -0000152238 00000 n -0000152298 00000 n -0000152359 00000 n -0000152420 00000 n -0000152481 00000 n -0000152542 00000 n -0000152602 00000 n -0001000237 00000 n -0000160582 00000 n -0000161290 00000 n -0000160278 00000 n -0000152746 00000 n -0000160734 00000 n -0000160857 00000 n -0000160919 00000 n -0000160981 00000 n -0000161043 00000 n -0000161105 00000 n -0000161167 00000 n -0000170076 00000 n -0000170471 00000 n -0000169937 00000 n -0000161438 00000 n -0000170228 00000 n -0000170409 00000 n -0000177500 00000 n -0000178210 00000 n -0000177361 00000 n -0000170594 00000 n -0000177652 00000 n -0000177714 00000 n -0000177776 00000 n -0000177838 00000 n -0000177900 00000 n -0000177962 00000 n -0000178024 00000 n -0000178086 00000 n -0000178148 00000 n -0000183924 00000 n -0000183378 00000 n -0000178307 00000 n -0000183497 00000 n -0000183558 00000 n -0000183619 00000 n -0000183679 00000 n -0000183740 00000 n -0000183801 00000 n -0000183862 00000 n -0000189423 00000 n -0000189575 00000 n -0000190032 00000 n -0000189276 00000 n -0000184021 00000 n -0000189726 00000 n -0000194887 00000 n -0000194469 00000 n -0000190155 00000 n -0000194588 00000 n -0001000355 00000 n -0000203151 00000 n -0000203312 00000 n -0000203467 00000 n -0000203923 00000 n -0000202996 00000 n -0000194984 00000 n -0000203616 00000 n -0000203861 00000 n -0000852023 00000 n -0000211150 00000 n -0000211394 00000 n -0000210970 00000 n -0000204033 00000 n -0000211089 00000 n -0000211212 00000 n -0000215999 00000 n -0000215571 00000 n -0000211491 00000 n -0000215690 00000 n -0000215875 00000 n -0000220218 00000 n -0000219856 00000 n -0000216096 00000 n -0000219975 00000 n -0000224985 00000 n -0000224680 00000 n -0000220315 00000 n -0000224799 00000 n -0000229107 00000 n -0000228806 00000 n -0000225082 00000 n -0000228925 00000 n -0001000473 00000 n -0000233908 00000 n -0000233603 00000 n -0000229204 00000 n -0000233722 00000 n -0000239145 00000 n -0000238782 00000 n -0000234005 00000 n -0000238901 00000 n -0000247241 00000 n -0000247393 00000 n -0000247914 00000 n -0000247094 00000 n -0000239242 00000 n -0000247544 00000 n -0000247730 00000 n -0000247792 00000 n -0000247852 00000 n -0000251543 00000 n -0000251119 00000 n -0000248024 00000 n -0000251238 00000 n -0000254779 00000 n -0000255240 00000 n -0000254640 00000 n -0000251640 00000 n -0000254930 00000 n -0000255116 00000 n -0000999856 00000 n -0000255178 00000 n -0000255820 00000 n -0000255579 00000 n -0000255363 00000 n -0000255698 00000 n -0001000591 00000 n -0000263463 00000 n -0000263613 00000 n -0000263761 00000 n -0000263911 00000 n -0000264061 00000 n -0000264209 00000 n -0000267553 00000 n -0000264544 00000 n -0000263284 00000 n -0000255904 00000 n -0000264359 00000 n -0000264483 00000 n -0000267704 00000 n -0000267851 00000 n -0000268062 00000 n -0000267398 00000 n -0000264680 00000 n -0000268001 00000 n -0000276301 00000 n -0000276449 00000 n -0000276599 00000 n -0000276747 00000 n -0000276897 00000 n -0000277048 00000 n -0000277382 00000 n -0000276122 00000 n -0000268172 00000 n -0000277197 00000 n -0000277320 00000 n -0000278394 00000 n -0000278214 00000 n -0000277531 00000 n -0000278333 00000 n -0000287132 00000 n -0000287280 00000 n -0000287429 00000 n -0000287577 00000 n -0000287727 00000 n -0000287878 00000 n -0000288212 00000 n -0000286953 00000 n -0000278478 00000 n -0000288027 00000 n -0000288150 00000 n -0000289224 00000 n -0000289044 00000 n -0000288361 00000 n -0000289163 00000 n -0001000709 00000 n -0000296617 00000 n -0000296765 00000 n -0000296915 00000 n -0000297251 00000 n -0000296462 00000 n -0000289308 00000 n -0000297066 00000 n -0000297189 00000 n -0000303940 00000 n -0000304088 00000 n -0000304238 00000 n -0000304571 00000 n -0000303785 00000 n -0000297400 00000 n -0000304388 00000 n -0000304509 00000 n -0000311663 00000 n -0000311811 00000 n -0000311961 00000 n -0000312297 00000 n -0000311508 00000 n -0000304720 00000 n -0000312112 00000 n -0000312235 00000 n -0000319990 00000 n -0000320137 00000 n -0000320286 00000 n -0000320620 00000 n -0000319835 00000 n -0000312458 00000 n -0000320436 00000 n -0000320558 00000 n -0000321646 00000 n -0000321465 00000 n -0000320781 00000 n -0000321584 00000 n -0000328724 00000 n -0000328872 00000 n -0000329022 00000 n -0000329362 00000 n -0000328564 00000 n -0000321730 00000 n -0000329174 00000 n -0000329298 00000 n -0001000827 00000 n -0000335896 00000 n -0000336045 00000 n -0000336195 00000 n -0000336537 00000 n -0000335734 00000 n -0000329512 00000 n -0000336347 00000 n -0000336473 00000 n -0000342415 00000 n -0000342565 00000 n -0000342905 00000 n -0000342262 00000 n -0000336686 00000 n -0000342717 00000 n -0000342841 00000 n -0000348790 00000 n -0000348940 00000 n -0000349282 00000 n -0000348637 00000 n -0000343054 00000 n -0000349092 00000 n -0000999274 00000 n -0000349218 00000 n -0000356992 00000 n -0000357144 00000 n -0000357294 00000 n -0000357443 00000 n -0000365379 00000 n -0000357975 00000 n -0000356821 00000 n -0000349433 00000 n -0000357595 00000 n -0000357719 00000 n -0000357783 00000 n -0000357847 00000 n -0000357911 00000 n -0000365531 00000 n -0000365680 00000 n -0000365832 00000 n -0000365984 00000 n -0000366138 00000 n -0000366292 00000 n -0000366446 00000 n -0000366662 00000 n -0000365172 00000 n -0000358137 00000 n -0000366598 00000 n -0000373764 00000 n -0000382327 00000 n -0000374104 00000 n -0000373620 00000 n -0000366773 00000 n -0000373915 00000 n -0000374040 00000 n -0001000952 00000 n -0000382480 00000 n -0000382629 00000 n -0000382781 00000 n -0000382933 00000 n -0000383082 00000 n -0000383234 00000 n -0000383449 00000 n -0000382129 00000 n -0000374280 00000 n -0000383385 00000 n -0000388462 00000 n -0000388614 00000 n -0000388829 00000 n -0000388309 00000 n -0000383586 00000 n -0000388766 00000 n -0000389795 00000 n -0000390075 00000 n -0000389651 00000 n -0000388940 00000 n -0000389948 00000 n -0000397660 00000 n -0000397809 00000 n -0000397961 00000 n -0000398113 00000 n -0000398642 00000 n -0000397489 00000 n -0000390160 00000 n -0000398265 00000 n -0000398389 00000 n -0000398453 00000 n -0000398516 00000 n -0000398579 00000 n -0000407351 00000 n -0000403111 00000 n -0000407502 00000 n -0000407781 00000 n -0000402958 00000 n -0000398779 00000 n -0000407653 00000 n -0000407717 00000 n -0000407011 00000 n -0000407131 00000 n -0000407179 00000 n -0000407254 00000 n -0000407328 00000 n -0000411230 00000 n -0000411044 00000 n -0000407934 00000 n -0000411167 00000 n -0000998984 00000 n -0001001077 00000 n -0000420020 00000 n -0000420169 00000 n -0000420321 00000 n -0000420854 00000 n -0000419858 00000 n -0000411316 00000 n -0000420472 00000 n -0000420598 00000 n -0000420662 00000 n -0000420726 00000 n -0000420790 00000 n -0000427092 00000 n -0000432415 00000 n -0000427244 00000 n -0000427394 00000 n -0000427797 00000 n -0000426930 00000 n -0000421004 00000 n -0000427546 00000 n -0000427609 00000 n -0000427672 00000 n -0000427735 00000 n -0000436802 00000 n -0000431800 00000 n -0000431613 00000 n -0000427934 00000 n -0000431736 00000 n -0000436866 00000 n -0000432292 00000 n -0000431885 00000 n -0000436739 00000 n -0000436399 00000 n -0000436519 00000 n -0000436567 00000 n -0000436642 00000 n -0000436716 00000 n -0000446555 00000 n -0000446704 00000 n -0000446856 00000 n -0000447389 00000 n -0000446393 00000 n -0000436967 00000 n -0000447007 00000 n -0000447133 00000 n -0000447197 00000 n -0000447261 00000 n -0000447325 00000 n -0000449252 00000 n -0000449066 00000 n -0000447551 00000 n -0000449189 00000 n -0001001202 00000 n -0000458117 00000 n -0000460734 00000 n -0000458650 00000 n -0000457973 00000 n -0000449350 00000 n -0000458267 00000 n -0000458394 00000 n -0000458458 00000 n -0000458522 00000 n -0000458586 00000 n -0000460949 00000 n -0000460590 00000 n -0000458812 00000 n -0000460886 00000 n -0000467959 00000 n -0000467646 00000 n -0000461047 00000 n -0000467769 00000 n -0000474937 00000 n -0000475215 00000 n -0000474793 00000 n -0000468096 00000 n -0000475089 00000 n -0000475152 00000 n -0000485592 00000 n -0000485883 00000 n -0000485448 00000 n -0000475339 00000 n -0000485755 00000 n -0000485819 00000 n -0000489239 00000 n -0000488740 00000 n -0000486020 00000 n -0000488863 00000 n -0000488926 00000 n -0000488989 00000 n -0000489052 00000 n -0000489115 00000 n -0000489178 00000 n -0001001327 00000 n -0000496699 00000 n -0000496975 00000 n -0000496555 00000 n -0000489324 00000 n -0000496849 00000 n -0000500459 00000 n -0000500874 00000 n -0000500315 00000 n -0000497099 00000 n -0000500622 00000 n -0000500685 00000 n -0000500748 00000 n -0000500811 00000 n -0000504691 00000 n -0000504841 00000 n -0000505182 00000 n -0000504538 00000 n -0000500985 00000 n -0000504992 00000 n -0000505118 00000 n -0000508783 00000 n -0000508934 00000 n -0000509210 00000 n -0000508630 00000 n -0000505293 00000 n -0000509086 00000 n -0000511768 00000 n -0000512044 00000 n -0000511624 00000 n -0000509321 00000 n -0000511918 00000 n -0000518295 00000 n -0000518444 00000 n -0000518721 00000 n -0000518142 00000 n -0000512155 00000 n -0000518596 00000 n -0001001452 00000 n -0000520820 00000 n -0000520505 00000 n -0000518858 00000 n -0000520628 00000 n -0000520692 00000 n -0000520756 00000 n -0000526005 00000 n -0000526156 00000 n -0000526617 00000 n -0000525852 00000 n -0000520905 00000 n -0000526304 00000 n -0000526428 00000 n -0000526491 00000 n -0000526554 00000 n -0000533407 00000 n -0000533559 00000 n -0000540249 00000 n -0000533834 00000 n -0000533254 00000 n -0000526741 00000 n -0000533707 00000 n -0000541029 00000 n -0000540105 00000 n -0000533958 00000 n -0000540400 00000 n -0000540463 00000 n -0000540526 00000 n -0000540589 00000 n -0000540652 00000 n -0000540714 00000 n -0000540777 00000 n -0000540840 00000 n -0000540903 00000 n -0000540966 00000 n -0000548014 00000 n -0000548164 00000 n -0000548439 00000 n -0000547861 00000 n -0000541153 00000 n -0000548313 00000 n -0000551421 00000 n -0000550858 00000 n -0000548550 00000 n -0000550981 00000 n -0000551044 00000 n -0000551107 00000 n -0000551170 00000 n -0000551233 00000 n -0000551296 00000 n -0000551359 00000 n -0001001577 00000 n -0000554803 00000 n -0000554951 00000 n -0000555228 00000 n -0000554650 00000 n -0000551506 00000 n -0000555102 00000 n -0000559543 00000 n -0000559693 00000 n -0000560033 00000 n -0000559390 00000 n -0000555339 00000 n -0000559845 00000 n -0000559970 00000 n -0000565468 00000 n -0000565619 00000 n -0000565894 00000 n -0000565315 00000 n -0000560144 00000 n -0000565768 00000 n -0000573048 00000 n -0000573200 00000 n -0000573473 00000 n -0000572895 00000 n -0000566018 00000 n -0000573349 00000 n -0000575087 00000 n -0000574772 00000 n -0000573597 00000 n -0000574895 00000 n -0000574959 00000 n -0000575023 00000 n -0000580622 00000 n -0000580772 00000 n -0000580921 00000 n -0000581193 00000 n -0000580460 00000 n -0000575185 00000 n -0000581069 00000 n -0001001702 00000 n -0000584909 00000 n -0000585057 00000 n -0000585335 00000 n -0000584756 00000 n -0000581317 00000 n -0000585209 00000 n -0000589190 00000 n -0000588943 00000 n -0000585446 00000 n -0000589066 00000 n -0000596078 00000 n -0000596354 00000 n -0000595934 00000 n -0000589327 00000 n -0000596228 00000 n -0000597542 00000 n -0000597230 00000 n -0000596478 00000 n -0000597353 00000 n -0000597416 00000 n -0000597479 00000 n -0000603567 00000 n -0000603844 00000 n -0000603423 00000 n -0000597627 00000 n -0000603718 00000 n -0000607443 00000 n -0000607782 00000 n -0000607299 00000 n -0000603968 00000 n -0000607595 00000 n -0000607719 00000 n -0001001827 00000 n -0000613093 00000 n -0000613434 00000 n -0000612949 00000 n -0000607906 00000 n -0000613244 00000 n -0000613370 00000 n -0000617002 00000 n -0000617341 00000 n -0000616858 00000 n -0000613558 00000 n -0000617154 00000 n -0000617278 00000 n -0000622661 00000 n -0000623002 00000 n -0000622517 00000 n -0000617465 00000 n -0000622812 00000 n -0000622938 00000 n -0000627151 00000 n -0000627552 00000 n -0000627007 00000 n -0000623126 00000 n -0000627302 00000 n -0000627426 00000 n -0000627489 00000 n -0000631521 00000 n -0000631925 00000 n -0000631377 00000 n -0000627663 00000 n -0000631671 00000 n -0000631797 00000 n -0000631861 00000 n -0000638023 00000 n -0000638298 00000 n -0000637879 00000 n -0000632036 00000 n -0000638173 00000 n -0001001952 00000 n -0000642572 00000 n -0000642193 00000 n -0000638422 00000 n -0000642316 00000 n -0000642380 00000 n -0000642444 00000 n -0000642508 00000 n -0000647041 00000 n -0000647191 00000 n -0000647343 00000 n -0000647617 00000 n -0000646879 00000 n -0000642696 00000 n -0000647493 00000 n -0000653824 00000 n -0000653574 00000 n -0000647741 00000 n -0000653697 00000 n -0000661753 00000 n -0000661001 00000 n -0000653948 00000 n -0000661124 00000 n -0000661187 00000 n -0000661250 00000 n -0000661313 00000 n -0000661376 00000 n -0000661439 00000 n -0000661502 00000 n -0000661564 00000 n -0000661627 00000 n -0000661690 00000 n -0000662372 00000 n -0000662122 00000 n -0000661876 00000 n -0000662245 00000 n -0000668456 00000 n -0000668083 00000 n -0000662457 00000 n -0000668206 00000 n -0000668330 00000 n -0000668393 00000 n -0001002077 00000 n -0000673668 00000 n -0000673291 00000 n -0000668593 00000 n -0000673414 00000 n -0000673541 00000 n -0000673604 00000 n -0000678656 00000 n -0000678220 00000 n -0000673805 00000 n -0000678343 00000 n -0000678467 00000 n -0000678530 00000 n -0000678593 00000 n -0000681262 00000 n -0000681013 00000 n -0000678793 00000 n -0000681136 00000 n -0000684700 00000 n -0000684453 00000 n -0000681373 00000 n -0000684576 00000 n -0000686348 00000 n -0000686099 00000 n -0000684837 00000 n -0000686222 00000 n -0000688250 00000 n -0000688003 00000 n -0000686459 00000 n -0000688126 00000 n -0001002202 00000 n -0000690027 00000 n -0000689778 00000 n -0000688361 00000 n -0000689901 00000 n -0000694997 00000 n -0000694750 00000 n -0000690138 00000 n -0000694873 00000 n -0000700770 00000 n -0000700393 00000 n -0000695134 00000 n -0000700516 00000 n -0000700642 00000 n -0000700706 00000 n -0000706491 00000 n -0000706118 00000 n -0000700907 00000 n -0000706241 00000 n -0000706365 00000 n -0000706428 00000 n -0000712248 00000 n -0000711871 00000 n -0000706628 00000 n -0000711994 00000 n -0000712120 00000 n -0000712184 00000 n -0000718057 00000 n -0000717684 00000 n -0000712385 00000 n -0000717807 00000 n -0000717931 00000 n -0000717994 00000 n -0001002327 00000 n -0000723904 00000 n -0000723527 00000 n -0000718194 00000 n -0000723650 00000 n -0000723776 00000 n -0000723840 00000 n -0000729756 00000 n -0000729447 00000 n -0000724041 00000 n -0000729570 00000 n -0000729694 00000 n -0000735629 00000 n -0000735317 00000 n -0000729893 00000 n -0000735440 00000 n -0000735566 00000 n -0000742360 00000 n -0000742511 00000 n -0000742788 00000 n -0000742207 00000 n -0000735766 00000 n -0000742663 00000 n -0000751839 00000 n -0000751903 00000 n -0000751967 00000 n -0000750056 00000 n -0000742886 00000 n -0000750179 00000 n -0000750243 00000 n -0000750307 00000 n -0000997826 00000 n -0000750371 00000 n -0000750435 00000 n -0000750499 00000 n -0000750563 00000 n -0000750627 00000 n -0000750690 00000 n -0000750754 00000 n -0000750818 00000 n -0000750882 00000 n -0000750946 00000 n -0000751010 00000 n -0000751074 00000 n -0000751138 00000 n -0000751202 00000 n -0000751264 00000 n -0000751328 00000 n -0000751392 00000 n -0000751456 00000 n -0000751520 00000 n -0000751584 00000 n -0000751648 00000 n -0000751712 00000 n -0000751776 00000 n -0000756237 00000 n -0000755865 00000 n -0000752080 00000 n -0000755988 00000 n -0000756113 00000 n -0000756175 00000 n -0001002452 00000 n -0000758171 00000 n -0000757795 00000 n -0000756335 00000 n -0000757918 00000 n -0000758045 00000 n -0000758108 00000 n -0000760332 00000 n -0000759960 00000 n -0000758269 00000 n -0000760083 00000 n -0000760208 00000 n -0000760270 00000 n -0000762972 00000 n -0000762596 00000 n -0000760430 00000 n -0000762719 00000 n -0000762846 00000 n -0000762909 00000 n -0000763916 00000 n -0000763668 00000 n -0000763083 00000 n -0000763791 00000 n -0000768996 00000 n -0000769400 00000 n -0000768852 00000 n -0000764014 00000 n -0000769145 00000 n -0000769272 00000 n -0000769336 00000 n -0000774973 00000 n -0000775373 00000 n -0000774829 00000 n -0000769511 00000 n -0000775122 00000 n -0000775247 00000 n -0000775310 00000 n -0001002577 00000 n -0000779342 00000 n -0000779746 00000 n -0000779198 00000 n -0000775484 00000 n -0000779491 00000 n -0000779618 00000 n -0000779682 00000 n -0000783996 00000 n -0000783622 00000 n -0000779857 00000 n -0000783745 00000 n -0000783870 00000 n -0000783933 00000 n -0000788496 00000 n -0000788899 00000 n -0000788352 00000 n -0000784107 00000 n -0000788644 00000 n -0000788771 00000 n -0000788835 00000 n -0000792825 00000 n -0000792451 00000 n -0000789010 00000 n -0000792574 00000 n -0000792699 00000 n -0000792762 00000 n -0000794158 00000 n -0000793908 00000 n -0000792936 00000 n -0000794031 00000 n -0000799124 00000 n -0000799276 00000 n -0000799618 00000 n -0000798971 00000 n -0000794269 00000 n -0000799431 00000 n -0000799555 00000 n -0001002702 00000 n -0000807168 00000 n -0000807317 00000 n -0000807467 00000 n -0000807619 00000 n -0000807897 00000 n -0000806997 00000 n -0000799780 00000 n -0000807771 00000 n -0000814227 00000 n -0000814378 00000 n -0000814526 00000 n -0000814678 00000 n -0000814951 00000 n -0000814056 00000 n -0000808008 00000 n -0000814827 00000 n -0000817262 00000 n -0000817541 00000 n -0000817118 00000 n -0000815062 00000 n -0000817414 00000 n -0000818948 00000 n -0000818701 00000 n -0000817652 00000 n -0000818824 00000 n -0000819977 00000 n -0000819727 00000 n -0000819059 00000 n -0000819850 00000 n -0000828792 00000 n -0000828942 00000 n -0000829093 00000 n -0000836628 00000 n -0000829554 00000 n -0000828630 00000 n -0000820075 00000 n -0000829241 00000 n -0000829365 00000 n -0000829428 00000 n -0000829491 00000 n -0001002827 00000 n -0000836777 00000 n -0000836928 00000 n -0000837140 00000 n -0000836466 00000 n -0000829716 00000 n -0000837076 00000 n -0000839988 00000 n -0000839802 00000 n -0000837264 00000 n -0000839925 00000 n -0000840413 00000 n -0000840226 00000 n -0000840086 00000 n -0000840349 00000 n -0000848554 00000 n -0000847559 00000 n -0000840485 00000 n -0000847682 00000 n -0000847745 00000 n -0000847870 00000 n -0000848366 00000 n -0000848491 00000 n -0000852465 00000 n -0000851836 00000 n -0000848652 00000 n -0000851959 00000 n -0000852401 00000 n -0000852563 00000 n -0000852707 00000 n -0000853206 00000 n -0000853540 00000 n -0000853888 00000 n -0000853914 00000 n -0000854425 00000 n -0000854463 00000 n -0000855158 00000 n -0000855491 00000 n -0000855571 00000 n -0000855951 00000 n -0000856593 00000 n -0000857257 00000 n -0000857885 00000 n -0000858534 00000 n -0000858824 00000 n -0000859477 00000 n -0000873681 00000 n -0000874113 00000 n -0000886512 00000 n -0000886940 00000 n -0000891226 00000 n -0000891478 00000 n -0000902585 00000 n -0000902920 00000 n -0000905006 00000 n -0000905228 00000 n -0000909419 00000 n -0000909662 00000 n -0000926650 00000 n -0000927185 00000 n -0000929461 00000 n -0000929693 00000 n -0000932076 00000 n -0000932314 00000 n -0000941996 00000 n -0000942373 00000 n -0000951444 00000 n -0000951817 00000 n -0000955867 00000 n -0000956211 00000 n -0000957834 00000 n -0000958070 00000 n -0000971875 00000 n -0000972254 00000 n -0000978527 00000 n -0000978795 00000 n -0000992287 00000 n -0000992776 00000 n -0000997245 00000 n -0001002952 00000 n -0001003072 00000 n -0001003197 00000 n -0001003323 00000 n -0001003449 00000 n -0001003541 00000 n -0001015701 00000 n -0001015888 00000 n -0001016073 00000 n -0001016256 00000 n -0001016441 00000 n -0001016619 00000 n -0001016788 00000 n -0001016959 00000 n -0001017129 00000 n -0001017300 00000 n -0001017470 00000 n -0001017647 00000 n -0001017822 00000 n -0001017999 00000 n -0001018174 00000 n -0001018351 00000 n +0000012016 00000 n +0000012077 00000 n +0000996353 00000 n +0000998237 00000 n +0000996207 00000 n +0000997082 00000 n +0000998674 00000 n +0000012624 00000 n +0000012443 00000 n +0000012307 00000 n +0000012562 00000 n +0000029767 00000 n +0000029917 00000 n +0000030068 00000 n +0000030225 00000 n +0000030382 00000 n +0000030539 00000 n +0000030701 00000 n +0000030858 00000 n +0000031009 00000 n +0000031166 00000 n +0000031328 00000 n +0000031481 00000 n +0000031634 00000 n +0000031787 00000 n +0000031939 00000 n +0000032092 00000 n +0000032245 00000 n +0000032397 00000 n +0000032550 00000 n +0000032712 00000 n +0000032868 00000 n +0000033029 00000 n +0000033183 00000 n +0000033335 00000 n +0000033489 00000 n +0000033642 00000 n +0000033796 00000 n +0000033950 00000 n +0000034104 00000 n +0000034257 00000 n +0000034410 00000 n +0000034564 00000 n +0000034718 00000 n +0000034872 00000 n +0000035026 00000 n +0000035180 00000 n +0000035334 00000 n +0000035488 00000 n +0000035650 00000 n +0000035805 00000 n +0000035967 00000 n +0000036121 00000 n +0000036274 00000 n +0000036428 00000 n +0000036582 00000 n +0000058802 00000 n +0000036860 00000 n +0000029276 00000 n +0000012695 00000 n +0000036738 00000 n +0000036799 00000 n +0000058954 00000 n +0000059108 00000 n +0000059261 00000 n +0000059413 00000 n +0000059567 00000 n +0000059721 00000 n +0000059875 00000 n +0000060025 00000 n +0000060178 00000 n +0000060331 00000 n +0000060485 00000 n +0000060639 00000 n +0000060790 00000 n +0000060942 00000 n +0000061094 00000 n +0000061248 00000 n +0000061402 00000 n +0000061556 00000 n +0000061710 00000 n +0000061861 00000 n +0000062014 00000 n +0000062168 00000 n +0000062322 00000 n +0000062476 00000 n +0000062630 00000 n +0000062784 00000 n +0000062938 00000 n +0000063092 00000 n +0000063246 00000 n +0000063400 00000 n +0000063554 00000 n +0000063708 00000 n +0000063862 00000 n +0000064016 00000 n +0000064170 00000 n +0000064324 00000 n +0000064477 00000 n +0000064630 00000 n +0000064784 00000 n +0000064938 00000 n +0000065092 00000 n +0000065244 00000 n +0000065396 00000 n +0000065548 00000 n +0000065702 00000 n +0000065856 00000 n +0000082440 00000 n +0000066071 00000 n +0000058295 00000 n +0000036957 00000 n +0000066009 00000 n +0000082591 00000 n +0000082744 00000 n +0000082898 00000 n +0000083051 00000 n +0000083204 00000 n +0000083357 00000 n +0000083511 00000 n +0000083665 00000 n +0000083819 00000 n +0000083973 00000 n +0000084127 00000 n +0000084281 00000 n +0000084435 00000 n +0000084589 00000 n +0000084742 00000 n +0000084896 00000 n +0000085050 00000 n +0000085201 00000 n +0000085354 00000 n +0000085508 00000 n +0000085662 00000 n +0000085816 00000 n +0000085967 00000 n +0000086121 00000 n +0000086275 00000 n +0000086429 00000 n +0000086583 00000 n +0000086737 00000 n +0000086891 00000 n +0000087043 00000 n +0000087198 00000 n +0000087353 00000 n +0000087507 00000 n +0000087662 00000 n +0000087816 00000 n +0000087967 00000 n +0000088182 00000 n +0000082013 00000 n +0000066155 00000 n +0000088121 00000 n +0000088585 00000 n +0000088404 00000 n +0000088266 00000 n +0000088523 00000 n +0000097444 00000 n +0000097598 00000 n +0000097754 00000 n +0000097911 00000 n +0000098070 00000 n +0000098226 00000 n +0000098380 00000 n +0000098534 00000 n +0000098687 00000 n +0000098840 00000 n +0000099053 00000 n +0000097233 00000 n +0000088656 00000 n +0000998091 00000 n +0000998792 00000 n +0000851195 00000 n +0000847349 00000 n +0000846728 00000 n +0000851258 00000 n +0000851132 00000 n +0000847162 00000 n +0000847224 00000 n +0000851069 00000 n +0000846976 00000 n +0000847038 00000 n +0000110148 00000 n +0000110298 00000 n +0000110451 00000 n +0000104945 00000 n +0000119917 00000 n +0000110724 00000 n +0000104790 00000 n +0000099150 00000 n +0000996645 00000 n +0000110664 00000 n +0000106155 00000 n +0000106401 00000 n +0000106448 00000 n +0000106841 00000 n +0000106862 00000 n +0000107169 00000 n +0000847100 00000 n +0000120068 00000 n +0000120222 00000 n +0000120620 00000 n +0000119762 00000 n +0000110849 00000 n +0000120375 00000 n +0000998383 00000 n +0000997370 00000 n +0000996937 00000 n +0000997802 00000 n +0000997227 00000 n +0000120496 00000 n +0000997513 00000 n +0000120558 00000 n +0000851006 00000 n +0000128345 00000 n +0000128498 00000 n +0000126374 00000 n +0000128836 00000 n +0000126227 00000 n +0000120820 00000 n +0000128651 00000 n +0000128713 00000 n +0000128083 00000 n +0000128202 00000 n +0000128249 00000 n +0000128323 00000 n +0000846914 00000 n +0000846852 00000 n +0000134668 00000 n +0000134819 00000 n +0000135032 00000 n +0000134521 00000 n +0000129000 00000 n +0000134971 00000 n +0000144596 00000 n +0000143858 00000 n +0000135142 00000 n +0000143977 00000 n +0000996791 00000 n +0000144100 00000 n +0000144162 00000 n +0000144224 00000 n +0000144286 00000 n +0000144348 00000 n +0000144410 00000 n +0000144472 00000 n +0000144534 00000 n +0000160415 00000 n +0000152652 00000 n +0000151683 00000 n +0000144731 00000 n +0000151802 00000 n +0000151863 00000 n +0000151924 00000 n +0000151985 00000 n +0000152046 00000 n +0000152106 00000 n +0000152167 00000 n +0000152228 00000 n +0000152288 00000 n +0000152349 00000 n +0000152410 00000 n +0000152471 00000 n +0000152532 00000 n +0000152592 00000 n +0000998910 00000 n +0000160572 00000 n +0000161280 00000 n +0000160268 00000 n +0000152736 00000 n +0000160724 00000 n +0000160847 00000 n +0000160909 00000 n +0000160971 00000 n +0000161033 00000 n +0000161095 00000 n +0000161157 00000 n +0000170066 00000 n +0000170461 00000 n +0000169927 00000 n +0000161428 00000 n +0000170218 00000 n +0000170399 00000 n +0000177490 00000 n +0000178200 00000 n +0000177351 00000 n +0000170584 00000 n +0000177642 00000 n +0000177704 00000 n +0000177766 00000 n +0000177828 00000 n +0000177890 00000 n +0000177952 00000 n +0000178014 00000 n +0000178076 00000 n +0000178138 00000 n +0000183914 00000 n +0000183368 00000 n +0000178297 00000 n +0000183487 00000 n +0000183548 00000 n +0000183609 00000 n +0000183669 00000 n +0000183730 00000 n +0000183791 00000 n +0000183852 00000 n +0000189413 00000 n +0000189565 00000 n +0000190022 00000 n +0000189266 00000 n +0000184011 00000 n +0000189716 00000 n +0000194877 00000 n +0000194459 00000 n +0000190145 00000 n +0000194578 00000 n +0000999028 00000 n +0000203141 00000 n +0000203302 00000 n +0000203457 00000 n +0000203913 00000 n +0000202986 00000 n +0000194974 00000 n +0000203606 00000 n +0000203851 00000 n +0000850943 00000 n +0000211140 00000 n +0000211384 00000 n +0000210960 00000 n +0000204023 00000 n +0000211079 00000 n +0000211202 00000 n +0000215989 00000 n +0000215561 00000 n +0000211481 00000 n +0000215680 00000 n +0000215865 00000 n +0000220208 00000 n +0000219846 00000 n +0000216086 00000 n +0000219965 00000 n +0000224975 00000 n +0000224670 00000 n +0000220305 00000 n +0000224789 00000 n +0000229097 00000 n +0000228796 00000 n +0000225072 00000 n +0000228915 00000 n +0000999146 00000 n +0000233898 00000 n +0000233593 00000 n +0000229194 00000 n +0000233712 00000 n +0000239135 00000 n +0000238772 00000 n +0000233995 00000 n +0000238891 00000 n +0000247231 00000 n +0000247383 00000 n +0000247904 00000 n +0000247084 00000 n +0000239232 00000 n +0000247534 00000 n +0000247720 00000 n +0000247782 00000 n +0000247842 00000 n +0000251533 00000 n +0000251109 00000 n +0000248014 00000 n +0000251228 00000 n +0000254769 00000 n +0000255230 00000 n +0000254630 00000 n +0000251630 00000 n +0000254920 00000 n +0000255106 00000 n +0000998529 00000 n +0000255168 00000 n +0000255810 00000 n +0000255569 00000 n +0000255353 00000 n +0000255688 00000 n +0000999264 00000 n +0000263453 00000 n +0000263603 00000 n +0000263751 00000 n +0000263901 00000 n +0000264051 00000 n +0000264199 00000 n +0000267543 00000 n +0000264534 00000 n +0000263274 00000 n +0000255894 00000 n +0000264349 00000 n +0000264473 00000 n +0000267694 00000 n +0000267841 00000 n +0000268052 00000 n +0000267388 00000 n +0000264670 00000 n +0000267991 00000 n +0000276291 00000 n +0000276439 00000 n +0000276589 00000 n +0000276737 00000 n +0000276887 00000 n +0000277038 00000 n +0000277372 00000 n +0000276112 00000 n +0000268162 00000 n +0000277187 00000 n +0000277310 00000 n +0000278384 00000 n +0000278204 00000 n +0000277521 00000 n +0000278323 00000 n +0000287122 00000 n +0000287270 00000 n +0000287419 00000 n +0000287567 00000 n +0000287717 00000 n +0000287868 00000 n +0000288202 00000 n +0000286943 00000 n +0000278468 00000 n +0000288017 00000 n +0000288140 00000 n +0000289214 00000 n +0000289034 00000 n +0000288351 00000 n +0000289153 00000 n +0000999382 00000 n +0000296607 00000 n +0000296755 00000 n +0000296905 00000 n +0000297241 00000 n +0000296452 00000 n +0000289298 00000 n +0000297056 00000 n +0000297179 00000 n +0000303930 00000 n +0000304078 00000 n +0000304228 00000 n +0000304561 00000 n +0000303775 00000 n +0000297390 00000 n +0000304378 00000 n +0000304499 00000 n +0000311653 00000 n +0000311801 00000 n +0000311951 00000 n +0000312287 00000 n +0000311498 00000 n +0000304710 00000 n +0000312102 00000 n +0000312225 00000 n +0000319980 00000 n +0000320127 00000 n +0000320276 00000 n +0000320610 00000 n +0000319825 00000 n +0000312448 00000 n +0000320426 00000 n +0000320548 00000 n +0000321636 00000 n +0000321455 00000 n +0000320771 00000 n +0000321574 00000 n +0000328714 00000 n +0000328862 00000 n +0000329012 00000 n +0000329352 00000 n +0000328554 00000 n +0000321720 00000 n +0000329164 00000 n +0000329288 00000 n +0000999500 00000 n +0000335886 00000 n +0000336035 00000 n +0000336185 00000 n +0000336527 00000 n +0000335724 00000 n +0000329502 00000 n +0000336337 00000 n +0000336463 00000 n +0000342405 00000 n +0000342555 00000 n +0000342895 00000 n +0000342252 00000 n +0000336676 00000 n +0000342707 00000 n +0000342831 00000 n +0000348780 00000 n +0000348930 00000 n +0000349272 00000 n +0000348627 00000 n +0000343044 00000 n +0000349082 00000 n +0000997947 00000 n +0000349208 00000 n +0000356982 00000 n +0000357134 00000 n +0000357284 00000 n +0000357433 00000 n +0000365369 00000 n +0000357965 00000 n +0000356811 00000 n +0000349423 00000 n +0000357585 00000 n +0000357709 00000 n +0000357773 00000 n +0000357837 00000 n +0000357901 00000 n +0000365521 00000 n +0000365670 00000 n +0000365822 00000 n +0000365974 00000 n +0000366128 00000 n +0000366282 00000 n +0000366436 00000 n +0000366652 00000 n +0000365162 00000 n +0000358127 00000 n +0000366588 00000 n +0000373754 00000 n +0000382317 00000 n +0000374094 00000 n +0000373610 00000 n +0000366763 00000 n +0000373905 00000 n +0000374030 00000 n +0000999625 00000 n +0000382470 00000 n +0000382619 00000 n +0000382771 00000 n +0000382923 00000 n +0000383072 00000 n +0000383224 00000 n +0000383439 00000 n +0000382119 00000 n +0000374270 00000 n +0000383375 00000 n +0000388452 00000 n +0000388604 00000 n +0000388819 00000 n +0000388299 00000 n +0000383576 00000 n +0000388756 00000 n +0000389785 00000 n +0000390065 00000 n +0000389641 00000 n +0000388930 00000 n +0000389938 00000 n +0000397631 00000 n +0000397780 00000 n +0000397932 00000 n +0000406270 00000 n +0000398461 00000 n +0000397469 00000 n +0000390150 00000 n +0000398084 00000 n +0000398208 00000 n +0000398272 00000 n +0000398335 00000 n +0000398398 00000 n +0000402030 00000 n +0000406422 00000 n +0000406701 00000 n +0000401877 00000 n +0000398598 00000 n +0000406573 00000 n +0000406637 00000 n +0000405930 00000 n +0000406050 00000 n +0000406098 00000 n +0000406173 00000 n +0000406247 00000 n +0000410150 00000 n +0000409964 00000 n +0000406854 00000 n +0000410087 00000 n +0000997657 00000 n +0000999750 00000 n +0000418940 00000 n +0000419089 00000 n +0000419241 00000 n +0000419774 00000 n +0000418778 00000 n +0000410236 00000 n +0000419392 00000 n +0000419518 00000 n +0000419582 00000 n +0000419646 00000 n +0000419710 00000 n +0000426012 00000 n +0000431335 00000 n +0000426164 00000 n +0000426314 00000 n +0000426717 00000 n +0000425850 00000 n +0000419924 00000 n +0000426466 00000 n +0000426529 00000 n +0000426592 00000 n +0000426655 00000 n +0000435722 00000 n +0000430720 00000 n +0000430533 00000 n +0000426854 00000 n +0000430656 00000 n +0000435786 00000 n +0000431212 00000 n +0000430805 00000 n +0000435659 00000 n +0000435319 00000 n +0000435439 00000 n +0000435487 00000 n +0000435562 00000 n +0000435636 00000 n +0000445475 00000 n +0000445624 00000 n +0000445776 00000 n +0000446309 00000 n +0000445313 00000 n +0000435887 00000 n +0000445927 00000 n +0000446053 00000 n +0000446117 00000 n +0000446181 00000 n +0000446245 00000 n +0000448172 00000 n +0000447986 00000 n +0000446471 00000 n +0000448109 00000 n +0000999875 00000 n +0000457037 00000 n +0000459654 00000 n +0000457570 00000 n +0000456893 00000 n +0000448270 00000 n +0000457187 00000 n +0000457314 00000 n +0000457378 00000 n +0000457442 00000 n +0000457506 00000 n +0000459869 00000 n +0000459510 00000 n +0000457732 00000 n +0000459806 00000 n +0000466879 00000 n +0000466566 00000 n +0000459967 00000 n +0000466689 00000 n +0000473857 00000 n +0000474135 00000 n +0000473713 00000 n +0000467016 00000 n +0000474009 00000 n +0000474072 00000 n +0000484512 00000 n +0000484803 00000 n +0000484368 00000 n +0000474259 00000 n +0000484675 00000 n +0000484739 00000 n +0000488159 00000 n +0000487660 00000 n +0000484940 00000 n +0000487783 00000 n +0000487846 00000 n +0000487909 00000 n +0000487972 00000 n +0000488035 00000 n +0000488098 00000 n +0001000000 00000 n +0000495619 00000 n +0000495895 00000 n +0000495475 00000 n +0000488244 00000 n +0000495769 00000 n +0000499379 00000 n +0000499794 00000 n +0000499235 00000 n +0000496019 00000 n +0000499542 00000 n +0000499605 00000 n +0000499668 00000 n +0000499731 00000 n +0000503611 00000 n +0000503761 00000 n +0000504102 00000 n +0000503458 00000 n +0000499905 00000 n +0000503912 00000 n +0000504038 00000 n +0000507703 00000 n +0000507854 00000 n +0000508130 00000 n +0000507550 00000 n +0000504213 00000 n +0000508006 00000 n +0000510688 00000 n +0000510964 00000 n +0000510544 00000 n +0000508241 00000 n +0000510838 00000 n +0000517215 00000 n +0000517364 00000 n +0000517641 00000 n +0000517062 00000 n +0000511075 00000 n +0000517516 00000 n +0001000125 00000 n +0000519740 00000 n +0000519425 00000 n +0000517778 00000 n +0000519548 00000 n +0000519612 00000 n +0000519676 00000 n +0000524925 00000 n +0000525076 00000 n +0000525537 00000 n +0000524772 00000 n +0000519825 00000 n +0000525224 00000 n +0000525348 00000 n +0000525411 00000 n +0000525474 00000 n +0000532327 00000 n +0000532479 00000 n +0000539169 00000 n +0000532754 00000 n +0000532174 00000 n +0000525661 00000 n +0000532627 00000 n +0000539949 00000 n +0000539025 00000 n +0000532878 00000 n +0000539320 00000 n +0000539383 00000 n +0000539446 00000 n +0000539509 00000 n +0000539572 00000 n +0000539634 00000 n +0000539697 00000 n +0000539760 00000 n +0000539823 00000 n +0000539886 00000 n +0000546934 00000 n +0000547084 00000 n +0000547359 00000 n +0000546781 00000 n +0000540073 00000 n +0000547233 00000 n +0000550341 00000 n +0000549778 00000 n +0000547470 00000 n +0000549901 00000 n +0000549964 00000 n +0000550027 00000 n +0000550090 00000 n +0000550153 00000 n +0000550216 00000 n +0000550279 00000 n +0001000250 00000 n +0000553723 00000 n +0000553871 00000 n +0000554148 00000 n +0000553570 00000 n +0000550426 00000 n +0000554022 00000 n +0000558463 00000 n +0000558613 00000 n +0000558953 00000 n +0000558310 00000 n +0000554259 00000 n +0000558765 00000 n +0000558890 00000 n +0000564388 00000 n +0000564539 00000 n +0000564814 00000 n +0000564235 00000 n +0000559064 00000 n +0000564688 00000 n +0000571968 00000 n +0000572120 00000 n +0000572393 00000 n +0000571815 00000 n +0000564938 00000 n +0000572269 00000 n +0000574007 00000 n +0000573692 00000 n +0000572517 00000 n +0000573815 00000 n +0000573879 00000 n +0000573943 00000 n +0000579542 00000 n +0000579692 00000 n +0000579841 00000 n +0000580113 00000 n +0000579380 00000 n +0000574105 00000 n +0000579989 00000 n +0001000375 00000 n +0000583829 00000 n +0000583977 00000 n +0000584255 00000 n +0000583676 00000 n +0000580237 00000 n +0000584129 00000 n +0000588110 00000 n +0000587863 00000 n +0000584366 00000 n +0000587986 00000 n +0000594998 00000 n +0000595274 00000 n +0000594854 00000 n +0000588247 00000 n +0000595148 00000 n +0000596462 00000 n +0000596150 00000 n +0000595398 00000 n +0000596273 00000 n +0000596336 00000 n +0000596399 00000 n +0000602487 00000 n +0000602764 00000 n +0000602343 00000 n +0000596547 00000 n +0000602638 00000 n +0000606363 00000 n +0000606702 00000 n +0000606219 00000 n +0000602888 00000 n +0000606515 00000 n +0000606639 00000 n +0001000500 00000 n +0000612013 00000 n +0000612354 00000 n +0000611869 00000 n +0000606826 00000 n +0000612164 00000 n +0000612290 00000 n +0000615922 00000 n +0000616261 00000 n +0000615778 00000 n +0000612478 00000 n +0000616074 00000 n +0000616198 00000 n +0000621581 00000 n +0000621922 00000 n +0000621437 00000 n +0000616385 00000 n +0000621732 00000 n +0000621858 00000 n +0000626071 00000 n +0000626472 00000 n +0000625927 00000 n +0000622046 00000 n +0000626222 00000 n +0000626346 00000 n +0000626409 00000 n +0000630441 00000 n +0000630845 00000 n +0000630297 00000 n +0000626583 00000 n +0000630591 00000 n +0000630717 00000 n +0000630781 00000 n +0000636943 00000 n +0000637218 00000 n +0000636799 00000 n +0000630956 00000 n +0000637093 00000 n +0001000625 00000 n +0000641492 00000 n +0000641113 00000 n +0000637342 00000 n +0000641236 00000 n +0000641300 00000 n +0000641364 00000 n +0000641428 00000 n +0000645961 00000 n +0000646111 00000 n +0000646263 00000 n +0000646537 00000 n +0000645799 00000 n +0000641616 00000 n +0000646413 00000 n +0000652744 00000 n +0000652494 00000 n +0000646661 00000 n +0000652617 00000 n +0000660673 00000 n +0000659921 00000 n +0000652868 00000 n +0000660044 00000 n +0000660107 00000 n +0000660170 00000 n +0000660233 00000 n +0000660296 00000 n +0000660359 00000 n +0000660422 00000 n +0000660484 00000 n +0000660547 00000 n +0000660610 00000 n +0000661292 00000 n +0000661042 00000 n +0000660796 00000 n +0000661165 00000 n +0000667376 00000 n +0000667003 00000 n +0000661377 00000 n +0000667126 00000 n +0000667250 00000 n +0000667313 00000 n +0001000750 00000 n +0000672588 00000 n +0000672211 00000 n +0000667513 00000 n +0000672334 00000 n +0000672461 00000 n +0000672524 00000 n +0000677576 00000 n +0000677140 00000 n +0000672725 00000 n +0000677263 00000 n +0000677387 00000 n +0000677450 00000 n +0000677513 00000 n +0000680182 00000 n +0000679933 00000 n +0000677713 00000 n +0000680056 00000 n +0000683620 00000 n +0000683373 00000 n +0000680293 00000 n +0000683496 00000 n +0000685268 00000 n +0000685019 00000 n +0000683757 00000 n +0000685142 00000 n +0000687170 00000 n +0000686923 00000 n +0000685379 00000 n +0000687046 00000 n +0001000875 00000 n +0000688947 00000 n +0000688698 00000 n +0000687281 00000 n +0000688821 00000 n +0000693917 00000 n +0000693670 00000 n +0000689058 00000 n +0000693793 00000 n +0000699690 00000 n +0000699313 00000 n +0000694054 00000 n +0000699436 00000 n +0000699562 00000 n +0000699626 00000 n +0000705411 00000 n +0000705038 00000 n +0000699827 00000 n +0000705161 00000 n +0000705285 00000 n +0000705348 00000 n +0000711168 00000 n +0000710791 00000 n +0000705548 00000 n +0000710914 00000 n +0000711040 00000 n +0000711104 00000 n +0000716977 00000 n +0000716604 00000 n +0000711305 00000 n +0000716727 00000 n +0000716851 00000 n +0000716914 00000 n +0001001000 00000 n +0000722824 00000 n +0000722447 00000 n +0000717114 00000 n +0000722570 00000 n +0000722696 00000 n +0000722760 00000 n +0000728676 00000 n +0000728367 00000 n +0000722961 00000 n +0000728490 00000 n +0000728614 00000 n +0000734549 00000 n +0000734237 00000 n +0000728813 00000 n +0000734360 00000 n +0000734486 00000 n +0000741280 00000 n +0000741431 00000 n +0000741708 00000 n +0000741127 00000 n +0000734686 00000 n +0000741583 00000 n +0000750759 00000 n +0000750823 00000 n +0000750887 00000 n +0000748976 00000 n +0000741806 00000 n +0000749099 00000 n +0000749163 00000 n +0000749227 00000 n +0000996499 00000 n +0000749291 00000 n +0000749355 00000 n +0000749419 00000 n +0000749483 00000 n +0000749547 00000 n +0000749610 00000 n +0000749674 00000 n +0000749738 00000 n +0000749802 00000 n +0000749866 00000 n +0000749930 00000 n +0000749994 00000 n +0000750058 00000 n +0000750122 00000 n +0000750184 00000 n +0000750248 00000 n +0000750312 00000 n +0000750376 00000 n +0000750440 00000 n +0000750504 00000 n +0000750568 00000 n +0000750632 00000 n +0000750696 00000 n +0000755157 00000 n +0000754785 00000 n +0000751000 00000 n +0000754908 00000 n +0000755033 00000 n +0000755095 00000 n +0001001125 00000 n +0000757091 00000 n +0000756715 00000 n +0000755255 00000 n +0000756838 00000 n +0000756965 00000 n +0000757028 00000 n +0000759252 00000 n +0000758880 00000 n +0000757189 00000 n +0000759003 00000 n +0000759128 00000 n +0000759190 00000 n +0000761892 00000 n +0000761516 00000 n +0000759350 00000 n +0000761639 00000 n +0000761766 00000 n +0000761829 00000 n +0000762836 00000 n +0000762588 00000 n +0000762003 00000 n +0000762711 00000 n +0000767916 00000 n +0000768320 00000 n +0000767772 00000 n +0000762934 00000 n +0000768065 00000 n +0000768192 00000 n +0000768256 00000 n +0000773893 00000 n +0000774293 00000 n +0000773749 00000 n +0000768431 00000 n +0000774042 00000 n +0000774167 00000 n +0000774230 00000 n +0001001250 00000 n +0000778262 00000 n +0000778666 00000 n +0000778118 00000 n +0000774404 00000 n +0000778411 00000 n +0000778538 00000 n +0000778602 00000 n +0000782916 00000 n +0000782542 00000 n +0000778777 00000 n +0000782665 00000 n +0000782790 00000 n +0000782853 00000 n +0000787416 00000 n +0000787819 00000 n +0000787272 00000 n +0000783027 00000 n +0000787564 00000 n +0000787691 00000 n +0000787755 00000 n +0000791745 00000 n +0000791371 00000 n +0000787930 00000 n +0000791494 00000 n +0000791619 00000 n +0000791682 00000 n +0000793078 00000 n +0000792828 00000 n +0000791856 00000 n +0000792951 00000 n +0000798044 00000 n +0000798196 00000 n +0000798538 00000 n +0000797891 00000 n +0000793189 00000 n +0000798351 00000 n +0000798475 00000 n +0001001375 00000 n +0000806088 00000 n +0000806237 00000 n +0000806387 00000 n +0000806539 00000 n +0000806817 00000 n +0000805917 00000 n +0000798700 00000 n +0000806691 00000 n +0000813147 00000 n +0000813298 00000 n +0000813446 00000 n +0000813598 00000 n +0000813871 00000 n +0000812976 00000 n +0000806928 00000 n +0000813747 00000 n +0000816182 00000 n +0000816461 00000 n +0000816038 00000 n +0000813982 00000 n +0000816334 00000 n +0000817868 00000 n +0000817621 00000 n +0000816572 00000 n +0000817744 00000 n +0000818897 00000 n +0000818647 00000 n +0000817979 00000 n +0000818770 00000 n +0000827712 00000 n +0000827862 00000 n +0000828013 00000 n +0000835548 00000 n +0000828474 00000 n +0000827550 00000 n +0000818995 00000 n +0000828161 00000 n +0000828285 00000 n +0000828348 00000 n +0000828411 00000 n +0001001500 00000 n +0000835697 00000 n +0000835848 00000 n +0000836060 00000 n +0000835386 00000 n +0000828636 00000 n +0000835996 00000 n +0000838908 00000 n +0000838722 00000 n +0000836184 00000 n +0000838845 00000 n +0000839333 00000 n +0000839146 00000 n +0000839006 00000 n +0000839269 00000 n +0000847474 00000 n +0000846479 00000 n +0000839405 00000 n +0000846602 00000 n +0000846665 00000 n +0000846790 00000 n +0000847286 00000 n +0000847411 00000 n +0000851385 00000 n +0000850756 00000 n +0000847572 00000 n +0000850879 00000 n +0000851321 00000 n +0000851483 00000 n +0000851627 00000 n +0000852126 00000 n +0000852460 00000 n +0000852808 00000 n +0000852834 00000 n +0000853345 00000 n +0000853383 00000 n +0000854078 00000 n +0000854411 00000 n +0000854491 00000 n +0000854871 00000 n +0000855513 00000 n +0000856177 00000 n +0000856805 00000 n +0000857454 00000 n +0000857744 00000 n +0000858397 00000 n +0000872601 00000 n +0000873033 00000 n +0000885432 00000 n +0000885860 00000 n +0000890146 00000 n +0000890398 00000 n +0000901260 00000 n +0000901593 00000 n +0000903679 00000 n +0000903901 00000 n +0000908092 00000 n +0000908335 00000 n +0000925323 00000 n +0000925858 00000 n +0000928134 00000 n +0000928366 00000 n +0000930749 00000 n +0000930987 00000 n +0000940669 00000 n +0000941046 00000 n +0000950117 00000 n +0000950490 00000 n +0000954540 00000 n +0000954884 00000 n +0000956507 00000 n +0000956743 00000 n +0000970548 00000 n +0000970927 00000 n +0000977200 00000 n +0000977468 00000 n +0000990960 00000 n +0000991449 00000 n +0000995918 00000 n +0001001625 00000 n +0001001745 00000 n +0001001870 00000 n +0001001996 00000 n +0001002122 00000 n +0001002214 00000 n +0001014374 00000 n +0001014561 00000 n +0001014746 00000 n +0001014929 00000 n +0001015114 00000 n +0001015292 00000 n +0001015461 00000 n +0001015632 00000 n +0001015802 00000 n +0001015973 00000 n +0001016143 00000 n +0001016320 00000 n +0001016495 00000 n +0001016672 00000 n +0001016847 00000 n +0001017024 00000 n +0001017198 00000 n +0001017372 00000 n +0001017549 00000 n +0001017724 00000 n +0001017901 00000 n +0001018087 00000 n +0001018308 00000 n 0001018525 00000 n -0001018699 00000 n -0001018876 00000 n -0001019051 00000 n -0001019228 00000 n -0001019414 00000 n -0001019635 00000 n -0001019852 00000 n -0001020058 00000 n -0001020247 00000 n -0001020429 00000 n -0001020660 00000 n -0001020888 00000 n -0001021116 00000 n -0001021357 00000 n -0001021593 00000 n -0001021830 00000 n -0001022071 00000 n -0001022311 00000 n -0001022546 00000 n -0001022779 00000 n -0001022957 00000 n -0001023142 00000 n -0001023324 00000 n -0001023506 00000 n -0001023691 00000 n -0001023874 00000 n -0001024059 00000 n -0001024235 00000 n -0001024405 00000 n -0001024576 00000 n -0001024746 00000 n -0001024920 00000 n -0001025094 00000 n -0001025268 00000 n -0001025445 00000 n -0001025620 00000 n -0001025797 00000 n -0001025972 00000 n -0001026149 00000 n -0001026324 00000 n -0001026501 00000 n -0001026676 00000 n -0001026853 00000 n -0001027030 00000 n -0001027238 00000 n -0001027444 00000 n -0001027644 00000 n -0001027847 00000 n -0001028048 00000 n -0001028251 00000 n -0001028452 00000 n -0001028655 00000 n -0001028856 00000 n -0001029059 00000 n -0001029260 00000 n -0001029463 00000 n -0001029663 00000 n -0001029863 00000 n -0001030066 00000 n -0001030267 00000 n -0001030470 00000 n -0001030667 00000 n -0001030852 00000 n -0001031050 00000 n -0001031273 00000 n -0001031536 00000 n -0001031718 00000 n -0001031896 00000 n -0001032067 00000 n -0001032166 00000 n -0001032283 00000 n -0001032399 00000 n -0001032515 00000 n -0001032634 00000 n -0001032761 00000 n -0001032892 00000 n -0001033008 00000 n -0001033125 00000 n -0001033240 00000 n -0001033359 00000 n -0001033483 00000 n -0001033607 00000 n -0001033729 00000 n -0001033847 00000 n -0001033925 00000 n -0001034050 00000 n -0001034169 00000 n -0001034259 00000 n -0001034348 00000 n -0001034388 00000 n -0001034625 00000 n +0001018731 00000 n +0001018920 00000 n +0001019102 00000 n +0001019333 00000 n +0001019561 00000 n +0001019789 00000 n +0001020030 00000 n +0001020266 00000 n +0001020503 00000 n +0001020744 00000 n +0001020984 00000 n +0001021219 00000 n +0001021452 00000 n +0001021630 00000 n +0001021815 00000 n +0001021997 00000 n +0001022179 00000 n +0001022364 00000 n +0001022547 00000 n +0001022732 00000 n +0001022908 00000 n +0001023078 00000 n +0001023249 00000 n +0001023419 00000 n +0001023593 00000 n +0001023767 00000 n +0001023941 00000 n +0001024118 00000 n +0001024293 00000 n +0001024470 00000 n +0001024645 00000 n +0001024822 00000 n +0001024997 00000 n +0001025174 00000 n +0001025349 00000 n +0001025526 00000 n +0001025703 00000 n +0001025911 00000 n +0001026117 00000 n +0001026317 00000 n +0001026520 00000 n +0001026721 00000 n +0001026924 00000 n +0001027125 00000 n +0001027328 00000 n +0001027529 00000 n +0001027732 00000 n +0001027933 00000 n +0001028136 00000 n +0001028336 00000 n +0001028536 00000 n +0001028739 00000 n +0001028940 00000 n +0001029143 00000 n +0001029340 00000 n +0001029525 00000 n +0001029723 00000 n +0001029946 00000 n +0001030209 00000 n +0001030391 00000 n +0001030569 00000 n +0001030740 00000 n +0001030839 00000 n +0001030956 00000 n +0001031072 00000 n +0001031188 00000 n +0001031307 00000 n +0001031434 00000 n +0001031565 00000 n +0001031681 00000 n +0001031798 00000 n +0001031913 00000 n +0001032032 00000 n +0001032156 00000 n +0001032280 00000 n +0001032402 00000 n +0001032520 00000 n +0001032598 00000 n +0001032723 00000 n +0001032842 00000 n +0001032932 00000 n +0001033021 00000 n +0001033061 00000 n +0001033298 00000 n trailer -<< /Size 1880 -/Root 1878 0 R -/Info 1879 0 R -/ID [<9C6A10E7874046BDC7AFD3E963CB7E8D> <9C6A10E7874046BDC7AFD3E963CB7E8D>] >> +<< /Size 1879 +/Root 1877 0 R +/Info 1878 0 R +/ID [<7D03C58A1D185188914162B553F3C120> <7D03C58A1D185188914162B553F3C120>] >> startxref -1035262 +1033935 %%EOF diff --git a/docs/src/Makefile b/docs/src/Makefile index d9231828..ec78bdf8 100644 --- a/docs/src/Makefile +++ b/docs/src/Makefile @@ -138,7 +138,7 @@ PDF = $(join $(BASEFILE),.pdf) PS = $(join $(BASEFILE),.ps) GXS = $(join $(BASEFILE),.gxs) GLX = $(join $(BASEFILE),.glx) -TARGETPDF= ../psblas-3.2.pdf +TARGETPDF= ../psblas-3.4.pdf BASEHTML = $(patsubst %.tex,%,$(HTMLFILE)) HTML = $(join $(HTMLFILE),.html) HTMLDIR = ../html diff --git a/docs/src/commrout.tex b/docs/src/commrout.tex index d43a5524..01a5b703 100644 --- a/docs/src/commrout.tex +++ b/docs/src/commrout.tex @@ -13,9 +13,9 @@ routines not tied to a discretization space see~\ref{sec:toolsrout}. These subroutines gathers the values of the halo -elements, and (optionally) scale the result: +elements: -\[ x \leftarrow \alpha x \] +\[ x \leftarrow x \] where: \begin{description} \item[$x$] is a global dense submatrix. @@ -40,7 +40,7 @@ Long Precision Complex & psb\_halo \\ \begin{lstlisting} call psb_halo(x, desc_a, info) -call psb_halo(x, desc_a, info, alpha, work, data) +call psb_halo(x, desc_a, info, work, data) \end{lstlisting} \begin{description} @@ -58,12 +58,6 @@ Scope: {\bf local} \\ Type: {\bf required}\\ Intent: {\bf in}.\\ Specified as: a structured data of type \descdata. -\item[alpha] the scalar $\alpha$.\\ -Scope: {\bf global} \\ -Type: {\bf optional} \\ -Intent: {\bf in}.\\ -Default: $alpha = 1 $\\ -Specified as: a number of the data type indicated in Table~\ref{tab:f90halo}. \item[work] the work array. \\ Scope: {\bf local} \\ Type: {\bf optional}\\ diff --git a/docs/src/userguide.tex b/docs/src/userguide.tex index 10f83d2c..a4b54a8e 100644 --- a/docs/src/userguide.tex +++ b/docs/src/userguide.tex @@ -25,7 +25,7 @@ \relax \pdfcompresslevel=0 %-- 0 = none, 9 = best \pdfinfo{ %-- Info dictionary of PDF output /Author (Alfredo Buttari) - /Title (Parallel Sparse BLAS V. 3.2) + /Title (Parallel Sparse BLAS V. 3.4) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) @@ -88,7 +88,7 @@ \begin{document} -\pdfbookmark{PSBLAS-v3.2 User's Guide}{title} +\pdfbookmark{PSBLAS-v3.4 User's Guide}{title} \lstset{language=Fortran} \newlength{\centeroffset} \setlength{\centeroffset}{-0.5\oddsidemargin} @@ -98,7 +98,7 @@ \vspace*{\stretch{1}} \noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth} \flushright -{\Huge\bfseries PSBLAS 3.2 User's guide +{\Huge\bfseries PSBLAS 3.4 User's guide } \noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex] \hfill\emph{\Large A reference guide for the Parallel Sparse BLAS library} @@ -111,7 +111,7 @@ by Salvatore Filippone\\ and Alfredo Buttari}\\ University of Rome ``Tor Vergata''.\\[3ex] -March 31st, 2014. +April 30, 2015. \end{minipage}} %\addtolength{\textwidth}{\centeroffset} diff --git a/docs/src/userhtml.tex b/docs/src/userhtml.tex index 9082479a..2af6c8bb 100644 --- a/docs/src/userhtml.tex +++ b/docs/src/userhtml.tex @@ -24,7 +24,7 @@ % \relax % \pdfcompresslevel=0 %-- 0 = none, 9 = best % \pdfinfo{ %-- Info dictionary of PDF output /Author (Alfredo Buttari) -% /Title (Parallel Sparse BLAS V. 3.2) +% /Title (Parallel Sparse BLAS V. 3.4) % /Subject (Parallel Sparse Basic Linear Algebra Subroutines) % /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) % /Creator (pdfLaTeX) @@ -94,9 +94,9 @@ University of Rome ``Tor Vergata'', Italy\\[2ex] %\\[10ex] %\today -Software version: 3.2\\ +Software version: 3.4\\ %\today -March 31st, 2014. +April 30, 2015. \cleardoublepage \begingroup \renewcommand*{\thepage}{toc}