29 std::string
name()
const override {
return "AMIPS"; }
30 std::map<std::string, ParamFunc>
parameters()
const override {
return std::map<std::string, ParamFunc>(); }
43 typedef Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>
AutoDiffGradMat;
47 power =
size() == 2 ? 1. : (2. / 3.);
49 power =
size() == 2 ? 2. : 5. / 3.;
59 def_grad = def_grad * standard;
64 return T(std::nan(
""));
67 const T powJ = pow(det, power);
68 return (def_grad.transpose() * def_grad).trace() / powJ;
74 template <
int dimt,
class T>
75 static Eigen::Matrix<T, dimt, dimt>
get_standard(
const int dim,
const bool use_rest_pose)
77 Eigen::Matrix<double, dimt, dimt> standard(dim, dim);
80 standard.setIdentity();
86 0.5, std::sqrt(3) / 2;
89 0.5, std::sqrt(3) / 2., 0,
90 0.5, 0.5 / std::sqrt(3), std::sqrt(3) / 2.;
91 standard = standard.inverse().transpose().eval();
94 Eigen::Matrix<T, dimt, dimt> res(dim, dim);
95 for (
int i = 0; i < dim; ++i)
97 for (
int j = 0; j < dim; ++j)
99 res(i, j) = T(standard(i, j));
107 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>
gradient(
111 const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> &
F)
const override;
113 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9>
hessian(
117 const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> &
F)
const override;
static Eigen::Matrix< T, dimt, dimt > get_standard(const int dim, const bool use_rest_pose)
std::string name() const 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
void add_multimaterial(const int index, const json ¶ms, const Units &units) override
bool allow_inversion() 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
std::map< std::string, ParamFunc > parameters() const override
T elastic_energy(const RowVectorNd &p, const double t, const int el_id, DefGradMatrix< T > &def_grad) const
bool real_def_grad() const override
AutodiffType autodiff_type_
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > DefGradMatrix
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > AutoDiffGradMat
T determinant(const Eigen::Matrix< T, rows, cols, option, maxRow, maxCol > &mat)
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd