Merge branch 'metis-32-64' into development
@@ -1792,6 +1792,9 @@ AC_DEFUN(PAC_CHECK_METIS,
|
||||
Default: "-lmetis"]),
|
||||
[psblas_cv_metis=$withval],
|
||||
[psblas_cv_metis='-lmetis'])
|
||||
AC_ARG_WITH(metisincfile, AC_HELP_STRING([--with-metisincfile=DIR], [Specify the name for METIS include file.]),
|
||||
[psblas_cv_metisincfile=$withval],
|
||||
[psblas_cv_metisincfile='metis.h'])
|
||||
AC_ARG_WITH(metisdir, AC_HELP_STRING([--with-metisdir=DIR], [Specify the directory for METIS library and includes.]),
|
||||
[psblas_cv_metisdir=$withval],
|
||||
[psblas_cv_metisdir=''])
|
||||
@@ -1821,7 +1824,7 @@ if test "x$psblas_cv_metislibdir" != "x"; then
|
||||
fi
|
||||
|
||||
AC_MSG_NOTICE([metis dir $psblas_cv_metisdir])
|
||||
AC_CHECK_HEADERS([limits.h metis.h],
|
||||
AC_CHECK_HEADERS([limits.h $psblas_cv_metisincfile],
|
||||
[pac_metis_header_ok=yes],
|
||||
[pac_metis_header_ok=no; METIS_INCLUDES=""])
|
||||
if test "x$pac_metis_header_ok" == "xno" ; then
|
||||
@@ -1831,7 +1834,7 @@ dnl Maybe Include or include subdirs?
|
||||
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
|
||||
|
||||
AC_MSG_CHECKING([for metis_h in $METIS_INCLUDES])
|
||||
AC_CHECK_HEADERS([limits.h metis.h],
|
||||
AC_CHECK_HEADERS([limits.h $psblas_cv_metisincfile],
|
||||
[pac_metis_header_ok=yes],
|
||||
[pac_metis_header_ok=no; METIS_INCLUDES=""])
|
||||
fi
|
||||
@@ -1840,11 +1843,27 @@ dnl Maybe new structure with METIS UFconfig METIS?
|
||||
unset ac_cv_header_metis_h
|
||||
METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include"
|
||||
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
|
||||
AC_CHECK_HEADERS([limits.h metis.h],
|
||||
AC_CHECK_HEADERS([limits.h $psblas_cv_metisincfile],
|
||||
[pac_metis_header_ok=yes],
|
||||
[pac_metis_header_ok=no; METIS_INCLUDES=""])
|
||||
fi
|
||||
|
||||
if test "x$pac_metis_header_ok" == "xyes" ; then
|
||||
AC_LANG_PUSH([C])
|
||||
AC_MSG_CHECKING([for METIS idx size])
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE(
|
||||
#include <stdio.h>
|
||||
#include "$psblas_cv_metisincfile"
|
||||
void main(){
|
||||
printf("%d\n",IDXTYPEWIDTH);
|
||||
}
|
||||
)],
|
||||
[pac_cv_metis_idx=`./conftest${ac_exeext} | sed 's/^ *//'`],
|
||||
[pac_cv_metis_idx="unknown"])
|
||||
AC_MSG_RESULT($pac_cv_metis_idx)
|
||||
|
||||
AC_LANG_POP()
|
||||
fi
|
||||
|
||||
if test "x$pac_metis_header_ok" == "xyes" ; then
|
||||
psblas_cv_metis_includes="$METIS_INCLUDES"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for PSBLAS 3.5.
|
||||
# Generated by GNU Autoconf 2.69 for PSBLAS 3.7.0.
|
||||
#
|
||||
# Report bugs to <https://github.com/sfilippone/psblas3/issues>.
|
||||
#
|
||||
@@ -580,8 +580,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='PSBLAS'
|
||||
PACKAGE_TARNAME='psblas'
|
||||
PACKAGE_VERSION='3.5'
|
||||
PACKAGE_STRING='PSBLAS 3.5'
|
||||
PACKAGE_VERSION='3.7.0'
|
||||
PACKAGE_STRING='PSBLAS 3.7.0'
|
||||
PACKAGE_BUGREPORT='https://github.com/sfilippone/psblas3/issues'
|
||||
PACKAGE_URL=''
|
||||
|
||||
@@ -626,6 +626,7 @@ ac_subst_vars='am__EXEEXT_FALSE
|
||||
am__EXEEXT_TRUE
|
||||
LTLIBOBJS
|
||||
LIBOBJS
|
||||
METISINCFILE
|
||||
UTILLIBNAME
|
||||
METHDLIBNAME
|
||||
PRECLIBNAME
|
||||
@@ -676,7 +677,6 @@ am__nodep
|
||||
AMDEPBACKSLASH
|
||||
AMDEP_FALSE
|
||||
AMDEP_TRUE
|
||||
am__quote
|
||||
am__include
|
||||
DEPDIR
|
||||
am__untar
|
||||
@@ -753,7 +753,8 @@ PACKAGE_VERSION
|
||||
PACKAGE_TARNAME
|
||||
PACKAGE_NAME
|
||||
PATH_SEPARATOR
|
||||
SHELL'
|
||||
SHELL
|
||||
am__quote'
|
||||
ac_subst_files=''
|
||||
ac_user_opts='
|
||||
enable_option_checking
|
||||
@@ -775,6 +776,7 @@ with_blasdir
|
||||
with_lapack
|
||||
with_rsb
|
||||
with_metis
|
||||
with_metisincfile
|
||||
with_metisdir
|
||||
with_metisincdir
|
||||
with_metislibdir
|
||||
@@ -1336,7 +1338,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures PSBLAS 3.5 to adapt to many kinds of systems.
|
||||
\`configure' configures PSBLAS 3.7.0 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1402,7 +1404,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of PSBLAS 3.5:";;
|
||||
short | recursive ) echo "Configuration of PSBLAS 3.7.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1454,6 +1456,7 @@ Optional Packages:
|
||||
configure script invoke librsb-config)
|
||||
--with-metis=LIBNAME Specify the library name for METIS library. Default:
|
||||
"-lmetis"
|
||||
--with-metisincfile=DIR Specify the name for METIS include file.
|
||||
--with-metisdir=DIR Specify the directory for METIS library and
|
||||
includes.
|
||||
--with-metisincdir=DIR Specify the directory for METIS includes.
|
||||
@@ -1544,7 +1547,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
PSBLAS configure 3.5
|
||||
PSBLAS configure 3.7.0
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2180,7 +2183,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by PSBLAS $as_me 3.5, which was
|
||||
It was created by PSBLAS $as_me 3.7.0, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2531,7 +2534,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
# VERSION is the file containing the PSBLAS version code
|
||||
# FIXME
|
||||
psblas_cv_version="3.5"
|
||||
psblas_cv_version="3.7.0"
|
||||
|
||||
# A sample source file
|
||||
|
||||
@@ -3515,6 +3518,68 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
# Expand $ac_aux_dir to an absolute path.
|
||||
am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
|
||||
$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
|
||||
if ${am_cv_prog_cc_c_o+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
# Make sure it works both with $CC and with simple cc.
|
||||
# Following AC_PROG_CC_C_O, we do the test twice because some
|
||||
# compilers refuse to overwrite an existing .o file with -o,
|
||||
# though they will create one.
|
||||
am_cv_prog_cc_c_o=yes
|
||||
for am_i in 1 2; do
|
||||
if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
|
||||
($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } \
|
||||
&& test -f conftest2.$ac_objext; then
|
||||
: OK
|
||||
else
|
||||
am_cv_prog_cc_c_o=no
|
||||
break
|
||||
fi
|
||||
done
|
||||
rm -f core conftest*
|
||||
unset am_i
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
|
||||
$as_echo "$am_cv_prog_cc_c_o" >&6; }
|
||||
if test "$am_cv_prog_cc_c_o" != yes; then
|
||||
# Losing compiler, so override with the script.
|
||||
# FIXME: It is wrong to rewrite CC.
|
||||
# But if we don't then we get into trouble of one sort or another.
|
||||
# A longer-term fix would be to have automake use am__CC in this case,
|
||||
# and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
|
||||
CC="$am_aux_dir/compile $CC"
|
||||
fi
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
CFLAGS="$save_CFLAGS";
|
||||
|
||||
|
||||
@@ -4942,7 +5007,7 @@ else
|
||||
fi
|
||||
|
||||
|
||||
am__api_version='1.13'
|
||||
am__api_version='1.16'
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
|
||||
$as_echo_n "checking whether build environment is sane... " >&6; }
|
||||
@@ -5021,9 +5086,6 @@ test "$program_suffix" != NONE &&
|
||||
ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
|
||||
program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
|
||||
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
|
||||
if test x"${MISSING+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
@@ -5041,7 +5103,7 @@ else
|
||||
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
|
||||
fi
|
||||
|
||||
if test x"${install_sh}" != xset; then
|
||||
if test x"${install_sh+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
|
||||
@@ -5278,45 +5340,45 @@ DEPDIR="${am__leading_dot}deps"
|
||||
|
||||
ac_config_commands="$ac_config_commands depfiles"
|
||||
|
||||
|
||||
am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
|
||||
$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
|
||||
cat > confinc.mk << 'END'
|
||||
am__doit:
|
||||
@echo this is the am__doit target
|
||||
@echo this is the am__doit target >confinc.out
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
|
||||
$as_echo_n "checking for style of include used by $am_make... " >&6; }
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# Ignore all kinds of additional output from 'make'.
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
;;
|
||||
esac
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
# BSD make does it like this.
|
||||
echo '.include "confinc.mk" # ignored' > confmf.BSD
|
||||
# Other make implementations (GNU, Solaris 10, AIX) do it like this.
|
||||
echo 'include confinc.mk # ignored' > confmf.GNU
|
||||
_am_result=no
|
||||
for s in GNU BSD; do
|
||||
{ echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
|
||||
(${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }
|
||||
case $?:`cat confinc.out 2>/dev/null` in #(
|
||||
'0:this is the am__doit target') :
|
||||
case $s in #(
|
||||
BSD) :
|
||||
am__include='.include' am__quote='"' ;; #(
|
||||
*) :
|
||||
am__include='include' am__quote='' ;;
|
||||
esac ;; #(
|
||||
*) :
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
|
||||
$as_echo "$_am_result" >&6; }
|
||||
rm -f confinc confmf
|
||||
esac
|
||||
if test "$am__include" != "#"; then
|
||||
_am_result="yes ($s style)"
|
||||
break
|
||||
fi
|
||||
done
|
||||
rm -f confinc.* confmf.*
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
|
||||
$as_echo "${_am_result}" >&6; }
|
||||
|
||||
# Check whether --enable-dependency-tracking was given.
|
||||
if test "${enable_dependency_tracking+set}" = set; then :
|
||||
@@ -5398,7 +5460,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='psblas'
|
||||
VERSION='3.5'
|
||||
VERSION='3.7.0'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@@ -5428,12 +5490,12 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
|
||||
|
||||
# For better backward compatibility. To be removed once Automake 1.9.x
|
||||
# dies out for good. For more background, see:
|
||||
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
|
||||
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
|
||||
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
|
||||
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
|
||||
mkdir_p='$(MKDIR_P)'
|
||||
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
# We need awk for the "check" target (and possibly the TAP driver). The
|
||||
# system "awk" is bad on some platforms.
|
||||
# Always define AMTAR for backward compatibility. Yes, it's still used
|
||||
# in the wild :-( We should find a proper way to deprecate it ...
|
||||
AMTAR='$${TAR-tar}'
|
||||
@@ -5577,6 +5639,48 @@ fi
|
||||
|
||||
|
||||
|
||||
# POSIX will say in a future version that running "rm -f" with no argument
|
||||
# is OK; and we want to be able to make that assumption in our Makefile
|
||||
# recipes. So use an aggressive probe to check that the usage we want is
|
||||
# actually supported "in the wild" to an acceptable degree.
|
||||
# See automake bug#10828.
|
||||
# To make any issue more visible, cause the running configure to be aborted
|
||||
# by default if the 'rm' program in use doesn't match our expectations; the
|
||||
# user can still override this though.
|
||||
if rm -f && rm -fr && rm -rf; then : OK; else
|
||||
cat >&2 <<'END'
|
||||
Oops!
|
||||
|
||||
Your 'rm' program seems unable to run without file operands specified
|
||||
on the command line, even when the '-f' option is present. This is contrary
|
||||
to the behaviour of most rm programs out there, and not conforming with
|
||||
the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
|
||||
|
||||
Please tell bug-automake@gnu.org about your system, including the value
|
||||
of your $PATH and any error possibly output before this message. This
|
||||
can help us improve future automake versions.
|
||||
|
||||
END
|
||||
if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
|
||||
echo 'Configuration will proceed anyway, since you have set the' >&2
|
||||
echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
|
||||
echo >&2
|
||||
else
|
||||
cat >&2 <<'END'
|
||||
Aborting the configuration process, to ensure you take notice of the issue.
|
||||
|
||||
You can download and install GNU coreutils to get an 'rm' implementation
|
||||
that behaves properly: <https://www.gnu.org/software/coreutils/>.
|
||||
|
||||
If you want to complete the configuration process using your problematic
|
||||
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
|
||||
to "yes", and re-run configure.
|
||||
|
||||
END
|
||||
as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7260,10 +7364,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Optional features
|
||||
#
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran VOLATILE" >&5
|
||||
$as_echo_n "checking support for Fortran VOLATILE... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
@@ -7283,12 +7383,13 @@ _ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES"
|
||||
:
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
as_fn_error $? "Sorry, cannot build PSBLAS without support for VOLATILE" "$LINENO" 5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
@@ -7300,6 +7401,101 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ISO_FORTRAN_ENV" >&5
|
||||
$as_echo_n "checking support for ISO_FORTRAN_ENV... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
|
||||
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
cat > conftest.$ac_ext <<_ACEOF
|
||||
|
||||
program test
|
||||
use iso_fortran_env
|
||||
end program test
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
:
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
as_fn_error $? "Sorry, cannot build PSBLAS without support for ISO_FORTRAN_ENV" "$LINENO" 5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FINAL" >&5
|
||||
$as_echo_n "checking support for Fortran FINAL... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
|
||||
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
cat > conftest.$ac_ext <<_ACEOF
|
||||
|
||||
module conftest_mod
|
||||
type foo
|
||||
integer :: i
|
||||
contains
|
||||
final :: destroy_foo
|
||||
end type foo
|
||||
|
||||
private destroy_foo
|
||||
contains
|
||||
subroutine destroy_foo(a)
|
||||
type(foo) :: a
|
||||
! Just a test
|
||||
end subroutine destroy_foo
|
||||
end module conftest_mod
|
||||
program conftest
|
||||
use conftest_mod
|
||||
type(foo) :: foovar
|
||||
end program conftest
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
:
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
as_fn_error $? "Sorry, cannot build PSBLAS without support for FINAL" "$LINENO" 5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Optional features
|
||||
#
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking test GENERIC interfaces" >&5
|
||||
$as_echo_n "checking test GENERIC interfaces... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
@@ -7387,93 +7583,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ISO_FORTRAN_ENV" >&5
|
||||
$as_echo_n "checking support for ISO_FORTRAN_ENV... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
|
||||
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
cat > conftest.$ac_ext <<_ACEOF
|
||||
|
||||
program test
|
||||
use iso_fortran_env
|
||||
end program test
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FINAL" >&5
|
||||
$as_echo_n "checking support for Fortran FINAL... " >&6; }
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
|
||||
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
|
||||
|
||||
ac_exeext=''
|
||||
ac_ext='f90'
|
||||
ac_fc=${MPIFC-$FC};
|
||||
cat > conftest.$ac_ext <<_ACEOF
|
||||
|
||||
module conftest_mod
|
||||
type foo
|
||||
integer :: i
|
||||
contains
|
||||
final :: destroy_foo
|
||||
end type foo
|
||||
|
||||
private destroy_foo
|
||||
contains
|
||||
subroutine destroy_foo(a)
|
||||
type(foo) :: a
|
||||
! Just a test
|
||||
end subroutine destroy_foo
|
||||
end module conftest_mod
|
||||
program conftest
|
||||
use conftest_mod
|
||||
type(foo) :: foovar
|
||||
end program conftest
|
||||
_ACEOF
|
||||
if ac_fn_fc_try_compile "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Additional pathname stuff (yes, it is redundant and confusing...)
|
||||
@@ -8756,6 +8865,14 @@ else
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-metisincfile was given.
|
||||
if test "${with_metisincfile+set}" = set; then :
|
||||
withval=$with_metisincfile; psblas_cv_metisincfile=$withval
|
||||
else
|
||||
psblas_cv_metisincfile='metis.h'
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-metisdir was given.
|
||||
if test "${with_metisdir+set}" = set; then :
|
||||
withval=$with_metisdir; psblas_cv_metisdir=$withval
|
||||
@@ -8805,7 +8922,7 @@ fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: metis dir $psblas_cv_metisdir" >&5
|
||||
$as_echo "$as_me: metis dir $psblas_cv_metisdir" >&6;}
|
||||
for ac_header in limits.h metis.h
|
||||
for ac_header in limits.h $psblas_cv_metisincfile
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||
@@ -8827,7 +8944,7 @@ if test "x$pac_metis_header_ok" == "xno" ; then
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for metis_h in $METIS_INCLUDES" >&5
|
||||
$as_echo_n "checking for metis_h in $METIS_INCLUDES... " >&6; }
|
||||
for ac_header in limits.h metis.h
|
||||
for ac_header in limits.h $psblas_cv_metisincfile
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||
@@ -8847,7 +8964,7 @@ if test "x$pac_metis_header_ok" == "xno" ; then
|
||||
unset ac_cv_header_metis_h
|
||||
METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include"
|
||||
CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS"
|
||||
for ac_header in limits.h metis.h
|
||||
for ac_header in limits.h $psblas_cv_metisincfile
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||
@@ -8864,6 +8981,41 @@ done
|
||||
|
||||
fi
|
||||
|
||||
if test "x$pac_metis_header_ok" == "xyes" ; then
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS idx size" >&5
|
||||
$as_echo_n "checking for METIS idx size... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <stdio.h>
|
||||
#include "$psblas_cv_metisincfile"
|
||||
void main(){
|
||||
printf("%d\n",IDXTYPEWIDTH);
|
||||
}
|
||||
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
pac_cv_metis_idx=`./conftest${ac_exeext} | sed 's/^ *//'`
|
||||
else
|
||||
pac_cv_metis_idx="unknown"
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_metis_idx" >&5
|
||||
$as_echo "$pac_cv_metis_idx" >&6; }
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
fi
|
||||
|
||||
if test "x$pac_metis_header_ok" == "xyes" ; then
|
||||
psblas_cv_metis_includes="$METIS_INCLUDES"
|
||||
@@ -9003,9 +9155,12 @@ fi
|
||||
LIBS="$SAVE_LIBS";
|
||||
CPPFLAGS="$SAVE_CPPFLAGS";
|
||||
|
||||
if test "x$psblas_cv_have_metis" == "xyes" ; then
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $FDEFINES"
|
||||
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES"
|
||||
if test "x$pac_cv_metis_idx" == "xunknown" ; then
|
||||
true ; # do nothing
|
||||
elif test "x$psblas_cv_have_metis" == "xyes" ; then
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $psblas_cv_define_prepend-DMETIS_$pac_cv_metis_idx $FDEFINES"
|
||||
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx"
|
||||
METISINCFILE=$psblas_cv_metisincfile
|
||||
fi
|
||||
|
||||
|
||||
@@ -9218,11 +9373,6 @@ fi
|
||||
|
||||
|
||||
|
||||
# Note : We would like to detect PSBLAS, but this is complicated by the
|
||||
# module symbols mangling rules, which are compiler specific !
|
||||
#
|
||||
# Moreover, the PSBLAS doesn't have an installer, currently.
|
||||
|
||||
###############################################################################
|
||||
# Library target directory and archive files.
|
||||
###############################################################################
|
||||
@@ -9275,7 +9425,6 @@ UTILLIBNAME=libpsb_util.a
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PSBLASRULES='
|
||||
@@ -9301,11 +9450,14 @@ FDEFINES=$(PSBFDEFINES)
|
||||
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
# the following files will be created by Automake
|
||||
|
||||
ac_config_files="$ac_config_files Make.inc"
|
||||
|
||||
ac_config_files="$ac_config_files util/psb_metis_int.h"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
# tests run on this system so they can be shared between configure
|
||||
@@ -9872,7 +10024,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by PSBLAS $as_me 3.5, which was
|
||||
This file was extended by PSBLAS $as_me 3.7.0, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -9929,7 +10081,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
PSBLAS config.status 3.5
|
||||
PSBLAS config.status 3.7.0
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
@@ -10037,7 +10189,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
#
|
||||
# INIT-COMMANDS
|
||||
#
|
||||
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
|
||||
AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
|
||||
|
||||
_ACEOF
|
||||
|
||||
@@ -10049,6 +10201,7 @@ do
|
||||
case $ac_config_target in
|
||||
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
||||
"Make.inc") CONFIG_FILES="$CONFIG_FILES Make.inc" ;;
|
||||
"util/psb_metis_int.h") CONFIG_FILES="$CONFIG_FILES util/psb_metis_int.h" ;;
|
||||
|
||||
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
|
||||
esac
|
||||
@@ -10482,29 +10635,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
|
||||
# Older Autoconf quotes --file arguments for eval, but not when files
|
||||
# are listed without --file. Let's play safe and only enable the eval
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
*\'*) eval set x "$CONFIG_FILES" ;;
|
||||
*) set x $CONFIG_FILES ;;
|
||||
esac
|
||||
# TODO: see whether this extra hack can be removed once we start
|
||||
# requiring Autoconf 2.70 or later.
|
||||
case $CONFIG_FILES in #(
|
||||
*\'*) :
|
||||
eval set x "$CONFIG_FILES" ;; #(
|
||||
*) :
|
||||
set x $CONFIG_FILES ;; #(
|
||||
*) :
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
for mf
|
||||
# Used to flag and report bootstrapping failures.
|
||||
am_rc=0
|
||||
for am_mf
|
||||
do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named 'Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# Grep'ing the whole file is not good either: AIX grep has a line
|
||||
am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile which includes
|
||||
# dependency-tracking related rules and includes.
|
||||
# Grep'ing the whole file directly is not great: AIX grep has a line
|
||||
# limit of 2048, but all sed's we know have understand at least 4000.
|
||||
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
|
||||
dirpart=`$as_dirname -- "$mf" ||
|
||||
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$mf" : 'X\(//\)[^/]' \| \
|
||||
X"$mf" : 'X\(//\)$' \| \
|
||||
X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X"$mf" |
|
||||
sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
|
||||
|| continue
|
||||
am_dirpart=`$as_dirname -- "$am_mf" ||
|
||||
$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$am_mf" : 'X\(//\)[^/]' \| \
|
||||
X"$am_mf" : 'X\(//\)$' \| \
|
||||
X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X"$am_mf" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
@@ -10522,53 +10681,48 @@ $as_echo X"$mf" |
|
||||
q
|
||||
}
|
||||
s/.*/./; q'`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running 'make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "$am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`$as_dirname -- "$file" ||
|
||||
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$file" : 'X\(//\)[^/]' \| \
|
||||
X"$file" : 'X\(//\)$' \| \
|
||||
X"$file" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X"$file" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
am_filepart=`$as_basename -- "$am_mf" ||
|
||||
$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
|
||||
X"$am_mf" : 'X\(//\)$' \| \
|
||||
X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X/"$am_mf" |
|
||||
sed '/^.*\/\([^/][^/]*\)\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
/^X\/\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
/^X\/\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'`
|
||||
as_dir=$dirpart/$fdir; as_fn_mkdir_p
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
{ echo "$as_me:$LINENO: cd "$am_dirpart" \
|
||||
&& sed -e '/# am--include-marker/d' "$am_filepart" \
|
||||
| $MAKE -f - am--depfiles" >&5
|
||||
(cd "$am_dirpart" \
|
||||
&& sed -e '/# am--include-marker/d' "$am_filepart" \
|
||||
| $MAKE -f - am--depfiles) >&5 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } || am_rc=$?
|
||||
done
|
||||
if test $am_rc -ne 0; then
|
||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
||||
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
||||
as_fn_error $? "Something went wrong bootstrapping makefile fragments
|
||||
for automatic dependency tracking. Try re-running configure with the
|
||||
'--disable-dependency-tracking' option to at least be able to build
|
||||
the package (albeit without support for automatic dependency tracking).
|
||||
See \`config.log' for more details" "$LINENO" 5; }
|
||||
fi
|
||||
{ am_dirpart=; unset am_dirpart;}
|
||||
{ am_filepart=; unset am_filepart;}
|
||||
{ am_mf=; unset am_mf;}
|
||||
{ am_rc=; unset am_rc;}
|
||||
rm -f conftest-deps.mk
|
||||
}
|
||||
;;
|
||||
|
||||
|
||||
@@ -36,11 +36,11 @@ dnl NOTE : There is no cross compilation support.
|
||||
###############################################################################
|
||||
|
||||
# NOTE: the literal for version (the second argument to AC_INIT should be a literal!)
|
||||
AC_INIT([PSBLAS],3.5, [https://github.com/sfilippone/psblas3/issues])
|
||||
AC_INIT([PSBLAS],3.7.0, [https://github.com/sfilippone/psblas3/issues])
|
||||
|
||||
# VERSION is the file containing the PSBLAS version code
|
||||
# FIXME
|
||||
psblas_cv_version="3.5"
|
||||
psblas_cv_version="3.7.0"
|
||||
|
||||
# A sample source file
|
||||
AC_CONFIG_SRCDIR([base/modules/psb_base_mod.f90])
|
||||
@@ -561,13 +561,26 @@ PAC_FORTRAN_TEST_MOLD(
|
||||
Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])]
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_VOLATILE(
|
||||
[],
|
||||
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for VOLATILE])]
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_ISO_FORTRAN_ENV(
|
||||
[],
|
||||
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for ISO_FORTRAN_ENV])]
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_FINAL(
|
||||
[],
|
||||
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for FINAL])]
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
# Optional features
|
||||
#
|
||||
|
||||
PAC_FORTRAN_TEST_VOLATILE(
|
||||
[FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES"],
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_GENERICS(
|
||||
[],
|
||||
@@ -578,14 +591,6 @@ PAC_FORTRAN_TEST_FLUSH(
|
||||
[FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES"],
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_ISO_FORTRAN_ENV(
|
||||
[FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES"],
|
||||
)
|
||||
|
||||
PAC_FORTRAN_TEST_FINAL(
|
||||
[FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES"],
|
||||
)
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Additional pathname stuff (yes, it is redundant and confusing...)
|
||||
@@ -689,9 +694,12 @@ LIBS="$RSB_LIBS ${LIBS}"
|
||||
dnl AC_CHECK_HEADERS([rsb.h], [ LIBS="${LIBS} $want_rsb_libs"], [])
|
||||
|
||||
PAC_CHECK_METIS
|
||||
if test "x$psblas_cv_have_metis" == "xyes" ; then
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $FDEFINES"
|
||||
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES"
|
||||
if test "x$pac_cv_metis_idx" == "xunknown" ; then
|
||||
true ; # do nothing
|
||||
elif test "x$psblas_cv_have_metis" == "xyes" ; then
|
||||
FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $psblas_cv_define_prepend-DMETIS_$pac_cv_metis_idx $FDEFINES"
|
||||
CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx"
|
||||
METISINCFILE=$psblas_cv_metisincfile
|
||||
fi
|
||||
|
||||
PAC_CHECK_AMD
|
||||
@@ -702,11 +710,6 @@ fi
|
||||
|
||||
|
||||
|
||||
# Note : We would like to detect PSBLAS, but this is complicated by the
|
||||
# module symbols mangling rules, which are compiler specific !
|
||||
#
|
||||
# Moreover, the PSBLAS doesn't have an installer, currently.
|
||||
|
||||
###############################################################################
|
||||
# Library target directory and archive files.
|
||||
###############################################################################
|
||||
@@ -761,7 +764,6 @@ AC_SUBST(LAPACK_LIBS)
|
||||
AC_SUBST(CINCLUDES)
|
||||
AC_SUBST(FINCLUDES)
|
||||
|
||||
|
||||
PSBLASRULES='
|
||||
PSBLDLIBS=$(LAPACK) $(BLAS) $(METIS_LIB) $(AMD_LIB) $(LIBS)
|
||||
CDEFINES=$(PSBCDEFINES)
|
||||
@@ -784,11 +786,13 @@ AC_SUBST(BASELIBNAME)
|
||||
AC_SUBST(PRECLIBNAME)
|
||||
AC_SUBST(METHDLIBNAME)
|
||||
AC_SUBST(UTILLIBNAME)
|
||||
AC_SUBST(METISINCFILE)
|
||||
|
||||
###############################################################################
|
||||
# the following files will be created by Automake
|
||||
|
||||
AC_CONFIG_FILES([Make.inc])
|
||||
AC_CONFIG_FILES([util/psb_metis_int.h])
|
||||
AC_OUTPUT()
|
||||
#AC_OUTPUT(Make.inc Makefile)
|
||||
###############################################################################
|
||||
|
||||
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 334 B |
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 382 B |
|
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 296 B |
@@ -8,13 +8,11 @@
|
||||
.cmbx-12x-x-144{font-size:172%; font-weight: bold;}
|
||||
.cmbx-12x-x-144{ font-weight: bold;}
|
||||
.cmbx-12x-x-144{ font-weight: bold;}
|
||||
.cmbx-12x-x-144{ font-weight: bold;}
|
||||
.cmti-10{ font-style: italic;}
|
||||
.cmti-12{font-size:120%; font-style: italic;}
|
||||
.cmbx-10{ font-weight: bold;}
|
||||
.cmbx-10{ font-weight: bold;}
|
||||
.cmbx-10{ font-weight: bold;}
|
||||
.cmbx-10{ font-weight: bold;}
|
||||
.cmtt-10{font-family: monospace;}
|
||||
.cmtt-10{font-family: monospace;}
|
||||
.cmtt-10{font-family: monospace;}
|
||||
@@ -23,7 +21,6 @@
|
||||
.cmbx-12{font-size:120%; font-weight: bold;}
|
||||
.cmbx-12{ font-weight: bold;}
|
||||
.cmbx-12{ font-weight: bold;}
|
||||
.cmbx-12{ font-weight: bold;}
|
||||
.cmtt-8{font-size:80%;font-family: monospace;}
|
||||
.cmtt-8{font-family: monospace;}
|
||||
.cmtt-8{font-family: monospace;}
|
||||
@@ -31,10 +28,6 @@
|
||||
.cmtt-9{font-family: monospace;}
|
||||
.cmtt-9{font-family: monospace;}
|
||||
.cmmi-8{font-size:80%;font-style: italic;}
|
||||
.cmbx-9{font-size:90%; font-weight: bold;}
|
||||
.cmbx-9{ font-weight: bold;}
|
||||
.cmbx-9{ font-weight: bold;}
|
||||
.cmbx-9{ font-weight: bold;}
|
||||
p.noindent { text-indent: 0em }
|
||||
td p.noindent { text-indent: 0em; margin-top:0em; }
|
||||
p.nopar { text-indent: 0em; }
|
||||
@@ -104,8 +97,9 @@ span.LATEX span.TEX{ position:relative; left: -0.4em; }
|
||||
div.float, div.figure {margin-left: auto; margin-right: auto;}
|
||||
div.float img {text-align:center;}
|
||||
div.figure img {text-align:center;}
|
||||
.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
|
||||
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
|
||||
.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
|
||||
.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
|
||||
.reversemarginpar{float:left;}
|
||||
table.equation {width:100%;}
|
||||
.equation td{text-align:center; }
|
||||
td.equation { margin-top:1em; margin-bottom:1em; }
|
||||
@@ -148,6 +142,7 @@ div.abstract {width:100%;}
|
||||
.Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; }
|
||||
.shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; }
|
||||
.doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; }
|
||||
.rotatebox{display: inline-block;}
|
||||
.figure img.graphics {margin-left:10%;}
|
||||
.lstlisting .label{margin-right:0.5em; }
|
||||
div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; }
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 439 B After Width: | Height: | Size: 439 B |
|
Before Width: | Height: | Size: 765 B After Width: | Height: | Size: 763 B |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -70,264 +70,254 @@ explicitly.
|
||||
<div class="fbox"><div class="minipage"><!--l. 44-->
|
||||
<div class="lstlisting" id="listing-9"><span class="label"><a
|
||||
id="x86-123001r1"></a></span><span
|
||||
class="cmbx-9">subroutine</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">some</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">args</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9">subroutine</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_foo</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">some</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">args</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123002r2"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">...</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">...</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123003r3"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">error</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">detected</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">then</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">error</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">detected</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">then</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123004r4"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">=</span><span
|
||||
class="cmr-9">errcode1</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">=</span><span
|
||||
class="cmtt-9">errcode1</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123005r5"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_errpush</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">errcode1</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_errpush</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">psb_foo</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">errcode1</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123006r6"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">goto</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">9999</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">goto</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">9999</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123007r7"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123008r8"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">...</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">...</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123009r9"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_bar</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">some</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">args</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_bar</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">some</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">args</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123010r10"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmbx-9">ne</span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">zero</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">then</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9">ne</span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">zero</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">then</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123011r11"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">info</span><span
|
||||
class="cmr-9">=</span><span
|
||||
class="cmr-9">errcode2</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">info</span><span
|
||||
class="cmtt-9">=</span><span
|
||||
class="cmtt-9">errcode2</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123012r12"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_errpush</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span><span
|
||||
class="cmr-9">’</span><span
|
||||
class="cmr-9">,</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">errcode2</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_errpush</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">psb_foo</span><span
|
||||
class="cmtt-9">’</span><span
|
||||
class="cmtt-9">,</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">errcode2</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123013r13"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">goto</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">9999</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">goto</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">9999</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123014r14"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123015r15"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">...</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">...</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123016r16"></a></span><span
|
||||
class="cmr-9">9999</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">continue</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9">9999</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">continue</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123017r17"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">err</span><span
|
||||
class="cmr-9">_act</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmbx-9">eq</span><span
|
||||
class="cmr-9">.</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">act</span><span
|
||||
class="cmr-9">_abort</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">then</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">err_act</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9">eq</span><span
|
||||
class="cmtt-9">.</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">act_abort</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">then</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123018r18"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">call</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_error</span><span
|
||||
class="cmr-9">(</span><span
|
||||
class="cmr-9">icontxt</span><span
|
||||
class="cmr-9">)</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">call</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_error</span><span
|
||||
class="cmtt-9">(</span><span
|
||||
class="cmtt-9">icontxt</span><span
|
||||
class="cmtt-9">)</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123019r19"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">return</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">return</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123020r20"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">else</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">else</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123021r21"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">return</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">return</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123022r22"></a></span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">if</span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">if</span><span
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123023r23"></a></span><span
|
||||
class="cmr-9"> </span><br /><span class="label"><a
|
||||
class="cmtt-9"> </span><br /><span class="label"><a
|
||||
id="x86-123024r24"></a></span><span
|
||||
class="cmbx-9">end</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmbx-9">subroutine</span><span
|
||||
class="cmr-9"> </span><span
|
||||
class="cmr-9">psb</span><span
|
||||
class="cmr-9">_foo</span>
|
||||
class="cmtt-9">end</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">subroutine</span><span
|
||||
class="cmtt-9"> </span><span
|
||||
class="cmtt-9">psb_foo</span>
|
||||
</div> </div> </div>
|
||||
</div>
|
||||
<br /> <div class="caption"
|
||||
|
||||
@@ -220,14 +220,90 @@ class="cmbx-12">Notes</span>
|
||||
possible to improve the runtime efficiency by using the following scheme:
|
||||
<!--l. 214-->
|
||||
<div class="lstlisting" id="listing-1"><span class="label"><a
|
||||
id="x20-57004r1"></a></span>    vres(1) = psb_gedot(x1,y1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x20-57005r2"></a></span>    vres(2) = psb_gedot(x2,y2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x20-57006r3"></a></span>    vres(3) = psb_gedot(x3,y3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x20-57007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_sum(ictxt,vres(1:3))
|
||||
id="x20-57004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_gedot</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x1</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">y1</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x20-57005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_gedot</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x2</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">y2</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x20-57006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_gedot</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x3</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">y3</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x20-57007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_sum</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">ictxt</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1:3))</span>
|
||||
|
||||
</div>
|
||||
<!--l. 220--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound
|
||||
|
||||
@@ -194,14 +194,84 @@ class="cmbx-12">Notes</span>
|
||||
multiple norms at the same time; in this case, it is possible to improve the
|
||||
runtime efficiency by using the following scheme: <!--l. 390-->
|
||||
<div class="lstlisting" id="listing-2"><span class="label"><a
|
||||
id="x22-59004r1"></a></span>    vres(1) = psb_geamax(x1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x22-59005r2"></a></span>    vres(2) = psb_geamax(x2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x22-59006r3"></a></span>    vres(3) = psb_geamax(x3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x22-59007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_amx(ictxt,vres(1:3))
|
||||
id="x22-59004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_geamax</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x1</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x22-59005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_geamax</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x2</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x22-59006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_geamax</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x3</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x22-59007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_amx</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">ictxt</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1:3))</span>
|
||||
|
||||
</div>
|
||||
<!--l. 396--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound
|
||||
|
||||
@@ -195,14 +195,84 @@ class="cmbx-12">Notes</span>
|
||||
multiple norms at the same time; in this case, it is possible to improve the
|
||||
runtime efficiency by using the following scheme: <!--l. 543-->
|
||||
<div class="lstlisting" id="listing-3"><span class="label"><a
|
||||
id="x24-61004r1"></a></span>    vres(1) = psb_geasum(x1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x24-61005r2"></a></span>    vres(2) = psb_geasum(x2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x24-61006r3"></a></span>    vres(3) = psb_geasum(x3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x24-61007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_sum(ictxt,vres(1:3))
|
||||
id="x24-61004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_geasum</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x1</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x24-61005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_geasum</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x2</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x24-61006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_geasum</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x3</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x24-61007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_sum</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">ictxt</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1:3))</span>
|
||||
|
||||
</div>
|
||||
<!--l. 549--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound
|
||||
|
||||
@@ -198,14 +198,84 @@ class="cmbx-12">Notes</span>
|
||||
multiple norms at the same time; in this case, it is possible to improve the
|
||||
runtime efficiency by using the following scheme: <!--l. 713-->
|
||||
<div class="lstlisting" id="listing-4"><span class="label"><a
|
||||
id="x26-63004r1"></a></span>    vres(1) = psb_genrm2(x1,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x26-63005r2"></a></span>    vres(2) = psb_genrm2(x2,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x26-63006r3"></a></span>    vres(3) = psb_genrm2(x3,desc_a,info,global=.<span
|
||||
class="cmbx-10">false</span>.) <br /><span class="label"><a
|
||||
id="x26-63007r4"></a></span>    <span
|
||||
class="cmbx-10">call</span> psb_nrm2(ictxt,vres(1:3))
|
||||
id="x26-63004r1"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_genrm2</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x1</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x26-63005r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(2)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_genrm2</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x2</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x26-63006r3"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(3)</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_genrm2</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x3</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">global</span><span
|
||||
class="cmtt-10">=.</span><span
|
||||
class="cmtt-10">false</span><span
|
||||
class="cmtt-10">.)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x26-63007r4"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_nrm2</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">ictxt</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">vres</span><span
|
||||
class="cmtt-10">(1:3))</span>
|
||||
|
||||
</div>
|
||||
<!--l. 719--><p class="noindent" >In this way the global communication, which for small sizes is a latency-bound
|
||||
|
||||
@@ -87,10 +87,38 @@ class="content">Data types</span></div><!--tex4ht:label?: x36-7300117 -->
|
||||
<!--l. 40-->
|
||||
<div class="lstlisting" id="listing-5"><span class="label"><a
|
||||
id="x36-73002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_halo(x, desc_a, info) <br /><span class="label"><a
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_halo</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x36-73003r2"></a></span><span
|
||||
class="cmbx-10">call</span> psb_halo(x, desc_a, info, work, <span
|
||||
class="cmbx-10">data</span>)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_halo</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">work</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">data</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -92,9 +92,42 @@ class="content">Data types</span></div><!--tex4ht:label?: x37-7400118 -->
|
||||
<!--l. 192-->
|
||||
<div class="lstlisting" id="listing-6"><span class="label"><a
|
||||
id="x37-74002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_ovrl(x, desc_a, info) <br /><span class="label"><a
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_ovrl</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x37-74003r2"></a></span><span
|
||||
class="cmbx-10">call</span> psb_ovrl(x, desc_a, info, update=update_type, work=work)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_ovrl</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">update</span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10">update_type</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">work</span><span
|
||||
class="cmtt-10">=</span><span
|
||||
class="cmtt-10">work</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -109,9 +109,44 @@ class="content">Data types</span></div><!--tex4ht:label?: x38-7500119 -->
|
||||
<!--l. 387-->
|
||||
<div class="lstlisting" id="listing-7"><span class="label"><a
|
||||
id="x38-75002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_gather(glob_x, loc_x, desc_a, info, root) <br /><span class="label"><a
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_gather</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">glob_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">loc_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">root</span><span
|
||||
class="cmtt-10">)</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x38-75003r2"></a></span><span
|
||||
class="cmbx-10">call</span> psb_gather(glob_x, loc_x, desc_a, info, root)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_gather</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">glob_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">loc_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">root</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -108,7 +108,27 @@ class="content">Data types</span></div><!--tex4ht:label?: x39-7600120 -->
|
||||
<!--l. 487-->
|
||||
<div class="lstlisting" id="listing-8"><span class="label"><a
|
||||
id="x39-76002r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_scatter(glob_x, loc_x, desc_a, info, root, mold)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_scatter</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">glob_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">loc_x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">root</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mold</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<dl class="description"><dt class="description">
|
||||
|
||||
@@ -45,8 +45,14 @@ class="description">Single precision complex;
|
||||
</dd><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Z</span> </dt><dd
|
||||
class="description">Double precision complex.</dd></dl>
|
||||
<!--l. 535--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
|
||||
class="description">Double precision complex;
|
||||
</dd><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">LS,LD,LC,LZ</span> </dt><dd
|
||||
class="description">Same numeric type as above, but with <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">psb_lpk_</span></span></span> integer
|
||||
indices.</dd></dl>
|
||||
<!--l. 537--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">a%a</span></span></span> of type
|
||||
<a
|
||||
id="spbasedata"><span
|
||||
@@ -62,18 +68,18 @@ class="cmtt-10">psb_spasb</span></span></span> routine. <hr class="figure"><div
|
||||
id="x14-260014"></a>
|
||||
<div class="center"
|
||||
>
|
||||
<!--l. 542--><p class="noindent" >
|
||||
<!--l. 544--><p class="noindent" >
|
||||
<div class="minipage"><div class="verbatim" id="verbatim-15">
|
||||
  type :: psb_Tspmat_type
|
||||
 <br />    class(psb_T_base_sparse_mat), allocatable  :: a
|
||||
 <br />  end type  psb_Tspmat_type
|
||||
</div>
|
||||
<!--l. 548--><p class="nopar" ></div></div>
|
||||
<!--l. 550--><p class="nopar" ></div></div>
|
||||
<br /> <div class="caption"
|
||||
><span class="id">Figure 4: </span><span
|
||||
class="content"> The PSBLAS defined data type that contains a sparse matrix.</span></div><!--tex4ht:label?: x14-260014 -->
|
||||
<!--l. 559--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 560--><p class="indent" > The following very common formats are precompiled in PSBLAS and thus are
|
||||
<!--l. 561--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 562--><p class="indent" > The following very common formats are precompiled in PSBLAS and thus are
|
||||
always available:
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
@@ -83,6 +89,9 @@ class="cmbx-10">_coo</span><span
|
||||
class="cmbx-10">_sparse</span><span
|
||||
class="cmbx-10">_mat</span> </dt><dd
|
||||
class="description">Coordinate storage;
|
||||
|
||||
|
||||
|
||||
</dd><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">psb</span><span
|
||||
@@ -99,10 +108,7 @@ class="cmbx-10">_csc</span><span
|
||||
class="cmbx-10">_sparse</span><span
|
||||
class="cmbx-10">_mat</span> </dt><dd
|
||||
class="description">Compressed storage by columns;</dd></dl>
|
||||
|
||||
|
||||
|
||||
<!--l. 567--><p class="noindent" >The inner sparse matrix has an associated state, which can take the following
|
||||
<!--l. 569--><p class="noindent" >The inner sparse matrix has an associated state, which can take the following
|
||||
values:
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
@@ -121,12 +127,12 @@ class="description">State entered after a reinitalization; this is used to handl
|
||||
in which the same sparsity pattern is used multiple times with different
|
||||
coefficients. In this state it is only possible to enter coefficients for already
|
||||
existing nonzero entries.</dd></dl>
|
||||
<!--l. 580--><p class="noindent" >The only storage variant supporting the build state is COO; all other variants are
|
||||
<!--l. 582--><p class="noindent" >The only storage variant supporting the build state is COO; all other variants are
|
||||
obtained by conversion to/from it.
|
||||
<!--l. 583--><p class="noindent" >
|
||||
<!--l. 585--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.1 </span> <a
|
||||
id="x14-270003.2.1"></a>Sparse Matrix Methods</h5>
|
||||
<!--l. 585--><p class="noindent" >
|
||||
<!--l. 587--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.2 </span> <a
|
||||
id="x14-280003.2.2"></a>get_nrows — Get number of rows in a sparse matrix</h5>
|
||||
|
||||
@@ -135,8 +141,8 @@ obtained by conversion to/from it.
|
||||
<div class="verbatim" id="verbatim-16">
|
||||
nr = a%get_nrows()
|
||||
</div>
|
||||
<!--l. 590--><p class="nopar" >
|
||||
<!--l. 592--><p class="indent" >
|
||||
<!--l. 592--><p class="nopar" >
|
||||
<!--l. 594--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -152,7 +158,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 602--><p class="indent" >
|
||||
<!--l. 604--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -162,7 +168,7 @@ class="description">
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The number of rows of sparse matrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">a</span></span></span>.</dd></dl>
|
||||
<!--l. 609--><p class="noindent" >
|
||||
<!--l. 611--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.3 </span> <a
|
||||
id="x14-290003.2.3"></a>get_ncols — Get number of columns in a sparse matrix</h5>
|
||||
|
||||
@@ -171,8 +177,8 @@ class="cmtt-10">a</span></span></span>.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-17">
|
||||
nc = a%get_ncols()
|
||||
</div>
|
||||
<!--l. 614--><p class="nopar" >
|
||||
<!--l. 616--><p class="indent" >
|
||||
<!--l. 616--><p class="nopar" >
|
||||
<!--l. 618--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -188,7 +194,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 626--><p class="indent" >
|
||||
<!--l. 628--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -198,7 +204,7 @@ class="description">
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The number of columns of sparse matrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">a</span></span></span>.</dd></dl>
|
||||
<!--l. 633--><p class="noindent" >
|
||||
<!--l. 635--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.4 </span> <a
|
||||
id="x14-300003.2.4"></a>get_nnzeros — Get number of nonzero elements in a sparse matrix</h5>
|
||||
|
||||
@@ -207,8 +213,8 @@ class="cmtt-10">a</span></span></span>.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-18">
|
||||
nz = a%get_nnzeros()
|
||||
</div>
|
||||
<!--l. 638--><p class="nopar" >
|
||||
<!--l. 640--><p class="indent" >
|
||||
<!--l. 640--><p class="nopar" >
|
||||
<!--l. 642--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -224,7 +230,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 650--><p class="indent" >
|
||||
<!--l. 652--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -234,7 +240,7 @@ class="description">
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The number of nonzero elements stored in sparse matrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">a</span></span></span>.</dd></dl>
|
||||
<!--l. 655--><p class="noindent" ><span
|
||||
<!--l. 657--><p class="noindent" ><span
|
||||
class="cmbx-10">Notes</span>
|
||||
<ol class="enumerate1" >
|
||||
<li
|
||||
@@ -242,7 +248,7 @@ class="cmbx-10">Notes</span>
|
||||
class="cmtt-10">a</span></span></span>; some
|
||||
storage formats employ padding, thus the returned value for the same
|
||||
matrix may be different for different storage choices.</li></ol>
|
||||
<!--l. 663--><p class="noindent" >
|
||||
<!--l. 665--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.5 </span> <a
|
||||
id="x14-310003.2.5"></a>get_size — Get maximum number of nonzero elements in a sparse
|
||||
matrix</h5>
|
||||
@@ -252,8 +258,8 @@ matrix</h5>
|
||||
<div class="verbatim" id="verbatim-19">
|
||||
maxnz = a%get_size()
|
||||
</div>
|
||||
<!--l. 668--><p class="nopar" >
|
||||
<!--l. 670--><p class="indent" >
|
||||
<!--l. 670--><p class="nopar" >
|
||||
<!--l. 672--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -269,7 +275,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 680--><p class="indent" >
|
||||
<!--l. 682--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -280,7 +286,7 @@ class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The maximum number of nonzero elements that can be stored
|
||||
in sparse matrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">a</span></span></span> using its current memory allocation.</dd></dl>
|
||||
<!--l. 687--><p class="noindent" >
|
||||
<!--l. 689--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.6 </span> <a
|
||||
id="x14-320003.2.6"></a>sizeof — Get memory occupation in bytes of a sparse matrix</h5>
|
||||
|
||||
@@ -289,8 +295,8 @@ class="cmtt-10">a</span></span></span> using its current memory allocation.</dd>
|
||||
<div class="verbatim" id="verbatim-20">
|
||||
memory_size = a%sizeof()
|
||||
</div>
|
||||
<!--l. 692--><p class="nopar" >
|
||||
<!--l. 694--><p class="indent" >
|
||||
<!--l. 694--><p class="nopar" >
|
||||
<!--l. 696--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -306,7 +312,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 704--><p class="indent" >
|
||||
<!--l. 706--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -315,7 +321,7 @@ class="description">
|
||||
<span
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The memory occupation in bytes.</dd></dl>
|
||||
<!--l. 710--><p class="noindent" >
|
||||
<!--l. 712--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.7 </span> <a
|
||||
id="x14-330003.2.7"></a>get_fmt — Short description of the dynamic type</h5>
|
||||
|
||||
@@ -324,8 +330,8 @@ class="description">The memory occupation in bytes.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-21">
|
||||
write(*,*) a%get_fmt()
|
||||
</div>
|
||||
<!--l. 715--><p class="nopar" >
|
||||
<!--l. 717--><p class="indent" >
|
||||
<!--l. 717--><p class="nopar" >
|
||||
<!--l. 719--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -341,7 +347,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 727--><p class="indent" >
|
||||
<!--l. 729--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -355,7 +361,7 @@ class="cmtt-10">NULL</span></span></span>, <span class="obeylines-h"><span class
|
||||
class="cmtt-10">COO</span></span></span>, <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">CSR</span></span></span> and <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">CSC</span></span></span>.</dd></dl>
|
||||
<!--l. 734--><p class="noindent" >
|
||||
<!--l. 736--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.8 </span> <a
|
||||
id="x14-340003.2.8"></a>is_bld, is_upd, is_asb — Status check</h5>
|
||||
|
||||
@@ -366,8 +372,8 @@ if (a%is_bld()) then
|
||||
 <br />if (a%is_upd()) then
|
||||
 <br />if (a%is_asb()) then
|
||||
</div>
|
||||
<!--l. 741--><p class="nopar" >
|
||||
<!--l. 743--><p class="indent" >
|
||||
<!--l. 743--><p class="nopar" >
|
||||
<!--l. 745--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -383,7 +389,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 753--><p class="indent" >
|
||||
<!--l. 755--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -394,7 +400,7 @@ class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">A <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">logical</span></span></span> value indicating whether the matrix is in the Build,
|
||||
Update or Assembled state, respectively.</dd></dl>
|
||||
<!--l. 760--><p class="noindent" >
|
||||
<!--l. 762--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.9 </span> <a
|
||||
id="x14-350003.2.9"></a>is_lower, is_upper, is_triangle, is_unit — Format check</h5>
|
||||
|
||||
@@ -406,8 +412,8 @@ if (a%is_triangle()) then
|
||||
 <br />if (a%is_lower()) then
|
||||
 <br />if (a%is_unit()) then
|
||||
</div>
|
||||
<!--l. 768--><p class="nopar" >
|
||||
<!--l. 770--><p class="indent" >
|
||||
<!--l. 770--><p class="nopar" >
|
||||
<!--l. 772--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -423,7 +429,7 @@ class="description">the sparse matrix<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 780--><p class="indent" >
|
||||
<!--l. 782--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -437,7 +443,7 @@ class="cmtt-10">logical</span></span></span> value indicating whether the matrix
|
||||
class="cmtt-10">is_triangle()</span></span></span> returns <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">.true.</span></span></span> check also if it is lower, upper and with
|
||||
a unit (i.e. assumed) diagonal.</dd></dl>
|
||||
<!--l. 789--><p class="noindent" >
|
||||
<!--l. 791--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.10 </span> <a
|
||||
id="x14-360003.2.10"></a>cscnv — Convert to a different storage format</h5>
|
||||
|
||||
@@ -447,8 +453,8 @@ class="cmtt-10">.true.</span></span></span> check also if it is lower, upper and
|
||||
call  a%cscnv(b,info [, type, mold, dupl])
|
||||
 <br />call  a%cscnv(info [, type, mold, dupl])
|
||||
</div>
|
||||
<!--l. 795--><p class="nopar" >
|
||||
<!--l. 797--><p class="indent" >
|
||||
<!--l. 797--><p class="nopar" >
|
||||
<!--l. 799--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -482,7 +488,7 @@ class="newline" />Type: optional.
|
||||
class="cmbx-10">dupl</span> </dt><dd
|
||||
class="description">an integer value specifing how to handle duplicates (see Named Constants
|
||||
below)</dd></dl>
|
||||
<!--l. 811--><p class="indent" >
|
||||
<!--l. 813--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -498,10 +504,10 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 817--><p class="noindent" >The <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 819--><p class="noindent" >The <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">mold</span></span></span> arguments may be employed to interface with special devices, such as GPUs
|
||||
and other accelerators.
|
||||
<!--l. 822--><p class="noindent" >
|
||||
<!--l. 824--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.11 </span> <a
|
||||
id="x14-370003.2.11"></a>csclip — Reduce to a submatrix</h5>
|
||||
|
||||
@@ -511,8 +517,8 @@ and other accelerators.
|
||||
    call a%csclip(b,info[,&
|
||||
 <br />       & imin,imax,jmin,jmax,rscale,cscale])
|
||||
</div>
|
||||
<!--l. 827--><p class="nopar" >
|
||||
<!--l. 829--><p class="indent" > Returns the submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 829--><p class="nopar" >
|
||||
<!--l. 831--><p class="indent" > Returns the submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>, optionally rescaling row/col
|
||||
indices to the range <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span>.
|
||||
@@ -542,7 +548,7 @@ class="newline" />Type: optional.
|
||||
<span
|
||||
class="cmbx-10">rscale,cscale</span> </dt><dd
|
||||
class="description">Whether to rescale row/column indices. Type: optional.</dd></dl>
|
||||
<!--l. 843--><p class="noindent" >
|
||||
<!--l. 845--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -558,7 +564,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 850--><p class="noindent" >
|
||||
<!--l. 852--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.12 </span> <a
|
||||
id="x14-380003.2.12"></a>clean_zeros — Eliminate zero coefficients</h5>
|
||||
|
||||
@@ -567,11 +573,11 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-26">
|
||||
    call a%clean_zeros(info)
|
||||
</div>
|
||||
<!--l. 854--><p class="nopar" >
|
||||
<!--l. 856--><p class="indent" > Eliminates zero coefficients in the input matrix. Note that depending on the
|
||||
<!--l. 856--><p class="nopar" >
|
||||
<!--l. 858--><p class="indent" > Eliminates zero coefficients in the input matrix. Note that depending on the
|
||||
internal storage format, there may still be some amount of zero padding in the
|
||||
output.
|
||||
<!--l. 860--><p class="indent" >
|
||||
<!--l. 862--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -589,7 +595,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 867--><p class="noindent" >
|
||||
<!--l. 869--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -605,7 +611,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 874--><p class="noindent" >
|
||||
<!--l. 876--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.13 </span> <a
|
||||
id="x14-390003.2.13"></a>get_diag — Get main diagonal</h5>
|
||||
|
||||
@@ -614,8 +620,8 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-27">
|
||||
    call a%get_diag(d,info)
|
||||
</div>
|
||||
<!--l. 878--><p class="nopar" >
|
||||
<!--l. 880--><p class="indent" > Returns a copy of the main diagonal.
|
||||
<!--l. 880--><p class="nopar" >
|
||||
<!--l. 882--><p class="indent" > Returns a copy of the main diagonal.
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -633,7 +639,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 888--><p class="noindent" >
|
||||
<!--l. 890--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -647,7 +653,7 @@ class="newline" />A one-dimensional array of the appropriate type.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 896--><p class="noindent" >
|
||||
<!--l. 898--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.14 </span> <a
|
||||
id="x14-400003.2.14"></a>clip_diag — Cut out main diagonal</h5>
|
||||
|
||||
@@ -656,8 +662,8 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-28">
|
||||
    call a%clip_diag(b,info)
|
||||
</div>
|
||||
<!--l. 900--><p class="nopar" >
|
||||
<!--l. 902--><p class="indent" > Returns a copy of <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 902--><p class="nopar" >
|
||||
<!--l. 904--><p class="indent" > Returns a copy of <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">a</span></span></span> without the main diagonal.
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
@@ -676,7 +682,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 910--><p class="noindent" >
|
||||
<!--l. 912--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -692,7 +698,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 918--><p class="noindent" >
|
||||
<!--l. 920--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.15 </span> <a
|
||||
id="x14-410003.2.15"></a>tril — Return the lower triangle</h5>
|
||||
|
||||
@@ -702,8 +708,8 @@ class="description">Return code.</dd></dl>
|
||||
    call a%tril(l,info[,&
|
||||
 <br />       & diag,imin,imax,jmin,jmax,rscale,cscale,u])
|
||||
</div>
|
||||
<!--l. 923--><p class="nopar" >
|
||||
<!--l. 925--><p class="indent" > Returns the lower triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 925--><p class="nopar" >
|
||||
<!--l. 927--><p class="indent" > Returns the lower triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>,
|
||||
optionally rescaling row/col indices to the range <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span> and
|
||||
@@ -741,7 +747,7 @@ class="newline" />Type: optional.
|
||||
<span
|
||||
class="cmbx-10">rscale,cscale</span> </dt><dd
|
||||
class="description">Whether to rescale row/column indices. Type: optional.</dd></dl>
|
||||
<!--l. 943--><p class="noindent" >
|
||||
<!--l. 945--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -764,7 +770,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 952--><p class="noindent" >
|
||||
<!--l. 954--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.16 </span> <a
|
||||
id="x14-420003.2.16"></a>triu — Return the upper triangle</h5>
|
||||
|
||||
@@ -774,8 +780,8 @@ class="description">Return code.</dd></dl>
|
||||
    call a%triu(u,info[,&
|
||||
 <br />       & diag,imin,imax,jmin,jmax,rscale,cscale,l])
|
||||
</div>
|
||||
<!--l. 957--><p class="nopar" >
|
||||
<!--l. 959--><p class="indent" > Returns the upper triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 959--><p class="nopar" >
|
||||
<!--l. 961--><p class="indent" > Returns the upper triangular part of submatrix <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">A(imin:imax,jmin:jmax)</span></span></span>,
|
||||
optionally rescaling row/col indices to the range <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">1:imax-imin+1,1:jmax-jmin+1</span></span></span>,
|
||||
@@ -813,7 +819,7 @@ class="newline" />Type: optional.
|
||||
<span
|
||||
class="cmbx-10">rscale,cscale</span> </dt><dd
|
||||
class="description">Whether to rescale row/column indices. Type: optional.</dd></dl>
|
||||
<!--l. 977--><p class="noindent" >
|
||||
<!--l. 979--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -836,7 +842,7 @@ class="cmtt-10">psb_Tspmat_type</span></span></span>.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 989--><p class="noindent" >
|
||||
<!--l. 991--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.17 </span> <a
|
||||
id="x14-430003.2.17"></a>psb_set_mat_default — Set default storage format</h5>
|
||||
|
||||
@@ -845,8 +851,8 @@ class="description">Return code.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-31">
|
||||
call  psb_set_mat_default(a)
|
||||
</div>
|
||||
<!--l. 995--><p class="nopar" >
|
||||
<!--l. 997--><p class="indent" >
|
||||
<!--l. 997--><p class="nopar" >
|
||||
<!--l. 999--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -862,7 +868,7 @@ class="description">a variable of <span class="obeylines-h"><span class="verb
|
||||
class="cmtt-10">class(psb_T_base_sparse_mat)</span></span></span> requesting a new default
|
||||
storage format.<br
|
||||
class="newline" />Type: required.</dd></dl>
|
||||
<!--l. 1009--><p class="noindent" >
|
||||
<!--l. 1011--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.18 </span> <a
|
||||
id="x14-440003.2.18"></a>clone — Clone current object</h5>
|
||||
|
||||
@@ -871,8 +877,8 @@ class="newline" />Type: required.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-32">
|
||||
call  a%clone(b,info)
|
||||
</div>
|
||||
<!--l. 1014--><p class="nopar" >
|
||||
<!--l. 1016--><p class="indent" >
|
||||
<!--l. 1016--><p class="nopar" >
|
||||
<!--l. 1018--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -888,7 +894,7 @@ class="description">the sparse matrix.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1026--><p class="indent" >
|
||||
<!--l. 1028--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -901,10 +907,10 @@ class="description">A copy of the input object.
|
||||
<span
|
||||
class="cmbx-10">info</span> </dt><dd
|
||||
class="description">Return code.</dd></dl>
|
||||
<!--l. 1033--><p class="noindent" >
|
||||
<!--l. 1035--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.2.19 </span> <a
|
||||
id="x14-450003.2.19"></a>Named Constants</h5>
|
||||
<!--l. 1035--><p class="noindent" >
|
||||
<!--l. 1037--><p class="noindent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">psb</span><span
|
||||
@@ -952,12 +958,12 @@ class="description">Update strategy based on additional permutation data (see
|
||||
|
||||
|
||||
|
||||
<!--l. 1051--><div class="crosslinks"><p class="noindent">[<a
|
||||
<!--l. 1053--><div class="crosslinks"><p class="noindent">[<a
|
||||
href="userhtmlse4.html" >next</a>] [<a
|
||||
href="userhtmlsu5.html" >prev</a>] [<a
|
||||
href="userhtmlsu5.html#tailuserhtmlsu5.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu6.html" >front</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlsu9.html" >up</a>] </p></div>
|
||||
<!--l. 1051--><p class="indent" > <a
|
||||
<!--l. 1053--><p class="indent" > <a
|
||||
id="tailuserhtmlsu6.html"></a>
|
||||
</body></html>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</head><body
|
||||
>
|
||||
<!--l. 1051--><div class="crosslinks"><p class="noindent">[<a
|
||||
<!--l. 1053--><div class="crosslinks"><p class="noindent">[<a
|
||||
href="userhtmlsu10.html" >next</a>] [<a
|
||||
href="userhtmlsu6.html" >prev</a>] [<a
|
||||
href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a
|
||||
@@ -18,7 +18,7 @@ href="userhtmlse3.html#tailuserhtmlsu7.html">tail</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlse4.html" >up</a>] </p></div>
|
||||
<h4 class="subsectionHead"><span class="titlemark">3.3 </span> <a
|
||||
id="x15-460003.3"></a>Dense Vector Data Structure</h4>
|
||||
<!--l. 1053--><p class="noindent" >The <a
|
||||
<!--l. 1055--><p class="noindent" >The <a
|
||||
id="vdata"><span
|
||||
class="cmtt-10">psb</span><span
|
||||
class="cmtt-10">_T</span><span
|
||||
@@ -36,7 +36,7 @@ sec. <a
|
||||
href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>. Among other simple things, we define here an extraction method that
|
||||
can be used to get a full copy of the part of the vector stored on the local
|
||||
process.
|
||||
<!--l. 1063--><p class="indent" > The type declaration is shown in figure <a
|
||||
<!--l. 1065--><p class="indent" > The type declaration is shown in figure <a
|
||||
href="#x15-460015">5<!--tex4ht:ref: fig:vectype --></a> where <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">T</span></span></span> is a placeholder for the data
|
||||
type and precision variants
|
||||
@@ -60,7 +60,7 @@ class="description">Single precision complex;
|
||||
<span
|
||||
class="cmbx-10">Z</span> </dt><dd
|
||||
class="description">Double precision complex.</dd></dl>
|
||||
<!--l. 1073--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 1075--><p class="noindent" >The actual data is contained in the polymorphic component <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">v%v</span></span></span>; the separation between
|
||||
the application and the actual data is essential for cases where it is necessary to link
|
||||
to data storage made available elsewhere outside the direct control of the
|
||||
@@ -70,7 +70,7 @@ compiler/application, e.g. data stored in a graphics accelerator’s private
|
||||
id="x15-460015"></a>
|
||||
<div class="center"
|
||||
>
|
||||
<!--l. 1081--><p class="noindent" >
|
||||
<!--l. 1083--><p class="noindent" >
|
||||
<div class="minipage"><div class="verbatim" id="verbatim-33">
|
||||
  type psb_T_base_vect_type
|
||||
 <br />    TYPE(KIND_), allocatable :: v(:)
|
||||
@@ -81,18 +81,18 @@ compiler/application, e.g. data stored in a graphics accelerator’s private
|
||||
 <br />  end type  psb_T_vect_type
|
||||
 <br />
|
||||
</div>
|
||||
<!--l. 1092--><p class="nopar" ></div></div>
|
||||
<!--l. 1094--><p class="nopar" ></div></div>
|
||||
|
||||
|
||||
|
||||
<br /> <div class="caption"
|
||||
><span class="id">Figure 5: </span><span
|
||||
class="content"> The PSBLAS defined data type that contains a dense vector.</span></div><!--tex4ht:label?: x15-460015 -->
|
||||
<!--l. 1103--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 1105--><p class="noindent" >
|
||||
<!--l. 1105--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 1107--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.1 </span> <a
|
||||
id="x15-470003.3.1"></a>Vector Methods</h5>
|
||||
<!--l. 1106--><p class="noindent" >
|
||||
<!--l. 1108--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.2 </span> <a
|
||||
id="x15-480003.3.2"></a>get_nrows — Get number of rows in a dense vector</h5>
|
||||
|
||||
@@ -101,8 +101,8 @@ class="content"> The PSBLAS defined data type that contains a dense vector.</spa
|
||||
<div class="verbatim" id="verbatim-34">
|
||||
nr = v%get_nrows()
|
||||
</div>
|
||||
<!--l. 1111--><p class="nopar" >
|
||||
<!--l. 1113--><p class="indent" >
|
||||
<!--l. 1113--><p class="nopar" >
|
||||
<!--l. 1115--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -118,7 +118,7 @@ class="description">the dense vector<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1123--><p class="indent" >
|
||||
<!--l. 1125--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -128,7 +128,7 @@ class="description">
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The number of rows of dense vector <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">v</span></span></span>.</dd></dl>
|
||||
<!--l. 1130--><p class="noindent" >
|
||||
<!--l. 1132--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.3 </span> <a
|
||||
id="x15-490003.3.3"></a>sizeof — Get memory occupation in bytes of a dense vector</h5>
|
||||
|
||||
@@ -137,8 +137,8 @@ class="cmtt-10">v</span></span></span>.</dd></dl>
|
||||
<div class="verbatim" id="verbatim-35">
|
||||
memory_size = v%sizeof()
|
||||
</div>
|
||||
<!--l. 1135--><p class="nopar" >
|
||||
<!--l. 1137--><p class="indent" >
|
||||
<!--l. 1137--><p class="nopar" >
|
||||
<!--l. 1139--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -154,7 +154,7 @@ class="description">the dense vector<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span><br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1147--><p class="indent" >
|
||||
<!--l. 1149--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -163,7 +163,7 @@ class="description">
|
||||
<span
|
||||
class="cmbx-10">Function value</span> </dt><dd
|
||||
class="description">The memory occupation in bytes.</dd></dl>
|
||||
<!--l. 1153--><p class="noindent" >
|
||||
<!--l. 1155--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.4 </span> <a
|
||||
id="x15-500003.3.4"></a>set — Set contents of the vector</h5>
|
||||
|
||||
@@ -174,8 +174,8 @@ class="description">The memory occupation in bytes.</dd></dl>
|
||||
 <br /> call  v%set(vect[,first,last])
|
||||
 <br /> call  v%zero()
|
||||
</div>
|
||||
<!--l. 1160--><p class="nopar" >
|
||||
<!--l. 1162--><p class="indent" >
|
||||
<!--l. 1162--><p class="nopar" >
|
||||
<!--l. 1164--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -226,13 +226,13 @@ class="newline" />Intent: <span
|
||||
class="cmbx-10">in</span>.<br
|
||||
class="newline" />Specified as: a number of the data type indicated in Table <a
|
||||
href="userhtmlsu10.html#x19-560011">1<!--tex4ht:ref: tab:f90axpby --></a>.</dd></dl>
|
||||
<!--l. 1181--><p class="noindent" >Note that a call to <span class="obeylines-h"><span class="verb"><span
|
||||
<!--l. 1183--><p class="noindent" >Note that a call to <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">v%zero()</span></span></span> is provided as a shorthand, but is equivalent to a call
|
||||
to <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">v%set(zero)</span></span></span> with the <span class="obeylines-h"><span class="verb"><span
|
||||
class="cmtt-10">zero</span></span></span> constant having the appropriate type and
|
||||
kind.
|
||||
<!--l. 1185--><p class="indent" >
|
||||
<!--l. 1187--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -247,7 +247,7 @@ class="newline" /></dd></dl>
|
||||
|
||||
|
||||
|
||||
<!--l. 1191--><p class="noindent" >
|
||||
<!--l. 1193--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.5 </span> <a
|
||||
id="x15-510003.3.5"></a>get_vect — Get a copy of the vector contents</h5>
|
||||
|
||||
@@ -256,8 +256,8 @@ class="newline" /></dd></dl>
|
||||
<div class="verbatim" id="verbatim-37">
|
||||
extv = v%get_vect([n])
|
||||
</div>
|
||||
<!--l. 1196--><p class="nopar" >
|
||||
<!--l. 1198--><p class="indent" >
|
||||
<!--l. 1198--><p class="nopar" >
|
||||
<!--l. 1200--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -283,7 +283,7 @@ class="newline" />Type: <span
|
||||
class="cmbx-10">optional</span>; default: entire vector.<br
|
||||
class="newline" />
|
||||
</dd></dl>
|
||||
<!--l. 1212--><p class="indent" >
|
||||
<!--l. 1214--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -299,7 +299,7 @@ class="cmmi-10">n </span>and the internal size of the vector, or 0 if
|
||||
<span
|
||||
class="cmmi-10">n </span>is negative; otherwise, the size of the array is the same as the internal
|
||||
size of the vector.</dd></dl>
|
||||
<!--l. 1221--><p class="noindent" >
|
||||
<!--l. 1223--><p class="noindent" >
|
||||
<h5 class="subsubsectionHead"><span class="titlemark">3.3.6 </span> <a
|
||||
id="x15-520003.3.6"></a>clone — Clone current object</h5>
|
||||
|
||||
@@ -308,8 +308,8 @@ class="cmmi-10">n </span>is negative; otherwise, the size of the array is the sa
|
||||
<div class="verbatim" id="verbatim-38">
|
||||
call  x%clone(y,info)
|
||||
</div>
|
||||
<!--l. 1225--><p class="nopar" >
|
||||
<!--l. 1227--><p class="indent" >
|
||||
<!--l. 1227--><p class="nopar" >
|
||||
<!--l. 1229--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">Type:</span> </dt><dd
|
||||
@@ -325,7 +325,7 @@ class="description">the dense vector.<br
|
||||
class="newline" />Scope: <span
|
||||
class="cmbx-10">local</span>.<br
|
||||
class="newline" /></dd></dl>
|
||||
<!--l. 1237--><p class="indent" >
|
||||
<!--l. 1239--><p class="indent" >
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">On Return</span> </dt><dd
|
||||
@@ -341,12 +341,12 @@ class="description">Return code.</dd></dl>
|
||||
|
||||
|
||||
|
||||
<!--l. 1244--><div class="crosslinks"><p class="noindent">[<a
|
||||
<!--l. 1246--><div class="crosslinks"><p class="noindent">[<a
|
||||
href="userhtmlsu10.html" >next</a>] [<a
|
||||
href="userhtmlsu6.html" >prev</a>] [<a
|
||||
href="userhtmlsu6.html#tailuserhtmlsu6.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu7.html" >front</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlse4.html" >up</a>] </p></div>
|
||||
<!--l. 1244--><p class="indent" > <a
|
||||
<!--l. 1246--><p class="indent" > <a
|
||||
id="tailuserhtmlsu7.html"></a>
|
||||
</body></html>
|
||||
|
||||
@@ -19,7 +19,21 @@ href="userhtmlsu76.html#userhtmlsu77.html" >up</a>] </p></div>
|
||||
<!--l. 126-->
|
||||
<div class="lstlisting" id="listing-10"><span class="label"><a
|
||||
id="x87-124001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_errpush(err_c, r_name, i_err, a_err)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_errpush</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">err_c</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">r_name</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">i_err</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">a_err</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 130--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlse9.html" >up</a>] </p></div>
|
||||
<!--l. 156-->
|
||||
<div class="lstlisting" id="listing-11"><span class="label"><a
|
||||
id="x88-125001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_error(icontxt)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_error</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">icontxt</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 160--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlsu78.html" >up</a>] </p></div>
|
||||
<!--l. 176-->
|
||||
<div class="lstlisting" id="listing-12"><span class="label"><a
|
||||
id="x89-126001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_set_errverbosity(v)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_set_errverbosity</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">v</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 180--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,12 @@ condition</h4>
|
||||
<!--l. 193-->
|
||||
<div class="lstlisting" id="listing-13"><span class="label"><a
|
||||
id="x90-127001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_set_erraction(err_act)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_set_erraction</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">err_act</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 197--><p class="indent" >
|
||||
|
||||
@@ -21,7 +21,27 @@ format</h4>
|
||||
<!--l. 16-->
|
||||
<div class="lstlisting" id="listing-14"><span class="label"><a
|
||||
id="x92-129001r1"></a></span><span
|
||||
class="cmbx-10">call</span> hb_read(a, iret, iunit, filename, b, mtitle)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">hb_read</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">b</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mtitle</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 20--><p class="indent" >
|
||||
|
||||
@@ -22,7 +22,30 @@ format</h4>
|
||||
<!--l. 59-->
|
||||
<div class="lstlisting" id="listing-15"><span class="label"><a
|
||||
id="x93-130001r1"></a></span><span
|
||||
class="cmbx-10">call</span> hb_write(a, iret, iunit, filename, key, rhs, mtitle)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">hb_write</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">key</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">rhs</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mtitle</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 65--><p class="indent" >
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</head><body
|
||||
>
|
||||
<!--l. 1244--><div class="crosslinks"><p class="noindent">[<a
|
||||
<!--l. 1246--><div class="crosslinks"><p class="noindent">[<a
|
||||
href="userhtmlsu11.html" >next</a>] [<a
|
||||
href="userhtmlsu7.html" >prev</a>] [<a
|
||||
href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a
|
||||
@@ -18,9 +18,9 @@ href="userhtmlsu5.html#tailuserhtmlsu8.html">tail</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlsu10.html" >up</a>] </p></div>
|
||||
<h4 class="subsectionHead"><span class="titlemark">3.4 </span> <a
|
||||
id="x16-530003.4"></a>Preconditioner data structure</h4>
|
||||
<!--l. 1246--><p class="noindent" >Our base library offers support for simple well known preconditioners like Diagonal
|
||||
<!--l. 1248--><p class="noindent" >Our base library offers support for simple well known preconditioners like Diagonal
|
||||
Scaling or Block Jacobi with incomplete factorization ILU(0).
|
||||
<!--l. 1250--><p class="indent" > A preconditioner is held in the <a
|
||||
<!--l. 1252--><p class="indent" > A preconditioner is held in the <a
|
||||
id="precdata"><span
|
||||
class="cmtt-10">psb</span><span
|
||||
class="cmtt-10">_prec</span><span
|
||||
@@ -42,30 +42,30 @@ preconditioner. <hr class="figure"><div class="figure"
|
||||
|
||||
<div class="center"
|
||||
>
|
||||
<!--l. 1271--><p class="noindent" >
|
||||
<!--l. 1273--><p class="noindent" >
|
||||
<div class="minipage"><div class="verbatim" id="verbatim-39">
|
||||
 <br />  type psb_Tprec_type
|
||||
 <br />    class(psb_T_base_prec_type), allocatable :: prec
|
||||
 <br />  end type psb_Tprec_type
|
||||
 <br />
|
||||
</div>
|
||||
<!--l. 1279--><p class="nopar" ></div></div>
|
||||
<!--l. 1281--><p class="nopar" ></div></div>
|
||||
<br /> <div class="caption"
|
||||
><span class="id">Figure 6: </span><span
|
||||
class="content">The PSBLAS defined data type that contains a preconditioner.</span></div><!--tex4ht:label?: x16-530016 -->
|
||||
|
||||
|
||||
|
||||
<!--l. 1288--><p class="indent" > </div><hr class="endfigure">
|
||||
<!--l. 1290--><p class="indent" > </div><hr class="endfigure">
|
||||
|
||||
|
||||
|
||||
<!--l. 1312--><div class="crosslinks"><p class="noindent">[<a
|
||||
<!--l. 1314--><div class="crosslinks"><p class="noindent">[<a
|
||||
href="userhtmlsu11.html" >next</a>] [<a
|
||||
href="userhtmlsu7.html" >prev</a>] [<a
|
||||
href="userhtmlsu7.html#tailuserhtmlsu7.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu8.html" >front</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlsu10.html" >up</a>] </p></div>
|
||||
<!--l. 1312--><p class="indent" > <a
|
||||
<!--l. 1314--><p class="indent" > <a
|
||||
id="tailuserhtmlsu8.html"></a>
|
||||
</body></html>
|
||||
|
||||
@@ -23,7 +23,21 @@ format</h4>
|
||||
<!--l. 111-->
|
||||
<div class="lstlisting" id="listing-16"><span class="label"><a
|
||||
id="x94-131001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_mat_read(a, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mm_mat_read</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 115--><p class="indent" >
|
||||
|
||||
@@ -23,7 +23,21 @@ format</h4>
|
||||
<!--l. 142-->
|
||||
<div class="lstlisting" id="listing-17"><span class="label"><a
|
||||
id="x95-132001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_array_read(b, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mm_array_read</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">b</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 146--><p class="indent" >
|
||||
|
||||
@@ -23,7 +23,24 @@ format</h4>
|
||||
<!--l. 179-->
|
||||
<div class="lstlisting" id="listing-18"><span class="label"><a
|
||||
id="x96-133001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_mat_write(a, mtitle, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mm_mat_write</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mtitle</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 182--><p class="indent" >
|
||||
|
||||
@@ -22,7 +22,24 @@ format</h4>
|
||||
<!--l. 213-->
|
||||
<div class="lstlisting" id="listing-19"><span class="label"><a
|
||||
id="x97-134001r1"></a></span><span
|
||||
class="cmbx-10">call</span> mm_array_write(b, vtitle, iret, iunit, filename)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">mm_array_write</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">b</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">vtitle</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iret</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">iunit</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">filename</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 217--><p class="indent" >
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
<link rel="stylesheet" type="text/css" href="userhtml.css">
|
||||
</head><body
|
||||
>
|
||||
<!--l. 1312--><div class="crosslinks"><p class="noindent">[<a
|
||||
<!--l. 1314--><div class="crosslinks"><p class="noindent">[<a
|
||||
href="userhtmlsu8.html" >prev</a>] [<a
|
||||
href="userhtmlsu8.html#tailuserhtmlsu8.html" >prev-tail</a>] [<a
|
||||
href="userhtmlsu6.html#tailuserhtmlsu9.html">tail</a>] [<a
|
||||
href="userhtmlsu7.html#userhtmlsu11.html" >up</a>] </p></div>
|
||||
<h4 class="subsectionHead"><span class="titlemark">3.5 </span> <a
|
||||
id="x17-540003.5"></a>Heap data structure</h4>
|
||||
<!--l. 1314--><p class="noindent" >Among the tools routines of sec. <a
|
||||
<!--l. 1316--><p class="noindent" >Among the tools routines of sec. <a
|
||||
href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>, we have a number of sorting utilities; the heap
|
||||
sort is implemented in terms of heaps having the following signatures:
|
||||
<dl class="description"><dt class="description">
|
||||
@@ -36,7 +36,7 @@ class="cmtt-10">_idx</span><span
|
||||
class="cmtt-10">_heap</span> </dt><dd
|
||||
class="description">: a heap containing elements of type T, as above, together
|
||||
with an integer index.</dd></dl>
|
||||
<!--l. 1323--><p class="noindent" >Given a heap object, the following methods are defined on it:
|
||||
<!--l. 1325--><p class="noindent" >Given a heap object, the following methods are defined on it:
|
||||
<dl class="description"><dt class="description">
|
||||
<span
|
||||
class="cmbx-10">init</span> </dt><dd
|
||||
@@ -62,7 +62,7 @@ class="description">Print on file;
|
||||
<span
|
||||
class="cmbx-10">free</span> </dt><dd
|
||||
class="description">Release memory.</dd></dl>
|
||||
<!--l. 1333--><p class="noindent" >These objects are used in MLD2P4 to implement the factorization algorithms.
|
||||
<!--l. 1335--><p class="noindent" >These objects are used in MLD2P4 to implement the factorization algorithms.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -63,9 +63,48 @@ iteration.
|
||||
<!--l. 37-->
|
||||
<div class="lstlisting" id="listing-20"><span class="label"><a
|
||||
id="x107-143001r1"></a></span><span
|
||||
class="cmbx-10">call</span> psb_krylov(method,a,prec,b,x,eps,desc_a,info,& <br /><span class="label"><a
|
||||
id="x107-143002r2"></a></span>     & itmax,iter,<span
|
||||
class="cmbx-10">err</span>,itrace,irst,istop,cond)
|
||||
class="cmtt-10">call</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">psb_krylov</span><span
|
||||
class="cmtt-10">(</span><span
|
||||
class="cmtt-10">method</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">prec</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">b</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">x</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">eps</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">desc_a</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">info</span><span
|
||||
class="cmtt-10">,&</span><span
|
||||
class="cmtt-10"> </span><br /><span class="label"><a
|
||||
id="x107-143002r2"></a></span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">&</span><span
|
||||
class="cmtt-10"> </span><span
|
||||
class="cmtt-10">itmax</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">iter</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">err</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">itrace</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">irst</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">istop</span><span
|
||||
class="cmtt-10">,</span><span
|
||||
class="cmtt-10">cond</span><span
|
||||
class="cmtt-10">)</span>
|
||||
|
||||
</div>
|
||||
<!--l. 42--><p class="indent" >
|
||||
|
||||
@@ -530,7 +530,9 @@ data type and precision variants
|
||||
\item[S] Single precision real;
|
||||
\item[D] Double precision real;
|
||||
\item[C] Single precision complex;
|
||||
\item[Z] Double precision complex.
|
||||
\item[Z] Double precision complex;
|
||||
\item[LS,LD,LC,LZ] Same numeric type as above, but with
|
||||
\verb|psb_lpk_| integer indices.
|
||||
\end{description}
|
||||
The actual data is contained in the polymorphic component \verb|a%a|
|
||||
of type \hypertarget{spbasedata}{{\tt psb\_T\_base\_sparse\_mat}}; its
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_cf_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_cspmat_type) :: a, aux_a
|
||||
type(psb_cspmat_type) :: a
|
||||
type(psb_lcspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_cprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_cf_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_cf_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
call psb_bcast(ictxt,m_problem)
|
||||
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
|
||||
|
||||
! At this point aux_b may still be unallocated
|
||||
if (size(aux_b,dim=1) == m_problem) then
|
||||
@@ -180,7 +181,9 @@ program psb_cf_sample
|
||||
write(psb_out_unit,'("Partition type: graph vector")')
|
||||
write(psb_out_unit,'(" ")')
|
||||
! write(psb_err_unit,'("Build type: graph")')
|
||||
call build_mtpart(aux_a,np)
|
||||
call aux_a%cscnv(info,type='csr')
|
||||
lnp = np
|
||||
call build_mtpart(aux_a,lnp)
|
||||
|
||||
endif
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_df_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_dspmat_type) :: a, aux_a
|
||||
type(psb_dspmat_type) :: a
|
||||
type(psb_ldspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_dprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_df_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_df_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
call psb_bcast(ictxt,m_problem)
|
||||
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
|
||||
|
||||
! At this point aux_b may still be unallocated
|
||||
if (size(aux_b,dim=1) == m_problem) then
|
||||
@@ -180,7 +181,9 @@ program psb_df_sample
|
||||
write(psb_out_unit,'("Partition type: graph vector")')
|
||||
write(psb_out_unit,'(" ")')
|
||||
! write(psb_err_unit,'("Build type: graph")')
|
||||
call build_mtpart(aux_a,np)
|
||||
call aux_a%cscnv(info,type='csr')
|
||||
lnp = np
|
||||
call build_mtpart(aux_a,lnp)
|
||||
|
||||
endif
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_sf_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_sspmat_type) :: a, aux_a
|
||||
type(psb_sspmat_type) :: a
|
||||
type(psb_lsspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_sprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_sf_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_sf_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
call psb_bcast(ictxt,m_problem)
|
||||
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
|
||||
|
||||
! At this point aux_b may still be unallocated
|
||||
if (size(aux_b,dim=1) == m_problem) then
|
||||
@@ -180,7 +181,9 @@ program psb_sf_sample
|
||||
write(psb_out_unit,'("Partition type: graph vector")')
|
||||
write(psb_out_unit,'(" ")')
|
||||
! write(psb_err_unit,'("Build type: graph")')
|
||||
call build_mtpart(aux_a,np)
|
||||
call aux_a%cscnv(info,type='csr')
|
||||
lnp = np
|
||||
call build_mtpart(aux_a,lnp)
|
||||
|
||||
endif
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -38,10 +38,11 @@ program psb_zf_sample
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file,renum
|
||||
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
|
||||
|
||||
! sparse matrices
|
||||
type(psb_zspmat_type) :: a, aux_a
|
||||
type(psb_zspmat_type) :: a
|
||||
type(psb_lzspmat_type) :: aux_a
|
||||
|
||||
! preconditioner data
|
||||
type(psb_zprec_type) :: prec
|
||||
@@ -56,6 +57,7 @@ program psb_zf_sample
|
||||
type(psb_desc_type):: desc_a
|
||||
|
||||
integer(psb_ipk_) :: ictxt, iam, np
|
||||
integer(psb_lpk_) :: lnp
|
||||
|
||||
! solver paramters
|
||||
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode,&
|
||||
@@ -140,7 +142,6 @@ program psb_zf_sample
|
||||
|
||||
m_problem = aux_a%get_nrows()
|
||||
call psb_bcast(ictxt,m_problem)
|
||||
call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm)
|
||||
|
||||
! At this point aux_b may still be unallocated
|
||||
if (size(aux_b,dim=1) == m_problem) then
|
||||
@@ -180,7 +181,9 @@ program psb_zf_sample
|
||||
write(psb_out_unit,'("Partition type: graph vector")')
|
||||
write(psb_out_unit,'(" ")')
|
||||
! write(psb_err_unit,'("Build type: graph")')
|
||||
call build_mtpart(aux_a,np)
|
||||
call aux_a%cscnv(info,type='csr')
|
||||
lnp = np
|
||||
call build_mtpart(aux_a,lnp)
|
||||
|
||||
endif
|
||||
call psb_barrier(ictxt)
|
||||
|
||||
@@ -21,7 +21,7 @@ IMPLOBJS= psb_s_hbio_impl.o psb_d_hbio_impl.o \
|
||||
psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o
|
||||
|
||||
MODOBJS=psb_util_mod.o $(BASEOBJS)
|
||||
COBJS=metis_int.o psb_amd_order.o
|
||||
COBJS=psb_metis_int.o psb_amd_order.o
|
||||
OBJS=$(COBJS) $(MODOBJS) $(IMPLOBJS)
|
||||
LOCAL_MODS=$(MODOBJS:.o=$(.mod))
|
||||
LIBNAME=$(UTILLIBNAME)
|
||||
@@ -38,7 +38,7 @@ $(HERE)/$(LIBNAME): $(OBJS)
|
||||
|
||||
$(OBJS): $(MODDIR)/$(BASEMODNAME)$(.mod)
|
||||
psb_util_mod.o: $(BASEOBJS)
|
||||
psb_metispart_mod.o: metis_int.o
|
||||
psb_metispart_mod.o: psb_metis_int.o
|
||||
psb_mat_dist_mod.o: psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o
|
||||
|
||||
$(IMPLOBJS): $(BASEOBJS)
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
#include <stdio.h>
|
||||
#if defined(HAVE_METIS_)
|
||||
#include "metis.h"
|
||||
#include "psb_metis_int.h"
|
||||
|
||||
/* extern int METIS_PartGraphKway(int *, int *, int *, int *, int *, int *, int *, int *, float *, float, int *, int *, int *); */
|
||||
|
||||
|
||||
int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg,
|
||||
int *iajw, int *nparts, float *weights,
|
||||
int *graphpart)
|
||||
int metis_PartGraphKway_C(idx_t *n, idx_t *ixadj, idx_t *iadj, idx_t *ivwg,
|
||||
idx_t *iajw, idx_t *nparts, float *weights,
|
||||
idx_t *graphpart)
|
||||
{
|
||||
int res = -1;
|
||||
idx_t objval = 0;
|
||||
@@ -40,9 +37,9 @@ int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg,
|
||||
|
||||
#else
|
||||
|
||||
int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg,
|
||||
int *iajw, int *nparts, float *weights,
|
||||
int *graphpart)
|
||||
int metis_PartGraphKway_C(idx_t *n, idx_t *ixadj, idx_t *iadj, idx_t *ivwg,
|
||||
idx_t *iajw, idx_t *nparts, float *weights,
|
||||
idx_t *graphpart)
|
||||
{
|
||||
return(-1);
|
||||
}
|
||||
@@ -54,31 +54,32 @@
|
||||
! uses information prepared by the previous two subroutines.
|
||||
!
|
||||
module psb_metispart_mod
|
||||
use psb_base_mod, only : psb_sspmat_type, psb_cspmat_type,&
|
||||
& psb_dspmat_type, psb_zspmat_type, psb_err_unit, &
|
||||
& psb_ipk_, psb_lpk_, psb_mpk_, psb_epk_, psb_spk_,&
|
||||
& psb_s_csr_sparse_mat, psb_d_csr_sparse_mat, &
|
||||
& psb_c_csr_sparse_mat, psb_z_csr_sparse_mat
|
||||
use psb_base_mod, only : psb_ipk_, psb_lpk_, psb_mpk_, psb_epk_, &
|
||||
& psb_err_unit, psb_spk_,&
|
||||
& psb_lsspmat_type, psb_lcspmat_type,&
|
||||
& psb_ldspmat_type, psb_lzspmat_type, &
|
||||
& psb_ls_csr_sparse_mat, psb_ld_csr_sparse_mat, &
|
||||
& psb_lc_csr_sparse_mat, psb_lz_csr_sparse_mat
|
||||
public part_graph, build_mtpart, distr_mtpart,&
|
||||
& getv_mtpart, free_part
|
||||
private
|
||||
integer(psb_ipk_), allocatable, save :: graph_vect(:)
|
||||
integer(psb_lpk_), allocatable, save :: graph_vect(:)
|
||||
|
||||
interface build_mtpart
|
||||
module procedure d_mat_build_mtpart, s_mat_build_mtpart,&
|
||||
& z_mat_build_mtpart, c_mat_build_mtpart
|
||||
module procedure ld_mat_build_mtpart, ls_mat_build_mtpart,&
|
||||
& lz_mat_build_mtpart, lc_mat_build_mtpart
|
||||
end interface
|
||||
|
||||
interface
|
||||
subroutine psi_build_mtpart(n,ja,irp,nparts,vect, weights)
|
||||
import :: psb_ipk_, psb_spk_
|
||||
interface psi_build_mtpart
|
||||
subroutine psi_l_build_mtpart(n,ja,irp,nparts,vect, weights)
|
||||
import :: psb_lpk_, psb_spk_
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: n, nparts
|
||||
integer(psb_ipk_), intent(in) :: ja(:), irp(:)
|
||||
integer(psb_ipk_), allocatable, intent(inout) :: vect(:)
|
||||
integer(psb_lpk_), intent(in) :: n, nparts
|
||||
integer(psb_lpk_), intent(in) :: ja(:), irp(:)
|
||||
integer(psb_lpk_), allocatable, intent(inout) :: vect(:)
|
||||
real(psb_spk_),optional, intent(in) :: weights(:)
|
||||
|
||||
end subroutine psi_build_mtpart
|
||||
end subroutine psi_l_build_mtpart
|
||||
end interface
|
||||
|
||||
contains
|
||||
@@ -155,29 +156,30 @@ contains
|
||||
ivg(:) = graph_vect(:)
|
||||
end if
|
||||
end subroutine getv_mtpart
|
||||
|
||||
subroutine d_mat_build_mtpart(a,nparts,weights)
|
||||
|
||||
|
||||
subroutine ld_mat_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_dspmat_type), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_ldspmat_type), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_dpk_), optional :: weights(:)
|
||||
|
||||
|
||||
select type (aa=>a%a)
|
||||
type is (psb_d_csr_sparse_mat)
|
||||
call d_csr_build_mtpart(aa,nparts,weights)
|
||||
type is (psb_ld_csr_sparse_mat)
|
||||
call ld_csr_build_mtpart(aa,nparts,weights)
|
||||
class default
|
||||
write(psb_err_unit,*) 'Sorry, right now we only take CSR input!'
|
||||
end select
|
||||
|
||||
end subroutine d_mat_build_mtpart
|
||||
end subroutine ld_mat_build_mtpart
|
||||
|
||||
subroutine d_csr_build_mtpart(a,nparts,weights)
|
||||
subroutine ld_csr_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_d_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_ld_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_dpk_), optional :: weights(:)
|
||||
real(psb_spk_), allocatable :: wgh_(:)
|
||||
|
||||
@@ -193,30 +195,30 @@ contains
|
||||
call psi_build_mtpart(a%get_nrows(),a%ja,a%irp,nparts,graph_vect)
|
||||
end if
|
||||
|
||||
end subroutine d_csr_build_mtpart
|
||||
end subroutine ld_csr_build_mtpart
|
||||
|
||||
subroutine z_mat_build_mtpart(a,nparts,weights)
|
||||
subroutine lz_mat_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_zspmat_type), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_lzspmat_type), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_dpk_), optional :: weights(:)
|
||||
|
||||
|
||||
select type (aa=>a%a)
|
||||
type is (psb_z_csr_sparse_mat)
|
||||
call z_csr_build_mtpart(aa,nparts,weights)
|
||||
type is (psb_lz_csr_sparse_mat)
|
||||
call lz_csr_build_mtpart(aa,nparts,weights)
|
||||
class default
|
||||
write(psb_err_unit,*) 'Sorry, right now we only take CSR input!'
|
||||
end select
|
||||
|
||||
end subroutine z_mat_build_mtpart
|
||||
end subroutine lz_mat_build_mtpart
|
||||
|
||||
subroutine z_csr_build_mtpart(a,nparts,weights)
|
||||
subroutine lz_csr_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_z_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_lz_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_dpk_), optional :: weights(:)
|
||||
real(psb_spk_), allocatable :: wgh_(:)
|
||||
|
||||
@@ -232,66 +234,66 @@ contains
|
||||
call psi_build_mtpart(a%get_nrows(),a%ja,a%irp,nparts,graph_vect)
|
||||
end if
|
||||
|
||||
end subroutine z_csr_build_mtpart
|
||||
end subroutine lz_csr_build_mtpart
|
||||
|
||||
subroutine s_mat_build_mtpart(a,nparts,weights)
|
||||
subroutine ls_mat_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_sspmat_type), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_lsspmat_type), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_spk_), optional :: weights(:)
|
||||
|
||||
|
||||
select type (aa=>a%a)
|
||||
type is (psb_s_csr_sparse_mat)
|
||||
call s_csr_build_mtpart(aa,nparts,weights)
|
||||
type is (psb_ls_csr_sparse_mat)
|
||||
call ls_csr_build_mtpart(aa,nparts,weights)
|
||||
class default
|
||||
write(psb_err_unit,*) 'Sorry, right now we only take CSR input!'
|
||||
end select
|
||||
|
||||
end subroutine s_mat_build_mtpart
|
||||
end subroutine ls_mat_build_mtpart
|
||||
|
||||
subroutine c_mat_build_mtpart(a,nparts,weights)
|
||||
subroutine lc_mat_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_cspmat_type), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_lcspmat_type), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_spk_), optional :: weights(:)
|
||||
|
||||
|
||||
select type (aa=>a%a)
|
||||
type is (psb_c_csr_sparse_mat)
|
||||
call c_csr_build_mtpart(aa,nparts,weights)
|
||||
type is (psb_lc_csr_sparse_mat)
|
||||
call lc_csr_build_mtpart(aa,nparts,weights)
|
||||
class default
|
||||
write(psb_err_unit,*) 'Sorry, right now we only take CSR input!'
|
||||
end select
|
||||
|
||||
end subroutine c_mat_build_mtpart
|
||||
end subroutine lc_mat_build_mtpart
|
||||
|
||||
subroutine c_csr_build_mtpart(a,nparts,weights)
|
||||
subroutine lc_csr_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_c_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_lc_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_spk_), optional :: weights(:)
|
||||
|
||||
|
||||
call psi_build_mtpart(a%get_nrows(),a%ja,a%irp,nparts,graph_vect,weights)
|
||||
|
||||
end subroutine c_csr_build_mtpart
|
||||
end subroutine lc_csr_build_mtpart
|
||||
|
||||
subroutine s_csr_build_mtpart(a,nparts,weights)
|
||||
subroutine ls_csr_build_mtpart(a,nparts,weights)
|
||||
use psb_base_mod
|
||||
implicit none
|
||||
type(psb_s_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_ipk_) :: nparts
|
||||
type(psb_ls_csr_sparse_mat), intent(in) :: a
|
||||
integer(psb_lpk_) :: nparts
|
||||
real(psb_spk_), optional :: weights(:)
|
||||
|
||||
|
||||
|
||||
call psi_build_mtpart(a%get_nrows(),a%ja,a%irp,nparts,graph_vect,weights)
|
||||
|
||||
end subroutine s_csr_build_mtpart
|
||||
|
||||
end subroutine ls_csr_build_mtpart
|
||||
|
||||
!
|
||||
! WARNING: called IRET otherwise Intel compiler complains,
|
||||
! methinks it's a compiler bug, will need to report.
|
||||
|
||||
@@ -1,31 +1,21 @@
|
||||
|
||||
subroutine psi_build_mtpart(n,ja,irp,nparts,graph_vect,weights)
|
||||
subroutine psi_l_build_mtpart(n,ja,irp,nparts,graph_vect,weights)
|
||||
use psb_base_mod
|
||||
use iso_c_binding
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: n, nparts
|
||||
integer(psb_ipk_), intent(in) :: ja(:), irp(:)
|
||||
integer(psb_ipk_), allocatable, intent(inout) :: graph_vect(:)
|
||||
integer(psb_lpk_), intent(in) :: n, nparts
|
||||
integer(psb_lpk_), intent(in) :: ja(:), irp(:)
|
||||
integer(psb_lpk_), allocatable, intent(inout) :: graph_vect(:)
|
||||
real(psb_spk_),optional, intent(in) :: weights(:)
|
||||
! local variables
|
||||
integer(psb_ipk_) :: i,numflag, nedc,wgflag
|
||||
integer(psb_ipk_) :: iopt(10),idummy(2),jdummy(2), info
|
||||
integer(psb_ipk_) :: nl,nptl
|
||||
integer(psb_ipk_), allocatable :: irpl(:),jal(:),gvl(:)
|
||||
integer(psb_lpk_) :: i,numflag, nedc,wgflag
|
||||
integer(psb_lpk_) :: iopt(10),idummy(2),jdummy(2)
|
||||
integer(psb_ipk_) :: info
|
||||
integer(psb_lpk_) :: nl,nptl
|
||||
integer(psb_lpk_), allocatable :: irpl(:),jal(:),gvl(:)
|
||||
real(psb_spk_),allocatable :: wgh_(:)
|
||||
|
||||
#if defined(HAVE_METIS) && defined(IPK4)
|
||||
#if defined(HAVE_METIS) && defined(LPK4) && defined(METIS_32)
|
||||
interface
|
||||
! subroutine METIS_PartGraphKway(n,ixadj,iadj,ivwg,iajw,&
|
||||
! & wgflag,numflag,nparts,weights,iopt,nedc,part) bind(c)
|
||||
! use iso_c_binding
|
||||
! integer(c_int) :: n,wgflag,numflag,nparts,nedc
|
||||
! integer(c_int) :: ixadj(*),iadj(*),ivwg(*),iajw(*),iopt(*),part(*)
|
||||
! real(c_float) :: weights(*)
|
||||
! !integer(psb_ipk_) :: n,wgflag,numflag,nparts,nedc
|
||||
! !integer(psb_ipk_) :: ixadj(*),iadj(*),ivwg(*),iajw(*),iopt(*),part(*)
|
||||
! end subroutine METIS_PartGraphKway
|
||||
|
||||
function METIS_PartGraphKway(n,ixadj,iadj,ivwg,iajw,&
|
||||
& nparts,weights,part) bind(c,name="metis_PartGraphKway_C") result(res)
|
||||
use iso_c_binding
|
||||
@@ -86,10 +76,76 @@ subroutine psi_build_mtpart(n,ja,irp,nparts,graph_vect,weights)
|
||||
graph_vect(i) = 0
|
||||
enddo
|
||||
endif
|
||||
|
||||
#elif defined(HAVE_METIS) && defined(LPK8) && defined(METIS_64)
|
||||
|
||||
interface
|
||||
function METIS_PartGraphKway(n,ixadj,iadj,ivwg,iajw,&
|
||||
& nparts,weights,part) bind(c,name="metis_PartGraphKway_C") result(res)
|
||||
use iso_c_binding
|
||||
integer(c_long_long) :: res
|
||||
integer(c_long_long) :: n,nparts
|
||||
integer(c_long_long) :: ixadj(*),iadj(*),ivwg(*),iajw(*),part(*)
|
||||
real(c_float) :: weights(*)
|
||||
!integer(psb_ipk_) :: n,wgflag,numflag,nparts,nedc
|
||||
!integer(psb_ipk_) :: ixadj(*),iadj(*),ivwg(*),iajw(*),iopt(*),part(*)
|
||||
end function METIS_PartGraphKway
|
||||
end interface
|
||||
|
||||
call psb_realloc(n,graph_vect,info)
|
||||
if (info == psb_success_) allocate(gvl(n),wgh_(nparts),stat=info)
|
||||
|
||||
if (info /= psb_success_) then
|
||||
write(psb_err_unit,*) 'Fatal error in BUILD_MTPART: memory allocation ',&
|
||||
& ' failure.'
|
||||
return
|
||||
endif
|
||||
if (nparts > 1) then
|
||||
iopt(1) = 0
|
||||
numflag = 1
|
||||
wgflag = 0
|
||||
|
||||
!!$ write(*,*) 'Before allocation',nparts
|
||||
|
||||
irpl=irp
|
||||
jal = ja
|
||||
nl = n
|
||||
nptl = nparts
|
||||
wgh_ = -1.0
|
||||
if(present(weights)) then
|
||||
if (size(weights) == nptl) then
|
||||
!!$ write(*,*) 'weights present',weights
|
||||
! call METIS_PartGraphKway(n,irp,ja,idummy,jdummy,&
|
||||
! & wgflag,numflag,nparts,weights,iopt,nedc,graph_vect)
|
||||
info = METIS_PartGraphKway(nl,irpl,jal,idummy,jdummy,&
|
||||
& nptl,weights,gvl)
|
||||
|
||||
else
|
||||
!!$ write(*,*) 'weights absent',wgh_
|
||||
info = METIS_PartGraphKway(nl,irpl,jal,idummy,jdummy,&
|
||||
& nptl,wgh_,gvl)
|
||||
end if
|
||||
else
|
||||
!!$ write(*,*) 'weights absent',wgh_
|
||||
info = METIS_PartGraphKway(nl,irpl,jal,idummy,jdummy,&
|
||||
& nptl,wgh_,gvl)
|
||||
endif
|
||||
!!$ write(*,*) 'after allocation',info
|
||||
|
||||
do i=1, n
|
||||
graph_vect(i) = gvl(i) - 1
|
||||
enddo
|
||||
else
|
||||
do i=1, n
|
||||
graph_vect(i) = 0
|
||||
enddo
|
||||
endif
|
||||
|
||||
#else
|
||||
write(psb_err_unit,*) 'Warning: METIS was not configured at PSBLAS compile time !'
|
||||
|
||||
write(psb_err_unit,*) 'Warning: no suitable METIS interface for LPK indices'
|
||||
#endif
|
||||
|
||||
return
|
||||
|
||||
end subroutine psi_build_mtpart
|
||||
end subroutine psi_l_build_mtpart
|
||||
|
||||