Creating a QChem Input File

From Thom Group Wiki
Revision as of 18:34, 30 March 2026 by Jst55 (talk | contribs)
Jump to navigation Jump to search

RevQCMagic has an in-built QChem input file writer. The writer uses four things to generate an input file:

  • Configuration (The Configuration object contains all information which gives a state context, i.e. it contains the nuclei involved, the geometry of the nuclei, the basis set for each atom, etc)
  • MetaData (For a QChem input file this is the total charge and the spin.)
  • Parameters (These are all of the calculation details such as DFT functional, SCF convergence criteria, etc.)
  • FilePath (The filepath to save the input file to.)

Example: Generating QChem Input Files for Different H-H Bond Lengths

from qcmagic.core.cspace.configurationspace import Configuration
from qcmagic.core.cspace.molecule.atom import Atom
from qcmagic.core.cspace.molecule.atomfragment import AtomFragment
from qcmagic.core.cspace.molecule.geometry import Geometry
from qcmagic.auxiliary.linearalgebra3d import Vector3D
from qcmagic.auxiliary.qcmagic_standards import ANGSTROM_TO_BOHR

from qcmagic.interfaces.input_writers.qchem_input_writer.qchem_input_writer import (
    QChemMetadata,
    QChemInputWriter,
)

import numpy as np

def generate_H2_STO3G_Qchem_input_files():
    # Considering H-H bond lengths from 0.2 to 2,1 Angstroms
    for radius in np.linspace(0.2, 2.1, 20):
        # RevQCMagic uses Bohr whereas QChem uses Angstroms
        radius_bohr = radius * ANGSTROM_TO_BOHR

        # For each new bond length define a new configuration
        config = Configuration()
        metadata = QChemMetadata()

        parameters = {
            'job_type':         'sp',
            'basis':            'STO-3G',
            'method':           'HF',
            'symmetry_ignore':  'true',
            'scf_convergence':  '11',
            'thresh':           '14',
            'unrestricted':     'false',
            'iqmol_fchk':       'true',
            'max_scf_cycles':   '500',
            'mem_total':        '5976800'
        }
        metadata.update_from_dictionary(parameters)
        metadata.state_properties = {"total_charge": 0, "spin_projection": 0}

        coordsystem = AtomFragment(parent=None)
        H2 = AtomFragment(coordsystem)

        H2.add(Atom('H', H2, Vector3D([0.00, 0.00, -radius_bohr/2])))
        H2.add(Atom('H', H2, Vector3D([0.00, 0.00, +radius_bohr/2])))

        config.add_subconfiguration(Geometry([(None, None)], H2))

        writer = QChemInputWriter(config)
        filepath = f'H2_STO-3G_radius_{radius:.1f}A.inp'
        writer(filepath, metadata)

generate_H2_STO3G_Qchem_input_files()

The above code generates input files which all look like the one given below.

$molecule
    0 1
    H    +0.00000000000000    +0.00000000000000    -0.10000000000000
    H    +0.00000000000000    +0.00000000000000    +0.10000000000000
$end
$rem
    basis STO-3G
    job_type sp
    method hf
    symmetry_ignore true
    scf_convergence 11
    thresh 14
    unrestricted false
    iqmol_fchk true
    max_scf_cycles 500
    mem_total 5976800
$end

Return to RevQCMagic