From 003b3fd75ddbaf3dbf3adbe4a785ce05614fd886 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 2 Jul 2020 10:40:03 +0200 Subject: [PATCH 1/7] Update version message in configure --- configure | 324 +++++++++++++++++++++++++++++++++------------------ configure.ac | 4 +- 2 files changed, 215 insertions(+), 113 deletions(-) diff --git a/configure b/configure index 727f56c3..0ab9494a 100755 --- a/configure +++ b/configure @@ -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. # # Report bugs to . # @@ -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' +PACKAGE_STRING='PSBLAS 3.7' PACKAGE_BUGREPORT='https://github.com/sfilippone/psblas3/issues' PACKAGE_URL='' @@ -676,7 +676,6 @@ am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR am__untar @@ -753,7 +752,8 @@ PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -1336,7 +1336,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 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1402,7 +1402,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:";; esac cat <<\_ACEOF @@ -1544,7 +1544,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 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2180,7 +2180,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, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2531,7 +2531,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" # A sample source file @@ -3515,6 +3515,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 +5004,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 +5083,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 +5100,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 +5337,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 +5457,7 @@ fi # Define the identity of the package. PACKAGE='psblas' - VERSION='3.5' + VERSION='3.7' cat >>confdefs.h <<_ACEOF @@ -5428,12 +5487,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: -# -# +# +# 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 +5636,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: + +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: . + +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 + @@ -9872,7 +9973,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, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9929,7 +10030,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 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -10037,7 +10138,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 @@ -10482,29 +10583,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 +10629,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\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^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\(\/\).*/{ + /^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 } ;; diff --git a/configure.ac b/configure.ac index 18dbfdd3..59fcab0b 100755 --- a/configure.ac +++ b/configure.ac @@ -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, [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" # A sample source file AC_CONFIG_SRCDIR([base/modules/psb_base_mod.f90]) From 113a70f8c8ff4572bb34bb9a23ecf50412b2578d Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 7 Jul 2020 09:07:59 +0200 Subject: [PATCH 2/7] New configry for METIS: detect int width, set include file name --- config/pac.m4 | 25 ++++++++++++++++++++--- configure | 56 +++++++++++++++++++++++++++++++++++++++++++-------- configure.ac | 5 ----- 3 files changed, 70 insertions(+), 16 deletions(-) diff --git a/config/pac.m4 b/config/pac.m4 index 5dc4e0c5..0fd295f2 100644 --- a/config/pac.m4 +++ b/config/pac.m4 @@ -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 <$psblas_cv_metisincfile> + #include + 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" diff --git a/configure b/configure index 0ab9494a..ea270b0d 100755 --- a/configure +++ b/configure @@ -775,6 +775,7 @@ with_blasdir with_lapack with_rsb with_metis +with_metisincfile with_metisdir with_metisincdir with_metislibdir @@ -1454,6 +1455,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. @@ -8857,6 +8859,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 @@ -8906,7 +8916,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" @@ -8928,7 +8938,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" @@ -8948,7 +8958,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" @@ -8965,6 +8975,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 <$psblas_cv_metisincfile> + #include + 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" @@ -9319,11 +9364,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. ############################################################################### diff --git a/configure.ac b/configure.ac index 59fcab0b..304abf99 100755 --- a/configure.ac +++ b/configure.ac @@ -702,11 +702,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. ############################################################################### From 6e61e641a84cd9ad5c1588806527f5146a828505 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 21 Jul 2020 11:45:19 +0200 Subject: [PATCH 3/7] Check index size of METIS add to DEFINES --- configure | 8 +++++--- configure.ac | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/configure b/configure index ea270b0d..cfba49ad 100755 --- a/configure +++ b/configure @@ -9149,9 +9149,11 @@ 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" fi diff --git a/configure.ac b/configure.ac index 304abf99..64fbe596 100755 --- a/configure.ac +++ b/configure.ac @@ -689,9 +689,11 @@ 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" fi PAC_CHECK_AMD From f268a411e86a951ba925997ed58a7087c1b76d3f Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 22 Jul 2020 10:17:06 +0200 Subject: [PATCH 4/7] Begin reworking Metis interface --- util/Makefile | 2 +- util/{metis_int.c => psb_metis_int.c} | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) rename util/{metis_int.c => psb_metis_int.c} (77%) diff --git a/util/Makefile b/util/Makefile index 0f572e9c..3f2f3553 100644 --- a/util/Makefile +++ b/util/Makefile @@ -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) diff --git a/util/metis_int.c b/util/psb_metis_int.c similarity index 77% rename from util/metis_int.c rename to util/psb_metis_int.c index b9d258b4..ad3abec9 100644 --- a/util/metis_int.c +++ b/util/psb_metis_int.c @@ -2,7 +2,25 @@ #if defined(HAVE_METIS_) #include "metis.h" -/* extern int METIS_PartGraphKway(int *, int *, int *, int *, int *, int *, int *, int *, float *, float, int *, int *, int *); */ +typedef int32_t psb_m_t; + +#if defined(IPK4) && defined(LPK4) +typedef int32_t psb_i_t; +typedef int32_t psb_l_t; +#elif defined(IPK4) && defined(LPK8) +typedef int32_t psb_i_t; +typedef int64_t psb_l_t; +#elif defined(IPK8) && defined(LPK8) +typedef int64_t psb_i_t; +typedef int64_t psb_l_t; +#else +#endif +typedef int64_t psb_e_t; + +typedef float psb_s_t; +typedef double psb_d_t; +typedef float complex psb_c_t; +typedef double complex psb_z_t; int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg, From 39d6bf01e0ac483d21c61c89a021c492db482be6 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 23 Jul 2020 12:00:44 +0200 Subject: [PATCH 5/7] Reworked interface METISPART: use LPK matrix input. --- test/fileread/psb_cf_sample.f90 | 11 +-- test/fileread/psb_df_sample.f90 | 11 +-- test/fileread/psb_sf_sample.f90 | 11 +-- test/fileread/psb_zf_sample.f90 | 11 +-- util/Makefile | 2 +- util/psb_metis_int.c | 35 ++-------- util/psb_metispart_mod.F90 | 118 ++++++++++++++++---------------- util/psi_build_mtpart.F90 | 100 +++++++++++++++++++++------ 8 files changed, 174 insertions(+), 125 deletions(-) diff --git a/test/fileread/psb_cf_sample.f90 b/test/fileread/psb_cf_sample.f90 index 8170a446..699c4347 100644 --- a/test/fileread/psb_cf_sample.f90 +++ b/test/fileread/psb_cf_sample.f90 @@ -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) diff --git a/test/fileread/psb_df_sample.f90 b/test/fileread/psb_df_sample.f90 index 17f821b3..8fbf8bc4 100644 --- a/test/fileread/psb_df_sample.f90 +++ b/test/fileread/psb_df_sample.f90 @@ -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) diff --git a/test/fileread/psb_sf_sample.f90 b/test/fileread/psb_sf_sample.f90 index 05127088..71dd646b 100644 --- a/test/fileread/psb_sf_sample.f90 +++ b/test/fileread/psb_sf_sample.f90 @@ -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) diff --git a/test/fileread/psb_zf_sample.f90 b/test/fileread/psb_zf_sample.f90 index a2d54e6a..860405ba 100644 --- a/test/fileread/psb_zf_sample.f90 +++ b/test/fileread/psb_zf_sample.f90 @@ -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) diff --git a/util/Makefile b/util/Makefile index 3f2f3553..9809a34f 100644 --- a/util/Makefile +++ b/util/Makefile @@ -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) diff --git a/util/psb_metis_int.c b/util/psb_metis_int.c index ad3abec9..0b76c2a6 100644 --- a/util/psb_metis_int.c +++ b/util/psb_metis_int.c @@ -1,31 +1,10 @@ #include #if defined(HAVE_METIS_) -#include "metis.h" +#include "psb_metis_int.h" -typedef int32_t psb_m_t; - -#if defined(IPK4) && defined(LPK4) -typedef int32_t psb_i_t; -typedef int32_t psb_l_t; -#elif defined(IPK4) && defined(LPK8) -typedef int32_t psb_i_t; -typedef int64_t psb_l_t; -#elif defined(IPK8) && defined(LPK8) -typedef int64_t psb_i_t; -typedef int64_t psb_l_t; -#else -#endif -typedef int64_t psb_e_t; - -typedef float psb_s_t; -typedef double psb_d_t; -typedef float complex psb_c_t; -typedef double complex psb_z_t; - - -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; @@ -58,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); } diff --git a/util/psb_metispart_mod.F90 b/util/psb_metispart_mod.F90 index 425d8106..fa6581e9 100644 --- a/util/psb_metispart_mod.F90 +++ b/util/psb_metispart_mod.F90 @@ -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. diff --git a/util/psi_build_mtpart.F90 b/util/psi_build_mtpart.F90 index b8974185..d01c3d85 100644 --- a/util/psi_build_mtpart.F90 +++ b/util/psi_build_mtpart.F90 @@ -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 From 7c2b613ea51fe7dc7865e387b08368d3f4dd62ce Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 23 Jul 2020 12:01:23 +0200 Subject: [PATCH 6/7] Fixed new handling of METIS 32/64 bits. Make some Fortran features mandatory --- config/pac.m4 | 2 +- configure | 154 +++++++++++++++++++++++++++----------------------- configure.ac | 35 +++++++----- 3 files changed, 104 insertions(+), 87 deletions(-) diff --git a/config/pac.m4 b/config/pac.m4 index 0fd295f2..c9f55d94 100644 --- a/config/pac.m4 +++ b/config/pac.m4 @@ -1852,8 +1852,8 @@ 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 <$psblas_cv_metisincfile> #include + #include "$psblas_cv_metisincfile" void main(){ printf("%d\n",IDXTYPEWIDTH); } diff --git a/configure b/configure index cfba49ad..ccefc2c0 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PSBLAS 3.7. +# Generated by GNU Autoconf 2.69 for PSBLAS 3.7.0. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PSBLAS' PACKAGE_TARNAME='psblas' -PACKAGE_VERSION='3.7' -PACKAGE_STRING='PSBLAS 3.7' +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 @@ -1337,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.7 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]... @@ -1403,7 +1404,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PSBLAS 3.7:";; + short | recursive ) echo "Configuration of PSBLAS 3.7.0:";; esac cat <<\_ACEOF @@ -1546,7 +1547,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PSBLAS configure 3.7 +PSBLAS configure 3.7.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2182,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.7, 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 $@ @@ -2533,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.7" +psblas_cv_version="3.7.0" # A sample source file @@ -5459,7 +5460,7 @@ fi # Define the identity of the package. PACKAGE='psblas' - VERSION='3.7' + VERSION='3.7.0' cat >>confdefs.h <<_ACEOF @@ -7363,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} @@ -7386,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 @@ -7403,31 +7401,21 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $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} +{ $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_ext='f90' ac_fc=${MPIFC-$FC}; cat > conftest.$ac_ext <<_ACEOF -module conftest - - interface foo - subroutine i_sub_foo(v) - integer, intent(inout) :: v(:) - end subroutine i_sub_foo - end interface foo - - interface bar - procedure i_sub_foo - end interface bar - -end module conftest + 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 @@ -7438,7 +7426,7 @@ else $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - FDEFINES="$psblas_cv_define_prepend-DHAVE_BUGGY_GENERICS $FDEFINES" + 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 @@ -7450,8 +7438,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FLUSH statement" >&5 -$as_echo_n "checking support for Fortran FLUSH statement... " >&6; } +{ $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' @@ -7462,23 +7450,35 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu 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 - integer :: iunit=10 - open(10) - write(10,*) 'Test ' - flush(10) - close(10) + 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_FLUSH_STMT $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 FINAL" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -7490,31 +7490,48 @@ 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} + +# +# 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} 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_ext='F90' ac_fc=${MPIFC-$FC}; cat > conftest.$ac_ext <<_ACEOF - program test - use iso_fortran_env - end program test +module conftest + + interface foo + subroutine i_sub_foo(v) + integer, intent(inout) :: v(:) + end subroutine i_sub_foo + end interface foo + + interface bar + procedure i_sub_foo + end interface bar + +end module 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_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 + FDEFINES="$psblas_cv_define_prepend-DHAVE_BUGGY_GENERICS $FDEFINES" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -7526,8 +7543,8 @@ 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; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FLUSH statement" >&5 +$as_echo_n "checking support for Fortran FLUSH statement... " >&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' @@ -7538,29 +7555,18 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu 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 + integer :: iunit=10 + open(10) + write(10,*) 'Test ' + flush(10) + close(10) 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" + FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -8986,8 +8992,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu $as_echo_n "checking for METIS idx size... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <$psblas_cv_metisincfile> - #include +#include + #include "$psblas_cv_metisincfile" void main(){ printf("%d\n",IDXTYPEWIDTH); } @@ -9154,6 +9160,7 @@ if test "x$pac_cv_metis_idx" == "xunknown" ; then 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 @@ -9418,7 +9425,6 @@ UTILLIBNAME=libpsb_util.a - PSBLASRULES=' @@ -9444,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 @@ -10015,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.7, 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 @@ -10072,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.7 +PSBLAS config.status 3.7.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -10192,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 diff --git a/configure.ac b/configure.ac index 64fbe596..9edcb290 100755 --- a/configure.ac +++ b/configure.ac @@ -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.7, [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.7" +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...) @@ -694,6 +699,7 @@ if test "x$pac_cv_metis_idx" == "xunknown" ; then 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 @@ -758,7 +764,6 @@ AC_SUBST(LAPACK_LIBS) AC_SUBST(CINCLUDES) AC_SUBST(FINCLUDES) - PSBLASRULES=' PSBLDLIBS=$(LAPACK) $(BLAS) $(METIS_LIB) $(AMD_LIB) $(LIBS) CDEFINES=$(PSBCDEFINES) @@ -781,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) ############################################################################### From c9e2d3ed448a2d56a816b0476385652677bd3be5 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 23 Jul 2020 12:01:55 +0200 Subject: [PATCH 7/7] Modified docs to included LXspmat & friends. --- docs/html/cmsy10-42.png | Bin 331 -> 334 bytes docs/html/cmsy10-48.png | Bin 373 -> 382 bytes docs/html/cmsy10-49.png | Bin 292 -> 296 bytes docs/html/userhtml.css | 13 +- docs/html/userhtml0x.png | Bin 1674 -> 1688 bytes docs/html/userhtml10x.png | Bin 2147 -> 2141 bytes docs/html/userhtml11x.png | Bin 1295 -> 1331 bytes docs/html/userhtml12x.png | Bin 2015 -> 2039 bytes docs/html/userhtml13x.png | Bin 1306 -> 1289 bytes docs/html/userhtml14x.png | Bin 1325 -> 1317 bytes docs/html/userhtml15x.png | Bin 1572 -> 1599 bytes docs/html/userhtml16x.png | Bin 1078 -> 1105 bytes docs/html/userhtml17x.png | Bin 1236 -> 1244 bytes docs/html/userhtml18x.png | Bin 1299 -> 1304 bytes docs/html/userhtml19x.png | Bin 1474 -> 1475 bytes docs/html/userhtml1x.png | Bin 1122 -> 1124 bytes docs/html/userhtml20x.png | Bin 1476 -> 1465 bytes docs/html/userhtml21x.png | Bin 11173 -> 10552 bytes docs/html/userhtml22x.png | Bin 1448 -> 1443 bytes docs/html/userhtml23x.png | Bin 1223 -> 1220 bytes docs/html/userhtml24x.png | Bin 1064 -> 1060 bytes docs/html/userhtml25x.png | Bin 439 -> 439 bytes docs/html/userhtml26x.png | Bin 765 -> 763 bytes docs/html/userhtml27x.png | Bin 1950 -> 1933 bytes docs/html/userhtml28x.png | Bin 2043 -> 2047 bytes docs/html/userhtml29x.png | Bin 2396 -> 2411 bytes docs/html/userhtml2x.png | Bin 1118 -> 1129 bytes docs/html/userhtml30x.png | Bin 2664 -> 2636 bytes docs/html/userhtml31x.png | Bin 1764 -> 1761 bytes docs/html/userhtml32x.png | Bin 1834 -> 1807 bytes docs/html/userhtml3x.png | Bin 1167 -> 1167 bytes docs/html/userhtml4x.png | Bin 1820 -> 1817 bytes docs/html/userhtml5x.png | Bin 1465 -> 1502 bytes docs/html/userhtml6x.png | Bin 2529 -> 2543 bytes docs/html/userhtml7x.png | Bin 2147 -> 2141 bytes docs/html/userhtml8x.png | Bin 1201 -> 1192 bytes docs/html/userhtml9x.png | Bin 2024 -> 2020 bytes docs/html/userhtmlse8.html | 460 +++++++++++++++--------------- docs/html/userhtmlsu11.html | 92 +++++- docs/html/userhtmlsu13.html | 86 +++++- docs/html/userhtmlsu15.html | 86 +++++- docs/html/userhtmlsu17.html | 86 +++++- docs/html/userhtmlsu26.html | 34 ++- docs/html/userhtmlsu27.html | 37 ++- docs/html/userhtmlsu28.html | 39 ++- docs/html/userhtmlsu29.html | 22 +- docs/html/userhtmlsu6.html | 178 ++++++------ docs/html/userhtmlsu7.html | 62 ++--- docs/html/userhtmlsu74.html | 16 +- docs/html/userhtmlsu75.html | 7 +- docs/html/userhtmlsu76.html | 7 +- docs/html/userhtmlsu77.html | 7 +- docs/html/userhtmlsu78.html | 22 +- docs/html/userhtmlsu79.html | 25 +- docs/html/userhtmlsu8.html | 16 +- docs/html/userhtmlsu80.html | 16 +- docs/html/userhtmlsu81.html | 16 +- docs/html/userhtmlsu82.html | 19 +- docs/html/userhtmlsu83.html | 19 +- docs/html/userhtmlsu9.html | 8 +- docs/html/userhtmlsu90.html | 45 ++- docs/psblas-3.7.pdf | 542 ++++++++++++++++++------------------ docs/src/datastruct.tex | 4 +- 63 files changed, 1270 insertions(+), 694 deletions(-) diff --git a/docs/html/cmsy10-42.png b/docs/html/cmsy10-42.png index 3e3ff34f417052fb633bd4a8c25b9e36646d3e05..bd31f1f87b9ae692f8b2d5444b37c7ac60ab0e09 100644 GIT binary patch delta 287 zcmV+)0pR}20?q=EIDY{ENkl3>*4GqFT423TQ0Sgj_gK0p*G)%%gOaeF{lfWz> z0S(~bcwf^V$6%Lqz4f)Pf0uI3DI}%TO3sq8vW@z`OS0rC8NmJp;V?)#$<6N&LI8#| zCD2$>>K&M*$C`KHwL#uNY?mFn`Xqox2WXQ`py~J_O>` zx-)%J9=)1vE3jmfBhw8c?DX9I1j=}l;Lr!?SsU46D6GQ3>*4GqFT423TQ0Sgi)VH%JyEKI^YOu{6PNnjR` zfCg}Iyzgi)-GC)8*S_BC-!A2xlOv_n3bQZ&2lbN5wIFu9<&xo=(E#NSy-&-!ObQ;i3BW$$|dnZhJRFCb@AoI z?z~3-7#tRH3I5(Z8L^hr=HR82ZR-5jD$A+!ml;K{J^zO+fEUCw1K7-0H)_Q`Z_*ro ivi|~4R;zHw@f8Lk;v9aRL4<+;0000-YlgSbDqcLLwyYRTkK;2$Q~$23gerfDGe0!J9+)0xt!Pma$7 zM0^VT8G(Z^2;Nr7x#l2+@DM?Z9zJGs#p5M2pK+EP1Jf;>wbc?3M#TIV0g=}KTKih@ zw03sk$}UhuT1Qmt0OD9|9}^XMT?){F+#(h^Gl4H9wgQi-%QcY07AaEe&uDYS5ugSf ggSWGRYxw-fo@aGJs~6lKsQ>@~07*qoM6N<$f?EKX`Tzg` delta 325 zcmV-L0lNPF0`&rrIe#ZfL_t(I5v7yiO#?9uMstV(ZibFi zy28-lQu4^%@o`J$Itl)4kd{9t?zaS<(h4@8)xEh%ptz$^nb@0MX2(w7#t2c2sICIuGS<1j zuAmrEei99}c|J<&kuP{rC-|#;6U+(hf&Ccr@}0mI^m&PCkKYP>!d}CFXDQdY{71e3 X#*PYp>b|F#00000NkvXXu0mjfAt9hJ diff --git a/docs/html/cmsy10-49.png b/docs/html/cmsy10-49.png index b44b91b4f5c3d06d8372bb81b4b1b16963438588..cb292c093caedaaf723a39756549b0c0f445011b 100644 GIT binary patch delta 247 zcmV=QLNc^Y zBs)P66n3~Ue?lM{*(d(KLI_lV{p_~<$8it%2)7!4)eRkBL6OJA<9Knib_Xp)q`C!lA>9zm>002ovPDHLkV1hBGa54Y@ delta 243 zcmV6&&95KtiAMH?JumM)6~Ny!S9XMFKqHKn{Yn&)uqu;4w``KSK2Y8wr*~~~mqPyT zWQkVJtpC?f-q%}pIP;AX3$gpSr`Vgbz7V6^m@o#DK!}o tF=CH&#~HvgyP*g-Bv~vliUiyB^9!sQ8djMNIWPbK002ovPDHLkV1hMLXz2g| diff --git a/docs/html/userhtml.css b/docs/html/userhtml.css index 201b1c23..86898d97 100644 --- a/docs/html/userhtml.css +++ b/docs/html/userhtml.css @@ -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; } diff --git a/docs/html/userhtml0x.png b/docs/html/userhtml0x.png index 236023f4f1a466a77e3fbea530a77fc45955daee..bed5b30411c06478e013e4a446657647971a0591 100644 GIT binary patch delta 1650 zcmV-&295cO4VVp(Ie$t?L_t(&1?`)SQC&9>h4UB+Ae3M_!08~k1Ka7qbYM>^$T%IC zbP&@4F2T41><(-?z~@tR?nrz8bf3Ww!qtpMf2*V2qt)N#vAMaq`QuVqirk@SC#Fg#TeDmaT){Dg&BRt`?`7&$C+vzNcV!abnz4Q&+WC29`0vn}FSb z_+0Tqk=_1E@iiw(8C8eOr6Mx)L5}h(%PG&1OWSM3Nj&$NN`=9j#X6E6Bd@@?uD^^J zYGZuMkaFKo_J1gUtmwX^CplVQ>^rf19p{aVw}Q?q6}r6 zin{j($o14QpdE>Psw?EYFsL8JvwTY`96NG384!%aqkltmC_50&gs#@J><^}Ky@1dc zhe^a*HZ2&F2SjM}j9l2Ws2q<_$yhB4wZ{<;^ICNr6 z;#rB-RDWY&WVK7GjG~p}sXR!w>T&vSaXi(5LF^XIfJ~F^Wk2CD`91xRQ5e$^$FDe6 z+4FM|@B!+0FWctw>bJ-q$v2OcWsx7{)A~tflp|ymnrxRG8$~s@D&sE|mmYU6jSHh^ zh=9ADQ+XeO-lbWIl~V>|Ch_K!i|rZ|7?Q{KYJ9iF zG|Nu%={}ORy*)odMxn`e$+78GW2)R+EFO0*-Baf>T$hEM|Ev@eSw!T2RYVEu{!zTr z7k`UO#U!J087A>c!N&Z*k}E$O{-H9u#DFfGb}Z^LTJ|t@PZrW0=H?!gFPf$3o)|hA*=$yMOk1&X)=LoJ*e1(L*tkOkao{4O`egij^DC z0X}2+EmsWb7-hFE|EN9cf1n8eV_}ldu}(iwj~}4Zh2n`Kr@G%7%VFg>bi#qj#5*j8 zQ|~thJ1*t!n9u!LJY7BQxg7DTHw%52M&WWDViBU-)lmQ3*6D2-)uSg97WGGV@_(A3 z_9ojs7OBGMHG%OI5vr~bDq~w^m&)cdekH?}ZLd;`?9n*YwT*EVD?M$y>Sy^ZWJfv5 z95&gmG4U;Q^rIhcdRKXmJD2XOa~W7^5XJ)#g;{l+4)JFlT%Bm+n8MlqRQx2lYo%rI z$_3M_cL=ZSGneN&1s-AOv|zEFOMgGw(DQGlI2#0`Gwn%FwUs;ek;?=2(#>JkcH^jn zcYk01u7#aW0;Ok?JCzK0{91r|Qh0i*n1b5SyTthnMjqo(ZRpM7+V+H*wdX%g(p;Zv zEPMf-m~-Z$3t1R7 zJBtR#WOX9P%A_23VcOGUS?M4inA=3*p#%8UZX2=GUXEYssW$Ia=oVwOGcU1SSU7gX zbGiCzl5ttA=!QLTU)iKG+`2z$+6hA)^%eh-i&&O?^IT><@e%t5y1pwhRc_`}vP~Q@ zhGLWLBjckde!TePNIwb5D}NJ^pZ*h$ymNThkP21!D)I+Ug-U8IBnBQUm)U>6hy+fs zbSqHGLgqwe!BWSYIQdcwPy6by>wwbiAcH|h9Lb<PVDVr!)(-=O; zhp3~?o9rx4J6{+w#=pdk2Ce0V3_M~k**Fh5ImE%x`+_g0U408r`)h!yldm#764T>u z;he1ED+4=YK#tC-@KFkUQTmrsJ`nH_=fe;u1virJgNE|6fis2&4v$m^7RLIIHD+T? w9}ELp6!a&q=}`8sEyN7hT7{18M~0?(W@3WB>pF07*qoM6N<$g5mi!t^fc4 delta 1636 zcmV-q2Albq4T=qrIe$D!L_t(&1?`)SaTGZag}p8ZU>pKuU@ikp25^@F&H(BnxPlBY z8Gth|Az(59GQiHjyl+l#O6t|jXqGi=mq%49{k5LDpSq=)@p^T0bF;V2v|6p+3-49J zd@B5}+r+<5SmNTX^nD=?p4=zB|D>*Wm81PzAmNQLpC{a-TYtb`Aa}rk9QauIa0g58 zWXaXGZw#zR1YW87T=<`NV%f6jRvFNq@@R3Y{XE+$@ErxajT_^Rn!2d9Fffk+-U&Dj z$S;&HlsWCcDZl1M$+P;9xl~4mImpp|WjWQkav6KAJc{QzW2G>7XR(fy$H*(OuKO<| zhQ?UmGL$^;cYpS%eyr@dlqV@$U+g=vd|I!?_QwGi?86)&bhg*9qV8qYb3^^N$%M&*dL#*t)Z*`9FW2W&Vsx3t&%V~iikcTS8`SW%Rr zjZ@M0$pERJJ{GhiQSbUPIR^&)gLsy2DTQN4&Nl;saesJphz?~3!kN(3dgk-NG_C^( zeQ}tMSnH;?IU2Pcc_rgIpbOnH%&6lh%>|$f{DcLUUYjvwXnTKpS>v{p8Rn=xlCv$W zjjY>i>t1jvqg8%^~Z-`H5h*^s~`jl%o z#webZXn!rW298vml4_%9;dp9S$yPs3e-+nL9~k65Xeu&Iw&(MN$L6o;hm6vYj%;MX zvD)6Bi+~SM&wD;LRoA>(_DH^Ytt5;5AfMJxGJ_l;qts-(BlH<@T)>NBd`R29el>3^Pr|Z0t>fcpDB0)s`kuplq_d)qeUo0+_ zJAWCq^E8T=3pUn2N-qCw_>bD?5)-;`+Y!`xw(L=yp!Vq3vkh#oEKzi!BYei>z8aq% z^PHcq%q?%ho~XhopHaA>J!L!l96969260})QhR&*L5k>%soy|3Khez#>6!9NWrBo1 zUa>eQU`(TUQFyAY^$0ZnVEA{E<WI^m;+Q9ZftTccQ@EOxz zsiUT2l-;=fyY^`Qp)&jrrBObICjCY~et=FF$|uU)>VDUl4=cxE5)MoyKEq--{eH*b z#HHO|^JzZ8)Auu;+7YjKXJPK#EL4%%OM|rP1RUT+^o`^IE;{_0fi8^kF__Gckof!L~jI;f#{8e(-D)Z#X1=G=6 z!^`JP)p?u(k5s!Y2)1+S#~6CPQ-6uGK`=Tq-s!2a{KS6ZcEw(%IZfJb98K`)@5jGu zVRtuy$}`EGN(MZBEkHjdJUvzJlE%tDUY}|$d;y)< zbM~T7Nhh~Q`OIW<+raHPlFS_2k>%0ynYg&N5*wESVJ@IlI0bMb>cy9)B!9;^L4#uw zoyZZHwBsqvc=xibvWf@hCRups0Df`WMl6lz>lb=z%qJDP#ax`sb8HtDjvevbF20&1 zT!Izdum|o7o79F|&!_B8!q7*5!GGi;wk6-Zmq|~2#J+*9?{iGGoB5P%6GyC}++_Q} z`sQ@@&C&fNBt<45fBYvL>3`(#sUa1L^i$+lZ-qi?X><%cR4$YM{tyX%n&8GDkhxI_ zSPq~5=PWHe9caR?(+4Sl^3^0G9`rACtE3EfK2$EbfjC5YG>z%Ae2Bi6%Kn|#Bu_gJ z3>niuPe+TE_B;k2FqhmAN8B9ZfO<@PIqmyfcsc+~ll&;dOJetO7hRE;_QJqjWk8P3 zt-yz%A1eP-$p->n#Q8A9Ey9g5>j37C;RT16R3`#s`NtZwv6T0Q0R;tqOdt>t9Qb^x i;}4B*<ly_w?8F%+ABD`}_Mp=7z1Ut(Vea zC0#yu=_1-=(Oio5wu^QdU-y9gcP8wq{I^;k?T_gbyZ+MKIe$uW!R*~`7q$6ODRQJ) zUX&y`+KBF*9_QlQrN2OL5A2I$uQykQp(%F4@2g#@-Km{tSSLXh=0dP{_C%M(XHxi0 zljU;MjT%+l1N0v}VtJp%1KHRqp0{c*q!GpFW-86bjHV

VJ8@DI-u+3{6$_Py~`IQ+Ku zeIlCI8nOip-HqtpLl4ApcDhhC^?Zeogy$%T{FT~g;hJ_s4c9@u=uPnfo}!m<^ueP8 z`Xd);jDOwF;qWiIomyYA%t*coA#u*THT4Ms zbh{1*4~xXp!Ru)_Y8)Aj-jPxD4bM}+M-ES%bLGeUyT*_iXg$8|9eTB3UmM-fG0DDD zOKrst>}9+6KElYFF3_lv*q#pF5TgWtA^bPP>3^N1tohx>?5S~h(pZs9l^-JwHn2b$ z!=_4iy*I{=c?9Ue%R%hpbL3##o#|5Y6#b}N5Pz_DTPp@*>>RbHcaqa8BzO!C5NYYZ z5zQ*1dEhvcVIPUe2{dk1Ry5*at{*Ua5G|G9D&pAwJdY>k9r-x52%>D9Z}t`O^&~>y zLx0WTw{39fncB;agpDb1Jx5{~Ad4zm1I-aCwrEKtfJ*t7`8{CD{viRY>Kj?G0sV** z^M8tX9@*Hr@vt+%FWp$=6iZ@-P1Vli=(DdeUX$d)4l_uJO9>?qC{iW1@afiPS9%Ac zKY&-j)|}gl2o|g9qZ-?2`q9Z;7@xv5PJa{Ie^IQR8!^0K@G zkk<*1*-7GfNE4q}kO(0eq7M$$x7c`IdnZO*!9wGY7dBq<diDsDBt)ol<(~ z!6If0CK()%(uNpfKu?Pa8`!mf&bD)L&zhz`Qp78tfIOHjlE@TAEOJ@e)OJU=7fNn+qJf3vu_*7CT~{<`KFfi+QRs_4$swS4;B+aszA`p9^vj0!gOY zl@|D16CH-rs4OH*dOe0Q;2AfXaLwf9#WC*4o93bN!e5i`={1J(+<)$5Wi;W%Q(eh5 z(e%YjCILZbbh0Z(k`iCBb%Q4X?YKJ=!yU62jA)$uJ!bU7d+$0#EzyVCD>;K>m(D3!Yrhes zG;MwHH|B!b8;&mO%mtscZLv~^0Ov+3Pj8UZ!bfgz#)ZLqU`*`1oGIQrb7Ag8=iH8x zy@0bF3`*GQyw^*>LOg{B2E{I&IL31DEm&zT%$n#*R6bI;`hRQt7)gCYANqfD1CJFa z9~`Uk9~Ib!A3ThRU1}TOVBE|Ng`!-THPNvwR%QM-N>PAG2(hJqf-uxc4~9>E;71=m z&eE&Bsdc1!{+L2&-`M5mjCSXSI&p=$5bWL3M4bW`g3WtCLF3luKgDCr4=bBj^pVam zdqsbwe%plF?0;y>H^(MCE15eRlDmlQ?*V>j;p&ecR`^|mA8q)%@brf^NEYbnfu*AN zbl3*Tsp!{Aa;{tX<&ksrzS;s4cwjlBPvFF{BI5a+Ulh50;E$mOU$>3b<#**@D*D5S ztewv}rfm9eaUO=nzgUYU(SNbS8>S2A^H|9_r$2{Il{B8K)CDH+z>??_IB^0Ie0bV_ lRSVB}R$u;9VFKqO;(tX*aK}!wob3Pr002ovPDHLkV1oA+DAND{ delta 2113 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 Q&;S4c07*qoM6N<$f@7~`WB>pF diff --git a/docs/html/userhtml12x.png b/docs/html/userhtml12x.png index 2fe0d7419ad404eb581f3d1528ced8e9eede94de..7257667abbcddd63169f5e55a73c43a90e0f3598 100644 GIT binary patch delta 2004 zcmV;_2P^pB5BCp{Ie)21L_t(|0qvWORoplb$AL!y9M?h80he?@I!HnXp#ylSfCnAG zRd694KnF?a;OOAE?ST9LgvKY&%C@}g#WsoFQ>>5CXy!ko(Z`bQ$H&L5vD5bU_It^& zkSw=dvWWIXG+#w~-$gq{zvMgAynB-GEAy-VNuTek-%;OW>VJcym!kyNF?I9umei*x z@04w{Qv&KHX`;d2l>`Fh5Z#47mm0UXNx9bGja>W5cwbMthAZ~P(a&6ntJlTXJ=?MC zUOr!cR{5rGqtSzbtZ^gz=u zwzf8Aqfvu_z<)m%0GAyga2=>!9~3;o6+z=UlK=Fn5XVlOriiO_d(|oUa0E-fHWceQ z*l2esWmn|$Ne=j1+gSB~Xy_-1oGRA>MFZ_iZ|=mg2LMyU^;`?-)B;rxJ$jS2_*!pX znE{ix(P$?F8JI`Il^3!M$Jj&h;U3s4#VFlt%v6cj#edQ3wGOVH*RT2$0&}rZI2lOT z1Brd4{EFxpg@3F1Kgvrl_v+{9#;*Lg^6$z#>`||hXjr75mEjSRXn6dy#C+eZl78dZ zk81lv`8qmiN@8VR=(#F{mwRh0_>OwLkbcE@7hv6pBRItI1YXi>VR@`J>e%qLGP~|V z-!!d?Yk$gP7G+_9pJshcefSBsdMk`r7gk5NcgkRQr*_`7SO;Na0%MiaG!Gj|aD+aI zUlup_`1i5?L*+}#mR0AcGU)jEEVQf47y?O3$JmsH!C18v&gR)$_V=+{QKY9G9nIT9K+=up#B^?xF~;iKG&b?mS4Pv*usD|}SGRt7U1 zoW6gRD_N6qSzJZishjZ_>Z>`Cx#nA?yi4R2O{1?Reb@jwD!)+~yW-<~Q$NRXYxYpR z&DSSmqa8&x9K(LI-;avfPD?wE5mKb3ek_A5Vly9%Wjxr8h@b!zXjDhxkIEH|%FOkk zTz^Y(>`iPW`le%Qw5q_r_<n0o#mn&Y1F<6B_sCI&^w=ZKz z#kf9^|Nn3Fi#KZF3c@0oa%%H6>ofoIK{a5R;w#;4VvFSAErgD`2kFz|O?clEwXj_KK*XAR2RC#v)JWm|}wp3YZBW zJ9(u(I}00yU?4?U$V4t5>3_Uk&(u)6b4L((k+tZ_@yQmkjc1Gx2+)TBVnoT8c8+HE z;?L2`08U6kk-5J4#-=*_)JL%5$}n0g#JdD*bZEj6hb0rB!IMC+Po1PTPD#v>OTBQ- zF_=+XqpwBWP{pr{+^LSuD_pZR&IgcL*l0Hz4MpzaVu?-5AN610M1RqdIKmP@ShVR5 z!=mSbk$V^k8h)O%U=bSi52uG(V6hI-^1yZ!c|2ss8YzbKhO)lwSG=yo7uj3iJ+gy` zYwW~Za+Y9?L`^t?3%?YEfFOQc*|41jLTr*feP~Q?Ts3BvNf@;GT9ch2UkRb^pP_EcZ91+xT^U1 zO6sz)zh0IMny*93K@xGJ= z?D1K-J_j3(8chs9Rv_`{!p~*=J$L6$FFGE;{GUUwY@`hg^luo{A2u*gjb&dPYlBrO m#B~(iysSOylahDpHu?`SeD;NT7* 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 diff --git a/docs/html/userhtml17x.png b/docs/html/userhtml17x.png index 7fe28a82187fe45bc809bfe3f960b9f144f1f6d9..27a7387ecdebc461d350c870b87aa33762698254 100644 GIT binary patch delta 1203 zcmV;k1WfzX3ET;gIe(5xL_t(&1?`!OQ5!)FhGUNl@FX3O4j@#J&;gJROb0MjkRcra z6%gnkq=JAufDXdA1Lyz5Y9k-M^Koz&?6GFnx2x4kTD^Af+?!6P@7B=F0=-`Ei&hS0 z!z(ywJksMv<1yp9pmjrNwQf>e^I9^Bd>QxWA=kLt7Qkum1AldK9HuI}x0>BAp(ye! zj!Tv;MlY4~l?AtIhl{thJQUgw)nY^KW7k?QmGfnsd$sGXjntMrIi4)uOZ@3~3WH9i zy-=9WL^sq6IlYKPbTgX@ZFGPQ)^+Z4Nrs$xtJNY>ACVxPV)Ep1_LJ%+X`?ipa-<-3b%5@z~9!RINAjbng+d0g&)+O`#C^1P+MNlzIFnTWe z5MWHv6MrZuYtBx1FJlZB@x}2R5w>v_B%X9#p7THsL5eQ5K)k3FRG!*vYB7Exk@TVx z(IR+IlT6tjk)VzKAQ&IxlJ!O5;ImUT?~VaK3F8_40-rLzpR|B79)WTQPcuf~!MiZ{ zS|vXj80Qnz97RpwTJnneHQ|%jNEZ*{q59dTB7eXZfK}edZu`H3AmT}eOF^7rna&gC zgF~RN*8}B9k`s~5KB3D z(|;})3wQ^Pct2hY&s-H~^8^;zg;D=IXn*Yaw&?hzm_w~i8a>Pj-7!97?`L4ikXNr+~~XpdLTe=5yql2sNg%VY9Nb%K)Dz&$l^G<7oGt0 z;3yND@oCMe)*Y&EZ!dYW!;a*$H(u@H8-G*O0EYohKk@F0cRofW?}vEtDV$`6_o?RH zw~VQbqrN%-%8fU!;DVC<;+)qbwL}C z@6@Zf(T7+q)W`8u6OIC^-lcF>In}4y(7&-WAH*7#*8&P|zPpT))A@J?@RmdQKNJ2& z&l5d)b>(R14lrIjUzS(}sH$!_S}c3y4lo02=g*kq*#j~w0%KmcUK3iA@fWiZD@=+H R5BUH9002ovPDHLkV1nmFRE_`u delta 1195 zcmV;c1XTOn3DgOYIe&&pL_t(&1?`!OQ5!K3Km$Voo}>fP0fY*G4)|0M=l~`aWJm`< z1tfG3QbB+YARRDtK;9GDLmWQ)uhymP}F7C z=M8Mb(NpDovfzTYH~d)BL&15h7H0nEuC<;j=VP2}+F92|n$&(c-YnkC@*Q^y3!UyZ z=4RZ9VW=@By&3jzXtGPYqM7}j!n9@nNX8+<4n|^}AQL(zXA{s?vs+sEc9`JK5291% zqsRs*m02;nn1B0d@kgwlXa-s7c|3njfJ(~>) zSW~8tA@w+9ZIrU_dEOdmr>JB%DA#%BN7>iu`xyF)_6tQ$nE%jP%D&c=qC+#^A0=+Hq20_(DZ$`4FA*9OdV@e^ ztE>VaWq(ZaVRFOql|u_1BD=4Vc?sTq)WZO11@L&4ti#`$rX%Fqu*y zjJZuK_63X+n`vB)9g2hiom4tF)}_DIIYC(VE#!WI-ZEZ7$V@sFGW-^HuLz2g=gBx5 zSmztmUPYt88T-}s8%0jVgDw%oJ;r6CXbYjNs(<&G3I1IuWSb$69EpP7O&>5ql=Xr< zWnmj<^phJ^qt5SJp)7~7UlTsoAN4v7-Muc%uubL>u#f0oVWK{(=o1N-RLFMrt)*Q? z0%RCiK8)=R+`2DK;z;o1&v_65F2wyBxNQcBPz7nFa{cIouk8ELi8GTcr)1g6KarWa znSX09?g`$tL4a%n%k0vquMV8UGhfslpA`!`=(uM?w$U++el-|af527eX6!r6>SAJf zjizg7fk`~99M&^Yqo)TPy)X9&1fwWL7=0tKiF86;uGOH9bFXxbz^9>NT^WJ55(S>& zU@*8mIBkz{`g$46F_~5NPj*Cyrk`+in19f;e!trMcLUkgHNt*BA^k^h02mPE*OPl$ z8F%Ix2r74}vC{0}k9Yktgl1uN?=x0tC0eyX<7A$Is+n!CU@a^Vit}dOuyg z+WndQa^`$2@g87Mb<@$D@yU-}GbHDa=Xo=$1n0i4UlJy^$A6n-9?E9@TUr1B002ov JPDHLkV1kJTQ%?W@ diff --git a/docs/html/userhtml18x.png b/docs/html/userhtml18x.png index 82edd7f7db4e9628f81d062f4941062e7dedc835..ebcb935dfd1bd9e40303f5a28b54f8f0086877dc 100644 GIT binary patch delta 1263 zcmV;O7I z=m0wq=|DRW=m5VjWY+9%c5m+veCRpv<&sQh{!C_)N%m&9x3?SXOtaZ+)Ai$rn|1TU zlXY8gWxe0v?N#`Xp2f!9p&U~7DW{Y-ix~ZM5#fJL7H7R&9)MOu?@f#LH^PKx}d+);SF}zHu!kt zBjtVe%*p{7^l*Q`G`;G4I|Tl$51j(v-4GSAJJy2)pT!*x&iDuh!udHp`q0~Y1ZGV# zA=}+sJ3_PciS`SFN)fzEq)_T~FdSae=gRwm~^&UU<}tu2%LQ-2Y&`_A8p@?{(iJ;HL^PIU5wFo zeRSLFgXgA7esK&sr5sVT!Le&fgVWU?>Z2o0WB-uc5Fg!$l{UEcD2)%)E#wAcs*tDD zJH)n*@Z>jvrtiR{U?L}0Yx9&?tF*xlhqr9Wd~Gy4QT+~BZ9c|Z_R%*ODsGnY^mSUp zqpe(WFn_ft&3-dp>W;Ou-pax6&H=8UtP#gaF-87v0oD|qkN^a?oq2N?iCk}obq!pl z55CU6u3=;w;{*&k7CEz0v%b7Wc`ml4SLvH^noLl$V+s!p*U_45ie9$WP1oA|p$p%G z+hm0-KN{1g2;HD0?NM&%m#;jAVV>rjwF2Nq{9NJ7 z(mvlS+J7vgOZg5IW0Q8=_lmvBvO2bTNP*L|k$22;l4a*s=y*j0b}28;IpZ~-?w0eG zO1VAegM_Ob7=b+=Qv_3rN5>u6P5B0L(tVGdhAF?)t`0kDwU`u7XZ4PS@BRC|rW-uQ z4Sz;2gTeC+Fo>-_WL9Zq9r{bH6TMYVel_!exk=H`boCW$9*yY}6oP!ne2q@7<(W?A z5)+y+JW)<~uLO3SLSN=XRQv8tvYfKCF~NxwQDOwP4orl+*}=a{-E@-w2lxj{N%0>+ z$$RLw>!^`mKWD7(vNJdu(=zxf`stL2g@2pMrSclM;|%=fARVFW6>#5VaJ_~aVjhE} zolRiqw;V*@0D5Ao*8yX(Ap=0hD2ei%2hsl%bza8>b$5OGS{vV1>==#d z45uWW3~p+Slb*gI884ku!SA!cG6gTJ*GFn|z|}q_EWdeEfZ?0Dd^=ng>wody z^;93jZ=KeR=eW)j(>H~i$qZwi-Y(jm Z{sPjGBnc~`0lWYJ002ovPDHLkV1mMreH#D( delta 1258 zcmV;SC* zp#$gup#$hZr33uFki_h5c5iR*bkOt7tp73(nR z4(^I}4emDK`udeU`8a74$GnQpar{SseNDE702w<7*d)jo6+s~>D)<&^WrL3=-qYSi zk1QOJmS?*WmgzU4MtE#_D1-ZaGGU?wv99!2n-iv_GJo zi%ZQpO~D!0H-^?zzt=}Ib`80fwHw;gB!jV!wyR=(kblOt9$KBZpVk;_AJevd;7yX` zqf_R`v~b_j|Da_#iEdU8k8-m9v*@SS;SD;`dkC~W*h8OvAP*2?M&B7zi8Lkzi@p_T za7r2!Oz1rEjpUhDe(W5%8mq$_xTAk>A1+2Cg>ka*w8w?qJK;;Byu46NfvA(&9 zdwA01%YW-7Z{IlbEgbymJ&=1v^DRI(ET$3$1MF#X1_4os!E8BZdgDmj%CH*USR8uj z>>oA$sH4HMbvl+ct5UWv>Mc$i8+?_yiI*!uO^+csWQ;!f>O^ZKf7%ng$(gG{w5>O$ z8xY;WB>0DpJLctU(L3d~ppmWx+%G!N;NLMe1AoWB1^eW0)`|cV@k<3SN*kWpBjb~Z zX+SR>p^Qz&>Asijxj%r8%?~N$(0YC6~MI_lJhx?qfp8Q^}y(;%D7vi|j z2SKiM$VjsLV+vt;r=6y`JzyXQ-S^O`nDmVkRLUDWRwhk_s&_1S-vOZ{ckRKt!Dy9f zaDU#JowB1JOzcM0VLr-E_!c?&)yjiR6I&a?)t7t__v(!4Is^&K?#ncZy*SIsOkhJR zh9^qnmI}yDr_h&q7c{O zYT(z;8TMUIE%wH=48Dv{5;KNd%7yY8cz?ij{Kg<1!|O>|HW*w#TQabZL2|DYz%}L# z2QfE*RS>5>;>K8>=T8F&PrmpG77m U`%Q?S;Q#;t07*qoM6N<$f)I^;pa1{> diff --git a/docs/html/userhtml19x.png b/docs/html/userhtml19x.png index 336cb190e367a0f5ca83ba3fc7175104499307af..5ac0302ae507ddb5a29b282b80dd87b12bedd3d9 100644 GIT binary patch delta 1436 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 A3IG5A delta 1080 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 delta 1437 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 literal 11173 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 diff --git a/docs/html/userhtml22x.png b/docs/html/userhtml22x.png index 6b4135861d3fc89174ae96b91d5a19a643a7ec76..8c882bc24aab03bb3f9215e794b1c956837ef04a 100644 GIT binary patch delta 1403 zcmV->1%&#j3!@8=Ie%42L_t(&1?`%Rbrd%cfPME|fa7!k9XO-|=zyOJf;+%3737f) zOb5a40H}aK2e^a4b>MuTEGg37YH#=MHnEB4J)NY{%xGqIW+WLF*Voqv_psRmi^bw8 zR4e@TeiJpcub{bv_G%ODl=azkFbG-=1z*xW(TtP_ExPX=kALltY3Ebyg#I1vXbR5| z?VLI^10X5H<^}@OcCfV8;Cn#()>^+Scx?DIq^s++S0xQ|ZNDgSyNumqh~IVERyr(U z+yp;Cu(1R-gjhnqHrDP0niBjPMb9@VYuT@S#0LvU0sK~xonUqyhN8<&RwXm6_W$f$Li@!Y9H5JO`EiAZ=yVFsxqtXYgzDzQ}Y3JiKFMIGo4!yQlKI+gZKkw;U zn$xfGf`6-yQ0BAfQ0lm3law7gd)+#9^T;Zf=M4F z*`oKZL$TM*5C=Fg0KPa*jk%fOV!jVBmToP(rGKGGo3lnbTF$B@x79_T3Xmo)=GdHD_z=X=$mtK%V?2p$D*!swr$ z=MG^g?*l4XW=f(KFZ}5b(QZ%}M58JJ^d12^%R7bd-EH7Kx}FU&vYs=ReaueVA45ES zYk$Z|*=uE4F&|~8vI<`P+vN>arJ#|e7YdrmI&=jdMrVjGOOW%boJTr8Y~M%n^76S* z>=APf%uZ+C1nAC?@BRkEv$1?lf#VhoTy@Mru8lo=YjX>{M2F;o_Xyq;99{Z8KUDsW z4C>SuP;==Jwq5d@&b+RoDii_(11*_pJ%7;$0j!zzwqF9`=BF}H{$j0nhRct1%1Z_Sp5osLdC@cLT$=6aJ_~Pgb4t@5q!yvAkjC1M`wqM5R zH5<&{02pX#7Oof@h3P5ih3#h-gt+EMGkbGJg~fPTf~L>dNK$t((9VnfYl7Wo27k3J z9ajcG{=n>Mpmr~f+NAz{ApT07;q^Fe9V_~^`>~a$>>nKnaes&1N-&EK>}OJ3)6N$d zp#nys05AhFM_E`1SB-_D$fA<%DVDK1N>f6&7i#jG7V;R z3db4p-+*(T1H8u$&)X;9tx#(Kzkl|bxlJ3P@uK$wGOB6-K2?#F`TE-9sInWnS#&_I z{?Hef`8B}iw`PoDqhA$s>y0jJuc5Jf!W)j%G4#-ySiOIqpIe6|8{9g;Y2BB~f2rf! zn2p=$;2pziQvvck@~k2O7#l3dw3gj_*WqU8_&X*_|IakIDU{8rK7h}1-*o%$4&crD z@K;g#RF?DKSh{;9nl66R9KNOwC2zPBKzt7a9*CLh<+uBKXmY{hSuam@7m$H9FOp`y z0pJ~=e0?!phkff%?r delta 1408 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 Z(_hXJ)y3(0KQRCR002ovPDHLkV1jO3QeyxB diff --git a/docs/html/userhtml24x.png b/docs/html/userhtml24x.png index 3c6bb3bddb4def5ab02627cf0bbcf480d81ba40c..0910fe9ced056b13f061abe3e4a3af34c8acaa9a 100644 GIT binary patch delta 1017 zcmVOHrMr`4WWYPK*xKLSes1?8htEZu(J>D z_VFLN6L7PS><0v+u(q~#1mkCv`G!RHwGZA7*}_=9U}u+g_kRfNU7z)lyF_k^-g>8e zDqAS(?0Sm-nsoND2~JCV;PYX~`pA#s3wD0x)|C&Q)Ma>f@130`dLlvwG5Cy;HwX6d z2p)@UrdKtFO^@XZb}q1KG34M8=G^|=y9(%gnv(D_!Lcn}CwQwy9?O>_g8C`vJp6+M z-vpk5b4i+$MSr<9tP#i_!I+LT;3CBvi_RK4)w?wzyO1yS{bIub-PvC1I?eCs8=z#X zZ=DE^&^8LiapH3*WRKraV=tA@`2x@0ZGeR>0(T6}XX#tuDYVd<4|$GWT+ne4e+55- zCM#9-zu_C78?Xhj8R4Q`y|8774cSA_Ta33QM13iP=YPz(6xreiG<~)JuRsGU2Cz5{ zWDL%*p^ldb+fNGaVSGt3V~N<$WHo9BC(QIVdeLl0m0pLK^2NE)ESeqmZ?HE&tNI5R zK-yDy2%n|j;VQicJ=aM*U7ofm%(bS{@StF#<4cQoYd7+4pu?9N_8Z!cd$!^Wzo8q< z=FqkM)PLo9EZ|-{tR>%K%*EgjeAkJ>Tq2P0df2R#sG>wRU^_AqZpJ(GB5;Q@xg))Z zO?8sKl)*0SvTv(Y{9X_S{4oioxF_tH=hS@YwAxIBuj8p+*fNIfDUNtFO~?Vyxue? zuffo-4Wfgz4$|si0G$&pDD7w~TyV}>LjMWg#8L^GREa>S%4)(;l3Z4gzp2=!mJK=` z4N7g{oG+dL(dxBln}o_9G*9srx4 zjO-1%hoE!fslFGU>tMoSGejSri??dNxCvk3TW{GzXk*wIvR+JfEMJ-&tZ zNx#j>heW*iXMo%yugSyVrTBtfXTU+*jnT(A!-pU#b?0 z2HUBcB^zVW@navn0;k|_v5#%!M~MYHziRK551zMWcn-d|X}SCCM8pcB@Q9&}1Ag3t zcH$Y%bn3?F^jNWA=MtMXLJjU=F8HVKDxmK)6=A2qaapnhUjvL4%PC2HQ%i`=Qs7&_ z3vi)G3$iFDn}0O|)e+3;NCPfQys_xKBP>r{?G25kZ66zU^OFuP=$oM8QlCr&BXo#D z7$>fMp*ntjjXhPq77IMr?vv&n2PFOsn$OY?zzb+`X|~g|2N!hQh(CbG;1r!w*WbZ6 zKi6Oaxjo_|QmfXIa-hJH>Mn`$oHI>}tOaO!gjVSAPd1Nc$Tf z;uSlt9`PvcMATLir_1+bVW&-P651=7=$vEYm>_iI*}#feZt>T|M0m@MUG08pGM6`9 z6WEqlRDbX^cgMTr+l;jw{DE)bvanDHBs?CrJ0+_Wi8$bLWFa28_Y6G*OiFE}huBo7 z7)z7vU>Cnlj*0vh2tEE_Cl<#Ed*r#aKdiL6T!?*)mDa+<7_t`x;%HhB&-t~{O!U`G z=o*WiY!c^j6O+2_SWLLZDuG206IBvu=xv(|qJQ%}f|q+@7}6DXfusCvzB_8Mz}p4= z*}>D1;D+u-+J<@1SR}=A>eeaYGS16o@vF2MCS>F zY(kdo)nai1M89@jmMp^DCN!sexx1YfWpf}sOcc5nu(Uk655$+ddT*A_7CyOpi zb9)Uxe4Q`T<1;$?p^T@r1>N`z?;+mDD>Qxex3kNj#ElLFr=rl1>likMytl10RxE9s z-UCS@mt{)N=sJPbFY{Q4K|g7fUc5;<0d}t?7VL&88WNjD0IUDQ*k*llqbcs@@Lmk8 zITnxD?mfMr@yUiS?H$3Mo3+NR_G^H(#X=%I@pxSCn=9o%txE0=0&Y&#YOONzjQDGf r#XM1n@V|vFIYZVB+~2e;Vio=Y>{%wU-(Ygp00000NkvXXu0mjf{nYjr diff --git a/docs/html/userhtml25x.png b/docs/html/userhtml25x.png index 37836c81e2f7fb4fbf71d03c883714feee67fdde..88630c5066656d6bdca3dea8ca42c71bde9d952c 100644 GIT binary patch delta 381 zcmV-@0fPRw1GfW^Lw{`oF${%C)d4C-fDPIeIs!A$4ax`=Bftvn1~3A!0c=pg2G{SU z4hro-9C2sKIFA3G6JH2T(+v8c5W<|?vp#Z{ay}*pK#W*VOdkX2jXmkwAHy^DPG3Upl;#5;PQ)>zz|Lk3yP;SfD#A)=lu**M>tzA>&Do$+i z)g$&E8mH9nI_-H=9cX^nhKhrSHxujc$E$DTO-zjZ?7bL0H?P;`QTB!JNW+On&B bHFcC&vk$tIVosu~SJDWw&;mqX<4%6T6SfS4f9vOWdSGjq~4KZTdf?X%q( zo*buZeH@%4os<~T&W8MozJ?#+F}#E4VecC8UBR<1zyH{kJAdMkTXDuB<~WQC=Pmk| zbVw(q;FCT4+D80zLfbamt#jnHaK@r0WkG^GuFz7-*& zXQSm_jx*kuIJKM>wMYK+qJDY3gXPc1#m1=}C^-Y$HRjHCsI-+bv1&an$nq~^uaz(1 z#8y89x-&HpMs|TZYa#T7TU2?J!}WLl$f*a*!g+_Ic2^v&_ks8zU6k8ubJV)OfK)55 ziBl`~NjAbGaT4{f@`)Rd0GhMA#laJh{)9E4ppVOB`9ABWX ziS19ZR!#0#OTIHfz%cM1(XCSe$e=`^7K|sX-}iNWudl*;kbfuG8GihwKM=HmXF&9i z`EQ0R`fUWy&6{-U%bVH!Jc-QO7-NR zL+%wj*OZu&$5G;dQ#fbMxv8q*%gr>6vfGBEZH%Go_+wGk?!3a6uW=v!&#fj-@1F`H zZ?#TyPveHJ6Myoa>1T=GH6m-49Cyj}$Rk3p_6(AEtD z$+e`(HvFw|!V5;M86glxgIc=+%&V`GcC^vt$gXSHO~o_$YIX`j04CC2{a1iQUR9jP z27}%|gMab0u|VaZpu@&}0z$`Axagx(D;xds;Pf@WaL@)UAdRo2vh=DrrwE2;iZRpy zoSVn`@Q*dyFV=F+d0FcIiw)Df_lHxr<%xCAjPXaH?Sbw-u6<)q>rRk?&cA!msgD!I z@B+Q{h+mB-_SX9(d+fJaYpSn&vXRC;Q5~bP!AE=yyDc_nWP?}AEb%H?ln1rZKpEuC z?n?f0+kA{cAmCw)Qr558&c%GSZ92><{907*qoM6N<$f`(gn AM*si- delta 720 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 delta 1914 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 delta 2364 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 FV1gU;7rOue delta 1076 zcmV-41k3yB2;K;gIe!pIL_t(&1?`!OQ5!K3hHVc8ct{0-4oK*Lbikv6KnE}>A?d($ zz@r1`fItV(0pJdt{}a0!ojA_A^D!oaH6u=1?Mwget#oEMo6QERR*%4NI6T(Mf%>&^ zZ0Wh7era>YTf%VD=0%USBCgNNv@Jlt`Sulr3ytqYJIQE1Eq{8Binu-@lK>`*&$6xW zXnvK^9BL8Wc0M9d+EFXw| zmx55kmoC?i8$p-CQ%QwLc2Q2C)SqiD|9`|Ea@h~mg}iSB-86HMbTzgs*{6j({5ZmO z^}LgJC7|z1bANt#lp5zp03{k!7nawp$0 zpV#xQF0G}4+9;R*BlUZuPkH9XEb_m!^k{s19Gr-6sx^S#QztWM2cnVj7g}!7#ARuOrczL(lhu@A$&rNQ4{l$6Jl&m6qt<)_=kz-Luxvvjw1`Yl2b09z)}) z&LMc^JVqxl@NGCN-sSaNJ`x0JsvANpNJV?KDeEU+)%^P#V|eWD8) zHTIulN12{D;6xbCoz#ftfPU;WjoqmVAfn?i@@XL04A~t6TQZgm*-&w|M6Q%ax)0Su zVj+Vq^?!RCg9CoY^-{ei4-NqvJp;h0yl5EQb(D&NTalHCr{fx6FHH73?O)(GTE32 z)56!9)ir`vT*Iwi0y?$x7G)jUwfv30i`2<$J%4`m$c~qk{ByrfbS_Q0r^Wdr2!ztnyxWHth_n!&FhjOsOYL><2<>p>#{?TD}MH2 zTRL8qR?*m3sP`ic{Np8NfM_%T2={Yk1a;lloj)*HwvaJD1L5TlQH@bXK3RKnC>zLd z^MAqV-kbawt6!*-Ks0`~&3{WFVHR!Rag!;57VsQtqr4K75O;(hcl?h0fTLRT*M_SS zSE0~s4S@EfCoMzkqJBny zq=OqptA7s6Ga#KL5PpR-L;6oeWBzEem-$|d-s&Np;0aD4v-Jc=N@mzk09}L+*W@^7 zOdnad^u1{>Bq{a$56*m8(3g%>M+XEj8NM!nIh&{=lr!G=ucC!AJz` uz`dMt=J~m}%Jg30egT@>k6%h^&%A$YHe!M diff --git a/docs/html/userhtml30x.png b/docs/html/userhtml30x.png index 059fe3e083f8d07ae09b450cdb09c04d507456b9..509285f3738628af3b7a3961cc08404d3527305a 100644 GIT binary patch delta 2607 zcmV+~3effF6wDNmIDZNLNkl46BbxYl9wd6M^zkmP!tHN<};N;}w zo+!AgvHSofia*igi{jsi=YV~*k)xj#$2bn0jw@bEA1DW|s()YCg1*J^AZzk#j5Cf; zMqDed$APK<*5iF`xpH824parO`ViC(R1U1ifvN!3<9%(pa$t21R0Xj55Y!G-4y?z4 zE9*5~Tiz!J`E!wbOTvE+ z**=a^AiY9?9Dk?^pnyU5tG})A92Yis2J}w)s{+_iN$lW2RRA4K*|S{h>nZ!jQ_nS73`!VdEUAK7fr6FysXS&W*u~Al^s)bCofRp|4C$-v9@y1+alZ z96`c;mHjkSz6$>khqjYnEr9KeWeO!&0KE=BZ}ziIxPK`n@H7QsEpyx)s20F+k6&`{ zCEOeXvj6Y20F;m5;~*sekwS$6I8YTp0fX#GM8LoGnfIhCyjB@jex4Ny;6U916fnq; zDBj%q5OnstTE0%}>aaUDQeM)>B&p>Vr>v|7E+TS?|BTY+M)%Ri+&&&meJ@LF zqnrYe9F0C!9gs(kbdkxs!fhXSaf)+W;k(ja>VMgQaB%|kLV=IJ9Jn(2gOHPe^9RA_ zp17qs0(|~6|D+7*4}AQq-d_cElFC{6`n=?I<-<1kAXz}*-zy*&e1PR-Y3x&Vhve}b zoW7lpdfu`&^!`i1$!Cy8e?r;jI`}4+ zCx56ueZW*21Kee|zKy9@%T^9#|J$7n@Lu; zJ}U>-;D8qxUNi)u11-(cRPZmU<>GoZUOBJ@4oF`3rh>Z^1XkRy z3OM1$K#DvfpU7i#ZCmXi*jOO{Dj48YM+t<0tY04QqXhs}#v}mTQJ|g>(l{49@)t_u zoUs>D%k?7IV}|eRg=lJ&n$pZ;Y93Vl9;5%wmhdn*SXdV^NvUn5mW%OEiGT02t)c$q z>`MwRmEq>&B0r2O+-@NiexAu&1JxUnN9HAEP&B3tu4}$Ej(epe*UV=YZ<~kAOPqji zVQ+i@aYYqsf$|ZEMj^B^gGg$*pvo$*o-rJI#wQOj2rX(5$1Q#6$+;^7)b(Xuj5CfK z?l?V;Te%$176#L$}z(Vjwp-+*_!ms|K2;#+N4o+6~*t8#w?|*c3jSW=Lq+w;A z&AcvF2sbN?O(Ncl1n~g{xG4BG;PIEa4S4}IlX)(>MeBRI;cxHCp4x#T6@Zw-iAR@d zp31jfsMuzk-?nKUH_>70`9hD;`z`!2O`7(umVOeh9qJD5R|ctKVzU ziWeWas{pNYz74^e0Pmo~TV;+OPLG~~@dR)rlFMXlTK57MI)9^>gp2zC)Glp2)uew( z(EBx|Van1z+Z;anAZ!XmBgzfh`C!dxhyURiOraTz0!2~;l&AnO%UPXs140=372JyJ z1vGbCAwEtV&cXz}-%(#sa?r|l=bggVfK{6Pzgb++hw$>z3(8?CFm7||Pi=RVdL=3V zRt+bdxj3!~$A75;Ap|o+m-Yj2fhD8|3&;65l^*rb9lN+>ZlkJAl+NA4+ ze&A3Gm6PS?_zeem9$P-nbPsuA4c2Ej2TD}{IW;^h|9?Lnt1M19j%yHveE~wzIu=7I z!~zk==X6fE?8vi)M(sj-Hbv7yei>m5R`zuFK~L~{h!i(1~-dY zu1Su-@l{pVDrb`@r?P3$tM;)vFy~FlAdKvTLudq4BMOLqqRG z0y#Bl@PAIkaWvIRQ~)@~m@KnE6OPHov0v!;3vt>cTJkzD3W&hI9-0vTM!6{s>*P#< zeELfsE94eV1)u|(46rzIY%SQ%EOkt5eLa}xm4oTY{yM@j5e}qD;04L{y{y3eAZlyX zAx+3_U;IdM+Co{FRWPaTj!Fmt9)70;=!e?k27jKNi_6I-{Kb16V{{<&Mh^_4DZS{|9jhU?{X+ RBv}9e002ovPDHLkV1i**^ezAZ delta 2635 zcmV-R3bggi6zCL?IDZNnNklW2qyz5%Q?wpg@r&iJ=VyC0qu7#HEA2}Ap_Tn|^!xYkTb`E9fup0N zN21`i=JIbSQTc@~-&FoVd5pA=KE@cQF=fdj4p8kn-iDg-_%0$lzx zqfzxwm1{2y3GTBpTLe!l=YYomRzAUyCjmF>&l`i6xxhED;C0fb;jve(g#+#ZtYs$4 z=y)u!uWg_%{B0as&vW+x)-#tSl;8pE4ERO2pLoGNDSv^NB?uj6*&J{WVA=CmJbDQ? z$AIkr8$AF$NAL*{^8A^yrwwqx6~G22Ig*Hg|Jdc;Q?LA9Fj#)Bo;JV%-vVr4k|9yT z&9R>y{oO=0pAz4@3BaGNhXd{btY|0l3EWapvx-P2br3S&*2sn8OuUw1AjX~JC zMp;t;$zcE0fc{`m8gMu^(zBwENlM}7B6y|!US@PrzR2o^7WdJ|&@moN`zT9T`=9_M zN1cyVTjY@=U1X9Ey8cq8%qb4>o1g0Movu|9E`Lsd-YEaH$^fH32sw2Ge-M0rTh8hN z0rB~(cm;;~C$aop_vcBQA~=Kh>lLq^59{EAWC4Nytc+an0alQuu2;2flSjVb6j zjL)tNy?|7{#h=QJr>-dr2Cea{=~-G=3YWH-`d(v#M$gWJPHUiTU208XO%X0~<%YMl zyXm>`^p;1pWjwSGTXE}0WjqR_9R(4#Ct(Yq0trphmWn8aN<%;hPHf-efH9 zcV)B6r6iWfBl3wn-Z!M`hqpKJKsXk(L{J?ikS1jP>UbY5KvH8|0urtVh#{nUcU;fW z8gEorb*S>SR0?;k;S3cTYnT|(R4KJsN07xLsKh-w|C=r0VS+A%=Q1a)w11CMxEz0< z@;>`&8{e2?DZwQe=J-?7T(yn0?YVFVLn=6~#ajclYm>(i#TQP58QkIf4bhMW@{w!S zINK9jhsZVo!eH1>R0t_=X!Um0a|EJN2v(n8OX2c%`z}YuaDqL%Wq)wf-7 z#hApVS88*ddD(F1^?BLg#(%ixxbyNDeU#$J`_9YZ#7W33W>iJI8#>6_=4H0M@3kJj zD6<|e8*ucl5CZD zI**+Y!ZfZBEUp&nq)I^eIdM2kh@n5;^G3-*E8Cq<%4|l4s42cTYpplOfHi=TGE2!RKZ@{FuYh`($sMP&Vo~V9;naYzN$XFm6kmxROsR`t4pZUSnla zZ)=RL1>2dSCkc#a5$R+Rqa1gTOfCVWUdaSsjel7v!2(MOqE_qfFNlA1Pw_RuuqN zvSvApxV3yBTx5PtmMy}h+W-mw81DGqI4+)qc!I{gDGy+CTL4y+CK(~%ODgurn^6R! z6^lHo+q^dkoxUS1|K@nJNd>@KLeonD5Ja%!wb@kbTlC(R9OVlujC3vSqZDq8VePZ8 tw(*WRmR4L^18fI*l{<%R8|UJm{|_x{Y5d;oofrTB002ovPDHLkV1hYN^=SYA diff --git a/docs/html/userhtml31x.png b/docs/html/userhtml31x.png index f50412f33176577dd9cb9737d69c60f323c6e122..7220398701fd3e388bd509224ad04689ea46bd4f 100644 GIT binary patch delta 1724 zcmV;t21EJe4dD%tIe(K$L_t(|0qvZDQQbHYhVNyrfLzi+(g6t_KnLOIfOJ5H3U0U# zxKxmV4w4dp4ssnFc^z>7CnS$-BwMzh6Z?5JBV?^tYkBwguC(@J^Z5Aq+uF)zvpLc| zztp|oaPR7$skv4Ep8hV%&$z}e<~g;D7gJwgrt)8EUaz9LHGlijslkU$na%!S!Alyr zR)8(ZMvI=S0c_FcoB!kuVDq=pqGxCTTeSJ+Kl$J1KgC}&L+t_&bmddkH`-mEsQ*F7 zhpPXn-iY?ES}PqIFb|ej(2+p&Nv974u1nZ_AJ9R!QlJ3?SVBqOdj$_gI-|;&=@|M| zVwjN<8Zdw*lz#$A-s(m`d!s}0R~4W{KT)kEWW{%_N(i;m(15MM8VaEs0f>zMHtHw1 z9qE&Jg2&78tdedXtljL#I{mGk#R1a5l~Iy;u#93n84s3S(EG4R7=0@b_OV^mI?tL1 z%h+AuAx**hE9t>>9$>Kn;QXJeRuUR8fF+dTNdV|Rw|};RuKJI7@LaT35*n}&nNSKO zfrn3d+~+(QmO$oHpSPi7ZCwNA!Rq?x)$?nxZ+J5uyJT!H0V`lOfQ>UU`LM0Pb*}cW zaiYeJW=*JiH8-GJh#X;8JeP)_j1Vz;D8P~scDnCrHK*jJWb}mw3a9}rn(TMUdyPy@ z*lp8wu7Bv|Zz{e0nD;sm zjx`{D^7vGR1uRGo*=kUneED0-r}4?6@yr2N->2|yFwCvbxJB_wHvlX4Sc5~Mw^N(F z@m_$6!gaq$$MO5uThUHc!;fa*2NMoEl8-kdH+bm)ri0I_6h2J>OcX+7mBrTJ?8{%r z?SKE2^2KAqvBvgx^I`11w%%BHEDBy_FtDCPxW8TY<`-6MUH}(hX{KwS$ACj9n+)dp zMU|cP9}q(*#1}f3s1sS2D<0hHk2W68mGX7T+2wi7iHXgwcHN`qjDhhc)GADMjcYqE zIiu|D$GfFaxQ=Le#Gqe7s0-i0gQ@S>NusM3zgnEKzo`TVyTWRi4>V*AJg1)jX-@N%Z;X&lAe2?}7&dac2RIp%sm%r+R91 zoa77qp)KVL{MP29MpHM^E#Ya@B0pyz(L3!e9z5xFn3s-m3SUE?Rs|5=xnoZtQGZws z@-%KF-W~D;F`9*cTNo|kYm;H;^7;+B!49f}fTnRJ_C|g!l&bH5qc+|xvU_aqC;^=d zksBsVk!!=HQCzA*EiZGc#hrJ37ow2|$(B;StbmD6XntYG6LvtXD+m4CfL+QOdfS=< zK)`mi#i3Ko5MZVhvQ~-0QR`5p(;VFD2 z1-LID)aPmDtBGn&AsR};JG@s#S;=gDi7bu(DMfQ}0Mo^`nr{sRLna`3cp;({>#)Hk zUgQrJvTp;WRGvl_)~q>MbIiVI&g24jndZSW0kTo$#i-GHJlJ~#JlX9Y-+yNE*8IKW z5i75rWGo;W!17As2`1b$6N>o}dvHeJVhO?WfI?aXJq#`uBJ-+a?Xf!Vr3Z@5kJ|v{ zRa1V(JXl^=Jh}IJg3o>Bw~vGkD?Kz|9xS0O4 zy-7=tu2Y-;ECt!CDHbC0rrw5A-UAULd%rf3$7^o+PbFtHKh!l37JpDwZ}C(BDijir zqd(0SP}zw-2z0i{51L(R%kJ^B_gthUnqjWDS|p2g9lv?#?FD;ZY(@htL?(S%5)xOmd S40)#j0000hbaM#nRGhwK~!> zztXe+!?UY=rpv9$_mp>$enlI*=;zovUXIst*LNE7*MbPu)Vd)WHGSH6@PT)&*C9+akZ4OfDMruqd*dP z*p>)e6E$3p%%?tYn;4c{XAx|G_x&8~JJC${=L1yjt*8NPm}}V&TYGRl>oCcjQ2AQf zojMGAtldf55IMk>L@tS+3{Wvx6ktgSD_wVlr9NdBC4(C(RImZCsI&h{-yi5yhutz= zb)61>yMOW(_IFoe>qHUdhlDn?IBFZ-S41lZF!`zXHc5-W*`mSc9Pt08Oqo?P^UWV> z?{8hJBwehyFO`1;qT|sYKm?7+D!}4f^+0nE;Oo!*6&~pCefduJ*O5#ozQAwSCtG*5 zgKQ0;Zj`Y*2lCEWeXo*j^EY3Nh|RS_TL+;H-GBd7cK(lO@Ni}uW9P_4Fdua|z&#d2 z{N^FR1eS*i$0wi|df0%3?hb#u@`*p2B#$0KeV@eHVCY*Pxmodg+r|;Acqo)EB2$yU zssH8;gzrDe#_{> zt6{25uBl#niv2BF`h&ci3Wau5CL#v=0)Id^e7hl11rkVYOPvmXrKBt0Mtgb_MjIk! zh}A}8GbyOwM1o`4hGFYUSEeX@y)iVBmHL}#McQaz{b7;uQT^kyC5CeHVVIDCxHB%^DJS$Wg`IeW+lgD3fQeiXgc-{K*X-h{sCo}ln8l({MavVS{w z?+NTeS3;h~gH*$&?sm>In1rj;(X}46zveEy401gPJV2<`WIF_VFkpzvgqFi z>{3_hbE^*k0pD@$JakH~&EIYnD1V(ychK$5Tjl?FAqZ};C&7oIoCJ1Q0Jue91u$2& zfIl(_;rq1=;Er}w=B?zbiE2(E8U_vX!D_XXnx~7dRA#KQ?=#L{rywY4Q~G#*Mk@eT zoZ?A-v66iglu=odGqGka$(&>I$@jVUZhpgq5t#tlp!9N(^d1ZQh(Nf%-GAf9%s!fb zcB1&!UT0RIfoK4$Hx6$w!_8nL*Ecb}8i9)`MA+E9@a5u;+7MZ9I_4gWi(Y!6Sp2vJ zP`zoo*H{Frw-piWUT^TZ&;0h0VZ%}n3s?lp7|R2R`B!zQFB;2sCj9n!bjD_NBm-F9 zGDI&nk>igE87}#1)E(&O#ecS`;s>agzJ>_M{^G`7(zew8Pz+#sU*^tIONU3kfT*?) z1h_k8cE>APz6<+7wK-VckL*mR`(J$7NmQ#oTgi)VQO^V@^o7LU(uYvk_p1Rc?_r`< zx;?@2z1r>1i)E=>|12fTwWmZIBI_MnMJgYG0A2566Ggmq$0)KdZytI_!8!ZDhRBTf z1cEi7%2XARJWv6t)2TAwPo+a=k?yGr*$_FhhXf{uTK2*C+?jneR+OhBH#-^i7Qx1M zh5G_j&9Dj$X%W$jhd4EW1(%O>)lm5RNUCR{c8LIEeibLm4>6&~{VsL&Xm&oV{{vzL V$h(oHQltO?002ovPDHLkV1fe@R^k8v diff --git a/docs/html/userhtml32x.png b/docs/html/userhtml32x.png index b4a91874c3512d80a25fbccdafedf0e0be8d6074..a92c54559c0954a17d3e78735625623ee7107b29 100644 GIT binary patch delta 1770 zcmVC;(ni%%=e+baRywFc209&TGM-={U-1&J-1gepyhB zvGhp5K-eRglz%L(cOx*q5}otC26UpI%C`=+#dj^wa&4|a0=6eC5K;s(ZdR62y07#n z@dVA;$76Ia0n>!*LE%K~-*QC^fH?`Z^Gy@B<&jIF344tYzXY>nzZMWbbA=Kx5EcqbY=G=X-+xjIUH)J3paBWZ6-vOC<3d3R zU_A43PrWilcn0=5!(-Wz1WXe~!WbI$d%|yMMaA8L_Ru=_p}c``+*#(la47(ORQP$^ zs)yIczE%G6seM6gIUYW@O$}&3B~BZ{6Nvymbp@;bA42uB)41AIcUvHgI{Q-{dP%3$ zVRs~{==7xtCRWeuE940ROywlEC`NPnb;(x#89Y!J=d@;Vb{ycV?&}%RVCn^ws zV|lj3CL6SeYbcPua)DpMqjHZr)j=OvGS+e2-G;ucQ*L&=k{{rUHDC3z>*w<^OrQk; z9*%aeG!O9|`ghUZ%ZDG2!4Ga6zEnS2k@M7xg^2vR41@x-_%?v$7!Bt@NCSS5Xu>1X z3V$0%r*k|FvqeUgfS*t_9}ewQ4Zepe+%FDum~eoKFu^TRqYOj`C!DLgJ+jgPw1DzT zo>PPeg{KJZ^5Ik~={_$W)bsDYd|y|V=dtpe$n)c4jFa;v^3b@@DrlwFl2}r0Gjvm*wdzYxHiJ4v`CUC0}JFt6T{ts2@x;%eLYUTnb|=nEhpHDFaNm96Q5A z35*j|BMub|+PRQ#?n=E1Jr|8LpiWo9(^+s!MD;INXu)D*|2pd5eZ)iAc6)K#aa{cX zEX*%q@iMJ)IZPlwcrZSw8{E7UMt@=h7i=MS6x3242OoxsGj1CYx~!RhNEm!e4>Wl9 z%0+3u?O1TFy~|i)*mirleycwYgyLJKK*^Qu%2$18Gge0IfNB>TCe@W#!D&c9VBrX5 z?OT&aMu&z2h=bg-L8Yzm-b%o0RW$41Rm4EJw=k+7xZh?phvQ145v!do$A8tL+uwp( z)-miFqjjhx41|dU^{vK=N^gjKu4;V7P=oP!+ z6TNvct$fZG|AUv}08*ao%zv6+*>T&@9Gj?~TX}A(8X9fP+1YX&&8{XsJWo3onFHOB zj<{SDEf^n7Tq#|vz0L$W_MyQ6{C6R-521mudzO1&0tql^N$$>BhJ$0NcJx44BTWBL z2@Skg&Oq2b-Dtw_YB=TS1zP}UTHvv?z#R6Rfep*NW?2vACl?wBlYc4mOC#DSUTzbv zl_W;YV5hcu5O618)-LUX`>=}&41}vvN7MEG-G}mm^}Jegz%TR!K(sHv@fq|OpsQ0) zon|0RW{BlczW2GB@*D^Snt1Ot>MUGPYpR zVpz;;I{^^Q%Q+#(JY)Pr0+#Y#X~XAhOU(*k8GjL201fAbI399V9agI>ua42AvGz-i z6=l!Y83-%qR-hZjcu+lmS9W1G#r6$^>7I@B-3DiK+wE;|D4VPL4*_XY_lGn@Qvd(} M07*qoM6N<$g2!M_;s5{u delta 1797 zcmV+g2m1Jr4yq22Ie*+qL_t(|0qvZNaTGZahFOXLILH7pu}w$aBJhD}T*LMa9Xq%`{)!@YE|B z2&X=SGZ?>ta0Zh&^;a+uPJISvFn$B!3?^~vukd2(FR-ogYj=C3zRnfjXxDtE{5z%p zQe=a1E!rt}ZkeuHTmyUC#b9N13796V%VSW^uL-}Q6_x%tsIdd8Y#jMF>0KRo2y+7vj)Owus=1R z*9=Mnc7HAjmGvIr=kV<6MSJ>vOv=eWB($N~ZS+waqn}T-o&%xga&5O!4<>L~feS8j z{H;hH4*_f9d-eBO&nl=bybD)~_krkm^a0SIv7iQg{MI7S+za^fkNyb{^mjggr}RxO z4}2CkD+A33pu1IMZn$_+By-j6!vwd7#OC^;uYaS^m(sr#9Y!J=Je<47_&RZ#&}%Rb z;ZMa7e`Be@BAb^AM^_*ndT`o8XPwc@Bfid{HW&jYW1Ya+Z5Z1+^=8NG=OEU6#b#G+ zq2anPLHSoNMCSgJ<{>^q|1R3OqVp)IJ+veW&drtbXhlGNvk;MAmpK%R5P+qmGskE+ z2YM|bcyCq!cLw|WRYnTH->Xr)594kWr&3z%~06&MPu^)X~ zHe!w?ghgYAGa>5z&?u*pA13lzPnJyFoWc-Ra5hO&@0i7VQLCFJWchsMbr4g4lV51 zSig??cOUV)Y`ed>?>Mb-02bz#XMeVtR=qwHhxvfCxie~;HVPFDY>E+##n(};WxfxSiyNo4M9U2ZG4hqi))waq9D*>-n(X2Ipaes+G41^_8 zJMcPwnGu}hmp)%C6*I@hqC4D*GV5&Ys!i)qNf-zd3F=$TE{-!#7TorCABlW6ku`I? zDpmWtk5!p$lwz7N60cuuheLRdzR-rj=LNmm35pjV+PxyaFC4SAyK|yt1+|0E?8-B< z(8oU;`pjx$>P!a0WCjI*)_=eI2&@7Q{>A^`g$5uMIrc2M($B4z%59={?i4wJsA!?z zxjxMtM>DI54_fdh4!OfP2g9$S44 zX{^rz3!uSYNO%oxnOytR-9lEaSo@`$m9-n4QUwEH;cN+Xqii13&L4$Cm`$}q17W&m nBVW9k$Uwoi`^y;8{;~WI3vNnyOpACo00000NkvXXu0mjf=Qd#I diff --git a/docs/html/userhtml3x.png b/docs/html/userhtml3x.png index 55f1e95acce75afb501ae6250ccb38d9757bfb81..3676aa5341e9977553aa40e9c4a338e5a2093a5d 100644 GIT binary patch delta 1116 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 R7gGQL002ovPDHLkV1jD(+3NrR delta 1426 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 M07*qoM6N<$g7>idtpET3 diff --git a/docs/html/userhtml7x.png b/docs/html/userhtml7x.png index bc555490c50d1a625a2e33ba1a1a977fbbc3f082..a0d4d0d4f3b6d7ee9febce6cc9589c6ac95f3481 100644 GIT binary patch delta 2107 zcmV-B2*mf}5Zw@vIe!mHL_t(|0qvWOQ58uL#}A4CILrVuK#brp1HFsjGy^CjpfCe8 z0)-6lA`r|#GEiOy-2XRDZ}rZb-JSh-E?C=Dly_w?8F%+ABD`}_Mp=7z1Ut(Vea zC0#yu=_1-=(Oio5wu^QdU-y9gcP8wq{I^;k?T_gbyZ+MKIe$uW!R*~`7q$6ODRQJ) zUX&y`+KBF*9_QlQrN2OL5A2I$uQykQp(%F4@2g#@-Km{tSSLXh=0dP{_C%M(XHxi0 zljU;MjT%+l1N0v}VtJp%1KHRqp0{c*q!GpFW-86bjHV

VJ8@DI-u+3{6$_Py~`IQ+Ku zeIlCI8nOip-HqtpLl4ApcDhhC^?Zeogy$%T{FT~g;hJ_s4c9@u=uPnfo}!m<^ueP8 z`Xd);jDOwF;qWiIomyYA%t*coA#u*THT4Ms zbh{1*4~xXp!Ru)_Y8)Aj-jPxD4bM}+M-ES%bLGeUyT*_iXg$8|9eTB3UmM-fG0DDD zOKrst>}9+6KElYFF3_lv*q#pF5TgWtA^bPP>3^N1tohx>?5S~h(pZs9l^-JwHn2b$ z!=_4iy*I{=c?9Ue%R%hpbL3##o#|5Y6#b}N5Pz_DTPp@*>>RbHcaqa8BzO!C5NYYZ z5zQ*1dEhvcVIPUe2{dk1Ry5*at{*Ua5G|G9D&pAwJdY>k9r-x52%>D9Z}t`O^&~>y zLx0WTw{39fncB;agpDb1Jx5{~Ad4zm1I-aCwrEKtfJ*t7`8{CD{viRY>Kj?G0sV** z^M8tX9@*Hr@vt+%FWp$=6iZ@-P1Vli=(DdeUX$d)4l_uJO9>?qC{iW1@afiPS9%Ac zKY&-j)|}gl2o|g9qZ-?2`q9Z;7@xv5PJa{Ie^IQR8!^0K@G zkk<*1*-7GfNE4q}kO(0eq7M$$x7c`IdnZO*!9wGY7dBq<diDsDBt)ol<(~ z!6If0CK()%(uNpfKu?Pa8`!mf&bD)L&zhz`Qp78tfIOHjlE@TAEOJ@e)OJU=7fNn+qJf3vu_*7CT~{<`KFfi+QRs_4$swS4;B+aszA`p9^vj0!gOY zl@|D16CH-rs4OH*dOe0Q;2AfXaLwf9#WC*4o93bN!e5i`={1J(+<)$5Wi;W%Q(eh5 z(e%YjCILZbbh0Z(k`iCBb%Q4X?YKJ=!yU62jA)$uJ!bU7d+$0#EzyVCD>;K>m(D3!Yrhes zG;MwHH|B!b8;&mO%mtscZLv~^0Ov+3Pj8UZ!bfgz#)ZLqU`*`1oGIQrb7Ag8=iH8x zy@0bF3`*GQyw^*>LOg{B2E{I&IL31DEm&zT%$n#*R6bI;`hRQt7)gCYANqfD1CJFa z9~`Uk9~Ib!A3ThRU1}TOVBE|Ng`!-THPNvwR%QM-N>PAG2(hJqf-uxc4~9>E;71=m z&eE&Bsdc1!{+L2&-`M5mjCSXSI&p=$5bWL3M4bW`g3WtCLF3luKgDCr4=bBj^pVam zdqsbwe%plF?0;y>H^(MCE15eRlDmlQ?*V>j;p&ecR`^|mA8q)%@brf^NEYbnfu*AN zbl3*Tsp!{Aa;{tX<&ksrzS;s4cwjlBPvFF{BI5a+Ulh50;E$mOU$>3b<#**@D*D5S ztewv}rfm9eaUO=nzgUYU(SNbS8>S2A^H|9_r$2{Il{B8K)CDH+z>??_IB^0Ie0bV_ lRSVB}R$u;9VFKqO;(tX*aK}!wob3Pr002ovPDHLkV1oA+DAND{ delta 2113 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 Q&Hw-a07*qoM6N<$f;qV~N&o-= delta 1160 zcmV;31b6$W39$)~Ie%kGL_t(&1?`xNQ5!K3hB4y;9H#@*0ZBT54s6l^bO4hIGNc3O zAb}1-2O;hNcM#$Z$p0-`S=OC>XXh}N*gLb9v|8<3(#f5tr>DIg{CxyEoz9V@^c2rq zq-lJr=3e75uPu^s74?K+HOBVI1yPr_eL6yF#6nj5I$ ztM6ENCHkFO1Ip& z9)knX@ONsn>wo-c@g68ZD2XIkj7ivU;dkdrThV_C2ToI;>L>YXEQz!vVQxKRAxU<< zmthUMZ-m2Sj`irFHM;^YN=%pYR<+{Cz9_qjf7N+p3r~HW`q*5sQ8e=xJ^}t-3E4;< z?Js2iDqr zkn=T6uuC5$)827`#*ReZZDLQDvH*C0X&dx#Dx|WPu6c<`*+GmxC$fnfN$0KF7jlw) z6Rr*2u#)PXN^p8Kq700*!0XLG22unhn-LmvZE?ko!ZuA|Bgr1UBT$;ML1QBYRF6v_`{n*AWt3P&=cOwppQ8LQFQiP0_` z)_*)`Rh`L5md?6bPeE{$adf>J$kv|lCis9IABFdsL7a95;u{Ljg?u#ChJ88A(M6RI zC<6(hq5(c~*d_2da17>3*kO56NrXQ$xLZAe_v)j|5~Y5AuWHJmY&WxxBy&eo1o`fL zUYY%dqM#7nhKyq)L+k~K1wNC^K4U;MVt;NYkNWt@9R8gMYeP41Qo)xJMDj=i31fE= zRNjYavgjX*m-`c74bPBxbQtwH!D$dN&W>rd58}5stNIu}4nbEp0`ycbcMx|sh;F`! zYb6wk;=R^7o<^=0@+JXW`GU2i${wyOV(vvo3~l46rP#5TJk+{g#AndaV(&v$X9 z>06c1%4oEUfh&yX7RjuAs`wq+E?0Ke_?xxxM?+O;b_uPDQ2qJzCBQ1i{v@m~r9Nk= azCX+)f&`Ye;&1=}002ovPDHLkU;%=32rn@J diff --git a/docs/html/userhtml9x.png b/docs/html/userhtml9x.png index aaff2dea7b648a7b11112e431234b40a8c480565..dcf8438f3889affb89f4070915c4a26a9ca4782d 100644 GIT binary patch delta 1985 zcmV;y2R``d59AM!Ie(T(L_t(|0qvWOQ5-uA#{)wF_mU1s2PEl$bO51)qyv~#z(5C( z3KHlbbdZD&LI;m`9q|4?NAh^RK5oB`+a>22V_TMFS(4?CJ+>Ym9$suxe+_JHZS9N8 zO!~Zro7x{${8amv_NtS{JJ1+&jd#;_EYTi|=32COi)hz9zkfw?mEdEPb!g91s9q+Nc{}MEwrWoQzDoc=649NjxDX#?UX=3rwxF7riJ{eCwJ(-^yD!~axKzd%AAH)l}2r!O%Pa>*`J87ocByaUGyE!uL8Df^<~$a zUUKaAX40Gi*MFea*Qh4!r(mB=5NKk_apQc{0=^tbM1sl5K)m|0IeV%=ApIRGuj=h) z^!EAdf`CQlz79GHdd-E$z`=GfEd+S&i!XQRP3ozEsn};Hou`D}Q=7ZtZ-evFy{ICr*J z%E3Ve>v{)fytO3F0sS5+@7i2h#P5{RVeNHZ_#BDZnXw0RN5|<-4X+=-OUdXNgY+7m z2}T>fua(j5TxFWr5z$fj%8_Om`r5Kb-c`$1+@s zSyEqGwXryXr2LoC4TYfbnTLOef2lh9b6J41_(C#V+R+}?#iDQ?fZ%g)eR)9;In97? zMSssu4;@GUZ&^Q0?1e2lCCNThK30zN>BMM-M3OD~poYOmqfV`FD4(2!eRfRO>@Y0A zc)ye~SY+e~Gh8org+t&#VK<`vhYrE+Ri7I@%0|f{3ASfd=gE(0z;$@;w7@wg{Kbdk84xIF@(=^vBzt?;>OylhIh20ZsW^jGmwwY|@E(8nhyVIL0y9G~(R z<_{Q04pUofg5AjA;IrF6%R=Ubm0;jb3H=3=9U=wh>6s!VwWR*Bn?)YIm(SOG1 zo#5B1l8XRG5I{zb-CYv%%H?RqNA#{o=89gtUE+fSo(m_uo0Jfi!9*MNqj?iJ$-cua zBk$C2bMp6_MnOQb5e%_&o{;yu`rV(>eta#?FYRbj7p?Qee=9zk^sUS%kujBj-S*ir z0g%g&@YG4{n&|=#K>wpj@G$2OO@Ayj@*D40S)wn&AOT)k6eib9@LUGQ4FO9y9I4%) z0@suJPlU(Zkgu2X)VX(pEYd;FjQeDhgpQV_THryysUv0#Ixnz{&(fy(Q4LS>amwW3 za+R_?=1W8QNdDswRe$_ju2YvYrXu+O#@2nJ^tjz=;nh~qPfqaBfq zd!i@sTyYK~YUY6e1%%I9Ab*JuM=uhOhcQ5??oOTW_@x~aI*fo^B_o9aN`EYv5WswH zCA5{oY_8}tpKCtusQ}DBCebo?Uaiv;6Lr^L#8m~|kkLE+1b`SU1S6<3Mk!(6Jb0Jz zrVc|dTut%E1J!+Fah);0+)izMauW90VWvv#lKeso2PLt)vxtH7pnsMwaOyl*`J#q~ z&s(W;3KW8ZFS@zfI3l|b`M2=>zKe6;VhojO0-lb`J&LyoGGp@qiJXm-@GnKnG26#( zOgj+bqPbSsOU`r2i9J}X$cv6~Sag>rPGpr}VVyWHFaIGBKxh0s0Aep}Qc5h2-1$p* zlZI*jJklO1yDz2wyMM?|ZGCbQ_6b2i3h@P>8Wvb>kqH+ES?VOlGk4Hb(P1o%v0$9^ zeIelTNBE0gwIj}w3JYs3Y0+Fu!U(q#02km8)N1n)EepI7Fq-faFM>w;xLX?b*}$Ze zqAv+Ph);^oBOY%JPvA{eG2>QvCa*={z3yabL~P#J=82Y()?vQ>UM?7(L2B%`;_ zUl#<{?h?Zbz=@%<>vtJKfrO)OxN>!&hekZOCK5!Bl=&Y7t~B9FLVug208l$MwxJ&p z?&$3kt^*@d*hZ9=8qi|l_YZsq<(}Us81UFzJRUa{$rkQ&S-efB{V3iP?6V01kD9Pm zXa3Me`@R*2jylM4G#*R&e8~S1EPb!ZhY=kQhWSsFbF{V1FBhaidsMQH-9G;V1YO10 T5XAJ*00000NkvXXu0mjfIlIy4 delta 1989 zcmV;$2RiuV59kk&Ie(f-L_t(|0qvTNRUAhQ#|@7H2e(q(M73>)X5C<940Xdvm*^ku(}fqxsm|dVG9*v4Q>;*xK4U zl$2fB^9pIIztiJJ^;_zz2J8QY`nz7VFVpo>ybo=>>mFa5UVkkXa(Q= z&;Kq7SY{p|M%OPwW8pG#uoX-b0a=HV%NcqDJuNU5|LnwZO6ddDIU9aAJU88kwUx#K zek{!`&^h3CxnD@Xyi z@XMZo(Q7TBF)*%Um3q~qL}w&Z$GV0L6>#vf_yqKPZ@k?>y=aplMO=>vF) z&4hD%zZ4GJKBU&CA67(cl)iF2p?|J7*#VosRjI|O+o*3$PQyP60wymWX5a)H6O1}W z`bXu9(|^RL@ZVGjX6NT@O2W`1O?;kA+y*~&6%s?{GamZ>tnwzb!B0OtlU_zkC#f%| z?eY{4I%fG@c)HRcSB0&gj|-g}I;ws`yMVD~UG&ZvvrUYKPmI|ghJz>Coc2Z^-oMj( zU3A!%?LLXfeVg?SbkLBH(m4Dn+}!aw?GR7(hkw3#tc%F(qN`|CD@LmSE9pWqz^-|M3eUDN!Y8X7gz=IP z<52(-oS3JY-Bx z!atq_*y^PK30`~4JH`sQ^eWu791cCJ4ZKX`^k)^ddEmj{NGz(86mUSI@n^v2$$u^! zKtPp&j|}8`KhU*;^dhm41kjOf_cFkQD)m@Mj`)3SuK$c(gFq(Xg?Q2(OTc%24gHar zkw-w1uvZ4^lQH@IO{XLv-PkeU=MqSkU({anGqL9OEcxcv#p^PO-$smvHjmY^pWZQv zf>Hl<`)5ZAU~HhAAgr3LtE~pX#ebY%G%?XAzo|IX_-i=m!8ay_=|$j{I?!*Ku!O3E z^gNX;wtnc>D|qTXER1clK`Dsy=sX~pvC%x3Nj%s$24W$g4E&;bxT?j`j6mtfE|ZJP zRqFDiSQ;WGC*hxM8T#HlP#T-S@v}QCX#zRt+$L43%SoJTYpW#5n4E-vcK#b%S|$0176Hn{WsRNheANN)v0u(n+(l66n=c8ali+Iw(O-y{ zZMOH_O1q+lwy`$4lb#=?C;nivqAxb)E(QBVV6rxng*9RqZvImufY0Q40>obrMq55O zCM;yvQot1I8Y7pq$A2mwOEG@i{IqCHPQpJa3CJK!!1A^joPWZ~ezgFZ8zd&P4A5xk zBok+}^b_wFV*jO{xvk@i?{Yel4@cHE)>;puZ6v@J8j{+~c*M&DZzPN^@+6C-G1s>> zU8abWO{%dZ{2(zYIg{|u_7t7hM`s+p&E&!Jb&s9A$J)WALOfYcesq4 zb@PngKYkoox1l!uFK+>M41cNgN^VLdY<1I-i{~;R8Jx3^RXAhssm?Bie~d1?yAaRJ zu2Hh42&4DUCJ9V2tb)#(Ed2k0&!C+18%KaZ*5#EQKy`cEg&7)~xJ=%;N13iNr%pEo z|7?=La8XuXv_4V4A5MI`Bn29mrF;qCZ@~+%y5i$J}OO0tk00000NkvXXu0mjfTG89g diff --git a/docs/html/userhtmlse8.html b/docs/html/userhtmlse8.html index 504703f8..775422c8 100644 --- a/docs/html/userhtmlse8.html +++ b/docs/html/userhtmlse8.html @@ -70,264 +70,254 @@ explicitly.

subroutine psb_foo(some args, info) 
subroutine psb_foo(some args, info) 
   ... 
   ... 
   if(error detected) then 
   if(error detected) then 
      info=errcode1 
      info=errcode1 
      call psb_errpush(psb_foo, errcode1) 
      call psb_errpush(psb_foo, errcode1) 
      goto 9999 
      goto 9999 
   end if 
   end if 
   ... 
   ... 
   call psb_bar(some args, info) 
   call psb_bar(some args, info) 
   if(info .ne. zero) then 
   if(info .ne. zero) then 
      info=errcode2 
      info=errcode2 
      call psb_errpush(psb_foo, errcode2) 
      call psb_errpush(psb_foo, errcode2) 
      goto 9999 
      goto 9999 
   end if 
   end if 
   ... 
   ... 
9999 continue 
9999 continue 
   if (err_act .eq. act_abort) then 
   if (err_act .eq. act_abort) then 
     call psb_error(icontxt) 
     call psb_error(icontxt) 
     return 
     return 
   else 
   else 
     return 
     return 
   end if 
   end if 
 
 
end subroutine psb_foo +class="cmtt-9">end subroutine psb_foo

Notes possible to improve the runtime efficiency by using the following scheme:
    vres(1) = psb_gedot(x1,y1,desc_a,info,global=.false.) 
    vres(2) = psb_gedot(x2,y2,desc_a,info,global=.false.) 
    vres(3) = psb_gedot(x3,y3,desc_a,info,global=.false.) 
    call psb_sum(ictxt,vres(1:3)) + id="x20-57004r1">   vres(1) = psb_gedot(x1,y1,desc_a,info,global=.false.) 
   vres(2) = psb_gedot(x2,y2,desc_a,info,global=.false.) 
   vres(3) = psb_gedot(x3,y3,desc_a,info,global=.false.) 
   call psb_sum(ictxt,vres(1:3))

In this way the global communication, which for small sizes is a latency-bound diff --git a/docs/html/userhtmlsu13.html b/docs/html/userhtmlsu13.html index db09267b..0cb73107 100644 --- a/docs/html/userhtmlsu13.html +++ b/docs/html/userhtmlsu13.html @@ -194,14 +194,84 @@ class="cmbx-12">Notes multiple norms at the same time; in this case, it is possible to improve the runtime efficiency by using the following scheme:

    vres(1) = psb_geamax(x1,desc_a,info,global=.false.) 
    vres(2) = psb_geamax(x2,desc_a,info,global=.false.) 
    vres(3) = psb_geamax(x3,desc_a,info,global=.false.) 
    call psb_amx(ictxt,vres(1:3)) + id="x22-59004r1">   vres(1) = psb_geamax(x1,desc_a,info,global=.false.) 
   vres(2) = psb_geamax(x2,desc_a,info,global=.false.) 
   vres(3) = psb_geamax(x3,desc_a,info,global=.false.) 
   call psb_amx(ictxt,vres(1:3))

In this way the global communication, which for small sizes is a latency-bound diff --git a/docs/html/userhtmlsu15.html b/docs/html/userhtmlsu15.html index 61096aa2..55c54a24 100644 --- a/docs/html/userhtmlsu15.html +++ b/docs/html/userhtmlsu15.html @@ -195,14 +195,84 @@ class="cmbx-12">Notes multiple norms at the same time; in this case, it is possible to improve the runtime efficiency by using the following scheme:

    vres(1) = psb_geasum(x1,desc_a,info,global=.false.) 
    vres(2) = psb_geasum(x2,desc_a,info,global=.false.) 
    vres(3) = psb_geasum(x3,desc_a,info,global=.false.) 
    call psb_sum(ictxt,vres(1:3)) + id="x24-61004r1">   vres(1) = psb_geasum(x1,desc_a,info,global=.false.) 
   vres(2) = psb_geasum(x2,desc_a,info,global=.false.) 
   vres(3) = psb_geasum(x3,desc_a,info,global=.false.) 
   call psb_sum(ictxt,vres(1:3))

In this way the global communication, which for small sizes is a latency-bound diff --git a/docs/html/userhtmlsu17.html b/docs/html/userhtmlsu17.html index f040eafb..44716f08 100644 --- a/docs/html/userhtmlsu17.html +++ b/docs/html/userhtmlsu17.html @@ -198,14 +198,84 @@ class="cmbx-12">Notes multiple norms at the same time; in this case, it is possible to improve the runtime efficiency by using the following scheme:

    vres(1) = psb_genrm2(x1,desc_a,info,global=.false.) 
    vres(2) = psb_genrm2(x2,desc_a,info,global=.false.) 
    vres(3) = psb_genrm2(x3,desc_a,info,global=.false.) 
    call psb_nrm2(ictxt,vres(1:3)) + id="x26-63004r1">   vres(1) = psb_genrm2(x1,desc_a,info,global=.false.) 
   vres(2) = psb_genrm2(x2,desc_a,info,global=.false.) 
   vres(3) = psb_genrm2(x3,desc_a,info,global=.false.) 
   call psb_nrm2(ictxt,vres(1:3))

In this way the global communication, which for small sizes is a latency-bound diff --git a/docs/html/userhtmlsu26.html b/docs/html/userhtmlsu26.html index 2287390e..d5fe2035 100644 --- a/docs/html/userhtmlsu26.html +++ b/docs/html/userhtmlsu26.html @@ -87,10 +87,38 @@ class="content">Data types

call psb_halo(x, desc_a, info) 
call psb_halo(x, desc_a, info) 
call psb_halo(x, desc_a, info, work, data) +class="cmtt-10">call psb_halo(x, desc_a, info, work, data)
diff --git a/docs/html/userhtmlsu27.html b/docs/html/userhtmlsu27.html index 2bb4e849..f0fe399b 100644 --- a/docs/html/userhtmlsu27.html +++ b/docs/html/userhtmlsu27.html @@ -92,9 +92,42 @@ class="content">Data types
call psb_ovrl(x, desc_a, info) 
call psb_ovrl(x, desc_a, info) 
call psb_ovrl(x, desc_a, info, update=update_type, work=work) +class="cmtt-10">call psb_ovrl(x, desc_a, info, update=update_type, work=work)
diff --git a/docs/html/userhtmlsu28.html b/docs/html/userhtmlsu28.html index 45fa580e..513f7e28 100644 --- a/docs/html/userhtmlsu28.html +++ b/docs/html/userhtmlsu28.html @@ -109,9 +109,44 @@ class="content">Data types
call psb_gather(glob_x, loc_x, desc_a, info, root) 
call psb_gather(glob_x, loc_x, desc_a, info, root) 
call psb_gather(glob_x, loc_x, desc_a, info, root) +class="cmtt-10">call psb_gather(glob_x, loc_x, desc_a, info, root)
diff --git a/docs/html/userhtmlsu29.html b/docs/html/userhtmlsu29.html index 7186e307..baeee944 100644 --- a/docs/html/userhtmlsu29.html +++ b/docs/html/userhtmlsu29.html @@ -108,7 +108,27 @@ class="content">Data types
call psb_scatter(glob_x, loc_x, desc_a, info, root, mold) +class="cmtt-10">call psb_scatter(glob_x, loc_x, desc_a, info, root, mold)
diff --git a/docs/html/userhtmlsu6.html b/docs/html/userhtmlsu6.html index 18b94c13..f0ba830f 100644 --- a/docs/html/userhtmlsu6.html +++ b/docs/html/userhtmlsu6.html @@ -45,8 +45,14 @@ class="description">Single precision complex;
Z
Double precision complex.
-

The actual data is contained in the polymorphic component Double precision complex; +

+LS,LD,LC,LZ
Same numeric type as above, but with psb_lpk_ integer + indices.
+

The actual data is contained in the polymorphic component a%a of type psb_spasb routine.


-

+

  type :: psb_Tspmat_type  
    class(psb_T_base_sparse_mat), allocatable  :: a  
  end type  psb_Tspmat_type
-

+


Figure 4: The PSBLAS defined data type that contains a sparse matrix.
-


-

The following very common formats are precompiled in PSBLAS and thus are +


+

The following very common formats are precompiled in PSBLAS and thus are always available:

_coo_sparse_mat
Coordinate storage; + + +
psb_csc_sparse_mat
Compressed storage by columns;
- - - -

The inner sparse matrix has an associated state, which can take the following +

The inner sparse matrix has an associated state, which can take the following values:

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.
-

The only storage variant supporting the build state is COO; all other variants are +

The only storage variant supporting the build state is COO; all other variants are obtained by conversion to/from it. -

+

3.2.1 Sparse Matrix Methods
-

+

3.2.2 get_nrows — Get number of rows in a sparse matrix
@@ -135,8 +141,8 @@ obtained by conversion to/from it.
nr = a%get_nrows()
-

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
class="cmbx-10">Function value
The number of rows of sparse matrix a.
-

+

3.2.3 get_ncols — Get number of columns in a sparse matrix
@@ -171,8 +177,8 @@ class="cmtt-10">a.
nc = a%get_ncols()
-

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
class="cmbx-10">Function value
The number of columns of sparse matrix a.
-

+

3.2.4 get_nnzeros — Get number of nonzero elements in a sparse matrix
@@ -207,8 +213,8 @@ class="cmtt-10">a.
nz = a%get_nnzeros()
-

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
class="cmbx-10">Function value
The number of nonzero elements stored in sparse matrix a.
-

Notes

  1. Notes class="cmtt-10">a; some storage formats employ padding, thus the returned value for the same matrix may be different for different storage choices.
-

+

3.2.5 get_size — Get maximum number of nonzero elements in a sparse matrix
@@ -252,8 +258,8 @@ matrix
maxnz = a%get_size()
-

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
Function value
The maximum number of nonzero elements that can be stored in sparse matrix a using its current memory allocation.
-

+

3.2.6 sizeof — Get memory occupation in bytes of a sparse matrix
@@ -289,8 +295,8 @@ class="cmtt-10">a using its current memory allocation.
memory_size = a%sizeof()
-

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
Function value
The memory occupation in bytes.
-

+

3.2.7 get_fmt — Short description of the dynamic type
@@ -324,8 +330,8 @@ class="description">The memory occupation in bytes.
write(*,*) a%get_fmt()
-

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
NULL, COO, CSR and CSC.
-

+

3.2.8 is_bld, is_upd, is_asb — Status check
@@ -366,8 +372,8 @@ if (a%is_bld()) then  
if (a%is_upd()) then  
if (a%is_asb()) then -

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
Function value
A logical value indicating whether the matrix is in the Build, Update or Assembled state, respectively.
-

+

3.2.9 is_lower, is_upper, is_triangle, is_unit — Format check
@@ -406,8 +412,8 @@ if (a%is_triangle()) then  
if (a%is_lower()) then  
if (a%is_unit()) then -

-

+

+

Type:
the sparse matrix
Scope: local
-

+

On Return
logical value indicating whether the matrix class="cmtt-10">is_triangle() returns .true. check also if it is lower, upper and with a unit (i.e. assumed) diagonal.
-

+

3.2.10 cscnv — Convert to a different storage format
@@ -447,8 +453,8 @@ class="cmtt-10">.true. check also if it is lower, upper and call  a%cscnv(b,info [, type, mold, dupl])  
call  a%cscnv(info [, type, mold, dupl]) -

-

+

+

Type:
Type: optional. class="cmbx-10">dupl
an integer value specifing how to handle duplicates (see Named Constants below)
-

+

On Return
psb_Tspmat_type. info
Return code.
-

The

The mold arguments may be employed to interface with special devices, such as GPUs and other accelerators. -

+

3.2.11 csclip — Reduce to a submatrix
@@ -511,8 +517,8 @@ and other accelerators.     call a%csclip(b,info[,&  
       & imin,imax,jmin,jmax,rscale,cscale]) -

-

Returns the submatrix

+

Returns the submatrix A(imin:imax,jmin:jmax), optionally rescaling row/col indices to the range 1:imax-imin+1,1:jmax-jmin+1. @@ -542,7 +548,7 @@ class="newline" />Type: optional. rscale,cscale

Whether to rescale row/column indices. Type: optional.
-

+

On Return
psb_Tspmat_type. info
Return code.
-

+

3.2.12 clean_zeros — Eliminate zero coefficients
@@ -567,11 +573,11 @@ class="description">Return code.
    call a%clean_zeros(info)
-

-

Eliminates zero coefficients in the input matrix. Note that depending on the +

+

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. -

+

Type:
psb_Tspmat_type.
Scope: local.
-

+

On Return
psb_Tspmat_type. info
Return code.
-

+

3.2.13 get_diag — Get main diagonal
@@ -614,8 +620,8 @@ class="description">Return code.
    call a%get_diag(d,info)
-

-

Returns a copy of the main diagonal. +

+

Returns a copy of the main diagonal.

Type:
psb_Tspmat_type.
Scope: local.
-

+

On Return
A one-dimensional array of the appropriate type. info
Return code.
-

+

3.2.14 clip_diag — Cut out main diagonal
@@ -656,8 +662,8 @@ class="description">Return code.
    call a%clip_diag(b,info)
-

-

Returns a copy of

+

Returns a copy of a without the main diagonal.

psb_Tspmat_type.
Scope: local.
-

+

On Return
psb_Tspmat_type. info
Return code.
-

+

3.2.15 tril — Return the lower triangle
@@ -702,8 +708,8 @@ class="description">Return code.     call a%tril(l,info[,&  
       & diag,imin,imax,jmin,jmax,rscale,cscale,u]) -

-

Returns the lower triangular part of submatrix

+

Returns the lower triangular part of submatrix A(imin:imax,jmin:jmax), optionally rescaling row/col indices to the range 1:imax-imin+1,1:jmax-jmin+1 and @@ -741,7 +747,7 @@ class="newline" />Type: optional. rscale,cscale

Whether to rescale row/column indices. Type: optional.
-

+

On Return
psb_Tspmat_type. info
Return code.
-

+

3.2.16 triu — Return the upper triangle
@@ -774,8 +780,8 @@ class="description">Return code.     call a%triu(u,info[,&  
       & diag,imin,imax,jmin,jmax,rscale,cscale,l]) -

-

Returns the upper triangular part of submatrix

+

Returns the upper triangular part of submatrix A(imin:imax,jmin:jmax), optionally rescaling row/col indices to the range 1:imax-imin+1,1:jmax-jmin+1, @@ -813,7 +819,7 @@ class="newline" />Type: optional. rscale,cscale

Whether to rescale row/column indices. Type: optional.
-

+

On Return
psb_Tspmat_type. info
Return code.
-

+

3.2.17 psb_set_mat_default — Set default storage format
@@ -845,8 +851,8 @@ class="description">Return code.
call  psb_set_mat_default(a)
-

-

+

+

Type:
a variable of class(psb_T_base_sparse_mat) requesting a new default storage format.
Type: required.
-

+

3.2.18 clone — Clone current object
@@ -871,8 +877,8 @@ class="newline" />Type: required.
call  a%clone(b,info)
-

-

+

+

Type:
the sparse matrix.
Scope: local.
-

+

On Return
A copy of the input object. info
Return code.
-

+

3.2.19 Named Constants
-

+

psbUpdate strategy based on additional permutation data (see -
Double precision complex.
-

The actual data is contained in the polymorphic component

The actual data is contained in the polymorphic component v%v; 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">

-

+

  type psb_T_base_vect_type  
    TYPE(KIND_), allocatable :: v(:) @@ -81,18 +81,18 @@ compiler/application, e.g. data stored in a graphics accelerator’s private  
  end type  psb_T_vect_type  
-

+


Figure 5: The PSBLAS defined data type that contains a dense vector.
-


-

+


+

3.3.1 Vector Methods
-

+

3.3.2 get_nrows — Get number of rows in a dense vector
@@ -101,8 +101,8 @@ class="content"> The PSBLAS defined data type that contains a dense vector. nr = v%get_nrows() -

-

+

+

Type:
the dense vector
Scope: local
-

+

On Return
class="cmbx-10">Function value
The number of rows of dense vector v.
-

+

3.3.3 sizeof — Get memory occupation in bytes of a dense vector
@@ -137,8 +137,8 @@ class="cmtt-10">v.
memory_size = v%sizeof()
-

-

+

+

Type:
the dense vector
Scope: local
-

+

On Return
Function value
The memory occupation in bytes.
-

+

3.3.4 set — Set contents of the vector
@@ -174,8 +174,8 @@ class="description">The memory occupation in bytes.  
 call  v%set(vect[,first,last])  
 call  v%zero() -

-

+

+

Type:
Intent: in.
Specified as: a number of the data type indicated in Table 1.
-

Note that a call to

Note that a call to v%zero() is provided as a shorthand, but is equivalent to a call to v%set(zero) with the zero constant having the appropriate type and kind. -

+

On Return
-

+

3.3.5 get_vect — Get a copy of the vector contents
@@ -256,8 +256,8 @@ class="newline" />
extv = v%get_vect([n])
-

-

+

+

Type:
Type: optional; default: entire vector.
-

+

On Return
n and the internal size of the vector, or 0 if n is negative; otherwise, the size of the array is the same as the internal size of the vector.
-

+

3.3.6 clone — Clone current object
@@ -308,8 +308,8 @@ class="cmmi-10">n is negative; otherwise, the size of the array is the sa
call  x%clone(y,info)
-

-

+

+

Type:
the dense vector.
Scope: local.
-

+

On Return
Return code.
-
call psb_errpush(err_c, r_name, i_err, a_err) +class="cmtt-10">call psb_errpush(err_c, r_name, i_err, a_err)

diff --git a/docs/html/userhtmlsu75.html b/docs/html/userhtmlsu75.html index b4726464..1b0b6bcd 100644 --- a/docs/html/userhtmlsu75.html +++ b/docs/html/userhtmlsu75.html @@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlse9.html" >up]

call psb_error(icontxt) +class="cmtt-10">call psb_error(icontxt)

diff --git a/docs/html/userhtmlsu76.html b/docs/html/userhtmlsu76.html index 218404fa..6ae8a04e 100644 --- a/docs/html/userhtmlsu76.html +++ b/docs/html/userhtmlsu76.html @@ -21,7 +21,12 @@ href="userhtmlsu76.html#userhtmlsu78.html" >up]

call psb_set_errverbosity(v) +class="cmtt-10">call psb_set_errverbosity(v)

diff --git a/docs/html/userhtmlsu77.html b/docs/html/userhtmlsu77.html index e1e62e1b..e3002b2c 100644 --- a/docs/html/userhtmlsu77.html +++ b/docs/html/userhtmlsu77.html @@ -21,7 +21,12 @@ condition

call psb_set_erraction(err_act) +class="cmtt-10">call psb_set_erraction(err_act)

diff --git a/docs/html/userhtmlsu78.html b/docs/html/userhtmlsu78.html index d7e6fd9f..d793b344 100644 --- a/docs/html/userhtmlsu78.html +++ b/docs/html/userhtmlsu78.html @@ -21,7 +21,27 @@ format

call hb_read(a, iret, iunit, filename, b, mtitle) +class="cmtt-10">call hb_read(a, iret, iunit, filename, b, mtitle)

diff --git a/docs/html/userhtmlsu79.html b/docs/html/userhtmlsu79.html index 47418d21..55d166d1 100644 --- a/docs/html/userhtmlsu79.html +++ b/docs/html/userhtmlsu79.html @@ -22,7 +22,30 @@ format

call hb_write(a, iret, iunit, filename, key, rhs, mtitle) +class="cmtt-10">call hb_write(a, iret, iunit, filename, key, rhs, mtitle)

diff --git a/docs/html/userhtmlsu8.html b/docs/html/userhtmlsu8.html index 5c0ff71c..5a02be22 100644 --- a/docs/html/userhtmlsu8.html +++ b/docs/html/userhtmlsu8.html @@ -10,7 +10,7 @@ -


Figure 6: The PSBLAS defined data type that contains a preconditioner.
-


+


-