HyQD / coupled-cluster

Upstream coupled cluster code
MIT License
3 stars 3 forks source link

Implement the Hellman-Feynman finite difference test for CC methods. #96

Open haakoek opened 2 years ago

haakoek commented 2 years ago

According to the (generalized) Hellman-Feynman theorem,

(d/da)<tildePsi|H(a)|Psi>|{a=a0} = <tildePsi|(d/da)H(a)|Psi>|{a=a0}.

In particular, if H(a) = H0+a*\hat{r} we have that

(d/da)<tildePsi|H(a)|Psi>|{a=a0} = <tildePsi|r|Psi>|{a=a0}, that is, the derivative of the energy

The derivative on the left-hand side can be estimated with a two-point central finite difference as

(d/da)<tildePsi|H(a)|Psi>|{a=a0} approx (<tilde_Psi|H(a0+da)|Psi>-<tilde_Psi|H(a0-da)|Psi>)/(2*da) + O(da^2),

and compared to the expectation value of the position at the point a0. This provides a particular powerful test case since the CC energies are independent of the lambda-amplitudes at convergence, while on the other hand, CC expectation values depend on lambda. Also, if a0 neq 0, it effectively tests that an external perturbation (in the dipole approximation) is correctly implemented since both the energy and now depend on the perturbation.