.. : PyBEST: Pythonic Black-box Electronic Structure Tool : Copyright (C) 2016-- The PyBEST Development Team : : This file is part of PyBEST. : : PyBEST is free software; you can redistribute it and/or : modify it under the terms of the GNU General Public License : as published by the Free Software Foundation; either version 3 : of the License, or (at your option) any later version. : : PyBEST is distributed in the hope that it will be useful, : but WITHOUT ANY WARRANTY; without even the implied warranty of : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the : GNU General Public License for more details. : : You should have received a copy of the GNU General Public License : along with this program; if not, see : -- .. _pt2ap1rog: The perturbation theory module ############################## Before reading this section, please read the general introduction mentioned in :ref:`user_posthf_intro`. This part of the Documentation builds upon it. Supported features ================== The perturbation theory module supports spin-restricted orbitals, the ``DenseLinalgFactory`` and ``CholeskyLinalgFactory``. PyBEST offers various flavors of perturbation theory with a pCCD reference function (beyond MP2). If a dynamical correlation is added on top of pCCD, different choices for the zeroth-order Hamiltonian :math:`\hat{H}_0`, perturbation :math:`\hat{V}`, dual space :math:`\langle \tilde{\Psi} \vert`, and the projection manifold :math:`\hat{T}` are available [boguslawski2017a]_. Specifically, you can choose between the following combinations (see also [boguslawski2017a]_ for more details), +--------+--------------------------------+-----------------------------------------------+---------------------------------------+------------------------------------+ | Model | :math:`\hat{H}_0` | :math:`\hat{V}` | :math:`\langle \tilde{\Psi} \vert` | :math:`\hat{T}` | +========+================================+===============================================+=======================================+====================================+ | PT2SDd | :math:`\hat{F}_N^{\mathrm{d}}` | :math:`{F}_N^{\mathrm{o}} + \hat{W}_N^\prime` | :math:`\langle 0 \vert` | :math:`\hat{T}_2^\prime`, | | | | | | :math:`\hat{T}_1+\hat{T}_2^\prime` | +--------+--------------------------------+-----------------------------------------------+---------------------------------------+------------------------------------+ | PT2MDd | :math:`\hat{F}_N^{\mathrm{d}}` | :math:`{F}_N^{\mathrm{o}} + \hat{W}_N^\prime` | :math:`\langle \mathrm{pCCD} \vert` | :math:`\hat{T}_2^\prime`, | | | | | | :math:`\hat{T}_1+\hat{T}_2^\prime` | +--------+--------------------------------+-----------------------------------------------+---------------------------------------+------------------------------------+ | PT2SDo | :math:`\hat{F}_N^{\mathrm{d}}` | :math:`\hat{W}_N^\prime` | :math:`\langle 0 \vert` | :math:`\hat{T}_2^\prime`, | | | :math:`+\hat{F}_N^{\mathrm{o}}`| | | :math:`\hat{T}_1+\hat{T}_2^\prime` | +--------+--------------------------------+-----------------------------------------------+---------------------------------------+------------------------------------+ | PT2MDo | :math:`\hat{F}_N^{\mathrm{d}}` | :math:`\hat{F}_N - \bar{F}_N` | :math:`\langle \mathrm{pCCD} \vert` | :math:`\hat{T}_2^\prime`, | | | :math:`+\hat{F}_N^{\mathrm{o}}`| :math:`+ \hat{W}_N^\prime` | | :math:`\hat{T}_1+\hat{T}_2^\prime` | +--------+--------------------------------+-----------------------------------------------+---------------------------------------+------------------------------------+ | PT2b | :math:`\hat{F}_N^{\mathrm{d}}` | :math:`\hat{H}_N^\prime` | :math:`\langle \mathrm{pCCD} \vert` | :math:`\hat{T}_2^\prime`, | | | :math:`+\hat{F}_N^{\mathrm{o}}`| | | :math:`\hat{T}_1+\hat{T}_2^\prime`,| | | | | | :math:`\hat{T}_2`, | | | | | | :math:`\hat{T}_1+\hat{T}_2` | +--------+--------------------------------+-----------------------------------------------+---------------------------------------+------------------------------------+ For Moller-Plesset Perturbation Theory of second order with a restricted, closed-shell Hartree-Fock reference function, see :ref:`mp2`. .. _getstartept2: Quick Guide: General input structure of PT2 =========================================== We assume that you have performed a restricted pCCD calculation, whose results are stored in the :py:class:`~pybest.io.iodata.IOData` container ``oopccd_output`` (see :ref:`user_pccd`). Furthermore, we will assume the following default names for all PyBEST objects :lf: A :py:class:`~pybest.linalg.base.LinalgFactory` instance (see :ref:`user_linalg_intro`). :occ_model: An Aufbau occupation model of the :py:class:`~pybest.scf.occ.AufbauOccModel` class :kin: the kinetic energy integrals :ne: the nucleus-electron attraction integrals :eri: the two-electron repulsion integrals Setting up a PT2 calculation ---------------------------- The code snippet below shows how to perform a PT2 correction on top of pCCD in PyBEST, .. code-block:: python pt2 = PT2XX(lf, occ_model) pt2_output = pt2(kin, ne, eri, oopccd_output) where ``PT2XX`` indicates one of the Perturbation Theory models listed in the above table. .. note:: The order of the arguments in the PT2XX function call does not matter. PyBEST recognizes all required arguments automatically. The results are returned as an :py:class:`~pybest.io.iodata.IOData` container, while all results are saved to the ``pybest-results/checkpoint_**PT2XX**.h5`` file. Specifically, the :py:class:`~pybest.io.iodata.IOData` container contains the following attributes :e_tot: The total PT2XX energy (including all external terms) :e_corr: The PT2XX correlation energy :e_ref: The energy of the reference wave function (here, OOpCCD) :t_1: The singles amplitudes (if calculated) :t_2: The doubles amplitudes All PT2 modules feature additional options, which are discussed in greater detail below. .. note:: None of the PT2 modules supports a restart option yet. Defining a frozen core ---------------------- By default, all core orbitals are frozen by PyBEST. If a frozen core has been selected in the pCCD reference calculation, the same orbitals have to be frozen in the chosen flavor of PT2 correction. To freeze some specific (occupied) orbitals, the number of frozen cores has to be specified when creating an instance of some occupation model. The perturbation theory module extracts then this information, .. code-block:: python # Select one frozen core orbital #------------------------------- occ_model = AufbauOccModel(gobasis, ncore=1) # Perform PT2 calculation, ncore is stored in occ_model #------------------------------------------------------ pt2 = PT2XX(lf, occ_model) pt2_output = pt2(kin, ne, eri, oopccd_output) This syntax is working for all PT2 modules mentioned below. .. _ptsd: The PT2SD module ================ The PT2SD module features two distinct flavors of perturbative corrections, which differ in the choice of the zeroth-order Hamiltonian :math:`\hat{H}_0`: (i) :py:class:`~pybest.pt.pccdpt2.PT2SDd` and (ii) :py:class:`~pybest.pt.pccdpt2.PT2SDo` .. _ptsdd: The PT2SDd correction --------------------- To perform a PT2SDd correction, you have to create an instance of the :py:class:`~pybest.pt.pccdpt2.PT2SDd` class. Due to the choice of the zeroth-order Hamiltonian, the singles and doubles correction are uncoupled and are determined simultaneously, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2sdd_water_cc-pvdz.py :lines: 54-58 The function call returns an :py:class:`~pybest.io.iodata.IOData` container. It has the following attributes :e_tot: The total PT2SDd energy (including all external terms) :e_corr: The PT2SDd correlation energy (singles+doubles) :e_corr_s: The PT2SDd correlation energy wrt single excitations :e_corr_d: The PT2SDd correlation energy wrt double excitations :e_corr_s0: The PT2SDd correlation energy wrt the seniority zero sector of all double excitations :e_corr_s2: The PT2SDd correlation energy wrt the seniority 2 sector of alldouble excitations :e_corr_s4: The PT2SDd correlation energy wrt the seniority 4 sector of alldouble excitations :e_ref: The energy of the reference wave function (here, OOpCCD) :t_1: The singles amplitudes :t_2: The doubles amplitudes (all pair amplitudes equal zero) :t_p: The pair amplitudes of OOpCCD .. note:: The excitation manifold consists of single and double excitations as they are uncoupled. By default, both are determined simultaneously. .. _ptsdo: The PT2SDo correction --------------------- If an off-diagonal zeroth-order Hamiltonian :math:`\hat{H}_0` is chosen, the single and double amplitudes equations are coupled. Thus, the total and correlation energies associated with each excitation manifold will be affected by the presence of the other manifold. In PyBEST, you have the option to consider the doubles and the singles and doubles excitation manifold separately. .. _ptsdo_d: The PT2SDo correction including only double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If not specified otherwise, PyBEST includes only double excitations in a PT2SDo calculation. Similar to the above, an instance of the :py:class:`~pybest.pt.pccdpt2.PT2SDo` class has to be created before a function call initiates the optimization of the PT2 amplitudes, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2sdo_water_cc-pvdz.py :lines: 54-58 Again, the function call returns an :py:class:`~pybest.io.iodata.IOData` container. In contrast to the PT2SDd flavor, all information related to single excitations is missing, and we have the following attributes :e_tot: The total PT2SDo energy (including all external terms) :e_corr: The PT2SDo correlation energy (singles+doubles) :e_corr_d: The PT2SDo correlation energy wrt double excitations :e_corr_s0: The PT2SDo correlation energy wrt the seniority zero sector of all double excitations :e_corr_s2: The PT2SDo correlation energy wrt the seniority 2 sector of alldouble excitations :e_corr_s4: The PT2SDo correlation energy wrt the seniority 4 sector of alldouble excitations :e_ref: The energy of the reference wave function (here, OOpCCD) :t_2: The doubles amplitudes (all pair amplitudes equal zero) :t_p: The pair amplitudes of OOpCCD .. _ptsdo_sd: The PT2SDo correction including single and double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The contribution of single excitations can be switched on using the ``singles`` keyword, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2sdo_water_cc-pvdz.py :lines: 60- The function call then returns an :py:class:`~pybest.io.iodata.IOData` container, where, in addition to the attributes above, you can access the following internal PyBEST objects :e_corr_s: The PT2SDo correlation energy wrt single excitations :t_1: The singles amplitudes Summary of keyword arguments ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :indextrans: (str) 4-index transformation. The choice between ``cupy``, ``tensordot`` (default) and ``einsum``. ``tensordot`` is faster than ``einsum``. If ``DenseLinalgFactory`` is used, the memory requirement scales roughly as :math:`3N^4`. Due to the storage of the two-electron integrals, the total amount of memory increases to :math:`4N^4` .. note:: If Cupy is unavailable or unsuccessful, ``td`` is selected instead. :eref: (float) pCCD reference energy (default ``0.0``). eref gets overwritten if an :py:class:`~pybest.io.iodata.IOData` container is passed :threshold: (float) optimization threshold for amplitudes (default ``1e-6``) :maxiter: (int) maximum number of iterations (default ``200``) :singles: (boolean) account for single excitations in the projection manifold (default ``False``) :guess: (1-dim np.array) initial guess (default ``None``). In not provided, an initial guess containing the MP2 amplitudes is generated. If a user-defined guess is provided, the elements of :math:`t_{ij}^{ab}` have to be indexed in C-like order .. _ptmd: The PTMD module =============== Similar to PT2SD, the PTMD module features two distinct flavors of perturbative corrections, which differ in the choice of the zeroth-order Hamiltonian :math:`\hat{H}_0`: (i) :py:class:`~pybest.pt.pccdpt2.PT2MDd` and (ii) :py:class:`~pybest.pt.pccdpt2.PT2MDo` .. _ptmdd: The PT2MDd correction --------------------- To perform a PT2MDd correction, you have to create an instance of the :py:class:`~pybest.pt.pccdpt2.PT2MDd` class. Similar to the PT2SDd method, the choice of the zeroth-order Hamiltonian decouples the singles and doubles equations and they are thus determined simultaneously by default. Since the PT2MDd method requires (an approximate) wave function overlap of the pCCD reference function as input, this integral has to be calculated prior the :py:class:`~pybest.pt.pccdpt2.PT2MDd` function call. It is defined in the :py:class:`~pybest.geminal.rpccd.RpCCD` and :py:class:`~pybest.geminal.rpccd.ROOpCCD` classes. PyBEST automatically calculates and stores this overlap integral. Note that this is only an approximate overlap integral where at most quadratic terms in the pCCD amplitudes are included. The PT2MDd calculation can be started as follows .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2mdd_water_cc-pvdz.py :lines: 54- The function call returns an :py:class:`~pybest.io.iodata.IOData` container. It has similar attributes as the PT2SDd :py:class:`~pybest.io.iodata.IOData` container, :e_tot: The total PT2MDd energy (including all external terms) :e_corr: The PT2MDd correlation energy (singles+doubles) :e_corr_s: The PT2MDd correlation energy wrt single excitations :e_corr_d: The PT2MDd correlation energy wrt double excitations :e_corr_s0: The PT2MDd correlation energy wrt the seniority zero sector of all double excitations :e_corr_s2: The PT2MDd correlation energy wrt the seniority 2 sector of alldouble excitations :e_corr_s4: The PT2MDd correlation energy wrt the seniority 4 sector of alldouble excitations :e_ref: The energy of the reference wave function (here, OOpCCD) :t_1: The singles amplitudes :t_2: The doubles amplitudes (all pair amplitudes equal zero) :t_p: The pair amplitudes of OOpCCD .. note:: The excitation manifold consists of both single and double excitations as they are uncoupled. By default, both are determined simultaneously. .. _ptmdo: The PT2MDo correction --------------------- If an off-diagonal zeroth-order Hamiltonian :math:`\hat{H}_0` is chosen, the single and double amplitudes equations are coupled. Thus, the total and correlation energies associated with each excitation manifold will be affected by the presence of the other manifold. In PyBEST, you have the option to consider the doubles and the singles and doubles excitation manifold separately. .. _ptmdo_d: The PT2MDo correction including only double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ As in the case of PT2SDo calculations, PyBEST includes only double excitations in a PT2MDo calculation if not specified otherwise, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2mdo_water_cc-pvdz.py :lines: 57-60 Again, the function call returns an :py:class:`~pybest.io.iodata.IOData` container. In contrast to the PT2MDd flavor, we have only the following attributes :e_tot: The total PT2MDo energy (including all external terms) :e_corr: The PT2MDo correlation energy (singles+doubles) :e_corr_d: The PT2MDo correlation energy wrt double excitations :e_corr_s0: The PT2MDo correlation energy wrt the seniority zero sector of all double excitations :e_corr_s2: The PT2MDo correlation energy wrt the seniority 2 sector of alldouble excitations :e_corr_s4: The PT2MDo correlation energy wrt the seniority 4 sector of alldouble excitations :e_ref: The energy of the reference wave function (here, OOpCCD) :t_2: The doubles amplitudes (all pair amplitudes equal zero) :t_p: The pair amplitudes of OOpCCD where all information related to single excitations is missing. .. _ptmdo_sd: The PT2MDo correction including single and double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The contribution of single excitations can be switched on using the ``singles`` keyword, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2mdo_water_cc-pvdz.py :lines: 62- The function call then returns an :py:class:`~pybest.io.iodata.IOData` container, where we can access the additional internal PyBEST objects :e_corr_s: The PT2MDo correlation energy wrt single excitations :t_1: The singles amplitudes Summary of keyword arguments ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :indextrans: (str) 4-index transformation. The choice between ``cupy``, ``tensordot`` (default) and ``einsum``. ``tensordot`` is faster than ``einsum``. If ``DenseLinalgFactory`` is used, the memory requirement scales roughly as :math:`3N^4`. Due to the storage of the two-electron integrals, the total amount of memory increases to :math:`4N^4` .. note:: If Cupy is unavailable or unsuccessful, ``td`` is selected instead. :eref: (float) pCCD reference energy (default ``0.0``). eref gets overwritten if an :py:class:`~pybest.io.iodata.IOData` container is passed :threshold: (float) optimization threshold for amplitudes (default ``1e-6``) :maxiter: (int) maximum number of iterations (default ``200``) :singles: (boolean) account for single excitations in the projection manifold (default ``False``) :guess: (1-dim np.array) initial guess (default ``None``). In not provided, an initial guess containing the MP2 amplitudes is generated. If a user-defined guess is provided, the elements of :math:`t_{ij}^{ab}` have to be indexed in C-like order .. _pt2b: The PT2b module =============== In the PT2b module, you have the choice between four different flavors of the PT2b correction, including the originally formulated PTb model [limacher2014]_ and three extensions thereof. These Perturbation Theory corrections differ in their choice of the projection manifold. The original PT2b correction (PTb) ---------------------------------- In its original formulation, PT2b (also called PTb) includes all double excitations in the projection manifold, that is, both electron-pair and broken-pair doubles are contained in the excitation operator of the PT2b/PTb model. Although these electron-pair contributions do not affect the energy expression (as the corresponding terms cancel), the corresponding pair amplitudes are optimized in the PT2b/PTb amplitude equations. .. _pt2b_original_d: The PT2b correction including all double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If not specified otherwise, the PT2b module optimizes the originally formulated PT2b/PTb wave function (that is, its amplitudes). To invoke a PT2b calculation, only the pCCD output container ``oopccd_output`` is required as an input argument, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2b_water_cc-pvdz.py :lines: 55-60 Again, the function call returns an :py:class:`~pybest.io.iodata.IOData` container with the following attributes :e_tot: The total PT2b energy (including all external terms) :e_corr: The PT2b correlation energy (singles+doubles) :e_corr_d: The PT2b correlation energy wrt double excitations :e_corr_s0: The PT2b correlation energy wrt the seniority zero sector of all double excitations :e_corr_s2: The PT2b correlation energy wrt the seniority 2 sector of alldouble excitations :e_corr_s4: The PT2b correlation energy wrt the seniority 4 sector of alldouble excitations :e_ref: The energy of the reference wave function (here, OOpCCD) :t_2: The doubles amplitudes (including pairs) :t_p: The pair amplitudes of OOpCCD .. note:: In contrast to the PT2SD and PT2MD models, the pair amplitudes of the original PT2b method are optimized and thus can have non-zero values. .. _pt2b_original_sd: The PT2b correction including all single and double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Single excitations can be included in the PT2b model using the ``singles`` keyword in the function call, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2b_water_cc-pvdz.py :lines: 62-65 The corresponding :py:class:`~pybest.io.iodata.IOData` container (return value) contains, in addition, the single excitation amplitudes and the corresponding correlation energy contribution, :e_corr_s: The PT2b correlation energy wrt single excitations :t_1: The singles amplitudes .. _pt2b_mod: The modified PT2b correction ---------------------------- Since the original PT2b model does include electron pair excitations in the excitation operator of Perturbation Theory, double-counting effects cannot be excluded. Although these pair amplitudes do not contribute to the correlation energy expression, they **do** couple to the remaining double *and* pCCD pair amplitudes. Thus, electron-pair effects are treated twice, once in the pCCD reference and once again in the PT2b model. The modified PT2b correction in PyBEST offers the possibility to exclude those electron-pair excitations from the projection manifold in the Perturbation Theory model. Similar to the original PT2b/PTb model, we can distinguish two special cases. .. _pt2b_mod_d: The PT2b correction including only broken-pair double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The electron-pair excitations can be **excluded** from the PT2b/PTb model using the keyword ``excludepairs``. By default, this keyword is assumed to be ``False`` and thus a conventional PT2b/PTb calculation is performed. The code snippet below shows how to modify the :py:class:`~pybest.pt.rpccdpt2.PT2b` function call to exclude electron-pair excitations from the doubles excitation manifold, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2b_water_cc-pvdz.py :lines: 67-70 The function call returns an :py:class:`~pybest.io.iodata.IOData` container, which as the same attributes as the original :py:class:`~pybest.pt.rpccdpt2.PT2b` class as described in :ref:`pt2b_original_d`, except for the doubles amplitudes, :t_2: The doubles amplitudes (all pair amplitudes equal zero) .. _pt2b_mod_sd: The PT2b correction including all single and only broken-pair double excitations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ As mentioned in :ref:`pt2b_original_sd`, single excitations can be included in the PT2b model using the ``singles`` keyword in the function call, while all electron-pair contributions are excluded by activating the ``excludepairs`` keyword, .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2b_water_cc-pvdz.py :lines: 72- The corresponding :py:class:`~pybest.io.iodata.IOData` container (return value) contains, in addition, the single excitation amplitudes and the corresponding correlation energy contribution, :e_corr_s: The PT2b correlation energy wrt single excitations :t_1: The singles amplitudes .. _ptbkeywords: Summary of keyword arguments ---------------------------- :indextrans: (str) 4-index transformation. The choice between ``cupy``, ``tensordot`` (default) and ``einsum``. ``tensordot`` is faster than ``einsum``. If ``DenseLinalgFactory`` is used, the memory requirement scales roughly as :math:`3N^4`. Due to the storage of the two-electron integrals, the total amount of memory increases to :math:`4N^4` .. note:: If Cupy is unavailable or unsuccessful, ``td`` is selected instead. :eref: (float) pCCD reference energy (default ``0.0``). eref gets overwritten if an :py:class:`~pybest.io.iodata.IOData` container is passed :threshold: (float) optimization threshold for amplitudes (default ``1e-6``) :maxiter: (int) maximum number of iterations (default ``200``) :singles: (boolean) account for single excitations in the projection manifold (default ``False``) :excludepairs: (boolean) exclude electron-pair excitations in the projection manifold (default ``False``) :guess: (1-dim np.array) initial guess (default ``None``). In not provided, an initial guess containing the MP2 amplitudes is generated. If a user-defined guess is provided, the elements of :math:`t_{ij}^{ab}` have to be indexed in C-like order Example Python scripts ====================== The complete examples can be found in the directory ``data/examples/perturbation_theory``. PT2SDd calculation on the water molecule ---------------------------------------- This is a basic example of how to perform a PT2SDd calculation in PyBEST. This script performs a PT2SDd calculation on the water molecule using the cc-pVDZ basis set. .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2sdd_water_cc-pvdz.py :caption: data/examples/perturbation_theory/pt2sdd_water_cc-pvdz.py :lines: 4- PT2SDo calculation on the water molecule ---------------------------------------- This is a basic example on how to perform a PT2SDo calculation in PyBEST. This script performs a series of PT2SDo calculations on the water molecule using the cc-pVDZ basis set. .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2sdo_water_cc-pvdz.py :caption: data/examples/perturbation_theory/pt2sdo_water_cc-pvdz.py :lines: 4- PT2MDd calculation on the water molecule ---------------------------------------- This is a basic example on how to perform a PT2MDd calculation in PyBEST. This script performs a PT2MDd calculation on the water molecule using the cc-pVDZ basis set. .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2mdd_water_cc-pvdz.py :caption: data/examples/perturbation_theory/pt2mdd_water_cc-pvdz.py :lines: 4- PT2MDo calculation on the water molecule ---------------------------------------- This is a basic example on how to perform a PT2MDo calculation in PyBEST. This script performs a series of PT2MDo calculations on the water molecule using the cc-pVDZ basis set. .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2mdo_water_cc-pvdz.py :caption: data/examples/perturbation_theory/pt2mdo_water_cc-pvdz.py :lines: 4- PT2b calculation on the water molecule -------------------------------------- This is a basic example on how to perform a PT2b calculation in PyBEST. This script performs a series of PT2b calculations on the water molecule using the cc-pVDZ basis set. .. literalinclude:: ../src/pybest/data/examples/perturbation_theory/pt2b_water_cc-pvdz.py :caption: data/examples/perturbation_theory/pt2mdo_water_cc-pvdz.py :lines: 4-