37 auto key = dict.
get<std::string>(
"solver");
38 SolverFactory::keyExistsOrError(key);
39 return SolverFactory::table().at(key)(exec, dict);
42 static std::string
name() {
return "SolverFactory"; }
51 virtual std::unique_ptr<SolverFactory>
clone()
const = 0;
64 : exec_(solver.exec_), solverInstance_(solver.solverInstance_->clone()) {};
67 : exec_(solver.exec_), solverInstance_(std::move(solver.solverInstance_)) {};
70 : exec_(exec), solverInstance_(std::move(solverInstance)) {};
73 : exec_(exec), solverInstance_(
SolverFactory::create(exec, dict)) {};
77 return solverInstance_->solve(ls, field);
82 return solverInstance_->solve(ls, field);
88 std::unique_ptr<SolverFactory> solverInstance_;
A class representing a dictionary that stores key-value pairs.
T & get(const std::string &key)
Retrieves the value associated with the given key, casting it to the specified type.
A factory class for runtime selection of derived classes.
A class to contain the data and executors for a field and define some basic operations.
A class representing a linear system of equations.
static std::string name()
virtual std::unique_ptr< SolverFactory > clone() const =0
SolverFactory(const Executor &exec)
virtual SolverStats solve(const LinearSystem< Vec3, localIdx > &, Vector< Vec3 > &) const =0
static std::unique_ptr< SolverFactory > create(const Executor &exec, const Dictionary &dict)
virtual SolverStats solve(const LinearSystem< scalar, localIdx > &, Vector< scalar > &) const =0
SolverStats solve(const LinearSystem< Vec3, localIdx > &ls, Vector< Vec3 > &field) const
Solver(const Solver &solver)
Solver(const Executor &exec, std::unique_ptr< SolverFactory > solverInstance)
Solver(const Executor &exec, const Dictionary &dict)
SolverStats solve(const LinearSystem< scalar, localIdx > &ls, Vector< scalar > &field) const
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor