8 template <
typename FiberModel>
19 std::map<std::string, Assembler::ParamFunc>
parameters()
const override;
45 const bool isocoric)
const
48 const T powJ = isocoric ? (this->
size() == 2 ? J : pow(J, 2.0 / 3.0)) : T(1);
49 const auto Cbar = (def_grad.transpose() * def_grad / powJ).eval();
52 assert((a_tmp.rows() == this->size() && a_tmp.cols() == 1) || (a_tmp.rows() == this->size() && a_tmp.cols() == this->size()));
53 const bool is_a_vector = a_tmp.cols() == 1;
60 a_tmp /= a_tmp.trace();
63 const int d = a_tmp.rows();
68 for (
int i = 0; i < d; ++i)
69 for (
int j = 0; j < d; ++j)
70 res += T(a_tmp(i)) * Cbar(i, j) * T(a_tmp(j));
78 for (
int i = 0; i < d; ++i)
79 for (
int j = 0; j < d; ++j)
80 res += Cbar(i, j) * T(a_tmp(j, i));
virtual void add_multimaterial(const int index, const json ¶ms, const Units &units) override
T I4Bar_generic(const RowVectorNd &p, const double t, const int el_id, const DefGradMatrix< T > &def_grad, const bool normalize, const bool isocoric) const
T I4Bar(const RowVectorNd &p, const double t, const int el_id, const DefGradMatrix< T > &def_grad) const
virtual void set_size(const int size) override
FiberDirection fiber_direction_
virtual ~GenericFiber()=default
T I4Bar_with_norm(const RowVectorNd &p, const double t, const int el_id, const DefGradMatrix< T > &def_grad) const
std::map< std::string, Assembler::ParamFunc > parameters() const override
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > DefGradMatrix
T determinant(const Eigen::Matrix< T, rows, cols, option, maxRow, maxCol > &mat)
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd