PolyFEM
Loading...
Searching...
No Matches
VolumePenalty.cpp
Go to the documentation of this file.
1#include "VolumePenalty.hpp"
2
5
6namespace polyfem::assembler
7{
13
14 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> VolumePenalty::gradient(
15 const RowVectorNd &p,
16 const double t,
17 const int el_id,
18 const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> &F) const
19 {
20 const double k = k_(p, t, el_id);
21 if (size() == 2)
22 return autogen::VolumePenalty2d_gradient(p, t, el_id, F, k);
23 else
24 return autogen::VolumePenalty3d_gradient(p, t, el_id, F, k);
25 }
26
27 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9> VolumePenalty::hessian(
28 const RowVectorNd &p,
29 const double t,
30 const int el_id,
31 const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> &F) const
32 {
33 const double k = k_(p, t, el_id);
34
35 if (size() == 2)
36 return autogen::VolumePenalty2d_hessian(p, t, el_id, F, k);
37 else
38 return autogen::VolumePenalty3d_hessian(p, t, el_id, F, k);
39 }
40
41 void VolumePenalty::add_multimaterial(const int index, const json &params, const Units &units)
42 {
43 k_.add_multimaterial(index, params, units.stress());
44 }
45
46 std::map<std::string, Assembler::ParamFunc> VolumePenalty::parameters() const
47 {
48 std::map<std::string, ParamFunc> res;
49
50 res["k"] = [this](const RowVectorNd &, const RowVectorNd &p, double t, int e) {
51 return k_(p, t, e);
52 };
53
54 return res;
55 }
56} // namespace polyfem::assembler
std::string stress() const
Definition Units.hpp:27
void add_multimaterial(const int index, const json &params, const std::string &unit_type)
Definition MatParams.cpp:30
void add_multimaterial(const int index, const json &params, const Units &units) override
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > gradient(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F) const override
std::map< std::string, ParamFunc > parameters() const override
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9 > hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F) const override
Used for test only.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9 > VolumePenalty2d_hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F, const double k)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > VolumePenalty3d_gradient(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F, const double k)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9 > VolumePenalty3d_hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F, const double k)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > VolumePenalty2d_gradient(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F, const double k)
nlohmann::json json
Definition Common.hpp:9
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd
Definition Types.hpp:13