Interface to the Molpro package (commercial software). Tested with version 2010.
Molpro implements the DFT-SAPT method for decomposition of interaction energies. The calculation consists of multiple steps and the setup is somewhat complex. However, Cuby allows complete automation of the procedure within a single input. See example 3 for details.
For HF and MP2 calculations, the specification of the auxiliary basis set is optional. If the auxiliary basis is not specified in Cuby input, Molpro choses a default one. In DFT-SAPT calculations, these basis sets must be selected in the input.
The following examples, along with all other files needed to run them, can be found in the directory cuby4/interfaces/molpro/examples
#===============================================================================
# Molpro example 1: setup, HF calculation
#===============================================================================
# Simple input for HF calculation, all other options use default values.
job: energy
#-------------------------------------------------------------------------------
# Calculation
#-------------------------------------------------------------------------------
interface: molpro
method: hf
basisset: cc-pVDZ
#-------------------------------------------------------------------------------
# Geometry
#-------------------------------------------------------------------------------
# Water molecule from the internal database. You can use a name of a geometry
# file instead, it should be located in the same directory as the input
geometry: A24:water
charge: 0
#-------------------------------------------------------------------------------
# Interface configuration
#-------------------------------------------------------------------------------
# Molpro executable
molpro_exe: /usr/local/molpro2010.1/arch/amd64-intel_11/bin/molpro
# Path to Molpro's libraries
molpro_lib_dir: /usr/local/molpro2010.1/arch/amd64-intel_11/lib/molpros_2010_1_Linux_x86_64_i8
# The following examples assume that the interface is set up in the config file.
#===============================================================================
# Molpro example 2: MP2 optimization
#===============================================================================
# MP2 optimization
job: optimize
#-------------------------------------------------------------------------------
# Calculation
#-------------------------------------------------------------------------------
interface: molpro
method: mp2
basisset: cc-pVDZ
# By default, density fitting is used in all calculations where it is applicable
# However, Molpro can not calculate MP2 gradient with density fitting so that
# it has to be switched off
density_fitting: none
#-------------------------------------------------------------------------------
# Geometry
#-------------------------------------------------------------------------------
# Water molecule from the internal database
geometry: A24:water
charge: 0
#===============================================================================
# Molpro example 3: DFT-SAPT calculation
#===============================================================================
# This complex example demonstrates the automation of a DFT-SAPT calculation
# which consists of two steps: calculation of the asymptotic shift for each of
# the monomers, and the DFT-SAPT calculations itself.
# The shifts are calculated in Turbomole and only the DFT-SAPT is calculated
# in Molpro (using density fitting).
#===============================================================================
# Global setup
#===============================================================================
# The input uses shared blocks to define the setup that is reused in different
# steps of the calculation.
# Here, the global setup is provided. It is assumed that both monomers are
# neutral, otherwise, the charges has to be modified in the inputs below.
# The input geometry:
shared_geometry: &geo_setup
geometry: S66:01
# Basis set used in the calculation of the shifts and for DFT-SAPT:
shared_basis_shift: &basis_setup_shift
basisset: aug-cc-pVTZ
shared_basis_sapt: &basis_setup_sapt
basisset: aug-cc-pVTZ
auxiliary_basis_scf: aug-cc-pVTZ
auxiliary_basis_mp2: aug-cc-pVTZ
#===============================================================================
#-------------------------------------------------------------------------------
# Shared setup
#-------------------------------------------------------------------------------
# Shift calculations setup
shared_shift: &shift_setup
job: energy
interface: turbomole
method: dft
functional: pbe0
<<: *basis_setup_shift
job_cleanup: no
existing_calc_dir: read_results
mem: 3000
parallel: 4
parallel_mode: mpi
#-------------------------------------------------------------------------------
# Multistep calculation
#-------------------------------------------------------------------------------
# At the first level, there are two steps: calculation of shifts and DFT-SAPT
job: multistep
steps: shifts, sapt
#-------------------------------------------------------------------------------
# Calculation of shifts
#-------------------------------------------------------------------------------
calculation_shifts:
# The calculation of shifts is done in four steps - calculation of neutral
# and ionized monomers
job: multistep
steps:
- shift_a_neu
- shift_a_ion
- shift_b_neu
- shift_b_ion
# After the calculations, the shifts are computed, printed, and inserted into
# the input for the DFT-SAPT calculation. This is achieved with the following
# ruby code which works with the internal data in Cuby:
multistep_result_eval: |
shift_a = steps['shift_a_ion'].energy -
steps['shift_a_neu'].energy +
steps['shift_a_neu'].molecular_orbitals.homo.energy_kcal
puts "Shift(A) = #{shift_a}"
shift_b = steps['shift_b_ion'].energy -
steps['shift_b_neu'].energy +
steps['shift_b_neu'].molecular_orbitals.homo.energy_kcal
puts "Shift(B) = #{shift_b}"
@settings.parent[:calculation_sapt, :dft_sapt_shift_a] = shift_a
@settings.parent[:calculation_sapt, :dft_sapt_shift_b] = shift_b
# Shift for molecule A
calculation_shift_a_neu:
step_queue: yes
<<: *shift_setup
<<: *geo_setup
selection: "%molecule(1)"
charge: 0
print: molecular_orbitals
calculation_shift_a_ion:
step_queue: yes
<<: *shift_setup
<<: *geo_setup
selection: "%molecule(1)"
charge: 1
multiplicity: 2
spin_restricted: uhf
# Shift for molecule B
calculation_shift_b_neu:
step_queue: yes
<<: *shift_setup
<<: *geo_setup
selection: "%molecule(2)"
charge: 0
print: molecular_orbitals
calculation_shift_b_ion:
<<: *shift_setup
<<: *geo_setup
selection: "%molecule(2)"
charge: 1
multiplicity: 2
spin_restricted: uhf
#-------------------------------------------------------------------------------
# SAPT calculation
#-------------------------------------------------------------------------------
# Setup for DFT-SAPT itself
calculation_sapt:
interface: molpro
parallel: 4
mem: 3000
parallel_mode: shm
job: energy
method: dft-sapt
density_fitting: both
dft_sapt_nl_exch: 0.0
print: energy_decomposition
<<: *basis_setup_sapt
<<: *geo_setup
job_cleanup: no
existing_calc_dir: read_results
# Set by the previous step:
# dft_sapt_shift_a: 0.0
# dft_sapt_shift_b: 0.0