arpackmm: add --dense option. (#194)
This commit is contained in:
committed by
Sylvestre Ledru
parent
8fe4734da8
commit
6615574e37
+2
-2
@@ -53,8 +53,8 @@ EXAMPLES/SIMPLE/[sdcz]nsimp
|
||||
EXAMPLES/SVD/[sd]svd
|
||||
EXAMPLES/SYM/[sd]sdrv[123456]
|
||||
EXAMPLES/MATRIX_MARKET/arpackmm
|
||||
EXAMPLES/MATRIX_MARKET/resid.out
|
||||
EXAMPLES/MATRIX_MARKET/v.out
|
||||
EXAMPLES/MATRIX_MARKET/arpackmm.resid.out
|
||||
EXAMPLES/MATRIX_MARKET/arpackmm.v.out
|
||||
PARPACK/EXAMPLES/MPI/p[sd]ndrv[13]
|
||||
PARPACK/EXAMPLES/MPI/p[sd]sdrv1
|
||||
PARPACK/EXAMPLES/MPI/p[cz]ndrv1
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* arpackmm: add --slvItrPC option (PC: Jacobi, ILU).
|
||||
* arpackmm: add --slv LLT LDLT (for SPD matrices).
|
||||
* arpackmm: add --simplePrec option (to enable use of s*upd).
|
||||
|
||||
* arpackmm: add --dense option.
|
||||
|
||||
arpack-ng - 3.7.0
|
||||
|
||||
|
||||
+24
-4
@@ -81,14 +81,34 @@ if (ICBEXMM)
|
||||
if (NOT EIGEN3_ITERATIVE_SOLVER_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/IterativeLinearSolvers header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_SLU_SOLVER_DIR NAMES SparseLU PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_SLU_SOLVER_DIR)
|
||||
find_path(EIGEN3_SPARSELU_SOLVER_DIR NAMES SparseLU PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_SPARSELU_SOLVER_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/SparseLU header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_SQR_SOLVER_DIR NAMES SparseQR PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_SQR_SOLVER_DIR)
|
||||
find_path(EIGEN3_SPARSEQR_SOLVER_DIR NAMES SparseQR PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_SPARSEQR_SOLVER_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/SparseQR header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_SPARSECHOLESKY_SOLVER_DIR NAMES SparseCholesky PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_SPARSECHOLESKY_SOLVER_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/SparseCholesky header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_DENSE_DIR NAMES Dense PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_DENSE_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/Dense header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_DENSELU_DIR NAMES LU PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_DENSELU_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/LU header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_DENSEQR_DIR NAMES QR PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_DENSEQR_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/QR header not found.")
|
||||
endif ()
|
||||
find_path(EIGEN3_DENSECHOLESKY_DIR NAMES Cholesky PATHS ${EIGEN3_INCLUDE_DIRS} PATH_SUFFIXES Eigen)
|
||||
if (NOT EIGEN3_DENSECHOLESKY_DIR)
|
||||
message(FATAL_ERROR "-- Eigen/Cholesky header not found.")
|
||||
endif ()
|
||||
|
||||
set(ICB "ON")
|
||||
endif ()
|
||||
|
||||
@@ -11,4 +11,4 @@ TESTS = arpackmm.sh
|
||||
|
||||
arpackmm_SOURCES = arpackmm.cpp
|
||||
|
||||
CLEANFILES = resid.out v.out
|
||||
CLEANFILES = arpackmm.resid.out arpackmm.v.out
|
||||
|
||||
+481
-322
File diff suppressed because it is too large
Load Diff
@@ -34,48 +34,57 @@ do
|
||||
do
|
||||
for tol in "" "--tol 1.e-5"
|
||||
do
|
||||
for slv in " --slvItrTol 1.e-07 --slvItrMaxIt 150" "--slv CG --slvItrTol 1.e-07 --slvItrMaxIt 150" \
|
||||
" --slvItrPC ILU" "--slv CG --slvItrPC ILU#1.e-06#2" \
|
||||
for slv in "--slv BiCG --slvItrTol 1.e-07 --slvItrMaxIt 150" "--slv CG --slvItrTol 1.e-07 --slvItrMaxIt 150" \
|
||||
"--slv BiCG --slvItrPC ILU" "--slv CG --slvItrPC ILU#1.e-06#2" \
|
||||
"--slv LU" "--slv QR#1.e-06" \
|
||||
"--slv LLT" "--slv LLT#0.#1." \
|
||||
"--slv LDLT" "--slv LDLT#0.#1."
|
||||
do
|
||||
for rs in "" "--schur"
|
||||
do
|
||||
for ds in "" "--simplePrec"
|
||||
for dsPrec in "" "--simplePrec"
|
||||
do
|
||||
export extraGenPb=""
|
||||
if [[ "$genPb" == *genPb* ]]; then
|
||||
export extraGenPb="$shiftOpt" # Force shift if genPb.
|
||||
fi
|
||||
|
||||
if [[ "$slv" == *CG* ]]; then
|
||||
if [[ "$eigPb" == *nonSymPb* ]]; then
|
||||
continue # Skip CG that could fail (CG is meant to deal with sym matrices).
|
||||
for dsMat in "" "--dense false" "--dense true"
|
||||
do
|
||||
export extraGenPb=""
|
||||
if [[ "$genPb" == *genPb* ]]; then
|
||||
export extraGenPb="$shiftOpt" # Force shift if genPb.
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$slv" == *LLT* ]] || [[ "$slv" == *LDLT* ]]; then
|
||||
if [[ "$eigPb" == *nonSymPb* ]] || [[ "$genPb" == *genPb* ]]; then
|
||||
continue # Skip LLT/LDLT that could fail (LLT/LDLT are meant to deal with SPD matrices).
|
||||
if [[ "$slv" == *CG* ]]; then
|
||||
if [[ "$eigPb" == *nonSymPb* ]]; then
|
||||
continue # Skip CG that could fail (CG is meant to deal with sym matrices).
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run arpackmm: use --nbCV 6 to ease convergence, and, --verbose 3 for debug.
|
||||
export CMD="./arpackmm $eigPb $genPb $smallMag $shiftRI $invert $tol $slv $rs $ds $extraGenPb --nbCV 6 --verbose 3 --debug 3"
|
||||
echo "$CMD"
|
||||
eval "$CMD &> arpackmm.run.log"
|
||||
echo ""
|
||||
echo "========================================================================================"
|
||||
echo ""
|
||||
if [[ "$slv" == *LLT* ]] || [[ "$slv" == *LDLT* ]]; then
|
||||
if [[ "$eigPb" == *nonSymPb* ]] || [[ "$genPb" == *genPb* ]]; then
|
||||
continue # Skip LLT/LDLT that could fail (LLT/LDLT are meant to deal with SPD matrices).
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run arpackmm: re-run with restart.
|
||||
export CMD="$CMD --restart"
|
||||
echo "$CMD"
|
||||
eval "$CMD &> arpackmm.run.log"
|
||||
echo ""
|
||||
echo "========================================================================================"
|
||||
echo ""
|
||||
if [[ "$dsMat" == *dense* ]]; then
|
||||
if [[ "$slv" == *CG* ]]; then
|
||||
continue # Iterative solvers are not allowed when using dense matrices.
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run arpackmm: use --nbCV 6 to ease convergence, and, --verbose 3 for debug.
|
||||
export CMD="./arpackmm $eigPb $genPb $smallMag $shiftRI $invert $tol $slv $rs $dsPrec $dsMat $extraGenPb --nbCV 6 --verbose 3 --debug 3"
|
||||
echo "$CMD"
|
||||
eval "$CMD &> arpackmm.run.log"
|
||||
echo ""
|
||||
echo "========================================================================================"
|
||||
echo ""
|
||||
|
||||
# Run arpackmm: re-run with restart.
|
||||
export CMD="$CMD --restart"
|
||||
echo "$CMD"
|
||||
eval "$CMD &> arpackmm.run.log"
|
||||
echo ""
|
||||
echo "========================================================================================"
|
||||
echo ""
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
@@ -93,6 +93,21 @@ if test x"$enable_icb_exmm" != x"no"; then
|
||||
AC_CHECK_HEADER([Eigen/SparseQR],
|
||||
[],
|
||||
[AC_MSG_ERROR([Eigen/SparseQR not found])])
|
||||
AC_CHECK_HEADER([Eigen/SparseCholesky],
|
||||
[],
|
||||
[AC_MSG_ERROR([Eigen/SparseCholesky not found])])
|
||||
AC_CHECK_HEADER([Eigen/Dense],
|
||||
[],
|
||||
[AC_MSG_ERROR([Eigen/Dense not found])])
|
||||
AC_CHECK_HEADER([Eigen/LU],
|
||||
[],
|
||||
[AC_MSG_ERROR([Eigen/LU not found])])
|
||||
AC_CHECK_HEADER([Eigen/QR],
|
||||
[],
|
||||
[AC_MSG_ERROR([Eigen/QR not found])])
|
||||
AC_CHECK_HEADER([Eigen/Cholesky],
|
||||
[],
|
||||
[AC_MSG_ERROR([Eigen/Cholesky not found])])
|
||||
CPPFLAGS=$CPPFLAGS_SAVE
|
||||
AC_LANG_POP([C++])
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user