예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
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()
예제 #4
0
    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())
예제 #5
0
    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)