Interface molpro

Interface to the Molpro package (commercial software). Tested with version 2010.

DFT-SAPT calculations

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.

Auxiliary basis sets

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.

Methods and capabilities

The interface implements following methods (specified by keyword 'method'):

The interface implements following solvent models (keyword 'solvent_model'):

Input structure

Optionally, following blocks can be defined in the input:

Keywords used

Keywords specific for this interface:

Other keywords used by this interface:

Examples

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

#===============================================================================

#-------------------------------------------------------------------------------
# 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: 30000
  parallel: 16
  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: 16
  mem: 30000
  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