PolyFEM
Loading...
Searching...
No Matches
ProblemWithSolution.hpp
Go to the documentation of this file.
1#pragma once
2
5
7
8namespace polyfem
9{
10 namespace problem
11 {
13 {
14 public:
15 ProblemWithSolution(const std::string &name);
16
17 virtual void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
18 virtual void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
19
20 virtual void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
21 virtual void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
22
23 virtual bool has_exact_sol() const override { return true; }
24 virtual bool is_rhs_zero() const override { return false; }
25
27
28 protected:
29 virtual VectorNd eval_fun(const VectorNd &pt, double t) const = 0;
30 virtual AutodiffGradPt eval_fun(const AutodiffGradPt &pt, double t) const = 0;
31 virtual AutodiffHessianPt eval_fun(const AutodiffHessianPt &pt, double t) const = 0;
32
33 virtual int size_for(const Eigen::MatrixXd &pts) const { return is_scalar() ? 1 : pts.cols(); }
34 };
35
37 {
38 public:
39 BilaplacianProblemWithSolution(const std::string &name);
40
41 void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
42 void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
43
44 void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
45 void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override;
46
47 bool has_exact_sol() const override { return true; }
48 bool is_rhs_zero() const override { return false; }
49 bool is_scalar() const override { return true; }
50
52 };
53 } // namespace problem
54} // namespace polyfem
double val
Definition Assembler.cpp:86
const std::string & name() const
Definition Problem.hpp:23
virtual bool is_scalar() const =0
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Definition Mesh.hpp:39
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
virtual void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
virtual bool is_rhs_zero() const override
virtual bool has_exact_sol() const override
virtual int size_for(const Eigen::MatrixXd &pts) const
virtual void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
virtual void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
virtual AutodiffGradPt eval_fun(const AutodiffGradPt &pt, double t) const =0
virtual AutodiffHessianPt eval_fun(const AutodiffHessianPt &pt, double t) const =0
virtual VectorNd eval_fun(const VectorNd &pt, double t) const =0
virtual void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
Eigen::Matrix< AutodiffScalarHessian, Eigen::Dynamic, 1, 0, 3, 1 > AutodiffHessianPt
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 3, 1 > VectorNd
Definition Types.hpp:11
Eigen::Matrix< AutodiffScalarGrad, Eigen::Dynamic, 1, 0, 3, 1 > AutodiffGradPt