예제 #1
0
class TestSymmetrySort(TestCase):

    def setUp(self):
        point_group = MagicMock(rotation_symmetry=[], reflection_symmetry=[], inversion_symmetry=[], label='C_{1}')
        molecule = MagicMock(nuclei_array=None, point_group=point_group)
        self.symmetry = Symmetry(molecule, [])

    def test_sort_indices_1(self):
        out = self.symmetry.sort_index(6, 2, 1, 0)
        testing.assert_array_equal(out, (0, 1, 2, 6))

    def test_sort_indices_2(self):
        out = self.symmetry.sort_index(0, 0, 1, 0)
        testing.assert_array_equal(out, (0, 0, 0, 1))

    def test_sort_indices_3(self):
        out = self.symmetry.sort_index(1, 0, 0, 0)
        testing.assert_array_equal(out, (0, 0, 0, 1))

    def test_sort_indices_4(self):
        out = self.symmetry.sort_index(1, 0, 1, 0)
        testing.assert_array_equal(out, (0, 1, 0, 1))

    def test_sort_indices_5(self):
        out = self.symmetry.sort_index(2, 2, 1, 0)
        testing.assert_array_equal(out, (0, 1, 2, 2))

    def test_sort_indices_6(self):
        out = self.symmetry.sort_index(2, 1, 1, 0)
        testing.assert_array_equal(out, (0, 1, 1, 2))

    def test_sort_indices_7(self):
        out = self.symmetry.sort_index(1, 1, 1, 0)
        testing.assert_array_equal(out, (0, 1, 1, 1))

    def test_sort_indices_8(self):
        out = self.symmetry.sort_index(2, 1, 2, 0)
        testing.assert_array_equal(out, (0, 2, 1, 2))

    def test_sort_indices_9(self):
        out = self.symmetry.sort_index(1, 1, 0, 2)
        testing.assert_array_equal(out, (0, 2, 1, 1))
    def store_parallel(self, processes):
        keys = []
        for a in range(self.matrix_size):
            for b in range(self.matrix_size):
                for c in range(self.matrix_size):
                    for d in range(self.matrix_size):
                        if not (a > b or c > d or a > c or (a == c and b > d)):
                            keys.append((a, b, c, d))

        pool = Pool(processes)
        values = pool.starmap(self.calculate, keys)
        repulsion_dict = dict(zip(keys, values))

        repulsion_matrix = np.zeros((self.matrix_size, self.matrix_size, self.matrix_size, self.matrix_size))
        for a in range(self.matrix_size):
            for b in range(self.matrix_size):
                for c in range(self.matrix_size):
                    for d in range(self.matrix_size):
                        repulsion_matrix.itemset((a, b, c, d), repulsion_dict[Symmetry.sort(a, b, c, d)])

        return repulsion_matrix
 def calculate(self, i, j, k, l):
     if Symmetry.check_sym(self.basis_set_array[i], self.basis_set_array[j], self.basis_set_array[k], self.basis_set_array[l]):
         f_mn = 0
         primitive_array_i = self.basis_set_array[i].primitive_gaussian_array
         primitive_array_j = self.basis_set_array[j].primitive_gaussian_array
         primitive_array_k = self.basis_set_array[k].primitive_gaussian_array
         primitive_array_l = self.basis_set_array[l].primitive_gaussian_array
         for primitive_a in primitive_array_i:
             for primitive_b in primitive_array_j:
                 for primitive_c in primitive_array_k:
                     for primitive_d in primitive_array_l:
                         c_1 = primitive_a.contraction
                         c_2 = primitive_b.contraction
                         c_3 = primitive_c.contraction
                         c_4 = primitive_d.contraction
                         n_1 = primitive_a.normalisation
                         n_2 = primitive_b.normalisation
                         n_3 = primitive_c.normalisation
                         n_4 = primitive_d.normalisation
                         integral = self.integral(primitive_a, primitive_b, primitive_c, primitive_d)
                         f_mn += c_1 * c_2 * c_3 * c_4 * n_1 * n_2 * n_3 * n_4 * integral
         return f_mn
     else:
         return 0
예제 #4
0
 def test_sort_indices_1(self):
     out = Symmetry.sort(6, 2, 1, 0)
     testing.assert_array_equal(out, (0, 1, 2, 6))
예제 #5
0
 def test_sort_indices_9(self):
     out = Symmetry.sort(1, 1, 0, 2)
     testing.assert_array_equal(out, (0, 2, 1, 1))
예제 #6
0
 def test_sort_indices_8(self):
     out = Symmetry.sort(2, 1, 2, 0)
     testing.assert_array_equal(out, (0, 2, 1, 2))
예제 #7
0
 def test_sort_indices_2(self):
     out = Symmetry.sort(0, 0, 1, 0)
     testing.assert_array_equal(out, (0, 0, 0, 1))
예제 #8
0
 def setUp(self):
     point_group = MagicMock(rotation_symmetry=[], reflection_symmetry=[], inversion_symmetry=[], label='C_{1}')
     molecule = MagicMock(nuclei_array=None, point_group=point_group)
     self.symmetry = Symmetry(molecule, [])