Open fedy9 opened 1 year 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)
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) `