#ifndef ELLIPTICPDESOLVER_HPP #define ELLIPTICPDESOLVER_HPP #include "LagrangeEllipticAssemble.hpp" #include "MixedEllipticAssemble.hpp" #include "HybridEllipticAssemble.hpp" #include "DGEllipticAssemble.hpp" #include "PDESolver.hpp" class EllipticPDESolver : public PDESolver { private: Newton *newton; IStochasticEllipticAssemble *assemble; protected: void run(SampleSolution &solution) override; void computeQ(SampleSolution &solution) override; void computeCost(SampleSolution &solution) override; void plotSolution(SampleSolution &solution) override; public: EllipticPDESolver(IStochasticEllipticAssemble *assemble, const Meshes &meshes, const std::string &quantity = "L2", const std::string &costMeasure = "size") : PDESolver(meshes, quantity, costMeasure), newton(new Newton()), assemble(assemble) { if (verbose > 0) { PrintInfo(); newton->PrintInfo(); assemble->PrintInfo(); } } ~EllipticPDESolver() { delete assemble; delete newton; } IAssemble *GetAssemble() const override { return assemble; } IDiscretization *GetDisc() const override { return assemble->GetDisc(); } IStochasticProblem *GetProblem() const override { return assemble->GetProblem(); } void DrawSample(const SampleID &id) override { assemble->DrawSample(id); } std::string Name() const override { return "EllipticPDESolver"; } }; #endif //ELLIPTICPDESOLVER_HPP