48 SpatialODESolver(
const TrialFunctionType& trial,
const IntegrationDomainType& dV,
const bool& use_directSolver_in,
const double& tol):
49 use_directSolver(use_directSolver_in)
51 ,gSize(trial->gSize())
56 const auto bwfAi((
test(trial),trial)*dV);
57 std::vector<Eigen::Triplet<double> > globalTripletsAi(bwfAi->globalTriplets());
58 A.resize(gSize,gSize);
59 A.setFromTriplets(globalTripletsAi.begin(),globalTripletsAi.end());
63 directSolver.compute(A);
64 assert(directSolver.info()==Eigen::Success &&
"SOLVER FAILED");
68 iterativeSolver.compute(A);
69 assert(iterativeSolver.info()==Eigen::Success &&
"SOLVER FAILED");
74 Eigen::VectorXd
solve(
const Eigen::VectorXd&
b)
81 assert(directSolver.info()==Eigen::Success &&
"SOLVER FAILED");
82 Eigen::VectorXd
x = directSolver.solve(
b);
89 iterativeSolver.setTolerance(tolerance);
91 Eigen::VectorXd g(Eigen::VectorXd::Zero(gSize));
92 assert(iterativeSolver.info()==Eigen::Success &&
"SOLVER FAILED");
93 Eigen::VectorXd
x = iterativeSolver.solveWithGuess(
b,g);
94 lastError = iterativeSolver.error();
95 lastIterations = iterativeSolver.iterations();