Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 3
0
    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())
Ejemplo n.º 4
0
    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())