15 val.resize(pts.rows(), size);
17 for (
long i = 0; i < pts.rows(); ++i)
22 for (
long d = 0; d < pts.cols(); ++d)
40 for (
long i = 0; i < pts.rows(); ++i)
49 val.resize(pts.rows(), pts.cols() * size);
51 for (
long i = 0; i < pts.rows(); ++i)
56 for (
long d = 0; d < pts.cols(); ++d)
61 for (
int m = 0; m < size; ++m)
63 const auto &tmp = res(m);
64 val.block(i, m * pts.cols(), 1, pts.cols()) = tmp.getGradient().transpose();
76 val.resize(pts.rows(), 1);
78 for (
long i = 0; i < pts.rows(); ++i)
80 const double x = pts(i, 0);
81 const double y = pts(i, 1);
82 val(i) = 24 *
x *
x *
x *
x - 48 *
x *
x *
x + 288 * (
y - 0.5) * (
y - 0.5) *
x *
x + (-288 *
y *
y + 288 *
y - 48) *
x + 24 *
y *
y *
y *
y - 48 *
y *
y *
y + 72 *
y *
y - 48 *
y + 8;
93 val.resize(pts.rows(), 1);
95 for (
long i = 0; i < pts.rows(); ++i)
97 const double x = pts(i, 0);
98 const double y = pts(i, 1);
99 val(i) =
x *
x * (1 -
x) * (1 -
x) *
y *
y * (1 -
y) * (1 -
y);
105 val.resize(pts.rows(), pts.cols());
virtual VectorNd compute_rhs(const AutodiffHessianPt &pt) const
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
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
BilaplacianProblemWithSolution(const std::string &name)
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 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 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
ProblemWithSolution(const std::string &name)
Eigen::Matrix< AutodiffScalarHessian, Eigen::Dynamic, 1, 0, 3, 1 > AutodiffHessianPt
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 3, 1 > VectorNd
DScalar2< double, Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 3, 1 >, Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > > AutodiffScalarHessian
DScalar1< double, Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 3, 1 > > AutodiffScalarGrad
Eigen::Matrix< AutodiffScalarGrad, Eigen::Dynamic, 1, 0, 3, 1 > AutodiffGradPt
static void setVariableCount(size_t value)
Set the independent variable count used by the automatic differentiation layer.