From 992fec32f877bd1e08887a924ea279759dff1154 Mon Sep 17 00:00:00 2001 From: kfir4444 Date: Mon, 1 Jul 2024 15:06:10 +0300 Subject: [PATCH] Tests: Molpro MRCI implementation --- arc/job/adapters/molpro_test.py | 124 ++++++++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 7 deletions(-) diff --git a/arc/job/adapters/molpro_test.py b/arc/job/adapters/molpro_test.py index c73aeaa974..aeb610d5ac 100644 --- a/arc/job/adapters/molpro_test.py +++ b/arc/job/adapters/molpro_test.py @@ -43,6 +43,26 @@ def setUpClass(cls): species=[ARCSpecies(label='spc1', xyz=['O 0 0 1'])], testing=True, ) + cls.job_3 = MolproAdapter(execution_type='queue', + job_type='sp', + level=Level(method='MRCI', basis='aug-cc-pvtz-f12'), + project='test', + project_directory=os.path.join(ARC_PATH, 'arc', 'testing', 'test_MolproAdapter_3'), + species=[ARCSpecies(label='HNO_t', xyz=["""N -0.08142 0.37454 0.00000 + O 1.01258 -0.17285 0.00000 + H -0.93116 -0.20169 0.00000"""])], + testing=True, + ) + cls.job_4 = MolproAdapter(execution_type='queue', + job_type='sp', + level=Level(method='MRCI-F12', basis='aug-cc-pvtz-f12'), + project='test', + project_directory=os.path.join(ARC_PATH, 'arc', 'testing', 'test_MolproAdapter_4'), + species=[ARCSpecies(label='HNO_t', xyz=["""N -0.08142 0.37454 0.00000 + O 1.01258 -0.17285 0.00000 + H -0.93116 -0.20169 0.00000"""])], + testing=True, + ) def test_set_cpu_and_mem(self): """Test assigning number of cpu's and memory""" @@ -57,26 +77,26 @@ def test_set_input_file_memory(self): self.job_1.input_file_memory = None self.job_1.cpu_cores = 48 self.job_1.set_input_file_memory() - self.assertEqual(self.job_1.input_file_memory, 40) + self.assertEqual(self.job_1.input_file_memory, 438) self.job_1.cpu_cores = 8 self.job_1.set_input_file_memory() - self.assertEqual(self.job_1.input_file_memory, 235) + self.assertEqual(self.job_1.input_file_memory, 438) self.job_1.input_file_memory = None self.job_1.cpu_cores = 1 self.job_1.set_input_file_memory() - self.assertEqual(self.job_1.input_file_memory, 1880) + self.assertEqual(self.job_1.input_file_memory, 438) def test_write_input_file(self): - """Test writing Gaussian input files""" + """Test writing Molpro input files""" self.job_1.cpu_cores = 48 self.job_1.set_input_file_memory() self.job_1.write_input_file() with open(os.path.join(self.job_1.local_path, input_filenames[self.job_1.job_adapter]), 'r') as f: content_1 = f.read() job_1_expected_input_file = """***,spc1 -memory,40,m; +memory,Total=438,m; geometry={angstrom; O 0.00000000 0.00000000 1.00000000} @@ -105,7 +125,7 @@ def test_write_input_file(self): with open(os.path.join(self.job_2.local_path, input_filenames[self.job_2.job_adapter]), 'r') as f: content_2 = f.read() job_2_expected_input_file = """***,spc1 -memory,40,m; +memory,Total=438,m; geometry={angstrom; O 0.00000000 0.00000000 1.00000000} @@ -128,6 +148,96 @@ def test_write_input_file(self): """ self.assertEqual(content_2, job_2_expected_input_file) + def test_write_mrci_input_file(self): + """Test writing MRCI Molpro input files""" + self.job_3.cpu_cores = 48 + self.job_3.set_input_file_memory() + self.job_3.write_input_file() + with open(os.path.join(self.job_3.local_path, input_filenames[self.job_3.job_adapter]), 'r') as f: + content_3 = f.read() + job_3_expected_input_file = """***,HNO_t +memory,Total=438,m; + +geometry={angstrom; +N -0.08142000 0.37454000 0.00000000 +O 1.01258000 -0.17285000 0.00000000 +H -0.93116000 -0.20169000 0.00000000} + +gprint,orbitals; + +basis=aug-cc-pvtz-f12 + + + +int; +{hf; +maxit,1000; +wf,spin=0,charge=0;} + +{casscf; + maxit,999; + wf,spin=0,charge=0;} + +{mrci; + maxit,999; + wf,spin=0,charge=0;}; + + + + +E_mrci=energy; +E_mrci_Davidson=energd; + +table,E_mrci,E_mrci_Davidson; +---; + +""" + self.assertEqual(content_3, job_3_expected_input_file) + + self.job_4.cpu_cores = 48 + self.job_4.set_input_file_memory() + self.job_4.write_input_file() + with open(os.path.join(self.job_4.local_path, input_filenames[self.job_4.job_adapter]), 'r') as f: + content_4 = f.read() + job_4_expected_input_file = """***,HNO_t +memory,Total=438,m; + +geometry={angstrom; +N -0.08142000 0.37454000 0.00000000 +O 1.01258000 -0.17285000 0.00000000 +H -0.93116000 -0.20169000 0.00000000} + +gprint,orbitals; + +basis=aug-cc-pvtz-f12 + + + +int; +{hf; +maxit,1000; +wf,spin=0,charge=0;} + +{casscf; + maxit,999; + wf,spin=0,charge=0;} + +{mrci-f12; + maxit,999; + wf,spin=0,charge=0;}; + + + + +E_mrci=energy; +E_mrci_Davidson=energd; + +table,E_mrci,E_mrci_Davidson; +---; + +""" + self.assertEqual(content_4, job_4_expected_input_file) + def test_set_files(self): """Test setting files""" job_1_files_to_upload = [{'file_name': 'submit.sub', @@ -155,7 +265,7 @@ def tearDownClass(cls): A function that is run ONCE after all unit tests in this class. Delete all project directories created during these unit tests """ - for folder in ['test_MolproAdapter_1', 'test_MolproAdapter_2']: + for folder in ['test_MolproAdapter_1', 'test_MolproAdapter_2', 'test_MolproAdapter_3', 'test_MolproAdapter_4']: shutil.rmtree(os.path.join(ARC_PATH, 'arc', 'testing', folder), ignore_errors=True)