PolyFEM
Loading...
Searching...
No Matches
VolumePenalty.hpp
Go to the documentation of this file.
1#pragma once
2
5
6namespace polyfem::assembler
7{
8 class VolumePenalty : public GenericElastic<VolumePenalty>
9 {
10 public:
12
13 // sets material params
14 void add_multimaterial(const int index, const json &params, const Units &units) override;
15
16 std::string name() const override { return "VolumePenalty"; }
17 std::map<std::string, ParamFunc> parameters() const override;
18
19 template <typename T>
21 const RowVectorNd &p,
22 const double t,
23 const int el_id,
24 const DefGradMatrix<T> &def_grad) const
25 {
26 const double k = k_(p, t, el_id);
27
28 const T J = polyfem::utils::determinant(def_grad);
29 const T log_J = log(J);
30
31 const T val = k / 2.0 * ((J * J - T(1)) / 2.0 - log_J);
32
33 return val;
34 }
35
36 private:
38 };
39} // namespace polyfem::assembler
double val
Definition Assembler.cpp:86
T elastic_energy(const RowVectorNd &p, const double t, const int el_id, const DefGradMatrix< T > &def_grad) const
void add_multimaterial(const int index, const json &params, const Units &units) override
std::map< std::string, ParamFunc > parameters() const override
std::string name() const override
Used for test only.
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > DefGradMatrix
T determinant(const Eigen::Matrix< T, rows, cols, option, maxRow, maxCol > &mat)
nlohmann::json json
Definition Common.hpp:9
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd
Definition Types.hpp:13