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(ph_nacl_nofcsym: Phonopy): """Test PhononMoment.""" phonon = ph_nacl_nofcsym data = np.loadtxt(StringIO(result_full_range), dtype="double") moment = phonon.run_mesh([13, 13, 13], with_eigenvectors=True, is_mesh_symmetry=False) num_atom = len(phonon.primitive) 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.moment assert np.abs(moment.moment - data[i, 0]) < 1e-5 moment = PhononMoment(f, w, eigenvectors=e) for i in range(3): moment.run(order=i) moms = moment.moment vals[i, 1:] = moms assert (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.moment assert np.abs(moment.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.moment vals[i + 3, 1:] = moms assert (np.abs(moms - data[i + 3, 1:]) < 1e-5).all()
def test_moment(self): data = np.loadtxt(StringIO(result_full_range), dtype='double') phonon = self._get_phonon(self._cell) moment = phonon.set_mesh([13, 13, 13], is_eigenvectors=True, is_mesh_symmetry=False) num_atom = phonon.get_primitive().get_number_of_atoms() q, w, f, e = phonon.get_mesh() 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())
def test_moment(self): data = np.loadtxt(StringIO(result_full_range), dtype='double') phonon = self._get_phonon(self._cell) moment = phonon.set_mesh([13, 13, 13], is_eigenvectors=True, is_mesh_symmetry=False) num_atom = phonon.get_primitive().get_number_of_atoms() q, w, f, e = phonon.get_mesh() 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, 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()) 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)