25template <
typename Scalar>
struct WorkspaceTpl {
27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
36 std::size_t numblocks;
61 VectorXs data_lams_prev;
62 VectorXs data_lams_trial;
63 VectorOfRef lams_prev;
64 VectorOfRef lams_trial;
74 VectorXs data_cstr_values;
89 MatrixXs data_jacobians;
90 MatrixXs data_hessians;
91 MatrixXs data_jacobians_proj;
92 std::vector<MatrixRef> cstr_jacobians;
93 std::vector<MatrixRef> cstr_vector_hessian_prod;
94 std::vector<MatrixRef> cstr_jacobians_proj;
96 VectorXs data_shift_cstr_values;
97 VectorXs data_lams_plus;
98 VectorXs data_lams_plus_reproj;
99 VectorXs data_lams_pdal;
100 VectorXs data_lams_pdal_reproj;
101 VectorXs data_shift_cstr_pdal;
111 std::vector<VectorRef> lams_pdal_reproj;
112 std::vector<VectorRef> shift_cstr_pdal;
114 std::vector<Scalar> ls_alphas;
115 std::vector<Scalar> ls_values;
121 VectorXs tmp_dx_scaled;
124 :
nx(long(prob.
nx())), ndx(long(prob.ndx())),
125 numblocks(prob.getNumConstraints()),
126 numdual(prob.getTotalConstraintDim()),
131 ldlt_(allocate_ldlt_from_problem(prob, ldlt_choice)), x_prev(
nx),
132 x_trial(
nx), data_lams_prev(numdual), data_lams_trial(numdual),
137 data_hessians((long)numblocks * ndx, ndx), data_lams_plus(numdual),
138 data_lams_plus_reproj(numdual), data_lams_pdal(numdual),
143 void init(
const Problem &prob) {
165 data_jacobians.setZero();
166 data_hessians.setZero();
178 tmp_dx_scaled.setZero();
180 cstr_jacobians.reserve(numblocks);
181 cstr_vector_hessian_prod.reserve(numblocks);
183 data_jacobians_proj = data_jacobians;
187 for (std::size_t i = 0; i < numblocks; i++) {
188 cursor = prob.getIndex(i);
189 nr = prob.getConstraintDim(i);
190 cstr_jacobians.emplace_back(data_jacobians.middleRows(cursor, nr));
191 cstr_jacobians_proj.emplace_back(
192 data_jacobians_proj.middleRows(cursor, nr));
193 cstr_vector_hessian_prod.emplace_back(
194 data_hessians.middleRows((
int)i * ndx, ndx));