We currently ask the stiffness matrix for its transpose, which allocates another sparse matrix. Now that we have a differentiable solver abstraction, we could have the adjoint solve use the action of the transpose, say using the MFEM TransposeOperator.