Algorithm Developments for Discrete Adjoint Methods | Synapse