7 bool delta(
int i,
int j)
9 return (i == j) ? true :
false;
12 double dot(
const Eigen::MatrixXd &A,
const Eigen::MatrixXd &B) {
return (A.array() * B.array()).sum(); }
17 T homo_stress_aux(
const Eigen::Matrix<T, Eigen::Dynamic, 1> &
F)
19 T val1 =
F(0) *
F(0) +
F(1) *
F(1) +
F(2) *
F(2);
22 return sqrt(val1 / (val2 + val1));
25 Eigen::VectorXd homo_stress_aux_grad(
const Eigen::VectorXd &
F)
28 Eigen::Matrix<Diff, Eigen::Dynamic, 1> full_diff(
F.size());
29 for (
int i = 0; i <
F.size(); i++)
30 full_diff(i) =
Diff(i,
F(i));
31 auto reduced_diff = homo_stress_aux(full_diff);
33 Eigen::VectorXd
grad(
F.size());
34 for (
int i = 0; i <
F.size(); ++i)
35 grad(i) = reduced_diff.getGradient()(i);
43 if (inputs.size() != 4)
44 throw std::runtime_error(
"Invalid input size for HomoCompositeForm!");
45 return homo_stress_aux(inputs);
50 return homo_stress_aux_grad(inputs);
60 if (inputs.size() != 1)
61 throw std::runtime_error(
"Invalid input size for InequalityConstraintForm!");
68 Eigen::VectorXd grad(1);
DScalar1< double, Eigen::Matrix< double, Eigen::Dynamic, 1 > > Diff
Automatic differentiation scalar with first-order derivatives.
static void setVariableCount(size_t value)
Set the independent variable count used by the automatic differentiation layer.