linear constraints can be specified directly by user using jacobians. this removes unnecessary adjoint solves, sped up optimization by factor of 10