Skip to content

qchem_custodian

Custodian handlers for QChem.

run_custodian

run_custodian(
    qchem_cmd: str = _DEFAULT_SETTING,
    qchem_cores: int = _DEFAULT_SETTING,
    qchem_local_scratch: str | Path = _DEFAULT_SETTING,
    qchem_use_error_handlers: bool = _DEFAULT_SETTING,
    qchem_custodian_max_errors: int = _DEFAULT_SETTING,
    qchem_nbo_exe: str | Path = _DEFAULT_SETTING,
    directory: str | Path | None = None,
) -> list[list[dict]]

Function to run QChem Custodian.

Parameters:

  • qchem_cmd (str, default: _DEFAULT_SETTING ) –

    Q-Chem command. Defaults to "qchem" in settings.

  • qchem_cores (int, default: _DEFAULT_SETTING ) –

    Number of cores to use for the Q-Chem calculation.

  • qchem_local_scratch (str | Path, default: _DEFAULT_SETTING ) –

    Compute-node local scratch directory in which Q-Chem should perform IO. Defaults to /tmp in settings.

  • qchem_use_error_handlers (bool, default: _DEFAULT_SETTING ) –

    Whether or not to employ error handlers. Defaults to True in settings.

  • qchem_custodian_max_errors (int, default: _DEFAULT_SETTING ) –

    Maximum number of errors to allow before stopping the run. Defaults to 5 in settings.

  • qchem_nbo_exe (str | Path, default: _DEFAULT_SETTING ) –

    The full path to the NBO executable.

  • directory (str | Path | None, default: None ) –

    The runtime directory.

Returns:

Source code in quacc/calculators/qchem/qchem_custodian.py
@requires(ob, "Openbabel must be installed. Try conda install -c conda-forge openbabel")
def run_custodian(
    qchem_cmd: str = _DEFAULT_SETTING,
    qchem_cores: int = _DEFAULT_SETTING,
    qchem_local_scratch: str | Path = _DEFAULT_SETTING,
    qchem_use_error_handlers: bool = _DEFAULT_SETTING,
    qchem_custodian_max_errors: int = _DEFAULT_SETTING,
    qchem_nbo_exe: str | Path = _DEFAULT_SETTING,
    directory: str | Path | None = None,
) -> list[list[dict]]:
    """
    Function to run QChem Custodian.

    Parameters
    ----------
    qchem_cmd
        Q-Chem command. Defaults to "qchem" in settings.
    qchem_cores
        Number of cores to use for the Q-Chem calculation.
    qchem_local_scratch
        Compute-node local scratch directory in which Q-Chem should perform IO.
        Defaults to /tmp in settings.
    qchem_use_error_handlers
        Whether or not to employ error handlers. Defaults to True in settings.
    qchem_custodian_max_errors
        Maximum number of errors to allow before stopping the run. Defaults to 5
        in settings.
    qchem_nbo_exe
        The full path to the NBO executable.
    directory
        The runtime directory.

    Returns
    -------
    list[list[dict]]
        Lists of lists of errors.
    """
    # Adapted from atomate.qchem.firetasks.run_calc
    from custodian import Custodian
    from custodian.qchem.handlers import QChemErrorHandler
    from custodian.qchem.jobs import QCJob

    # Set defaults
    qchem_cores = (
        SETTINGS.QCHEM_NUM_CORES if qchem_cores == _DEFAULT_SETTING else qchem_cores
    )
    qchem_cmd = SETTINGS.QCHEM_CMD if qchem_cmd == _DEFAULT_SETTING else qchem_cmd
    qchem_local_scratch = (
        SETTINGS.QCHEM_LOCAL_SCRATCH
        if qchem_local_scratch == _DEFAULT_SETTING
        else qchem_local_scratch
    )
    qchem_use_error_handlers = (
        SETTINGS.QCHEM_USE_ERROR_HANDLERS
        if qchem_use_error_handlers == _DEFAULT_SETTING
        else qchem_use_error_handlers
    )
    qchem_custodian_max_errors = (
        SETTINGS.QCHEM_CUSTODIAN_MAX_ERRORS
        if qchem_custodian_max_errors == _DEFAULT_SETTING
        else qchem_custodian_max_errors
    )
    qchem_nbo_exe = (
        SETTINGS.QCHEM_NBO_EXE if qchem_nbo_exe == _DEFAULT_SETTING else qchem_nbo_exe
    )

    # Error handlers for Q-Chem
    handlers = [QChemErrorHandler()] if qchem_use_error_handlers else []

    # Run Q-Chem
    jobs = [
        QCJob(
            qchem_command=qchem_cmd,
            max_cores=qchem_cores,
            calc_loc=str(qchem_local_scratch),
            nboexe=str(qchem_nbo_exe),
        )
    ]

    c = Custodian(
        handlers,
        jobs,
        max_errors=qchem_custodian_max_errors,
        terminate_on_nonzero_returncode=False,
        directory=directory,
    )

    return c.run()