12 using AutoDiffGradMat = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>;
38 std::string
name()
const override {
return "MooneyRivlin3ParamSymbolic"; }
40 std::map<std::string, ParamFunc>
parameters()
const override;
46 const std::function<Eigen::MatrixXd(
const Eigen::MatrixXd &)> &fun)
const override;
49 const Eigen::MatrixXd &mat,
50 Eigen::MatrixXd &stress,
51 Eigen::MatrixXd &result)
const override;
54 Eigen::MatrixXd &stress,
55 Eigen::MatrixXd &result)
const override;
58 const Eigen::MatrixXd &vect,
59 Eigen::MatrixXd &stress,
60 Eigen::MatrixXd &result)
const override;
71 template <
int n_basis,
int dim>
73 template <
int n_basis,
int dim>
79 void get_grad_hess_symbolic(
const double c1,
const double c2,
const double c3,
const double d1,
const Eigen::MatrixXd &def_grad, Eigen::MatrixXd &grad, Eigen::MatrixXd &hess)
const;
80 void get_grad_hess_autodiff(
const double c1,
const double c2,
const double c3,
const double d1,
const Eigen::MatrixXd &global_pts,
const int el_id,
const Eigen::MatrixXd &
F, Eigen::MatrixXd &grad, Eigen::MatrixXd &hess)
const;
void compute_stress_grad_multiply_stress(const OptAssemblerData &data, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const override
T compute_energy_aux(const NonLinearAssemblerData &data) const
T elastic_energy(const RowVectorNd &p, const int el_id, const AutoDiffGradMat< T > &def_grad) const
std::string name() const override
double compute_energy(const NonLinearAssemblerData &data) const override
void get_grad_hess_symbolic(const double c1, const double c2, const double c3, const double d1, const Eigen::MatrixXd &def_grad, Eigen::MatrixXd &grad, Eigen::MatrixXd &hess) const
Eigen::VectorXd assemble_gradient(const NonLinearAssemblerData &data) const override
const GenericMatParam & c1() const
void compute_energy_aux_gradient_fast(const NonLinearAssemblerData &data, Eigen::VectorXd &G_flattened) const
std::map< std::string, ParamFunc > parameters() const override
void compute_stress_grad_multiply_vect(const OptAssemblerData &data, const Eigen::MatrixXd &vect, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const override
bool allow_inversion() const override
MooneyRivlin3ParamSymbolic()
void add_multimaterial(const int index, const json ¶ms, const Units &units) override
void get_grad_hess_autodiff(const double c1, const double c2, const double c3, const double d1, const Eigen::MatrixXd &global_pts, const int el_id, const Eigen::MatrixXd &F, Eigen::MatrixXd &grad, Eigen::MatrixXd &hess) const
const GenericMatParam & c3() const
const GenericMatParam & d1() const
void compute_energy_hessian_aux_fast(const NonLinearAssemblerData &data, Eigen::MatrixXd &H) const
const GenericMatParam & c2() const
void compute_stress_grad_multiply_mat(const OptAssemblerData &data, const Eigen::MatrixXd &mat, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const override
Eigen::MatrixXd assemble_hessian(const NonLinearAssemblerData &data) const override
void assign_stress_tensor(const OutputData &data, const int all_size, const ElasticityTensorType &type, Eigen::MatrixXd &all, const std::function< Eigen::MatrixXd(const Eigen::MatrixXd &)> &fun) const override
double assemble_energy(const bool is_volume, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev) const override
void assemble_gradient(const bool is_volume, const int n_basis, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev, Eigen::MatrixXd &rhs) const override
void assemble_hessian(const bool is_volume, const int n_basis, const bool project_to_psd, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev, utils::MatrixCache &mat_cache, StiffnessMatrix &grad) const override
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > AutoDiffGradMat
Eigen::Matrix< T, Eigen::Dynamic, 1 > AutoDiffVect
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd