49 ValidateFunction<Real>& validator,
53 const std::vector<std::string>& methods ) {
65 auto update_uo = con_check.
update_uo( un, z );
66 auto update_un = con_check.
update_un( uo, z );
67 auto update_z = con_check.
update_z( un, uo );
69 auto value_uo = con_check.
value_uo( un, z );
70 auto value_un = con_check.
value_un( uo, z );
71 auto value_z = con_check.
value_z( uo, un );
75 if( std::find(methods.begin(),methods.end(),
"applyJacobian_uo") != methods.end() ) {
77 validator.derivative_check( value_uo, J, update_uo, *c, *vu, uo,
"norm(J_uo*vec)" );
80 if( std::find(methods.begin(),methods.end(),
"applyJacobian_un") != methods.end() ) {
82 validator.derivative_check( value_un, J, update_un, *c, *vu, un,
"norm(J_un*vec)" );
85 if( std::find(methods.begin(),methods.end(),
"applyJacobian_z") != methods.end() ) {
87 validator.derivative_check( value_z, J, update_z, *c, *vz, z,
"norm(J_z*vec)" );
93 if( std::find(methods.begin(),methods.end(),
"applyAdjointJacobian_uo") != methods.end() ) {
96 validator.adjoint_consistency_check( J, aJ, update_uo, *c, *vu, uo,
97 "Jacobian with respect to uo",
"J_uo");
100 if( std::find(methods.begin(),methods.end(),
"applyAdjointJacobian_un") != methods.end() ) {
103 validator.adjoint_consistency_check( J, aJ, update_un, *c, *vu, un,
104 "Jacobian with respect to un",
"J_un");
107 if( std::find(methods.begin(),methods.end(),
"applyAdjointJacobian_z") != methods.end() ) {
110 validator.adjoint_consistency_check( J, aJ, update_z, *vz, *c, z,
111 "Jacobian with respect to z",
"J_z");
117 if( std::find(methods.begin(),methods.end(),
"solve") != methods.end() ) {
118 auto S = con_check.
solve_un( uo, z );
119 validator.solve_check( S, value_un, update_un, *c, un,
"Dynamic Constraint");
123 if( std::find(methods.begin(),methods.end(),
"applyInverseJacobian_un") != methods.end() ) {
126 validator.inverse_check( J, iJ, update_un, *vu, un,
127 "Jacobian with respect to un",
"J_un");
131 if( std::find(methods.begin(),methods.end(),
"applyInverseAdjointJacobian_un") != methods.end() ) {
134 validator.inverse_check( aJ, iaJ, update_un, *vu, un,
135 "adjoint Jacobian with respect to un",
"aJ_un");
141 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_uo_uo") != methods.end() ) {
143 auto aJl = fix_direction( aJ, *l );
145 validator.derivative_check( aJl, aH, update_uo, *c, *vu, uo,
"H_uo_uo");
148 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_uo_un") != methods.end() ) {
150 auto aJl = fix_direction( aJ, *l );
152 validator.derivative_check( aJl, aH, update_uo, *c, *vu, uo,
"H_uo_un");
155 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_uo_z") != methods.end() ) {
157 auto aJl = fix_direction( aJ, *l );
159 validator.derivative_check( aJl, aH, update_uo, *vz, *vu, uo,
"H_uo_z");
164 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_un_uo") != methods.end() ) {
166 auto aJl = fix_direction( aJ, *l );
168 validator.derivative_check( aJl, aH, update_un, *c, *vu, un,
"H_un_uo");
171 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_un_un") != methods.end() ) {
173 auto aJl = fix_direction( aJ, *l );
175 validator.derivative_check( aJl, aH, update_un, *c, *vu, un,
"H_un_un");
178 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_un_z") != methods.end() ) {
180 auto aJl = fix_direction( aJ, *l );
182 validator.derivative_check( aJl, aH, update_un, *vz, *vu, un,
"H_un_z");
187 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_z_uo") != methods.end() ) {
189 auto aJl = fix_direction( aJ, *l );
191 validator.derivative_check( aJl, aH, update_z, *c, *vz, z,
"H_z_uo");
194 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_z_un") != methods.end() ) {
196 auto aJl = fix_direction( aJ, *l );
198 validator.derivative_check( aJl, aH, update_z, *c, *vz, z,
"H_z_un");
201 if( std::find(methods.begin(),methods.end(),
"applyAdjointHessian_z_z") != methods.end() ) {
203 auto aJl = fix_direction( aJ, *l );
205 validator.derivative_check( aJl, aH, update_z, *vz, *vz, z,
"H_z_z");