Пример #1
0
    def test2(self):
        from mccomponents.sample.phonon import periodicdispersion_fromidf
        dispersion = periodicdispersion_fromidf(datapath)

        from mccomponents.sample import scattererEngine
        disp = scattererEngine(dispersion)

        from mccomponents.sample.phonon.bindings import default
        binding = default()

        b = 2.001014429

        N = 20
        Qs = [
            [b / 2, b / 2, 0],
            [0, 0, 0],
            [b, 0, 0],
            [b / 2, b / 2, b / 2],
            [0, 0, 0],
        ]

        xs = [[] for i in range(3)]
        ys = [[] for i in range(3)]
        segment = 0
        for start, end in zip(Qs[:-1], Qs[1:]):
            start = numpy.array(start)
            end = numpy.array(end)
            diff = end - start
            step = diff / N

            qs = [start + step * i for i in range(N + 1)]

            for br in range(3):
                es = [disp.energy(br, binding.Q(q)) for q in qs]

                xs[br] += list(numpy.arange(0, 1. + 1e-10, 1. / N) + segment)
                ys[br] += es

            segment += 1

        for br in range(3):
            x = xs[br]
            y = ys[br]
            pylab.plot(x, y)

        pylab.show()

        return
Пример #2
0
    def test2(self):
        from mccomponents.sample.phonon import periodicdispersion_fromidf
        dispersion = periodicdispersion_fromidf( datapath )
        
        from mccomponents.sample import scattererEngine
        disp = scattererEngine( dispersion )
        
        from mccomponents.sample.phonon.bindings import default
        binding = default()

        b = 2.001014429
        
        N = 20
        Qs = [
            [b/2,b/2,0],
            [0,0,0],
            [b,0,0],
            [b/2,b/2,b/2],
            [0,0,0],
            ]

        xs=[[] for i in range(3)]; ys=[[] for i in range(3)]
        segment = 0
        for start, end in zip(Qs[:-1], Qs[1:]):
            start = numpy.array(start)
            end = numpy.array(end)
            diff = end-start
            step = diff/N
            
            qs = [ start + step*i for i in range(N+1) ]
            
            for br in range(3):
                es = [ disp.energy(br, binding.Q(q)) for q in qs ]

                xs[br] += list(numpy.arange(0, 1.+1e-10, 1./N)+segment)
                ys[br] += es

            segment += 1

        for br in range(3):
            x = xs[br]
            y = ys[br]
            pylab.plot(x,y)
            
        pylab.show()
                                            
        return
Пример #3
0
    def test1(self):
        from mccomponents.sample.phonon import dispersion_fromidf
        dispersion = dispersion_fromidf(datapath)

        from mccomponents.sample import scattererEngine
        disp = scattererEngine(dispersion)

        a = 3.52  # Ni lattice parameter
        from math import pi
        ra = 2 * pi / a  # reciprocal lattice parameter
        N = 10
        qs = [(0, 0, ra * i / N) for i in range(N)]
        from mccomponents.sample.phonon.bindings import default
        binding = default()
        es = [disp.energy(0, binding.Q(q)) for q in qs]
        print qs, es
        return
Пример #4
0
def _getEsAndPols(disp, Qs):
    # this only works for mcvine>=1.3.3
    Qs = np.array(
        Qs, order='C', dtype='double'
    )  # C order and double required to work with binding of histogram NdArray
    nQ = len(Qs)
    nbr = disp.nBranches()
    natoms = disp.nAtoms()
    Es = np.zeros((nQ, nbr), dtype='double')
    from mccomponents.sample.phonon.bindings import default
    binding = default()
    disp.energy_arr(binding.ndarray(Qs), binding.ndarray(Es))
    realpol = np.zeros((nQ, nbr, natoms, 3), dtype='double')
    imagpol = np.zeros((nQ, nbr, natoms, 3), dtype='double')
    disp.polarization_arr(binding.ndarray(Qs), binding.ndarray(realpol),
                          binding.ndarray(imagpol))
    pols = realpol + 1j * imagpol
    return Es, pols
Пример #5
0
    def test2(self):
        from mccomponents.sample.phonon import periodicdispersion_fromidf
        dispersion = periodicdispersion_fromidf(datapath)

        from mccomponents.sample import scattererEngine
        disp = scattererEngine(dispersion)

        a = 3.52  # Ni lattice parameter
        from math import pi
        ra = 2 * pi / a  # reciprocal lattice parameter
        N = 10
        qs = [(0, 0, ra * i / N) for i in range(N)]
        from mccomponents.sample.phonon.bindings import default
        binding = default()
        es = [disp.energy(0, binding.Q(q)) for q in qs]
        print qs, es

        q = qx, qy, qz = 1.2, 0.3, 0.22
        Q = binding.Q(q)
        self.assertAlmostEqual(
            disp.energy(0, binding.Q(qx + 2 * ra, qy + 8 * ra, qz - 6 * ra)),
            disp.energy(0, Q), 3)

        return