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
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)
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
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)
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)
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)
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)