def set_thermal_displacements( self, t_step=10, t_max=1000, t_min=0, projector=None, cutoff_eigenvalue=None ): """ cutoff_eigenvalue: phonon modes that have frequencies below cutoff_eigenvalue are ignored. e.g. 0.1 (THz) """ if self.__mesh==None: print "set_mesh has to be done before set_thermal_properties" sys.exit(1) if self.__mesh.get_eigenvectors() == None: print "Eigenvectors have to be calculated." sys.exit(1) td = ThermalDisplacements( self.__mesh.get_eigenvalues(), self.__mesh.get_eigenvectors(), self.__mesh.get_weights(), self.primitive.get_masses(), factor=self.factor, cutoff_eigenvalue=cutoff_eigenvalue ) td.set_temperature_range( t_min, t_max, t_step ) if not projector==None: td.project_eigenvectors( projector, self.primitive.get_cell() ) td.set_thermal_displacements() self.__thermal_displacements = td
def set_thermal_displacements(self, t_step=10, t_max=1000, t_min=0, temperatures=None, direction=None, cutoff_frequency=None): """ cutoff_frequency: phonon modes that have frequencies below cutoff_frequency are ignored. direction: Projection direction in reduced coordinates ( """ self._thermal_displacements = None if self._mesh is not None: eigvecs = self._mesh.get_eigenvectors() mesh_nums = self._mesh.get_mesh_numbers() if eigvecs is None: print("Warning: Eigenvectors have to be calculated.") return False if np.prod(mesh_nums) != len(eigvecs): print("Warning: Sampling mesh must not be symmetrized.") return False iter_phonons = self._mesh else: if self._iter_mesh is not None: iter_phonons = self._iter_mesh else: print("Warning: \'set_mesh\' has to finish correctly " "before \'set_thermal_displacements\'.") return False if direction is not None: projection_direction = np.dot(direction, self._primitive.get_cell()) td = ThermalDisplacements( iter_phonons, self._primitive.get_masses(), projection_direction=projection_direction, cutoff_frequency=cutoff_frequency) else: td = ThermalDisplacements(iter_phonons, self._primitive.get_masses(), cutoff_frequency=cutoff_frequency) if temperatures is None: td.set_temperature_range(t_min, t_max, t_step) else: td.set_temperatures(temperatures) td.run() self._thermal_displacements = td return True
def set_thermal_displacements(self, t_step=10, t_max=1000, t_min=0, temperatures=None, direction=None, cutoff_frequency=None): """ cutoff_frequency: phonon modes that have frequencies below cutoff_frequency are ignored. direction: Projection direction in reduced coordinates """ self._thermal_displacements = None if self._mesh is None: print("Warning: \'set_mesh\' has to finish correctly " "before \'set_thermal_displacements\'.") return False eigvecs = self._mesh.get_eigenvectors() frequencies = self._mesh.get_frequencies() mesh_nums = self._mesh.get_mesh_numbers() if self._mesh.get_eigenvectors() is None: print("Warning: Eigenvectors have to be calculated.") return False if np.prod(mesh_nums) != len(eigvecs): print("Warning: Sampling mesh must not be symmetrized.") return False td = ThermalDisplacements(frequencies, eigvecs, self._primitive.get_masses(), cutoff_frequency=cutoff_frequency) if temperatures is None: td.set_temperature_range(t_min, t_max, t_step) else: td.set_temperatures(temperatures) if direction is not None: td.project_eigenvectors(direction, self._primitive.get_cell()) td.run() self._thermal_displacements = td return True
def set_thermal_displacements(self, t_step=10, t_max=1000, t_min=0, direction=None, cutoff_eigenvalue=None): """ cutoff_eigenvalue: phonon modes that have frequencies below cutoff_eigenvalue are ignored. e.g. 0.1 (THz^2) direction: Projection direction in reduced coordinates """ if self._mesh == None: print "set_mesh has to be done before set_thermal_properties" sys.exit(1) eigvecs = self._mesh.get_eigenvectors() frequencies = self._mesh.get_frequencies() mesh_nums = self._mesh.get_mesh_numbers() if self._mesh.get_eigenvectors() is None: print "Eigenvectors have to be calculated." sys.exit(1) if np.prod(mesh_nums) != len(eigvecs): print "Sampling mesh must not be symmetrized." sys.exit(1) td = ThermalDisplacements(frequencies, eigvecs, self._primitive.get_masses(), cutoff_eigenvalue=cutoff_eigenvalue) td.set_temperature_range(t_min, t_max, t_step) if direction is not None: td.project_eigenvectors(direction, self._primitive.get_cell()) # td.run() td.run_mesh() self._thermal_displacements = td
def set_thermal_displacements(self, t_step=10, t_max=1000, t_min=0, direction=None, cutoff_eigenvalue=None): """ cutoff_eigenvalue: phonon modes that have frequencies below cutoff_eigenvalue are ignored. e.g. 0.1 (THz^2) direction: Projection direction in reduced coordinates """ if self._mesh==None: print "set_mesh has to be done before set_thermal_properties" sys.exit(1) eigvecs = self._mesh.get_eigenvectors() frequencies = self._mesh.get_frequencies() mesh_nums = self._mesh.get_mesh_numbers() if self._mesh.get_eigenvectors() is None: print "Eigenvectors have to be calculated." sys.exit(1) if np.prod(mesh_nums) != len(eigvecs): print "Sampling mesh must not be symmetrized." sys.exit(1) td = ThermalDisplacements(frequencies, eigvecs, self._primitive.get_masses(), cutoff_eigenvalue=cutoff_eigenvalue) td.set_temperature_range(t_min, t_max, t_step) if direction is not None: td.project_eigenvectors(direction, self._primitive.get_cell()) # td.run() td.run_mesh() self._thermal_displacements = td
def set_thermal_displacements(self, t_step=10, t_max=1000, t_min=0, temperatures=None, direction=None, freq_min=None, freq_max=None): """Prepare thermal displacements calculation Args: direction: Projection direction in reduced coordinates. freq_min: Phonons having frequency larger than this are included. freq_max: Phonons having frequency smaller than this are included. """ self._thermal_displacements = None if self._mesh is not None: eigvecs = self._mesh.get_eigenvectors() mesh_nums = self._mesh.get_mesh_numbers() if eigvecs is None: print("Warning: Eigenvectors have to be calculated.") return False if np.prod(mesh_nums) != len(eigvecs): print("Warning: Sampling mesh must not be symmetrized.") return False iter_phonons = self._mesh else: if self._iter_mesh is not None: iter_phonons = self._iter_mesh else: print("Warning: \'set_mesh\' has to finish correctly " "before \'set_thermal_displacements\'.") return False if direction is not None: projection_direction = np.dot(direction, self._primitive.get_cell()) td = ThermalDisplacements( iter_phonons, self._primitive.get_masses(), projection_direction=projection_direction, freq_min=freq_min, freq_max=freq_max) else: td = ThermalDisplacements(iter_phonons, self._primitive.get_masses(), freq_min=freq_min, freq_max=freq_max) if temperatures is None: td.set_temperature_range(t_min, t_max, t_step) else: td.set_temperatures(temperatures) td.run() self._thermal_displacements = td return True