Browse Source
moved linear equation solver factories to the respective solver files (and away from utility). restructured settings in factories and the way they are forwarded to the linear equation solvers. fixed all resulting errors
moved linear equation solver factories to the respective solver files (and away from utility). restructured settings in factories and the way they are forwarded to the linear equation solvers. fixed all resulting errors
Former-commit-id: 27e1ae2466
main
46 changed files with 1062 additions and 706 deletions
-
4src/modelchecker/csl/HybridCtmcCslModelChecker.cpp
-
6src/modelchecker/csl/HybridCtmcCslModelChecker.h
-
4src/modelchecker/csl/SparseCtmcCslModelChecker.cpp
-
6src/modelchecker/csl/SparseCtmcCslModelChecker.h
-
12src/modelchecker/csl/helper/HybridCtmcCslHelper.cpp
-
14src/modelchecker/csl/helper/HybridCtmcCslHelper.h
-
28src/modelchecker/csl/helper/SparseCtmcCslHelper.cpp
-
20src/modelchecker/csl/helper/SparseCtmcCslHelper.h
-
4src/modelchecker/prctl/HybridDtmcPrctlModelChecker.cpp
-
6src/modelchecker/prctl/HybridDtmcPrctlModelChecker.h
-
4src/modelchecker/prctl/SparseDtmcPrctlModelChecker.cpp
-
4src/modelchecker/prctl/SparseDtmcPrctlModelChecker.h
-
12src/modelchecker/prctl/helper/HybridDtmcPrctlHelper.cpp
-
14src/modelchecker/prctl/helper/HybridDtmcPrctlHelper.h
-
26src/modelchecker/prctl/helper/SparseDtmcPrctlHelper.cpp
-
28src/modelchecker/prctl/helper/SparseDtmcPrctlHelper.h
-
151src/solver/EigenLinearEquationSolver.cpp
-
103src/solver/EigenLinearEquationSolver.h
-
82src/solver/EliminationLinearEquationSolver.cpp
-
53src/solver/EliminationLinearEquationSolver.h
-
170src/solver/GmmxxLinearEquationSolver.cpp
-
152src/solver/GmmxxLinearEquationSolver.h
-
5src/solver/GmmxxMinMaxLinearEquationSolver.cpp
-
87src/solver/LinearEquationSolver.cpp
-
54src/solver/LinearEquationSolver.h
-
138src/solver/NativeLinearEquationSolver.cpp
-
93src/solver/NativeLinearEquationSolver.h
-
1src/solver/NativeMinMaxLinearEquationSolver.cpp
-
8src/solver/SolveGoal.cpp
-
6src/solver/SolveGoal.h
-
1src/solver/TopologicalMinMaxLinearEquationSolver.cpp
-
125src/utility/solver.cpp
-
86src/utility/solver.h
-
22test/functional/modelchecker/EigenDtmcPrctlModelCheckerTest.cpp
-
8test/functional/modelchecker/GmmxxCtmcCslModelCheckerTest.cpp
-
18test/functional/modelchecker/GmmxxDtmcPrctlModelCheckerTest.cpp
-
18test/functional/modelchecker/GmmxxHybridCtmcCslModelCheckerTest.cpp
-
14test/functional/modelchecker/GmmxxHybridDtmcPrctlModelCheckerTest.cpp
-
10test/functional/modelchecker/NativeCtmcCslModelCheckerTest.cpp
-
32test/functional/modelchecker/NativeDtmcPrctlModelCheckerTest.cpp
-
18test/functional/modelchecker/NativeHybridCtmcCslModelCheckerTest.cpp
-
14test/functional/modelchecker/NativeHybridDtmcPrctlModelCheckerTest.cpp
-
40test/functional/solver/EigenLinearEquationSolverTest.cpp
-
59test/functional/solver/GmmxxLinearEquationSolverTest.cpp
-
4test/performance/modelchecker/GmmxxDtmcPrctModelCheckerTest.cpp
-
4test/performance/modelchecker/NativeDtmcPrctlModelCheckerTest.cpp
@ -0,0 +1,87 @@ |
|||
#include "src/solver/LinearEquationSolver.h"
|
|||
|
|||
#include "src/solver/SolverSelectionOptions.h"
|
|||
|
|||
#include "src/solver/GmmxxLinearEquationSolver.h"
|
|||
#include "src/solver/NativeLinearEquationSolver.h"
|
|||
#include "src/solver/EigenLinearEquationSolver.h"
|
|||
#include "src/solver/EliminationLinearEquationSolver.h"
|
|||
|
|||
#include "src/settings/SettingsManager.h"
|
|||
#include "src/settings/modules/MarkovChainSettings.h"
|
|||
|
|||
namespace storm { |
|||
namespace solver { |
|||
|
|||
template<typename ValueType> |
|||
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> LinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType>&& matrix) const { |
|||
return create(matrix); |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> GeneralLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType> const& matrix) const { |
|||
return selectSolver(matrix); |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> GeneralLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType>&& matrix) const { |
|||
return selectSolver(std::move(matrix)); |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
template<typename MatrixType> |
|||
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> GeneralLinearEquationSolverFactory<ValueType>::selectSolver(MatrixType&& matrix) const { |
|||
storm::solver::EquationSolverType equationSolver = storm::settings::getModule<storm::settings::modules::MarkovChainSettings>().getEquationSolver(); |
|||
switch (equationSolver) { |
|||
case storm::solver::EquationSolverType::Gmmxx: return std::make_unique<storm::solver::GmmxxLinearEquationSolver<ValueType>>(std::forward<MatrixType>(matrix)); |
|||
case storm::solver::EquationSolverType::Native: return std::make_unique<storm::solver::NativeLinearEquationSolver<ValueType>>(std::forward<MatrixType>(matrix)); |
|||
case storm::solver::EquationSolverType::Eigen: return std::make_unique<storm::solver::EigenLinearEquationSolver<ValueType>>(std::forward<MatrixType>(matrix)); |
|||
case storm::solver::EquationSolverType::Elimination: return std::make_unique<storm::solver::EliminationLinearEquationSolver<ValueType>>(std::forward<MatrixType>(matrix)); |
|||
default: return std::make_unique<storm::solver::GmmxxLinearEquationSolver<ValueType>>(std::forward<MatrixType>(matrix)); |
|||
} |
|||
} |
|||
|
|||
std::unique_ptr<storm::solver::LinearEquationSolver<storm::RationalNumber>> GeneralLinearEquationSolverFactory<storm::RationalNumber>::create(storm::storage::SparseMatrix<storm::RationalNumber> const& matrix) const { |
|||
return selectSolver(matrix); |
|||
} |
|||
|
|||
std::unique_ptr<storm::solver::LinearEquationSolver<storm::RationalNumber>> GeneralLinearEquationSolverFactory<storm::RationalNumber>::create(storm::storage::SparseMatrix<storm::RationalNumber>&& matrix) const { |
|||
return selectSolver(std::move(matrix)); |
|||
} |
|||
|
|||
template<typename MatrixType> |
|||
std::unique_ptr<storm::solver::LinearEquationSolver<storm::RationalNumber>> GeneralLinearEquationSolverFactory<storm::RationalNumber>::selectSolver(MatrixType&& matrix) const { |
|||
storm::solver::EquationSolverType equationSolver = storm::settings::getModule<storm::settings::modules::MarkovChainSettings>().getEquationSolver(); |
|||
switch (equationSolver) { |
|||
case storm::solver::EquationSolverType::Elimination: return std::make_unique<storm::solver::EliminationLinearEquationSolver<storm::RationalNumber>>(matrix); |
|||
default: return std::make_unique<storm::solver::EigenLinearEquationSolver<storm::RationalNumber>>(matrix); |
|||
} |
|||
} |
|||
|
|||
std::unique_ptr<storm::solver::LinearEquationSolver<storm::RationalFunction>> GeneralLinearEquationSolverFactory<storm::RationalFunction>::create(storm::storage::SparseMatrix<storm::RationalFunction> const& matrix) const { |
|||
return selectSolver(matrix); |
|||
} |
|||
|
|||
std::unique_ptr<storm::solver::LinearEquationSolver<storm::RationalFunction>> GeneralLinearEquationSolverFactory<storm::RationalFunction>::create(storm::storage::SparseMatrix<storm::RationalFunction>&& matrix) const { |
|||
return selectSolver(std::move(matrix)); |
|||
} |
|||
|
|||
template<typename MatrixType> |
|||
std::unique_ptr<storm::solver::LinearEquationSolver<storm::RationalFunction>> GeneralLinearEquationSolverFactory<storm::RationalFunction>::selectSolver(MatrixType&& matrix) const { |
|||
storm::solver::EquationSolverType equationSolver = storm::settings::getModule<storm::settings::modules::MarkovChainSettings>().getEquationSolver(); |
|||
switch (equationSolver) { |
|||
case storm::solver::EquationSolverType::Elimination: return std::make_unique<storm::solver::EliminationLinearEquationSolver<storm::RationalFunction>>(matrix); |
|||
default: return std::make_unique<storm::solver::EigenLinearEquationSolver<storm::RationalFunction>>(matrix); |
|||
} |
|||
} |
|||
|
|||
template class LinearEquationSolverFactory<double>; |
|||
template class LinearEquationSolverFactory<storm::RationalNumber>; |
|||
template class LinearEquationSolverFactory<storm::RationalFunction>; |
|||
|
|||
template class GeneralLinearEquationSolverFactory<double>; |
|||
template class GeneralLinearEquationSolverFactory<storm::RationalNumber>; |
|||
template class GeneralLinearEquationSolverFactory<storm::RationalFunction>; |
|||
|
|||
} |
|||
} |
Reference in new issue
xxxxxxxxxx