From 71b6c9e61bbaf573c15a169b3dd75e717d235884 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Sun, 11 Mar 2018 16:27:40 +0000 Subject: [PATCH] Added L_TOOLS. --- base/modules/Makefile | 13 +- base/modules/serial/psb_vect_mod.f90 | 4 +- base/modules/tools/psb_i_tools_mod.f90 | 3 +- base/modules/tools/psb_l_tools_mod.f90 | 243 +++++++++++++++++++++++++ base/modules/tools/psb_tools_mod.f90 | 1 + 5 files changed, 256 insertions(+), 8 deletions(-) create mode 100644 base/modules/tools/psb_l_tools_mod.f90 diff --git a/base/modules/Makefile b/base/modules/Makefile index d7480192..5b1b3a73 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -30,9 +30,10 @@ UTIL_MODS = auxil/psb_string_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_m serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o \ serial/psb_serial_mod.o \ - tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o \ - tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o\ - tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \ + tools/psb_cd_tools_mod.o \ + tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \ + tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o\ + tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \ tools/psb_tools_mod.o \ psb_penv_mod.o $(COMMINT) psb_error_impl.o \ comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o \ @@ -277,9 +278,11 @@ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o: desc/psb_desc_mod.o tools/psb_tools_mod.o: tools/psb_cd_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o\ - tools/psb_i_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o + tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \ + tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o: desc/psb_desc_mod.o psi_mod.o serial/psb_mat_mod.o -tools/psb_i_tools_mod.o: serial/psb_i_vect_mod.o +tools/psb_i_tools_mod.o: serial/psb_i_vect_mod.o +tools/psb_l_tools_mod.o: serial/psb_l_vect_mod.o tools/psb_s_tools_mod.o: serial/psb_s_vect_mod.o tools/psb_d_tools_mod.o: serial/psb_d_vect_mod.o tools/psb_c_tools_mod.o: serial/psb_c_vect_mod.o diff --git a/base/modules/serial/psb_vect_mod.f90 b/base/modules/serial/psb_vect_mod.f90 index 9d5bae6f..c89ff379 100644 --- a/base/modules/serial/psb_vect_mod.f90 +++ b/base/modules/serial/psb_vect_mod.f90 @@ -1,10 +1,12 @@ module psb_vect_mod - use psb_i_vect_mod + use psb_i_vect_mod + use psb_l_vect_mod use psb_s_vect_mod use psb_d_vect_mod use psb_c_vect_mod use psb_z_vect_mod use psb_i_multivect_mod + use psb_l_multivect_mod use psb_s_multivect_mod use psb_d_multivect_mod use psb_c_multivect_mod diff --git a/base/modules/tools/psb_i_tools_mod.f90 b/base/modules/tools/psb_i_tools_mod.f90 index 9fc587bd..db1521b6 100644 --- a/base/modules/tools/psb_i_tools_mod.f90 +++ b/base/modules/tools/psb_i_tools_mod.f90 @@ -30,7 +30,7 @@ ! ! Module psb_i_tools_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_success_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_success_ use psb_i_vect_mod, only : psb_i_base_vect_type, psb_i_vect_type use psb_i_multivect_mod, only : psb_i_base_multivect_type, psb_i_multivect_type @@ -423,5 +423,4 @@ contains res = (lx>0) end subroutine psb_local_index_v - end module psb_i_tools_mod diff --git a/base/modules/tools/psb_l_tools_mod.f90 b/base/modules/tools/psb_l_tools_mod.f90 new file mode 100644 index 00000000..2ce79d13 --- /dev/null +++ b/base/modules/tools/psb_l_tools_mod.f90 @@ -0,0 +1,243 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +Module psb_l_tools_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_success_ + use psb_l_vect_mod, only : psb_l_base_vect_type, psb_l_vect_type, psb_i_vect_type + use psb_l_multivect_mod, only : psb_l_base_multivect_type, psb_l_multivect_type + + interface psb_geall + subroutine psb_lalloc(x, desc_a, info, n, lb) + import + implicit none + integer(psb_lpk_), 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_lalloc + subroutine psb_lallocv(x, desc_a,info,n) + import + implicit none + integer(psb_lpk_), 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_lallocv + subroutine psb_lalloc_vect(x, desc_a,info,n) + import + implicit none + type(psb_l_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_lalloc_vect + subroutine psb_lalloc_vect_r2(x, desc_a,info,n,lb) + import + implicit none + type(psb_l_vect_type), 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_lalloc_vect_r2 + subroutine psb_lalloc_multivect(x, desc_a,info,n) + import + implicit none + type(psb_l_multivect_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_lalloc_multivect + end interface + + + interface psb_geasb + subroutine psb_lasb(x, desc_a, info, scratch) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + integer(psb_lpk_), allocatable, intent(inout) :: x(:,:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + end subroutine psb_lasb + subroutine psb_lasbv(x, desc_a, info, scratch) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + integer(psb_lpk_), allocatable, intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + end subroutine psb_lasbv + subroutine psb_lasb_vect(x, desc_a, info,mold, scratch) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + type(psb_l_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + end subroutine psb_lasb_vect + subroutine psb_lasb_vect_r2(x, desc_a, info,mold, scratch) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + type(psb_l_vect_type), intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + end subroutine psb_lasb_vect_r2 + subroutine psb_lasb_multivect(x, desc_a, info,mold, scratch, n) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + type(psb_l_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: n + end subroutine psb_lasb_multivect + end interface + + interface psb_gefree + subroutine psb_lfree(x, desc_a, info) + import + implicit none + integer(psb_lpk_),allocatable, intent(inout) :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lfree + subroutine psb_lfreev(x, desc_a, info) + import + implicit none + integer(psb_lpk_),allocatable, intent(inout) :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lfreev + subroutine psb_lfree_vect(x, desc_a, info) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + type(psb_l_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lfree_vect + subroutine psb_lfree_vect_r2(x, desc_a, info) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + type(psb_l_vect_type), allocatable, intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lfree_vect_r2 + subroutine psb_lfree_multivect(x, desc_a, info) + import + implicit none + type(psb_desc_type), intent(in) :: desc_a + type(psb_l_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lfree_multivect + end interface + + + interface psb_geins + subroutine psb_linsi(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_lpk_),intent(inout) :: x(:,:) + integer(psb_ipk_), intent(in) :: irw(:) + integer(psb_lpk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl + logical, intent(in), optional :: local + end subroutine psb_linsi + subroutine psb_linsvi(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_lpk_),intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: irw(:) + integer(psb_lpk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl + logical, intent(in), optional :: local + end subroutine psb_linsvi + subroutine psb_lins_vect(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 + type(psb_l_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: irw(:) + integer(psb_lpk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl + logical, intent(in), optional :: local + end subroutine psb_lins_vect + subroutine psb_lins_vect_v(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 + type(psb_l_vect_type), intent(inout) :: x + type(psb_i_vect_type), intent(inout) :: irw + type(psb_l_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl + logical, intent(in), optional :: local + end subroutine psb_lins_vect_v + subroutine psb_lins_vect_r2(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 + type(psb_l_vect_type), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: irw(:) + integer(psb_lpk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl + logical, intent(in), optional :: local + end subroutine psb_lins_vect_r2 + subroutine psb_lins_multivect(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 + type(psb_l_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: irw(:) + integer(psb_lpk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: dupl + logical, intent(in), optional :: local + end subroutine psb_lins_multivect + end interface + + +end module psb_l_tools_mod diff --git a/base/modules/tools/psb_tools_mod.f90 b/base/modules/tools/psb_tools_mod.f90 index a91b2b11..c8e9e782 100644 --- a/base/modules/tools/psb_tools_mod.f90 +++ b/base/modules/tools/psb_tools_mod.f90 @@ -32,6 +32,7 @@ module psb_tools_mod use psb_cd_tools_mod use psb_i_tools_mod + use psb_l_tools_mod use psb_s_tools_mod use psb_d_tools_mod use psb_c_tools_mod