17 bool delta(
int i,
int j)
19 return (i == j) ? true :
false;
22 double dot(
const Eigen::MatrixXd &A,
const Eigen::MatrixXd &B) {
return (A.array() * B.array()).sum(); }
27 T homo_stress_aux(
const Eigen::Matrix<T, Eigen::Dynamic, 1> &
F)
29 T val1 =
F(0) *
F(0) +
F(1) *
F(1) +
F(2) *
F(2);
32 return sqrt(val1 / (val2 + val1));
35 Eigen::VectorXd homo_stress_aux_grad(
const Eigen::VectorXd &
F)
38 Eigen::Matrix<Diff, Eigen::Dynamic, 1> full_diff(
F.size());
39 for (
int i = 0; i <
F.size(); i++)
40 full_diff(i) =
Diff(i,
F(i));
41 auto reduced_diff = homo_stress_aux(full_diff);
43 Eigen::VectorXd
grad(
F.size());
44 for (
int i = 0; i <
F.size(); ++i)
45 grad(i) = reduced_diff.getGradient()(i);
53 if (inputs.size() != 4)
54 throw std::runtime_error(
"Invalid input size for HomoCompositeForm!");
55 return homo_stress_aux(inputs);
60 return homo_stress_aux_grad(inputs);
70 if (inputs.size() != 1)
71 throw std::runtime_error(
"Invalid input size for InequalityConstraintForm!");
78 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.