Thir PR adds a factorized sparse approximate inverse (FSAI) implementation on hypre, which can be used as a standalone solver, preconditioner to Krylov methods, or complex smoother to BoomerAMG. Particularly, we consider the adaptive algorithm version, where the sparsity pattern of the lower triangular factor G is built dynamically, i.e., during an iterative procedure that tries to find the best nonzero positions for a given row of G. This implementation was performed on top of the IJ interface. It uses the diagonal portion of A for constructing G, i.e., it's a block-Jacobi method in the MPI sense. List of additional changes:
* Add caliper instrumentation to FSAI.
* Add ZeroGuess option to FSAI.
* Performance optimizations.
* Add OpenMP support to FSAI.
* Make internal BLAS/LAPACK functions thread-safe.
* Update CMake build.
* Add new test cases: beam_tet_dof459_np1, beam_hex_dof459_np2, and beam_tet_dof2475_np4.
* Add documentation for FSAI.
Co-authored-by: Heather Switzer <switzer4@lassen36.coral.llnl.gov>
Co-authored-by: heatherms27 <hmswitzer@email.wm.edu>
Co-authored-by: Sarah Osborn <30503782+osborn9@users.noreply.github.com>
# Copyright 1998-2019 Lawrence Livermore National Security, LLC and other
# HYPRE Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
This directory contains scripts for running various tests on the hypre library.
The scripts augment the 'runtest.sh' runtime tests in 'test/TEST_*'.
Every test in this directory may be run manually by developers. Many of the
scripts are also run as part of the nightly regression testing, currently
developed and maintained in a separate git repository called 'hypre/autotest'.
=====================
Organization:
This directory mainly consists of a number of simple Bourne-shell scripts (the
files with a '.sh' extension). Except for a few "special scripts" (below), each
represents an individual test written by a hypre developer. The special scripts
are as follows (note that they are the only scripts with "test" in their names):
1. 'test.sh' - Used to run individual tests.
2. 'cleantest.sh' - Used to clean up the output from a test (or tests).
3. 'renametest.sh' - Used to rename the output from a test.
Usage information for every script (special or individual test) can be obtained
by running it with the '-h' option (e.g., 'test.sh -h' or 'make.sh -h').
=====================
Writing tests:
The rules for writing tests are given in the 'test.sh -h' usage information.
When writing tests, keep in mind the design goals below, especially with respect
to simplicity, flexibility, and portability.
To write a new test, just use an existing test (e.g., 'default.sh') as a
template and make the appropriate modifications. Try not to use the word "test"
in the name of the script so that we can keep the convention of only the special
scripts having this in their names. Try not to use absolute directory paths in
the script.
=====================
Design goals:
- Minimal limitations on the types of tests that are possible.
- Developers should be able to run the tests manually.
- Minimal dependence on operating system and software tools (for portability).
- Developers should be able to easily add new tests.
- Simplicity and flexibility.