def test_decrease_difference_cluster(self): S1, S2 = read_vasp('POSCAR1', iscluster=True), read_vasp('POSCAR2', iscluster=True) SD = StructureDifference(S1, S2) A, B = SD.get_structure_decdistance_diff(2) self.assertEqual(np.shape(B)[0], 60)
def test_decrease_difference_periodic(self): S1 = read_vasp('POSCAR_BN_2') S2 = read_vasp('POSCAR_BN_12.vasp') SD = StructureDifference(S1, S2) A, B = SD.get_structure_decdistance_diff(Rcut=2) self.assertLessEqual(A, 1e-4)
def test_graphene(self): S = read_vasp('primitive_cell_cart.vasp') self.assertEqual(len(S.get_equivalent_atoms()), 1)
def test_eigen_spectral(self): S = read_vasp('POSCAR_BN_12.vasp') S.draw_eig_spectra(atom_seq=range(12))
def test_direct(self): S = read_vasp('primitive_cell_direct.vasp') self.assertEqual(np.shape(S.positions)[0], 8)
def get_structure_decdistance_diff(self, Rcut=5): d1 = self._structure1.get_decrease_distance_matrix(Rcut=Rcut) d2 = self._structure2.get_decrease_distance_matrix(Rcut=Rcut) d = np.zeros((len(d1), len(d2))) for I in range(len(d1)): for J in range(len(d2)): eigval1, eigvec1 = ftk.get_EPA(d1[I]) eigval2, eigvec2 = ftk.get_EPA(d2[J]) n1, n2 = np.shape(eigvec1)[0], np.shape(eigvec2)[0] dd = np.zeros((n1, n2)) for ii in range(n1): for jj in range(n2): dd[ii, jj] = ftk.d_EPF_atom(eigval1, eigval2, eigvec1[ii], eigvec2[jj]) row_ind, col_ind = linear_sum_assignment(dd) d[I, J] = dd[row_ind, col_ind].sum() row_ind, col_ind = linear_sum_assignment(d) corresponding_sequence = np.array(list(zip(row_ind, col_ind))) return d[row_ind, col_ind].sum(), corresponding_sequence[np.argsort( corresponding_sequence[:, 0])] if __name__ == "__main__": from eigprofuc.io.vasp import read_vasp s = read_vasp('/home/hecc/Desktop/POSCAR14.vasp') import time a = time.time() for i in range(10): d1 = s.get_atomsdistance_decdistance(Rcut=3, isparallel=True) print(time.time() - a)