def test_create_nuclei_array_returns_array_of_nuclei_with_names(self): nuclei_array, electron_count, multiplicity = read_mol_file('HeH+.mol') self.assertEquals(nuclei_array[0].element, 'HELIUM') self.assertEquals(nuclei_array[1].element, 'HYDROGEN')
def test_electron_count_return_two(self): nuclei_array, electron_count, multiplicity = read_mol_file('HeH+.mol') self.assertEquals(electron_count, 2)
def test_create_nuclei_array_returns_array_of_nuclei_with_mass(self): nuclei_array, electron_count, multiplicity = read_mol_file('HeH+.mol') self.assertEquals(nuclei_array[0].mass, 4) self.assertEquals(nuclei_array[1].mass, 1)
def test_create_nuclei_array_returns_array_of_nuclei_with_coordinates(self): nuclei_array, electron_count, multiplicity = read_mol_file('HeH+.mol') testing.assert_array_equal(nuclei_array[0].coordinates, (0.0, 0.0, 0.487732042)) testing.assert_array_equal(nuclei_array[1].coordinates, (0.0, 0.0, -0.975464083))
def start(mol, basis, method, processes, symmetry=False): np.set_printoptions(linewidth=100000, threshold=np.inf) start_time = time.clock() electron_energy = correlation = 0.0 nuclei_array, electrons, multiplicity = read_mol_file(mol) if symmetry: molecule = MoleculeFactory().point_group(nuclei_array) else: molecule = Molecule(nuclei_array, PointGroup([], [], [], [], 'C_{1}')) basis_set_array = read_basis_set_file(basis, molecule.nuclei_array) symmetry_object = Symmetry(molecule.point_group, basis_set_array) coulomb_law_matrix = coulomb_matrix(nuclei_array) nuclear_repulsion = coulomb_law_matrix.sum() / 2 print('\n*************************************************************************************************') print('\nA BASIC QUANTUM CHEMICAL PROGRAM IN PYTHON\n\n\n{}'.format([x.element for x in nuclei_array])) print('\nNUCLEAR REPULSION ARRAY\n{}'.format(coulomb_law_matrix)) if method == 'RHF': electron_energy = RestrictedHF(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes).begin_scf()[0] if method == 'UHF': electron_energy = UnrestrictedHF(molecule.nuclei_array, basis_set_array, electrons, multiplicity, symmetry_object, processes).begin_scf()[0] if method == 'GUHF': electron_energy = BlockedHartreeFock(molecule.nuclei_array, basis_set_array, electrons, multiplicity, symmetry_object, processes).begin_scf()[0] if method == 'MP2': mp2 = MoellerPlesset( RestrictedHF(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes)) electron_energy = mp2.hartree_fock_energy correlation = mp2.second_order() if method == 'TDHF': electron_energy = TimeDependentHartreeFock( RestrictedHF(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes) ).calculate(tda=False) if method == 'CIS': electron_energy = TimeDependentHartreeFock( RestrictedHF(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes) ).calculate(tda=True) if method[0] == 'DFT': electron_energy = RestrictedKohnSham(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes, method[1], method[2]).begin_scf()[0] if method == 'CCSD': ccsd = CoupledClusterSinglesDoubles( RestrictedHF(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes)) electron_energy = ccsd.hartree_fock_energy correlation = ccsd.calculate_singles_doubles()[0] if method == 'CCSD(T)': ccsd = CoupledClusterPerturbativeTriples( RestrictedHF(molecule.nuclei_array, basis_set_array, electrons, symmetry_object, processes)) electron_energy = ccsd.hartree_fock_energy correlation = ccsd.calculate_perturbative_triples() total_energy = electron_energy + nuclear_repulsion + correlation print('NUCLEAR REPULSION ENERGY: ' + str(nuclear_repulsion) + ' a.u.') print('SCF ENERGY: ' + str(electron_energy) + ' a.u.') print('CORRELATION ENERGY: ' + str(correlation) + ' a.u.') print('TOTAL ENERGY: ' + str(total_energy) + ' a.u.') print('\n*************************************************************************************************') print('\nTIME TAKEN: ' + str(time.clock() - start_time) + 's') print("\nWhat I cannot create I cannot understand - Richard Feynman\n") return total_energy