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
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
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
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
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