# Møller–Plesset Correlation Energy Density Generator This is python code of generating MP2, MP3, and MP4 correlation energy density based on **one boby decomposition scheme** (https://doi.org/10.1002/qua.22017) Requirement of python packages: ```shell numpy, scipy, h5py, torch, quadpy, itertools, mmap, tqdm ``` Optional of python packages: ```shell pycuda, skcuda # if you use GPU for preparing Ajb ``` Requirement of external packages to run example files: ```shell psi4 # to generate wavefunction and FCIDUMP file molden2aim # to convert molden format to .WFN ``` ## Examples ### ch4_200_031 This is to calculate energy density on Carbon and Hydrogen atom of CH4@3-21g with grid settings: Legendre quadrature (200 radial points) and Lebedev quadrature (noted as 031, 350 angular points). ```shell # prepare wavefunction and FCIDUMP files, here we use Psi4 package # one can also use other packages, e.g. PySCF, OpenMolcas $ cd examples/ch4_200_031/calcu/ $ psi4 -n 8 -i input.dat -o output.dat # convert molden format of wavefunction and txt format of FCIDUMP (in Psi 4 is INPDUMP) # into .npy files # Note that external package is needed to convert molden to .wfn first, we use molden2aim # (https://github.com/zorkzou/Molden2AIM) for example. $ cd ../prep/ $ chmod +x mlcorr_prep.sh $ ./mlcorr_prep.sh ch4 # calculate MP2 MP3 MP4 energy density $ cd ../eneden/ $ chmod +x eneden.sh $ ./eneden.sh ch4 # Here STDOUT will give the values of summing up of the energy density on each atom, # which should equals to MPn correlation energy # calculate reference value: $ cd ../ref/ $ psi4 -n 8 -i input.dat -o output.dat # you can find reference MP2, MP3, and MP4 # correlation energy in output.dat ``` #### Results: contribution for each atom (Atomic Contribution) ```bash PT2: C: -0.0713488682277866 H: -0.0072268498366822 PT3: C: -0.0056150246921240 H: -0.0019143657456038 PT4: C: -0.0031286420616285 H: -0.0005634905197682 Combine: MP2: -0.1002562675745154 MP3: -0.1135287552490546 MP4(SDTQ): -0.1189113593897559 Compare with reference correlation energy: MP2: -0.099901794206 MP3: -0.113086192916 MP4(SDTQ): -0.118437326291 ``` ~0.5 mH deviation is due to the integration issue. One can decrease by further increase the density of quadratures, or redistribute the deviation to each atom. ### ch4_50_011 This is to calculate energy density on Carbon and Hydrogen atom of CH4@3-21g with grid settings: Legendre quadrature (50 radial points) and Lebedev quadrature (noted as 011, 50 angular points). **Note that this example settings is not recommended for calculation** ```shell # First you need to modify: codes/prep/Becke_grid.py: qd.line_segment.gauss_legendre(200) -> qd.line_segment.gauss_legendre(50) qd.sphere.lebedev_031() -> qd.sphere.lebedev_011() # Others same with ch4_200_031 ``` #### Results: contribution for each atom (Atomic Contribution) ```bash PT2: C: -0.0731792208782222 H: -0.0073744070379437 PT3: C: -0.0059725794473153 H: -0.0019610653069297 PT4: C: -0.0032755188689802 H: -0.0005762340521139 Combine: MP2: -0.102676849029997 MP3: -0.116493689705031 MP4(SDTQ): -0.1220741447824669 Compare with reference correlation energy: MP2: -0.099901794206 MP3: -0.113086192916 MP4(SDTQ): -0.118437326291 ``` ~3.5 mH deviation is too large, so this setting is **not recommended**. ### h2 This is to calculate energy density on Hydrogen atom of H2@cc-pvdz with grid settings: Legendre quadrature (200 radial points) and Lebedev quadrature (noted as 031, 350 angular points). ```shell # prepare wavefunction and FCIDUMP files, here we use Psi4 package # one can also use other packages, e.g. PySCF, OpenMolcas $ cd examples/h2/calcu/ $ psi4 -n 8 -i input.dat -o output.dat # convert molden format of wavefunction and txt format of FCIDUMP (in Psi 4 is INPDUMP) # into .npy files # Note that external package is needed to convert molden to .wfn first, we use molden2aim # (https://github.com/zorkzou/Molden2AIM) for example. $ cd ../prep/ $ chmod +x mlcorr_prep.sh $ ./mlcorr_prep.sh h2 # calculate MP2 MP3 MP4 energy density $ cd ../eneden/ $ chmod +x eneden.sh $ ./eneden.sh h2 # Here STDOUT will give the values of summing up of the energy density on each atom, # which should equals to MPn correlation energy # calculate reference value: $ cd ../ref/ $ psi4 -n 8 -i input.dat -o output.dat # you can find reference MP2, MP3, and MP4 # correlation energy in output.dat ``` #### Results: contribution for each atom (Atomic Contribution) ```bash PT2: H: -0.0132622797812593 PT3: H: -0.0031027482505314 PT4: H: -0.0007878420821888 Combine: MP2: -0.0265245595625186 MP3: -0.0327300560635814 MP4(SDTQ): -0.034305740227959 Compare with reference correlation energy: MP2: -0.026443871885 MP3: -0.032632881103 MP4(SDTQ): -0.034205101033 ``` ~0.1 mH deviation.