From 4fca53d79b97ef0fbfc55d943f88eed1053b9c66 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Mon, 30 Jan 2012 15:24:37 +0000 Subject: [PATCH] psblas3: base/serial/psb_camax_s.f90 base/serial/psb_casum_s.f90 base/serial/psb_damax_s.f90 base/serial/psb_dasum_s.f90 base/serial/psb_samax_s.f90 base/serial/psb_sasum_s.f90 base/serial/psb_zamax_s.f90 base/serial/psb_zasum_s.f90 Reworked norm1 and norm infinity. --- base/serial/psb_camax_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_casum_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_damax_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_dasum_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_samax_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_sasum_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_zamax_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ base/serial/psb_zasum_s.f90 | 56 +++++++++++++++++++++++++++++++++++++ 8 files changed, 448 insertions(+) create mode 100644 base/serial/psb_camax_s.f90 create mode 100644 base/serial/psb_casum_s.f90 create mode 100644 base/serial/psb_damax_s.f90 create mode 100644 base/serial/psb_dasum_s.f90 create mode 100644 base/serial/psb_samax_s.f90 create mode 100644 base/serial/psb_sasum_s.f90 create mode 100644 base/serial/psb_zamax_s.f90 create mode 100644 base/serial/psb_zasum_s.f90 diff --git a/base/serial/psb_camax_s.f90 b/base/serial/psb_camax_s.f90 new file mode 100644 index 00000000..6db76e6b --- /dev/null +++ b/base/serial/psb_camax_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_camax_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - complex The input vector. +! +function psb_camax_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_camax_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + complex(psb_spk_), intent(in) :: x(:) + real(psb_spk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = maxval(psb_nrm1(x(1:k))) + +end function psb_camax_s diff --git a/base/serial/psb_casum_s.f90 b/base/serial/psb_casum_s.f90 new file mode 100644 index 00000000..0ef2fe1c --- /dev/null +++ b/base/serial/psb_casum_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_casum_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - complex The input vector. +! +function psb_casum_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_casum_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + complex(psb_spk_), intent(in) :: x(:) + real(psb_spk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = sum(psb_nrm1(x(1:k))) + +end function psb_casum_s diff --git a/base/serial/psb_damax_s.f90 b/base/serial/psb_damax_s.f90 new file mode 100644 index 00000000..f50bef01 --- /dev/null +++ b/base/serial/psb_damax_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_damax_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - real The input vector. +! +function psb_damax_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_damax_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + real(psb_dpk_), intent(in) :: x(:) + real(psb_dpk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = maxval(psb_nrm1(x(1:k))) + +end function psb_damax_s diff --git a/base/serial/psb_dasum_s.f90 b/base/serial/psb_dasum_s.f90 new file mode 100644 index 00000000..42b075b1 --- /dev/null +++ b/base/serial/psb_dasum_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_dasum_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - real The input vector. +! +function psb_dasum_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_dasum_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + real(psb_dpk_), intent(in) :: x(:) + real(psb_dpk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = sum(psb_nrm1(x(1:k))) + +end function psb_dasum_s diff --git a/base/serial/psb_samax_s.f90 b/base/serial/psb_samax_s.f90 new file mode 100644 index 00000000..5aa8278e --- /dev/null +++ b/base/serial/psb_samax_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_samax_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - real The input vector. +! +function psb_samax_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_samax_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + real(psb_spk_), intent(in) :: x(:) + real(psb_spk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = maxval(psb_nrm1(x(1:k))) + +end function psb_samax_s diff --git a/base/serial/psb_sasum_s.f90 b/base/serial/psb_sasum_s.f90 new file mode 100644 index 00000000..8497bf59 --- /dev/null +++ b/base/serial/psb_sasum_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_sasum_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - real The input vector. +! +function psb_sasum_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_sasum_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + real(psb_spk_), intent(in) :: x(:) + real(psb_spk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = sum(psb_nrm1(x(1:k))) + +end function psb_sasum_s diff --git a/base/serial/psb_zamax_s.f90 b/base/serial/psb_zamax_s.f90 new file mode 100644 index 00000000..eea70b2c --- /dev/null +++ b/base/serial/psb_zamax_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_zamax_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - complex The input vector. +! +function psb_zamax_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_zamax_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + complex(psb_dpk_), intent(in) :: x(:) + real(psb_dpk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = maxval(psb_nrm1(x(1:k))) + +end function psb_zamax_s diff --git a/base/serial/psb_zasum_s.f90 b/base/serial/psb_zasum_s.f90 new file mode 100644 index 00000000..2288dc8d --- /dev/null +++ b/base/serial/psb_zasum_s.f90 @@ -0,0 +1,56 @@ +!!$ +!!$ Parallel Sparse BLAS version 3.0 +!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010 +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ +!!$ 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. +!!$ +!!$ +! +! Function: psb_zasum_s +! Searches the absolute max of X. +! +! normi := max(abs(X(i)) +! +! Arguments: +! n - integer size of X +! x(:) - complex The input vector. +! +function psb_zasum_s(n, x) result(val) + use psb_base_mod, psb_protect_name => psb_zasum_s + + implicit none + + integer(psb_ipk_), intent(in) :: n + complex(psb_dpk_), intent(in) :: x(:) + real(psb_dpk_) :: val + + integer(psb_ipk_) :: k + + k = min(n,size(x)) + val = sum(psb_nrm1(x(1:k))) + +end function psb_zasum_s