I'm looking for an explanation of how the calculation of nuclear gradients works in DFT in the context of geometric optimization. Mostly, I want to know what equations are used to calculate gradients (for example, using one of the functionals LDA, BLYP ...) in analytical form, and especially how changing the exchange-correlation functional can affect the result