Source code for tcutility.job.dftb

import os

from tcutility import results
from tcutility.job.ams import AMSJob

__all__ = ["DFTBJob"]

j = os.path.join


[docs] class DFTBJob(AMSJob): """ Setup and run a density functional with tight-binding (DFTB) calculation as implemented in the Amsterdam modelling suite (AMS). This class supports all methods of the parent :class:`AMSJob <tcutility.job.ams.AMSJob>`. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.settings = results.Result() self._model = None self.kspace("Good") self.single_point() self.model("GFN1-xTB") self.solvent("vacuum")
[docs] def kspace(self, quality: str = "Good"): """ Set the k-space integration quality for this job. Args: quality: the type of basis-set to use. Default is ``Good``. """ self.settings.input.DFTB.kspace.quality = quality
[docs] def model(self, name: str = "GFN1-xTB", dispersion: str = None, parameter_dir: str = None): """ Set the model Hamiltonian for the job to use. Args: name: name of the model Hamiltonian. This is the same name as the one in the DFTB gui. Default is ``GFN1-xTB``. """ self.settings.input.DFTB.Model = name if dispersion is None: for disp_suffix in ["-UFF", "-ULG", "-D2", "-D3-BJ", "-D4", "-Auto"]: if not name.endswith(disp_suffix): continue self.settings.input.DFTB.DispersionCorrection = disp_suffix[1:] self.settings.input.DFTB.Model[: -len(disp_suffix)] else: self.settings.input.DFTB.DispersionCorrection = dispersion if parameter_dir: self.settings.input.DFTB.ResourcesDir = parameter_dir
[docs] def solvent(self, name: str = None, grid_size=974): """ Model solvation using the GBSA model. Args: name: the name of the solvent you want to use. Must be ``None``, ``Acetone``, ``Acetonitrile``, ``CHCl3``, ``CS2``, ``DMSO``, ``Ether``, ``H2O``, ``Methanol``, ``THF`` or ``Toluene``. grid_size: the size of the grid used to construct the solvent accessible surface. Must be ``230``, ``974``, ``2030`` or ``5810``. """ if name == "vacuum": self.settings.input.DFTB.pop("solvation", None) return self.settings.input.DFTB.Solvation.Solvent = name self.settings.input.DFTB.Solvation.SurfaceGrid = grid_size
if __name__ == "__main__": with DFTBJob(test_mode=False, overwrite=True) as job: job.rundir = "tmp/SN2" job.name = "DFTB" job.molecule("../../../test/fixtures/xyz/transitionstate_radical_addition.xyz") job.sbatch(p="tc", ntasks_per_node=15) job.model("GFN1-xTB") job.optimization() job.kspace("Good") job.solvent("H2O")