changed: move the LinearSolverMaxError parameter to Opm::Parameters

This commit is contained in:
Arne Morten Kvarving 2024-07-01 14:13:14 +02:00
parent 5cab2e668a
commit b23f0289e3
4 changed files with 45 additions and 27 deletions

View File

@ -39,6 +39,9 @@ namespace Opm::Parameters {
template<class TypeTag, class MyTypeTag> template<class TypeTag, class MyTypeTag>
struct LinearSolverAbsTolerance { using type = Properties::UndefinedProperty; }; struct LinearSolverAbsTolerance { using type = Properties::UndefinedProperty; };
template<class TypeTag, class MyTypeTag>
struct LinearSolverMaxError { using type = Properties::UndefinedProperty; };
//! Maximum number of iterations eyecuted by the linear solver //! Maximum number of iterations eyecuted by the linear solver
template<class TypeTag, class MyTypeTag> template<class TypeTag, class MyTypeTag>
struct LinearSolverMaxIterations { using type = Properties::UndefinedProperty; }; struct LinearSolverMaxIterations { using type = Properties::UndefinedProperty; };

View File

@ -64,9 +64,6 @@ struct GlobalEqVector { using type = UndefinedProperty; };
template<class TypeTag, class MyTypeTag> template<class TypeTag, class MyTypeTag>
struct AmgCoarsenTarget { using type = UndefinedProperty; }; struct AmgCoarsenTarget { using type = UndefinedProperty; };
template<class TypeTag, class MyTypeTag>
struct LinearSolverMaxError { using type = UndefinedProperty; };
template<class TypeTag, class MyTypeTag> template<class TypeTag, class MyTypeTag>
struct LinearSolverWrapper { using type = UndefinedProperty; }; struct LinearSolverWrapper { using type = UndefinedProperty; };

View File

@ -43,28 +43,27 @@
#include <utility> #include <utility>
namespace Opm::Linear { namespace Opm::Linear {
template <class TypeTag> template <class TypeTag>
class ParallelAmgBackend; class ParallelAmgBackend;
} // namespace Opm::Linear } // namespace Opm::Linear
namespace Opm::Properties { namespace Opm::Properties {
// Create new type tags // Create new type tags
namespace TTag { namespace TTag {
struct ParallelAmgLinearSolver { using InheritsFrom = std::tuple<ParallelBaseLinearSolver>; };
struct ParallelAmgLinearSolver
{ using InheritsFrom = std::tuple<ParallelBaseLinearSolver>; };
} // end namespace TTag } // end namespace TTag
//! The target number of DOFs per processor for the parallel algebraic //! The target number of DOFs per processor for the parallel algebraic
//! multi-grid solver //! multi-grid solver
template<class TypeTag> template<class TypeTag>
struct AmgCoarsenTarget<TypeTag, TTag::ParallelAmgLinearSolver> { static constexpr int value = 5000; }; struct AmgCoarsenTarget<TypeTag, TTag::ParallelAmgLinearSolver>
{ static constexpr int value = 5000; };
template<class TypeTag>
struct LinearSolverMaxError<TypeTag, TTag::ParallelAmgLinearSolver>
{
using type = GetPropType<TypeTag, Scalar>;
static constexpr type value = 1e7;
};
template<class TypeTag> template<class TypeTag>
struct LinearSolverBackend<TypeTag, TTag::ParallelAmgLinearSolver> struct LinearSolverBackend<TypeTag, TTag::ParallelAmgLinearSolver>
@ -72,8 +71,19 @@ struct LinearSolverBackend<TypeTag, TTag::ParallelAmgLinearSolver>
} // namespace Opm::Properties } // namespace Opm::Properties
namespace Opm { namespace Opm::Parameters {
namespace Linear {
template<class TypeTag>
struct LinearSolverMaxError<TypeTag, Properties::TTag::ParallelAmgLinearSolver>
{
using type = GetPropType<TypeTag, Properties::Scalar>;
static constexpr type value = 1e7;
};
}
namespace Opm::Linear {
/*! /*!
* \ingroup Linear * \ingroup Linear
* *
@ -150,7 +160,7 @@ public:
{ {
ParentType::registerParameters(); ParentType::registerParameters();
Parameters::registerParam<TypeTag, Properties::LinearSolverMaxError> Parameters::registerParam<TypeTag, Parameters::LinearSolverMaxError>
("The maximum residual error which the linear solver tolerates " ("The maximum residual error which the linear solver tolerates "
"without giving up"); "without giving up");
Parameters::registerParam<TypeTag, Properties::AmgCoarsenTarget> Parameters::registerParam<TypeTag, Properties::AmgCoarsenTarget>
@ -201,7 +211,7 @@ protected:
convCrit_.reset(new CCC(gridView.comm(), convCrit_.reset(new CCC(gridView.comm(),
/*residualReductionTolerance=*/linearSolverTolerance, /*residualReductionTolerance=*/linearSolverTolerance,
/*absoluteResidualTolerance=*/linearSolverAbsTolerance, /*absoluteResidualTolerance=*/linearSolverAbsTolerance,
Parameters::get<TypeTag, Properties::LinearSolverMaxError>())); Parameters::get<TypeTag, Parameters::LinearSolverMaxError>()));
auto bicgstabSolver = auto bicgstabSolver =
std::make_shared<RawLinearSolver>(parPreCond, *convCrit_, parScalarProduct); std::make_shared<RawLinearSolver>(parPreCond, *convCrit_, parScalarProduct);
@ -323,7 +333,6 @@ protected:
#endif #endif
}; };
} // namespace Linear } // namespace Opm::Linear
} // namespace Opm
#endif #endif

View File

@ -37,32 +37,41 @@
#include <memory> #include <memory>
namespace Opm::Linear { namespace Opm::Linear {
template <class TypeTag> template <class TypeTag>
class ParallelBiCGStabSolverBackend; class ParallelBiCGStabSolverBackend;
} // namespace Opm::Linear } // namespace Opm::Linear
namespace Opm::Properties { namespace Opm::Properties {
// Create new type tags // Create new type tags
namespace TTag { namespace TTag {
struct ParallelBiCGStabLinearSolver { using InheritsFrom = std::tuple<ParallelBaseLinearSolver>; };
struct ParallelBiCGStabLinearSolver
{ using InheritsFrom = std::tuple<ParallelBaseLinearSolver>; };
} // end namespace TTag } // end namespace TTag
template<class TypeTag> template<class TypeTag>
struct LinearSolverBackend<TypeTag, TTag::ParallelBiCGStabLinearSolver> struct LinearSolverBackend<TypeTag, TTag::ParallelBiCGStabLinearSolver>
{ using type = Opm::Linear::ParallelBiCGStabSolverBackend<TypeTag>; }; { using type = Opm::Linear::ParallelBiCGStabSolverBackend<TypeTag>; };
} // namespace Opm::Properties
namespace Opm::Parameters {
template<class TypeTag> template<class TypeTag>
struct LinearSolverMaxError<TypeTag, TTag::ParallelBiCGStabLinearSolver> struct LinearSolverMaxError<TypeTag, Properties::TTag::ParallelBiCGStabLinearSolver>
{ {
using type = GetPropType<TypeTag, Scalar>; using type = GetPropType<TypeTag, Properties::Scalar>;
static constexpr type value = 1e7; static constexpr type value = 1e7;
}; };
} // namespace Opm::Properties }
namespace Opm::Linear {
namespace Opm {
namespace Linear {
/*! /*!
* \ingroup Linear * \ingroup Linear
* *
@ -122,7 +131,7 @@ public:
{ {
ParentType::registerParameters(); ParentType::registerParameters();
Parameters::registerParam<TypeTag, Properties::LinearSolverMaxError> Parameters::registerParam<TypeTag, Parameters::LinearSolverMaxError>
("The maximum residual error which the linear solver tolerates" ("The maximum residual error which the linear solver tolerates"
" without giving up"); " without giving up");
} }
@ -145,7 +154,7 @@ protected:
convCrit_.reset(new CCC(gridView.comm(), convCrit_.reset(new CCC(gridView.comm(),
/*residualReductionTolerance=*/linearSolverTolerance, /*residualReductionTolerance=*/linearSolverTolerance,
/*absoluteResidualTolerance=*/linearSolverAbsTolerance, /*absoluteResidualTolerance=*/linearSolverAbsTolerance,
Parameters::get<TypeTag, Properties::LinearSolverMaxError>())); Parameters::get<TypeTag, Parameters::LinearSolverMaxError>()));
auto bicgstabSolver = auto bicgstabSolver =
std::make_shared<RawLinearSolver>(parPreCond, *convCrit_, parScalarProduct); std::make_shared<RawLinearSolver>(parPreCond, *convCrit_, parScalarProduct);
@ -173,6 +182,6 @@ protected:
std::unique_ptr<ConvergenceCriterion<OverlappingVector> > convCrit_; std::unique_ptr<ConvergenceCriterion<OverlappingVector> > convCrit_;
}; };
}} // namespace Linear, Opm } // namespace Opm::Linear
#endif #endif