Beispiel #1
0
  def test_values_2(self):

    masses = np.array([1.]*11)
    hmat   = np.array([[0.,0.,0.]]*3)
    coords = np.array([[ 1., 0., 0.],  # 1:    0
                       [ 1., 1.,-1.],  # 2:   45
                       [ 0., 1.,-2.],  # 3:   90
                       [-1., 1.,-3.],  # 4:  135
                       [-1., 0.,-4.],  # 5:  180
                       [ 0., 0., 0.],  # central
                       [ 0., 0., 1.],  # central
                       [ 1., 0., 1.],  # 1:    0
                       [ 1.,-1., 2.],  # 2:  -45
                       [ 0.,-1., 3.],  # 3:  -90
                       [-1.,-1., 4.]]) # 4: -135

    for ivals, ref in [([1,1],   0),([1,2],  45),([1,3],  90),([1,4], 135),
                       ([2,1],  45),([2,2],  90),([2,3], 135),([2,4], 180),
                       ([3,1],  90),([3,2], 135),([3,3], 180),([3,4],-135),
                       ([4,1], 135),([4,2], 180),([4,3],-135),([4,4], -90),
                       ([5,1], 180),([5,2],-135),([5,3], -90),([5,4], -45)]:
      ric = RIC()
      ric.add_torsion([1,2,3,4,5,6,7,8,9,10,11,0],ivals=ivals)
      ric.setup(masses)
      ric.construct_b_matrix(hmat,coords)
      res = ric.get_val_torsions()[0]
      self.assertAlmostEqual(res,np.radians(ref))
      del ric
Beispiel #2
0
    def test_2(self):
        """Multiple repeated calls"""

        ric = RIC()
        ric.add_stretch([1, 2])
        ric.add_stretch([2, 3])
        ric.add_stretch([3, 4])
        ric.add_in_bend([1, 2, 3])
        ric.add_in_bend([2, 3, 4])
        ric.add_torsion([1, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0])
        ric.add_eckart()
        ric.setup(self.masses)

        bmat = ric.construct_b_matrix(None, self.coords)
        b1 = np.copy(bmat)
        bmat = ric.construct_b_matrix(None, self.coords)
        b2 = np.copy(bmat)
        self.assertEqual(np.max(np.abs(b1 - b2)), 0)

        bmat_inv, rank = ric.invert_b_matrix()
        i1 = np.copy(bmat_inv)
        bmat = ric.construct_b_matrix(None, self.coords)
        b3 = np.copy(bmat)
        bmat_inv, rank = ric.invert_b_matrix()
        i2 = np.copy(bmat_inv)
        self.assertEqual(np.max(np.abs(b1 - b3)), 0)
        self.assertEqual(np.max(np.abs(i1 - i2)), 0)

        hess = ric.project_hessian(self.hess)
        h1 = np.copy(hess)
        bmat = ric.construct_b_matrix(None, self.coords)
        b4 = np.copy(bmat)
        bmat_inv, rank = ric.invert_b_matrix()
        i3 = np.copy(bmat_inv)
        hess = ric.project_hessian(self.hess)
        h2 = np.copy(hess)
        hess = ric.get_ric_hessian()
        h3 = np.copy(hess)
        self.assertEqual(np.max(np.abs(b1 - b4)), 0)
        self.assertEqual(np.max(np.abs(i1 - i3)), 0)
        self.assertEqual(np.max(np.abs(h1 - h2)), 0)
        self.assertEqual(np.max(np.abs(h1 - h3)), 0)
Beispiel #3
0
  def test_values_1(self):

    masses = np.array([1.]*4)
    hmat   = np.array([[0.,0.,0.]]*3)

    for coords, ref in [([[ 0,-1, 0],[0,0,0],[0,0,1],[1,0,1]], -90),
                        ([[ 1,-1, 0],[0,0,0],[0,0,1],[1,0,1]], -45),
                        ([[ 1, 0, 0],[0,0,0],[0,0,1],[1,0,1]],   0),
                        ([[ 1, 0,-1],[0,0,0],[0,0,1],[1,0,2]],   0),
                        ([[ 1, 1, 0],[0,0,0],[0,0,1],[1,0,1]],  45),
                        ([[ 2, 2, 0],[0,0,0],[0,0,1],[3,0,1]],  45),
                        ([[ 0, 1, 0],[0,0,0],[0,0,1],[1,0,1]],  90),
                        ([[-1, 0, 0],[0,0,0],[0,0,1],[1,0,1]], 180)]:
      ric = RIC()
      ric.add_torsion([1,2,3,4])
      ric.setup(masses)
      ric.construct_b_matrix(hmat,np.array(coords,dtype=np.float64))
      res = ric.get_val_torsions()[0]
      self.assertAlmostEqual(res,np.radians(ref))
      del ric
Beispiel #4
0
    def test_1(self):

        ric = RIC()
        ric.add_stretch([1, 2])
        ric.add_stretch([2, 3])
        ric.add_stretch([3, 4])
        ric.add_in_bend([1, 2, 3])
        ric.add_in_bend([2, 3, 4])
        ric.add_torsion([1, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0])
        ric.add_eckart()
        ric.setup(self.masses)

        bmat = ric.construct_b_matrix(None, self.coords)

        bmat_inv, rank = ric.invert_b_matrix()
        bmat_inv_ = nl.pinv(bmat)
        self.assertLess(np.max(np.abs(bmat_inv - bmat_inv_)), 7.e-14)

        hess = ric.project_hessian(self.hess)
        hess_ = np.dot(bmat_inv.T, np.dot(self.hess, bmat_inv))
        self.assertLess(np.max(np.abs(hess - hess_)), 3.e-13)
Beispiel #5
0
    def test_8(self):

        masses = np.array(range(1, 10), dtype=np.float64)

        ric = RIC()
        ric.add_stretch([2, 3])
        ric.add_in_bend([3, 4, 5])
        ric.add_out_bend([4, 5, 6, 7])
        ric.add_lin_bend([5, 6, 7], 'xy')
        ric.add_torsion([1, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8])
        ric.add_torsion([3, 4, 0, 0, 0, 5, 6, 7, 8, 9, 0, 0])
        ric.add_eckart(rots=[True, False, True])
        ric.setup(masses)

        self.assertTrue(np.all(ric._ric.atomic_masses == masses))
        self.assertListEqual(list(ric._ric.cart_coords.shape), [3, 9])
        self.assertListEqual(list(ric._ric.cart_hessian.shape), [3 * 9, 3 * 9])
        self.assertListEqual(list(ric._ric.ric_ibr_stretches), [1])
        self.assertListEqual(list(ric._ric.ric_ibr_in_bends), [2])
        self.assertListEqual(list(ric._ric.ric_ibr_out_bends), [3])
        self.assertListEqual(list(ric._ric.ric_ibr_lin_bends), [4, 5])
        self.assertListEqual(list(ric._ric.ric_ibr_torsions), [6, 7])
        self.assertListEqual(list(ric._ric.ric_ibr_eckart_trans), [8, 9, 10])
        self.assertListEqual(list(ric._ric.ric_ibr_eckart_rots), [11, 12])
        self.assertListEqual(list(ric._ric.bmat.shape), [3 * 9, 12])
        self.assertEqual(ric._ric.ric_val_stretches.size, 1)
        self.assertEqual(ric._ric.ric_val_in_bends.size, 1)
        self.assertEqual(ric._ric.ric_val_out_bends.size, 1)
        self.assertEqual(ric._ric.ric_val_lin_bends.size, 2)
        self.assertListEqual(list(ric._ric.ric_hessian.shape), [12, 12])

        self.assertEqual(ric.num_ric, 12)
        self.assertEqual(ric.num_stretch, 1)
        self.assertEqual(ric.num_in_bend, 1)
        self.assertEqual(ric.num_out_bend, 1)
        self.assertEqual(ric.num_lin_bend, 2)
        self.assertEqual(ric.num_torsion, 2)
        self.assertEqual(ric.num_eckart, 5)
Beispiel #6
0
  def test_1(self):

    ric = RIC()
    ric.add_stretch([1,3])
    ric.add_stretch([2,3])
    ric.add_stretch([3,4])
    ric.add_stretch([4,5])
    ric.add_stretch([5,6])
    ric.add_stretch([5,7])
    ric.add_in_bend([1,3,2])
    ric.add_in_bend([1,3,4])
    ric.add_in_bend([2,3,4])
    ric.add_in_bend([4,5,6])
    ric.add_in_bend([4,5,7])
    ric.add_in_bend([6,5,7])
    ric.add_lin_bend([3,4,5], 'yz')
    ric.add_out_bend([3,1,2,4])
    ric.add_out_bend([3,2,4,1])
    ric.add_out_bend([3,4,1,2])
    ric.add_out_bend([5,4,6,7])
    ric.add_out_bend([5,6,7,4])
    ric.add_out_bend([5,7,4,6])
    ric.add_torsion([1,2,0,0,0,3,5,6,7,0,0,0])
    ric.add_eckart()
    ric.setup(self.masses)

    bmat = ric.construct_b_matrix(None, self.coords)

    bmat_inv, rank = ric.invert_b_matrix()
    bmat_inv_ = nl.pinv(bmat)
    self.assertEqual(rank, self.coords.size)
    self.assertLess(np.max(np.abs(bmat_inv - bmat_inv_)), 7.e-14)

    hess = ric.project_hessian(self.hess)
    hess_ = np.dot(bmat_inv.T,np.dot(self.hess,bmat_inv))
    self.assertLess(np.max(np.abs(hess - hess_)),3.e-13)
Beispiel #7
0
    def test_6(self):

        masses = np.array(range(1, 10), dtype=np.float64)

        ric = RIC()
        ric.add_torsion([1, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0])
        ric.add_torsion([3, 4, 0, 0, 0, 5, 6, 7, 8, 9, 0, 0], ivals=[2, 3])
        ric.setup(masses)

        self.assertListEqual(list(ric._ric.ric_def_torsions[:, 0]),
                             [1, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0])
        self.assertListEqual(list(ric._ric.ric_def_torsions[:, 1]),
                             [3, 4, 0, 0, 0, 5, 6, 7, 8, 9, 0, 0])
        self.assertListEqual(list(ric._ric.ric_torsion_ivals[:, 0]), [1, 1])
        self.assertListEqual(list(ric._ric.ric_torsion_ivals[:, 1]), [2, 3])
        self.assertListEqual(list(ric._ric.ric_ibr_torsions), [1, 2])

        self.assertEqual(ric.num_ric, 2)
        self.assertEqual(ric.num_stretch, 0)
        self.assertEqual(ric.num_in_bend, 0)
        self.assertEqual(ric.num_out_bend, 0)
        self.assertEqual(ric.num_lin_bend, 0)
        self.assertEqual(ric.num_torsion, 2)
        self.assertEqual(ric.num_eckart, 0)