def generate_displacements(self, distance=0.03, cutoff_pair_distance=None, is_plusminus='auto', is_diagonal=True): direction_dataset = get_third_order_displacements( self._supercell, self._symmetry, is_plusminus=is_plusminus, is_diagonal=is_diagonal) self._displacement_dataset = direction_to_displacement( direction_dataset, distance, self._supercell, cutoff_distance=cutoff_pair_distance) if self._phonon_supercell_matrix is not None: phonon_displacement_directions = get_least_displacements( self._phonon_supercell_symmetry, is_plusminus=is_plusminus, is_diagonal=False) self._phonon_displacement_dataset = direction_to_displacement_fc2( phonon_displacement_directions, distance, self._phonon_supercell)
def generate_displacements(self, distance=0.03, cutoff_pair_distance=None, is_plusminus='auto', is_diagonal=True): direction_dataset = get_third_order_displacements( self._supercell, self._symmetry, is_plusminus=is_plusminus, is_diagonal=is_diagonal) self._displacement_dataset = direction_to_displacement( direction_dataset, distance, self._supercell, cutoff_distance=cutoff_pair_distance) if self._phonon_supercell_matrix is not None: # 'is_diagonal=False' below is made intentionally. For # third-order force constants, we need better accuracy, # and I expect this choice is better for it, but not very # sure. # In phono3py, two atoms are displaced for each # configuration and the displacements are chosen, first # displacement from the perfect supercell, then second # displacement, considering symmetry. If I choose # is_diagonal=False for the first displacement, the # symmetry is less broken and the number of second # displacements can be smaller than in the case of # is_diagonal=True for the first displacement. This is # done in the call get_least_displacements() in # phonon3.displacement_fc3.get_third_order_displacements(). # # The call get_least_displacements() is only for the # second order force constants, but 'is_diagonal=False' to # be consistent with the above function call, and also for # the accuracy when calculating ph-ph interaction # strength because displacement directions are better to be # close to perpendicular each other to fit force constants. # # On the discussion of the accuracy, these are just my # expectation when I designed phono3py in the early time, # and in fact now I guess not very different. If these are # little different, then I should not surprise users to # change the default behaviour. At this moment, this is # open question and we will have more advance and should # have better specificy external software on this. phonon_displacement_directions = get_least_displacements( self._phonon_supercell_symmetry, is_plusminus=is_plusminus, is_diagonal=False) self._phonon_displacement_dataset = directions_to_displacement_dataset( phonon_displacement_directions, distance, self._phonon_supercell)