Esempio n. 1
0
  def test_grad_0D(self):

    masses = np.array([1.]*4)

    ric = RIC()
    ric.add_out_bend([1,2,3,4])
    ric.setup(masses)

    def func(x):
      ric.construct_b_matrix(None,np.reshape(x,(-1,3)))
      res = np.copy(ric.get_val_out_bends())
      return res
    grad = nd.Gradient(func,step_nom=[0.01]*12)

    for coords in [
      [[ 0 ,0, 0],[0,1, 0],[-1,-1,0],[1,-1,0]],
      [[ 0 ,0, 0],[0,1, 0],[-2,-2,0],[1,-1,0]],
      [[ 0 ,0, 0],[0,1, 1],[-1,-1,0],[1,-1,0]],
      [[ 0 ,0, 0],[0,1, 0],[-1,-1,0],[1,-1,1]],
      [[ 0 ,0, 0],[0,1, 1],[-2,-2,1],[2,-2,1]],
      [[.1,.1,.9],[0,1, 0],[-1,-1,0],[1,-1,0]],
                  ]:
      coords = np.array(coords,dtype=np.float64)
      ref = grad(coords.flatten())
      res = ric.construct_b_matrix(None,coords)[0,:]
      self.assertLess(np.max(np.abs(ref-res)),1.e-10)
Esempio n. 2
0
  def test_grad_0D_rand(self):

    masses = np.array([1.]*4)

    ric = RIC()
    ric.add_out_bend([1,2,3,4])
    ric.setup(masses)

    def func(x):
      ric.construct_b_matrix(None,np.reshape(x,(-1,3)))
      res = np.copy(ric.get_val_out_bends())
      return res
    grad = nd.Gradient(func,step_nom=[0.01]*12)

    for coords in 2*np.random.random((10,4,3))-1:
      coords = np.array(coords,dtype=np.float64)
      ref = grad(coords.flatten())
      res = ric.construct_b_matrix(None,coords)[0,:]
      self.assertLess(np.max(np.abs(ref-res)),1.e-9)
Esempio n. 3
0
  def test_values_1(self):

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

    for coords, ref in [
      ([[0,0,0],[0,0, 1],[-1,-1,0],[1,-1,0]],   0),
      ([[0,0,0],[0,1, 1],[-1,-1,0],[1,-1,0]],  45),
      ([[0,0,0],[0,1, 0],[-1,-1,0],[1,-1,0]],  90),
      ([[0,0,0],[0,1,-1],[-1,-1,0],[1,-1,0]], 135),
      ([[0,0,0],[0,0,-1],[-1,-1,0],[1,-1,0]], 180),
                       ]:
      ric = RIC()
      ric.add_out_bend([1,2,3,4])
      ric.setup(masses)
      ric.construct_b_matrix(hmat,np.array(coords,dtype=np.float64))
      res = ric.get_val_out_bends()[0]
      self.assertAlmostEqual(res,np.radians(ref))
      del ric
Esempio n. 4
0
    def test_4(self):

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

        ric = RIC()
        ric.add_out_bend([1, 2, 3, 4])
        ric.add_out_bend([3, 4, 5, 6])
        ric.setup(masses)

        self.assertListEqual(list(ric._ric.ric_def_out_bends[:, 0]),
                             [1, 2, 3, 4])
        self.assertListEqual(list(ric._ric.ric_def_out_bends[:, 1]),
                             [3, 4, 5, 6])
        self.assertListEqual(list(ric._ric.ric_ibr_out_bends), [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, 2)
        self.assertEqual(ric.num_lin_bend, 0)
        self.assertEqual(ric.num_torsion, 0)
        self.assertEqual(ric.num_eckart, 0)
Esempio n. 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)
Esempio n. 6
0
  def test_2(self):

    g1, g2 = Group([1,2,3]), Group([5,6,7])

    ric = RIC()
    ric.add_stretch([1,3])
    ric.add_stretch([2,3])
    ric.add_distance([g1,4])
    ric.add_distance([4,g2])
    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_dihedral([1,2], [g1,g2], [6,7])
    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_)), 1.e-13)

    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_)),1.e-13)
Esempio n. 7
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)