Merge pull request #1317 from GitPaean/throw_when_no_umfpack

giving more information when umfpack is not available.
This commit is contained in:
Atgeirr Flø Rasmussen 2017-11-03 14:43:18 +01:00 committed by GitHub
commit 1d0282c6fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 19 deletions

View File

@ -122,14 +122,19 @@ foreach(SIM flow flow_ebos flow_legacy)
REL_TOL ${coarse_rel_tol})
endforeach()
foreach(SIM flow flow_legacy)
add_test_compareECLFiles(CASENAME spe1_2p
FILENAME SPE1CASE2_2P
SIMULATOR ${SIM}
ABS_TOL ${abs_tol}
REL_TOL ${rel_tol}
DIR spe1)
endforeach()
add_test_compareECLFiles(CASENAME spe1_2p
FILENAME SPE1CASE2_2P
SIMULATOR flow
ABS_TOL ${abs_tol}
REL_TOL ${rel_tol}
DIR spe1)
add_test_compareECLFiles(CASENAME spe1_2p
FILENAME SPE1CASE2_2P
SIMULATOR flow_legacy
ABS_TOL ${abs_tol}
REL_TOL ${coarse_rel_tol}
DIR spe1)
add_test_compareECLFiles(CASENAME spe1
FILENAME SPE1CASE1
@ -178,7 +183,7 @@ add_test_compareECLFiles(CASENAME spe5
FILENAME SPE5CASE1
SIMULATOR flow_solvent
ABS_TOL ${abs_tol}
REL_TOL 5e-4
REL_TOL ${coarse_rel_tol}
TEST_ARGS max_iter=13)
# Restart tests

View File

@ -33,12 +33,12 @@ namespace Opm {
namespace mswellhelpers
{
#if HAVE_UMFPACK
// obtain y = D^-1 * x with a direct solver
template <typename MatrixType, typename VectorType>
VectorType
invDXDirect(const MatrixType& D, VectorType x)
{
#if HAVE_UMFPACK
VectorType y(x.size());
y = 0.;
@ -61,8 +61,11 @@ namespace mswellhelpers
}
return y;
}
#else
OPM_THROW(std::runtime_error, "Cannot use invDXDirect() without UMFPACK. "
"Reconfigure opm-simulator with SuiteSparse/UMFPACK support and recompile.");
#endif // HAVE_UMFPACK
}

View File

@ -494,11 +494,7 @@ namespace Opm
duneB_.mv(x, Bx);
// invDBx = duneD^-1 * Bx_
#if HAVE_UMFPACK
const BVectorWell invDBx = mswellhelpers::invDXDirect(duneD_, Bx);
#else
const BVectorWell invDBx = mswellhelpers::invDX(duneD_, Bx);
#endif
// Ax = Ax - duneC_^T * invDBx
duneC_.mmtv(invDBx,Ax);
@ -514,11 +510,7 @@ namespace Opm
apply(BVector& r) const
{
// invDrw_ = duneD^-1 * resWell_
#if HAVE_UMFPACK
const BVectorWell invDrw = mswellhelpers::invDXDirect(duneD_, resWell_);
#else
const BVectorWell invDrw = mswellhelpers::invDX(duneD_, resWell_);
#endif // HAVE_UMFPACK
// r = r - duneC_^T * invDrw
duneC_.mmtv(invDrw, r);
}