def set_translational_invariance_compact_fc3(fc3, primitive): try: import phono3py._phono3py as phono3c s2p_map = primitive.get_supercell_to_primitive_map() p2s_map = primitive.get_primitive_to_supercell_map() p2p_map = primitive.get_primitive_to_primitive_map() permutations = primitive.get_atomic_permutations() s2pp_map, nsym_list = get_nsym_list_and_s2pp(s2p_map, p2p_map, permutations) phono3c.transpose_compact_fc3(fc3, permutations, s2pp_map, p2s_map, nsym_list, 0) # dim[0] <--> dim[1] set_translational_invariance_fc3_per_index(fc3, index=1) phono3c.transpose_compact_fc3(fc3, permutations, s2pp_map, p2s_map, nsym_list, 0) # dim[0] <--> dim[1] set_translational_invariance_fc3_per_index(fc3, index=1) set_translational_invariance_fc3_per_index(fc3, index=2) except ImportError: text = ("Import error at phono3c.tranpose_compact_fc3. " "Corresponding python code is not implemented.") raise RuntimeError(text)
def set_translational_invariance_compact_fc3(fc3, primitive): """Enforce translational symmetry to compact fc3.""" try: import phono3py._phono3py as phono3c s2p_map = primitive.s2p_map p2s_map = primitive.p2s_map p2p_map = primitive.p2p_map permutations = primitive.atomic_permutations s2pp_map, nsym_list = get_nsym_list_and_s2pp(s2p_map, p2p_map, permutations) permutations = np.array(permutations, dtype="int_", order="C") s2pp_map = np.array(s2pp_map, dtype="int_") p2s_map = np.array(p2s_map, dtype="int_") nsym_list = np.array(nsym_list, dtype="int_") phono3c.transpose_compact_fc3(fc3, permutations, s2pp_map, p2s_map, nsym_list, 0) # dim[0] <--> dim[1] _set_translational_invariance_fc3_per_index(fc3, index=1) phono3c.transpose_compact_fc3(fc3, permutations, s2pp_map, p2s_map, nsym_list, 0) # dim[0] <--> dim[1] _set_translational_invariance_fc3_per_index(fc3, index=1) _set_translational_invariance_fc3_per_index(fc3, index=2) except ImportError: text = ("Import error at phono3c.tranpose_compact_fc3. " "Corresponding python code is not implemented.") raise RuntimeError(text)
def show_drift_fc3(fc3, primitive=None, name="fc3"): if fc3.shape[0] == fc3.shape[1]: num_atom = fc3.shape[0] maxval1 = 0 maxval2 = 0 maxval3 = 0 klm1 = [0, 0, 0] klm2 = [0, 0, 0] klm3 = [0, 0, 0] for i, j, k, l, m in list(np.ndindex((num_atom, num_atom, 3, 3, 3))): val1 = fc3[:, i, j, k, l, m].sum() val2 = fc3[i, :, j, k, l, m].sum() val3 = fc3[i, j, :, k, l, m].sum() if abs(val1) > abs(maxval1): maxval1 = val1 klm1 = [k, l, m] if abs(val2) > abs(maxval2): maxval2 = val2 klm2 = [k, l, m] if abs(val3) > abs(maxval3): maxval3 = val3 klm3 = [k, l, m] else: try: import phono3py._phono3py as phono3c s2p_map = primitive.get_supercell_to_primitive_map() p2s_map = primitive.get_primitive_to_supercell_map() p2p_map = primitive.get_primitive_to_primitive_map() permutations = primitive.get_atomic_permutations() s2pp_map, nsym_list = get_nsym_list_and_s2pp( s2p_map, p2p_map, permutations) num_patom = fc3.shape[0] num_satom = fc3.shape[1] maxval1 = 0 maxval2 = 0 maxval3 = 0 klm1 = [0, 0, 0] klm2 = [0, 0, 0] klm3 = [0, 0, 0] phono3c.transpose_compact_fc3(fc3, permutations, s2pp_map, p2s_map, nsym_list, 0) # dim[0] <--> dim[1] for i, j, k, l, m in np.ndindex((num_patom, num_satom, 3, 3, 3)): val1 = fc3[i, :, j, k, l, m].sum() if abs(val1) > abs(maxval1): maxval1 = val1 klm1 = [k, l, m] phono3c.transpose_compact_fc3(fc3, permutations, s2pp_map, p2s_map, nsym_list, 0) # dim[0] <--> dim[1] for i, j, k, l, m in np.ndindex((num_patom, num_satom, 3, 3, 3)): val2 = fc3[i, :, j, k, l, m].sum() val3 = fc3[i, j, :, k, l, m].sum() if abs(val2) > abs(maxval2): maxval2 = val2 klm2 = [k, l, m] if abs(val3) > abs(maxval3): maxval3 = val3 klm3 = [k, l, m] except ImportError: text = ("Import error at phono3c.tranpose_compact_fc3. " "Corresponding python code is not implemented.") raise RuntimeError(text) text = "Max drift of %s: " % name text += "%f (%s%s%s) " % (maxval1, "xyz"[klm1[0]], "xyz"[klm1[1]], "xyz"[klm1[2]]) text += "%f (%s%s%s) " % (maxval2, "xyz"[klm2[0]], "xyz"[klm2[1]], "xyz"[klm2[2]]) text += "%f (%s%s%s)" % (maxval3, "xyz"[klm3[0]], "xyz"[klm3[1]], "xyz"[klm3[2]]) print(text)