Skip to content

Commit

Permalink
Added verification of the availability of the requested calculation type
Browse files Browse the repository at this point in the history
  • Loading branch information
RaphaelRobidas committed Mar 30, 2022
1 parent b61e23a commit e457d9f
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 6 deletions.
7 changes: 6 additions & 1 deletion ccinput/packages/gaussian.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
get_npxyz,
)
from ccinput.constants import CalcType, ATOMIC_NUMBER, LOWERCASE_ATOMIC_SYMBOLS
from ccinput.exceptions import InvalidParameter
from ccinput.exceptions import InvalidParameter, ImpossibleCalculation


class GaussianCalculation:
Expand Down Expand Up @@ -65,6 +65,11 @@ def __init__(self, calc):
self.xyz_structure = ""
self.input_file = ""

if self.calc.type not in self.KEYWORDS:
raise ImpossibleCalculation(
f"Gaussian 16 does not support calculations of type {self.calc.type}"
)

self.handle_specifications()
self.handle_command()
self.handle_xyz()
Expand Down
28 changes: 27 additions & 1 deletion ccinput/packages/orca.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

from ccinput.constants import CalcType, ATOMIC_NUMBER, LOWERCASE_ATOMIC_SYMBOLS
from ccinput.utilities import get_method, get_basis_set, get_solvent, clean_xyz
from ccinput.exceptions import InvalidParameter, UnimplementedError
from ccinput.exceptions import (
InvalidParameter,
UnimplementedError,
ImpossibleCalculation,
)


class OrcaCalculation:
Expand All @@ -29,6 +33,19 @@ class OrcaCalculation:

input_file = ""

CALC_TYPES = [
CalcType.SP,
CalcType.OPT,
CalcType.CONSTR_OPT,
CalcType.FREQ,
CalcType.TS,
CalcType.MEP,
CalcType.NMR,
CalcType.UVVIS,
CalcType.MO,
CalcType.OPTFREQ,
]

def __init__(self, calc):
self.calc = calc
self.has_scan = False
Expand All @@ -42,6 +59,15 @@ def __init__(self, calc):
self.specifications = {}
self.solvation_radii = {}

if self.calc.type not in self.CALC_TYPES:
raise ImpossibleCalculation(
f"ORCA 5 does not support calculations of type {self.calc.type}"
)

if self.calc.type == CalcType.UVVIS:
raise UnimplementedError(
f"UV-Vis/TD-DFT calculations are currently not interfaced for ORCA 5"
)
self.handle_specifications()

self.handle_command()
Expand Down
6 changes: 5 additions & 1 deletion ccinput/packages/xtb.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from ccinput.constants import CalcType, ATOMIC_NUMBER, LOWERCASE_ATOMIC_SYMBOLS
from ccinput.utilities import get_solvent
from ccinput.exceptions import InvalidParameter
from ccinput.exceptions import InvalidParameter, ImpossibleCalculation


class XtbCalculation:
Expand All @@ -28,6 +28,10 @@ def __init__(self, calc):
self.force_constant = 1.0
self.confirmed_specifications = ""

if self.calc.type not in self.EXECUTABLES:
raise ImpossibleCalculation(
f"xtb does not support calculations of type {self.calc.type}"
)
self.handle_command()
self.handle_specifications()

Expand Down
16 changes: 15 additions & 1 deletion ccinput/tests/test_gaussian.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from ccinput.tests.testing_utilities import InputTests
from ccinput.exceptions import InvalidParameter
from ccinput.exceptions import InvalidParameter, ImpossibleCalculation


class GaussianTests(InputTests):
Expand Down Expand Up @@ -3138,3 +3138,17 @@ def test_pcm_custom_radii_and_bondi(self):
"""

self.assertTrue(self.is_equivalent(REF, inp.input_file))

def test_unavailable_calc_type(self):
params = {
"nproc": 8,
"mem": "10000MB",
"type": "Minimum Energy Path",
"file": "Cl.xyz",
"software": "Gaussian",
"method": "AM1",
"charge": "-1",
}

with self.assertRaises(ImpossibleCalculation):
self.generate_calculation(**params)
16 changes: 15 additions & 1 deletion ccinput/tests/test_orca.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from ccinput.tests.testing_utilities import InputTests
from ccinput.exceptions import InvalidParameter
from ccinput.exceptions import InvalidParameter, ImpossibleCalculation


class OrcaTests(InputTests):
Expand Down Expand Up @@ -1691,3 +1691,17 @@ def test_CPCM_custom_radii(self):
"""

self.assertTrue(self.is_equivalent(REF, inp.input_file))

def test_unavailable_calc_type(self):
params = {
"nproc": 8,
"type": "Conformational Search",
"file": "Cl.xyz",
"software": "ORCA",
"method": "HF",
"basis_set": "3-21G",
"charge": "-1",
}

with self.assertRaises(ImpossibleCalculation):
self.generate_calculation(**params)
12 changes: 11 additions & 1 deletion ccinput/tests/test_xtb.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from ccinput.tests.testing_utilities import InputTests
from ccinput.packages.xtb import XtbCalculation
from ccinput.exceptions import InvalidParameter
from ccinput.exceptions import InvalidParameter, ImpossibleCalculation


class XtbTests(InputTests):
Expand Down Expand Up @@ -678,3 +678,13 @@ def test_gfnff(self):
REF = "xtb ethanol.xyz --gfnff"

self.assertTrue(self.is_equivalent(REF, xtb.command))

def test_unavailable_calc_type(self):
params = {
"type": "TS Optimisation",
"file": "ethanol.xyz",
"software": "xtb",
}

with self.assertRaises(ImpossibleCalculation):
xtb = self.generate_calculation(**params)

0 comments on commit e457d9f

Please sign in to comment.