Skip to content

Python-based implementation of electronic structure theories for simulating spectroscopic properties

License

Notifications You must be signed in to change notification settings

sokolov-group/prism

Repository files navigation

Prism

Prism is a Python implementation of electronic structure theories for simulating spectroscopic properties. Currently, Prism features the methods of multireference algebraic diagrammatic construction theory (MR-ADC) for simulating core-ionized states (CVS-IP).

How to install

Requirements

Installation

  1. Install PySCF and make sure it is included in the $PYTHONPATH environment variable
  2. Clone the Prism repository:
git clone https://github.com/sokolov-group/prism.git
  1. Include the path to the folder where Prism is located in the $PYTHONPATH environment variable
  2. Optional: download opt_einsum and include it in the $PYTHONPATH environment variable
  3. Run tests to make sure the code is working properly

How to use

The Prism calculations are run by means of creating and executing a Python script, which serves as the input file. The electronic structure methods implemented in Prism require one- and two-electron integrals, molecular orbitals, and reference wavefunctions, which must be computed using PySCF. To set up a calculation with Prism, import the following modules (in addition to any others you may need):

from pyscf import gto, scf, mcscf
import prism.interface
import prism.mr_adc

Next, as described in the PySCF user guide, specify molecular geometry, then run reference Hartree-Fock and complete active space self-consistent field (CASSCF) calculations. Below is an example of reference CASSCF calculation for the hydrogen fluoride (HF) molecule with the cc-pvdz basis set and 6 electrons in 6 orbitals (6e, 6o) active space.

mol = gto.M(atom = 'H 0 0 0; F 0 0 0.91', basis = 'cc-pvdz')
mf = scf.RHF(mol).run()
mc = mcscf.CASSCF(mf, 6, 6).run()

Once the reference calculation is successfully completed, the objects of Hartree-Fock and CASSCF classes (mf and mc) are passed to Prism and the spectroscopic properties are calculated:

interface = prism.interface.PYSCF(mf, mc, opt_einsum = True)
mr_adc = prism.mr_adc.MRADC(interface)
mr_adc.method = "mr-adc(2)"
mr_adc.method_type = "cvs-ip"
mr_adc.nroots = 10
mr_adc.ncvs = 1
e, p, x = mr_adc.kernel()

In the example above, a calculation using CVS-IP-MR-ADC(2) for 10 excited states (roots) is set up. The parameter ncvs controls the number of core orbitals in the hydrogen fluoride molecule, for which excited states are calculated. For example, setting ncvs = 1 corresponds to exciting electrons from the 1s orbitals of fluorine atoms, while ncvs = 2 corresponds to probing the 2s excitations. Other examples can be found here.

Methods and algorithms

Multireference algebraic diagrammatic construction theory

Multireference algebraic diagrammatic construction theory can simulate a variety of excited electronic states (neutral excitations, ionization, electron attachment, core excitation and ionization). The type of excited states is controled by the method_type parameter of MR-ADC class. Currently, the only excited states that can be simulated using MR-ADC in Prism are core-ionized states probed in photoelectron spectroscopy. These excitations are simulated by introducing core-valence separation approximation (CVS) and the resulting method is abbreviated as CVS-IP-MR-ADC.

The CVS-IP-MR-ADC calculations can be performed at four different levels of theory that are specified using the method parameter: 'mr-adc(0)', 'mr-adc(1)', 'mr-adc(2)', 'mr-adc(2)-x'.

Other important parameters are:

  • ncvs (integer): The number of core orbitals to be included in the simulation. This number should ideally correspond to the index of highest-energy occupied orbital, from which electrons are allowed to be excited from. E.g., probing the 1s orbital of C in CO can be done by setting ncvs = 2.
  • nroots (integer): The number of excited states (or transitions) to be calculated.
  • max_cycle (integer): The maximum number of iterations in the Davidson diagonalization of the MR-ADC effective Hamiltonian matrix.
  • tol_e (float): Convergence tolerance for the excitation energies in the Davidson diagonalization.
  • tol_davidson (float): Convergence tolerance for the residual in the Davidson diagonalization.
  • analyze_spec_factor (boolean): Request the orbital analysis of intensity contributions for states with the spectroscopic factor greater than spec_factor_print_tol (float).
  • s_thresh_singles (float): Parameter for removing linearly dependent single excitations. For experts only.
  • s_thresh_doubles (float): Parameter for removing linearly dependent double excitations. For experts only.

Additionally, the memory and disk usage can be greatly reduced by approximating the two-electron integrals with density fitting (DF). An example of MR-ADC calculation with density fitting can be found here. DF is not used by default but can be invoked using the density_fit() function call. One can overwrite the default auxiliary basis with a specified one (for example, density_fit('cc-pvdz-ri'). More details about setting up calculations with density fitting can be found on the Pyscf website. Please note that DF is an approximation, which accuracy depends on the quality of the auxiliary basis set. Provided that a good auxiliary basis set is used, the DF errors are usually less than 0.01 eV in excitation energy. We recommend to use the RI- (or RIFIT-) auxiliary basis sets to approximate the integrals in the MR-ADC calculations. The reference CASSCF calculations can be run either using the exact or density-fitted two-electron integrals approximated using the JKFIT-type auxiliary basis sets.

The excited states with large spectroscopic factors can be visualized by generating the Dyson molecular orbitals:

from prism.mr_adc_cvs_ip import compute_dyson_mo
from pyscf.tools import molden
dyson_mos = compute_dyson_mo(mr_adc, x)
molden.from_mo(mol, 'mr_adc_dyson_mos.molden', dyson_mos)

Here, mr_adc_dyson_mos.molden is the molden file that can be processed using a variety of orbital visualization software (e.g., JMOL).

Short list of features:

CVS-IP-MR-ADC

  • Excitation energies up to MR-ADC(2)-X
  • Photoelectron transition intensities (spectroscopic factors) up to MR-ADC(2)-X
  • Dyson orbitals
  • Orbital analysis of contributions to spectroscopic factors

Authors and contributors

Prism Interface

NEVPT2 amplitudes

CVS-IP-MR-ADC method

Contributors to the spin-orbital Prism (pilot implementation)

How to cite

If you include results from Prism in your publication, please cite:

About

Python-based implementation of electronic structure theories for simulating spectroscopic properties

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages