def set_moment(self, order=1, is_projection=False, freq_min=None, freq_max=None): if self._mesh is None: print("Warning: set_mesh has to be done before set_moment") return False else: if is_projection: if self._mesh.get_eigenvectors() is None: print("Warning: Eigenvectors have to be calculated.") return False moment = PhononMoment( self._mesh.get_frequencies(), weights=self._mesh.get_weights(), eigenvectors=self._mesh.get_eigenvectors()) else: moment = PhononMoment( self._mesh.get_frequencies(), weights=self._mesh.get_weights()) if freq_min is not None or freq_max is not None: moment.set_frequency_range(freq_min=freq_min, freq_max=freq_max) moment.run(order=order) self._moment = moment.get_moment() return True
def test_moment(self): data = np.loadtxt(StringIO(result_full_range), dtype='double') phonon = self._get_phonon(self._cell) moment = phonon.run_mesh([13, 13, 13], with_eigenvectors=True, is_mesh_symmetry=False) num_atom = phonon.get_primitive().get_number_of_atoms() q = phonon.mesh.qpoints w = phonon.mesh.weights f = phonon.mesh.frequencies e = phonon.mesh.eigenvectors vals = np.zeros((6, num_atom + 1), dtype='double') moment = PhononMoment(f, w) for i in range(3): moment.run(order=i) vals[i, 0] = moment.get_moment() self.assertTrue(np.abs(moment.get_moment() - data[i, 0]) < 1e-5) moment = PhononMoment(f, w, eigenvectors=e) for i in range(3): moment.run(order=i) moms = moment.get_moment() vals[i, 1:] = moms self.assertTrue((np.abs(moms - data[i, 1:]) < 1e-5).all()) moment = PhononMoment(f, w) moment.set_frequency_range(freq_min=3, freq_max=4) for i in range(3): moment.run(order=i) vals[i + 3, 0] = moment.get_moment() self.assertTrue( np.abs(moment.get_moment() - data[i + 3, 0]) < 1e-5) moment = PhononMoment(f, w, eigenvectors=e) moment.set_frequency_range(freq_min=3, freq_max=4) for i in range(3): moment.run(order=i) moms = moment.get_moment() vals[i + 3, 1:] = moms self.assertTrue((np.abs(moms - data[i + 3, 1:]) < 1e-5).all())