ipie: A Python-Based Auxiliary-Field Quantum Monte Carlo Program with Flexibility and Efficiency on CPUs and GPUs

Sep 8, 2022
13 pages
Published in:
  • J.Chem.Theor.Comput. 19 (2022) 1, 109-121
  • Published: 2022
e-Print:

Citations per year

20232024202524
Abstract: (ACS)
We report the development of a python-based auxiliary-field quantum Monte Carlo (AFQMC) program, ipie, with preliminary timing benchmarks and new AFQMC results on the isomerization of [Cu2O2]2+. We demonstrate how implementations for both central and graphical processing units (CPUs and GPUs) are achieved in ipie. We show an interface of ipie with PySCF as well as a straightforward template for adding new estimators to ipie. Our timing benchmarks against other C++ codes, QMCPACK and Dice, suggest that ipie is faster or similarly performing for all chemical systems considered on both CPUs and GPUs. Our results on [Cu2O2]2+ using selected configuration interaction trials show that it is possible to converge the ph-AFQMC isomerization energy between bis(μ-oxo) and μ-η2:η2 peroxo configurations to the exact known results for small basis sets with 105–106 determinants. We also report the isomerization energy with a quadruple-zeta basis set with an estimated error less than a kcal/mol, which involved 52 electrons and 290 orbitals with 106 determinants in the trial wave function. These results highlight the utility of ph-AFQMC and ipie for systems with modest strong correlation and large-scale dynamic correlation.
  • [1]
    import numpy as np
    • [2]
      from ipie.estimators. estimator_base import
      • [3]
        EstimatorBase
        • [4]
          • [5]
            from ipie.estimators. greens_function_batch import
            • [6]
              greens_function
              • [7]
                • 8
                  • [9]
                    class S2Mixed( EstimatorBase ):
                    • [10]
                      def __init__(self, ham):
                      • [11]
                        self._data =
                        • [12]

                          S2Numer

                          • [13]
                            dtype=np.complex128)
                            • [14]

                              S2Denom

                              • [15]
                                dtype=np.complex128)
                                • [16]
                                  • [17]
                                    # shape of the estimator
                                    • [18]
                                      self._shape = (1,)
                                      • 19
                                        • [20]
                                          # optional variables
                                          • [21]
                                            # whether to print into text output
                                            • [22]
                                              self. print_to_stdout = True
                                              • [23]
                                                # new filename if needed
                                                • [24]
                                                  self. ascii_filename = None
                                                  • [25]
                                                    # whether to store it as scalar