Files
arpack-ng/EXAMPLES/MATRIX_MARKET/arpackmm.sh
T

72 lines
2.5 KiB
Bash
Executable File

#!/bin/bash -eu
for eigPb in "--A As.mtx" "--nonSymPb --A An.mtx" "--nonSymPb --cpxPb --A Az.mtx --B Bz.mtx"
do
for genPb in "" "--genPb"
do
for smallMag in "" "--mag SM --noCheck" # SM is known to be difficult to converge.
do
export shiftOpt=""
if [[ "$eigPb" == *nonSymPb* ]]; then
if [[ "$genPb" == *genPb* ]]; then
export shiftOpt="--shiftReal 2.5 --shiftImag 2.5 --tol 0.5" # Relax tolerance, tricky to converge.
else
export shiftOpt="--shiftReal 100.0 --shiftImag 100.0"
fi
else
if [[ "$genPb" == *genPb* ]]; then
export shiftOpt="--shiftReal 50.0"
else
export shiftOpt="--shiftReal 100.0"
fi
fi
for shiftRI in "" "$shiftOpt"
do
for invert in "" "--invert"
do
for tol in "" "--tol 1.e-5"
do
for slv in " --slvItrTol 1.e-06 --slvItrMaxIt 100" "--slv CG --slvItrTol 1.e-06 --slvItrMaxIt 100" \
" --slvItrPC ILU" "--slv CG --slvItrPC ILU#1.e-06#2" \
"--slv LU --slvDrtPvtThd 1.e-06" "--slv QR --slvDrtPvtThd 1.e-06"
do
for rs in "" "--schur"
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).
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 $extraGenPb $rs --nbCV 6 --verbose 3"
echo "$CMD"
eval "$CMD"
echo ""
echo "========================================================================================"
echo ""
# Run arpackmm: re-run with restart.
export CMD="$CMD --restart"
echo "$CMD"
eval "$CMD"
echo ""
echo "========================================================================================"
echo ""
done
done
done
done
done
done
done
done
echo "OK"