adc-connect / adcc

adcc: Seamlessly connect your program to ADC
https://adc-connect.org
GNU General Public License v3.0
32 stars 19 forks source link

IP/EA-ADC up to 3rd order #168

Open fedy9 opened 1 year ago

fedy9 commented 1 year ago

New methods on user side: ip_adc{0..3}() ea_adc{0..3}() New keywords on user side: n_doublets, is_alpha e.g. ip_adc3(scf_result, n_doublets=5, is_alpha=True)

Remarks: Energies and properties were verified against Q-Chem calculations.

Pole strengths of 3rd order were implemented for completeness. They are currently not used in the calculation since all properties are computed at most at 2nd order even for ADC(3) calculations. Hence they were not verified yet.

No simultaneous calculation of alpha and beta states to simplify the code and error handling and to keep consistency with PP calculations. If alpha and beta would be computed in the same adcc instance, intermediates could be reused. However, these intermediates are not the bottleneck of the calculation and thus recomputed for the other spin.

Quartets not yet implemented since they are pure doubles states which are inaccurate up to 3rd order.

To Do Testing procedures for IP/EA ADC Verify 3rd order pole strengths

Observed issue True for PP/IP/EA If 'kind="any"' and the user requests a significant amount of states getting somewhere near the number of total accessible states, the Davidson will quickly converge to 0-vector. This is not true if kind is specified. Example input `from pyscf import gto, scf import adcc

Run SCF in pyscf

mol = gto.M( atom='O 0.0 0.0 0.0;' 'H 0.0 0.0 0.957;' 'H 0.927 0.0 -0.240', basis='sto-3g', spin=0 ) scfres = scf.RHF(mol) scfres.conv_tol = 1e-13 scfres.kernel()

state = adcc.adc2(scfres, n_states=65) `

fedy9 commented 4 months ago

Added ip/ea adc2x for consistency with pp basemethods

Added tests for IP/EA-ADC:

Modified adcc testdata generation: the adcc hdf5 reference data have to be regenerated so the pp tests pass, since I moved "available_kinds" to the "adc" level

Modified read-in of reference data and creating MockAdcStates

Generated ip/ea reference data for h2o_sto3g and cn_sto3g Testing alpha and beta attachment/detachment for unrestricted cn_sto3g Only alpha for restricted h2o_sto3g

Removed some intermediates in ip and ea matrix.py to avoid conflicts and reuse code in pp matrix.py

Introduced a blacklist for excitation_properties that depend on the type (pp vs ip/ea)

All former tests are running (except: pcm-lr/ptlr using pyscf that fails with pyscf version 2.3.0, scf energy fails, pcm with ddx solver since not installed)