Creating a QChem Input File: Difference between revisions

From Thom Group Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 4: Line 4:
* Parameters (These are all of the calculation details such as DFT functional, SCF convergence criteria, etc.)
* 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.)
* FilePath (The filepath to save the input file to.)

==Example: Generating QChem Input Files for Different H-H Bond Lengths==
<pre>
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()
</pre>

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

<pre>
$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
</pre>


==[[RevQCMagic|Return to RevQCMagic]]==
==[[RevQCMagic|Return to RevQCMagic]]==

Revision as of 18:34, 30 March 2026

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