Exemple #1
0
    def calculateDos(self):
        totalVcf = np.zeros([self.totalStep, 4])
        for i in range(self.natom):
            print "atom", i
            vcf = self.correlate_atom(i)
            totalVcf[:, :3] += vcf
            totalVcf[:, 3] = np.average(totalVcf[:, :3], axis=1)
        #normalization
        vcf0 = totalVcf[0].copy()
        for i, vcf in enumerate(totalVcf):
            totalVcf[i] /= vcf0

        totalStep = self.totalStep
        data = np.c_[self.times, totalVcf]
        to_txt(
            ['correlation_time(ps)', 'vcaf_x', 'vcaf_y', 'vcaf_z', 'vcaf_av'],
            data[:totalStep / 2], 'VACF.txt')
        totalDos = np.abs(rfft(totalVcf, axis=0))[:totalStep / 2]

        data = np.c_[self.freq, totalDos]
        to_txt(['Freq_THz', 'vdos_x', 'vdos_y', 'vdos_z', 'vdos_av'], data,
               'VDOS.txt')

        print 'VACF and VDOS caculated OK'
        plot_dos()
        plot_vacf()
        plot_smooth()
Exemple #2
0
    def getTempProfile(self, begin, upP, deta, S, tcfactor, zfactor):
        fas = fixAveSpace('tempProfile.txt')
        quants = fas.getConvergence(upP + 1, begin)
        tools.to_txt(['Temperature(K)', 'Jx'], quants, 'convergenceT.txt')
        snapStep = fas.snapStep

        dto = dict(log="step\tkappa\n", plots=[])
        coord, aveN, aveQuants = fas.iterate(begin, self.kappaConverge,
                                             snapStep, upP, deta, S, tcfactor,
                                             zfactor, dto)
        tools.write(dto['log'], 'convergenceK.txt')
        series(
            'x(Augstrom)',
            'temperature(K)',
            dto['plots'],
            'convergenceT.png',
            linewidth=1,
            legend=False)
        filter = aveN[:] > 1  # at least 1 atom in the bin
        aveC = coord[filter]
        aveN = aveN[filter]
        aveTemp = aveQuants[filter, 0]
        avejx = aveQuants[filter, 1]
        nbin = len(avejx)
        data = np.c_[np.arange(nbin) + 1, aveC, aveN, aveTemp, avejx]

        tools.to_txt(['id', 'Coord', 'Count', 'Temp', 'Jx'], data,
                     'tempAve.txt')
        drawTempAve()
        return (aveC, aveN, aveTemp, avejx)
Exemple #3
0
    def post(self):
        a = np.loadtxt('freq.dat')
        ks = a[:, 1:4]
        omega = a[:, 4:]
        b = np.loadtxt('phon_lifetime.dat')
        tao = b[:len(ks), 4:]

        v = np.loadtxt(open('group_vel.dat'))[:, 4:]
        n, m = v.shape
        v = v.reshape([n, m / 3, 3])
        v = np.linalg.norm(v, axis=2)
        plot(
            (omega.flatten(), 'Frequency (THz)'), (v.flatten(),
                                                   'Group Velocity (nm/ps)'),
            'v_freq.png',
            grid=True,
            scatter=True)
        tl.to_txt(['freq', 'vg'],
                  np.c_[omega.flatten(), v.flatten()], 'v_freq.txt')
        plot(
            (omega.flatten(), 'Frequency (THz)'), (tao.flatten(),
                                                   'Relaxation Time (ps)'),
            'tao_freq.png',
            grid=True,
            scatter=True,
            logy=True)
Exemple #4
0
    def draw_tau(self):
        try:

            w = get_w_final('..')
            q = get_qpoints('..')
            omega = get_omega('..')
            tau = get_tau('..')
            plot(
                (omega.flatten(), 'Frequency (THz)'), (w.flatten(),
                                                       'Scatter Rate (THz)'),
                'scatter_freq.png',
                grid=True,
                scatter=True,
                logy=True)
            plot(
                (omega.flatten(), 'Frequency (THz)'), (tau.flatten(),
                                                       'Relaxation Time (ps)'),
                'tau_freq.png',
                grid=True,
                scatter=True,
                logy=True)
            to_txt(['freq', 'tau'],
                   np.c_[omega.flatten(), tau.flatten()], 'tao_freq.txt')
            r = []
            for i, qq in enumerate(q):
                c = tau[i]
                d = omega[i]
                for j, cc in enumerate(c):
                    r.append([qq[0], qq[1], qq[2], d[j], c[j]])
            to_txt(['q1', 'q2', 'q3', 'f(THz)', 'tao(ps)'], r, 'q_tao.txt')
        except Exception as e:
            pass
Exemple #5
0
    def draw_gv(self):
        try:
            omega = get_omega('..')
            tau = get_tau('..')
            v = get_v('..')

            v = np.linalg.norm(v, axis=-1)
            y = (v.flatten(), 'Group Velocity (nm/ps)')
            plot(
                (omega.flatten(), 'Frequency (THz)'),
                y,
                'v_freq.png',
                grid=True,
                scatter=True)
            to_txt(['freq', 'vg'],
                   np.c_[omega.flatten(), v.flatten()], 'v_freq.txt')

            l = v * tau
            y = (l.flatten(), 'Mean Free Path (nm)')
            plot(
                (omega.flatten(), 'Frequency (THz)'),
                y,
                'lamda_freq.png',
                grid=True,
                scatter=True)
            to_txt(['freq', 'mfp'],
                   np.c_[omega.flatten(), l.flatten()], 'lamda_freq.txt')
        except Exception as e:
            print(e)
Exemple #6
0
    def calculateDos(self):
        totalVcf = np.zeros([self.totalStep, 4])
        for i in range(self.natom):
            print("atom", i)
            vcf = self.correlate_atom(i)
            totalVcf[:, :3] += vcf
            totalVcf[:, 3] = np.average(totalVcf[:, :3], axis=1)
        # normalization
        vcf0 = totalVcf[0].copy()
        for i, vcf in enumerate(totalVcf):
            totalVcf[i] /= vcf0

        totalStep = self.totalStep
        data = np.c_[self.times, totalVcf]
        tl.to_txt(['correlation_time(ps)', 'vcaf_x', 'vcaf_y',
                   'vcaf_z', 'vcaf_av'], data[:totalStep / 2], 'VACF.txt')
        totalDos = np.abs(rfft(totalVcf, axis=0))[:totalStep / 2]

        data = np.c_[self.freq, totalDos]
        tl.to_txt(['Freq_THz', 'vdos_x', 'vdos_y',
                   'vdos_z', 'vdos_av'], data, 'VDOS.txt')

        print('VACF and VDOS caculated OK')
        plot_dos()
        plot_vacf()
        plot_smooth()
Exemple #7
0
 def dumpkappa(self):
     import h5py
     m = self.m
     filename = "kappa-m%s.hdf5" % ''.join(map(str, m.kpoints))
     f = h5py.File(filename)
     kappa = f['kappa']
     T = f['temperature']
     tl.to_txt(['temperature', 'kappa'], np.c_[T, kappa[:, 0]], 'kappa.txt')
     plot(
         (np.array(T), 'Temperature (K)'),
         (np.array(kappa),
          'Thermal Conductivity (W/mK)'),
         filename='kT.png')
Exemple #8
0
    def reduce(self):
        files = ls("tmp/result.txt*")
        omega = []
        trans = []
        dos = []
        for file in files:
            print(file)
            # using this but loadtxt because there may be data that missing
            # some columns when there are nan
            result = self.read(file)
            omega = np.r_[omega, result[:, 0]]
            trans = np.r_[trans, result[:, 1]]
            dos = np.r_[dos, result[:, 2]]

        omega = np.array(omega).flatten().T
        f = omega.argsort()
        omega = omega[f]
        trans = np.array(trans).flatten().T[f]
        dos = np.array(dos).flatten().T[f]
        to_txt(['omega', 'trans', 'dos'], np.c_[omega, trans, dos],
               'result.txt')
Exemple #9
0
    def post(self):
        # 1eV = 8049 cm^(-1) => 1000emV=8049 cm-1 => cm-1/meV=1000/8049
        # 1cm^(-1) = 3 * 10^(10) hz =>Hz*cm=1/3e10
        # a cm^-1=b THz =>a=b *1e12 Hz*cm
        # a meV = b cm^-1 => a = b cm-1/meV
        # omcm=omega*521.471?
        self.reduce()
        result = self.read('result.txt')
        omega = result[:, 0]
        trans = result[:, 1]
        dos = result[:, 2]
        omcm = omega * 1e12 * 1 / 3e10
        omme = omcm * 1e12 * 6.6260755e-34 / 1.6e-19 * 1000

        T = self.m.T
        centerm = self.preCenter()
        V = np.linalg.det(centerm.atoms.cell)
        c = capacity(omega, T, V)
        j = c * trans / 2.0 / np.pi
        dm = omega[1] - omega[0]
        kappa = j.cumsum() * dm
        to_txt([
            'Frequency (THz)', 'Frequency (cm^-1)', 'Frequency (meV)',
            'Phonon Transmission', 'Phonon Density of State',
            'Mode Capacity (J/m^3/K)', 'Mode Thermal Conductance (W/m^2/K)',
            'Accumulate Thermal Conductance (W/m^2/K)'
        ], np.c_[omega, omcm, omme, trans, dos, c, j, kappa],
               'transmission.txt')

        f = self.read('transmission.txt')
        #from aces.algorithm.smooth import savitzky_golay
        plot([f[:, 0], 'Frequency (THz)'],
             [f[:, 4], 'Phonon Density of State'], 'green_dos.png')
        plot([f[:, 0], 'Frequency (THz)'], [f[:, 3], 'Phonon Transmission'],
             'green_transmission.png')
        #plot([f[:,0],'Frequency (THz)'],[savitzky_golay(f[:,3],11,3),'Phonon Transmission'],'smooth_transmission.png')
        plot([f[:, 0], 'Frequency (THz)'],
             [f[:, 6], 'Mode Thermal Conductance (W/m^2/K)'],
             'green_mode_conductance.png')
Exemple #10
0
    def post(self):
        a = np.loadtxt('freq.dat')
        ks = a[:, 1:4]
        omega = a[:, 4:]
        b = np.loadtxt('phon_lifetime.dat')
        tao = b[:len(ks), 4:]

        v = np.loadtxt(open('group_vel.dat'))[:, 4:]
        n, m = v.shape
        v = v.reshape([n, m / 3, 3])
        v = np.linalg.norm(v, axis=2)
        plot((omega.flatten(), 'Frequency (THz)'),
             (v.flatten(), 'Group Velocity (nm/ps)'),
             'v_freq.png',
             grid=True,
             scatter=True)
        tl.to_txt(['freq', 'vg'], np.c_[omega.flatten(),
                                        v.flatten()], 'v_freq.txt')
        plot((omega.flatten(), 'Frequency (THz)'),
             (tao.flatten(), 'Relaxation Time (ps)'),
             'tao_freq.png',
             grid=True,
             scatter=True,
             logy=True)
Exemple #11
0
def run(method,begin,timestep,conti,excRate,swapEnergyRate,upP,deta,tcfactor,fourierTc ,computeTc ,corRate ,kb ,T,xp,yp,zp,enforceThick,thick,zfactor,S,box,**rest):

	p=profile()
	p.method=method
	lx,ly,lz=box[-3:]
	if method=='greenkubo':
		f=open('result.txt','w')
		if(computeTc):
			os.popen("tail -2000 kappa.txt>tailKp.txt 2>err");
			df=pd.read_csv("tailKp.txt",sep=' ',header=None)
			kx=np.average(np.array(df)[:,1],axis=0)
	
		elif(fourierTc):
			v=lx*ly*lz;
			factor=corRate*timestep/(v*kb*T*T)*zfactor*tcfactor;
			SRCHOME=dirname(__FILE__)
			kx=os.popen("%s/correlation/corr factor"%SRCHOME).read();#generate a correlation file named jcor.txt
		else:
		
			gk_result=os.popen("tail -1 fileKappa 2>err").read()
			kx=gk_result.split()[1]
		
		f.write("kappa_src=%f\n"%kx);
		return
	flux_src=p.getFlux(begin,timestep,S,conti,lz,excRate,swapEnergyRate)[0]

	aveC,aveN,aveTemp,avejx=p.getTempProfile(begin,upP,deta,S,tcfactor,zfactor)
	slope,flux_bulk=p.sslope(aveC,aveTemp,aveN,avejx,upP,deta,S);
	kappa_src=flux_src/slope*tcfactor*zfactor;
	kappa_bulk=flux_bulk/slope*tcfactor*zfactor;
	f=open('result.txt','w')
	f.write('method:'+method+'\n');
	f.write("kappa_src=%f\n"%(kappa_src));
	f.close()



	numS=0;
	n=len(aveC)-3
	slopes=np.zeros(n)
	J_bulks=np.zeros(n)
	J_bulkcs=np.zeros(n)
	if(method=="muller" or method=="inject"):
		for upP in range(1,n/4):
			s=p.mullerSlope(aveC,aveTemp,aveN,avejx,upP);
			slopes[numS],J_bulks[numS],J_bulkcs[numS]=s
			numS+=1

		
	
	if(method=="nvt"):
		for upP in range(1,n/2):
			s=p.nvtSlope(aveC,aveTemp,aveN,avejx,upP);
			slopes[numS],J_bulks[numS],J_bulkcs[numS]=s
			numS+=1
	

	kappa_src=flux_src/slopes*tcfactor*zfactor;
	flux_bulk=J_bulks/(deta*S);
	flux_bulkc=J_bulkcs/(deta*S);
	kappa_bulk=flux_bulk/slopes*tcfactor*zfactor;
	kappa_bulkc=flux_bulkc/slopes*tcfactor*zfactor;
	data=np.c_[np.arange(n)+1,kappa_src,kappa_bulk,kappa_bulkc,np.ones(n)*flux_src,flux_bulk,flux_bulkc,slopes]
	tools.to_txt('upP kappa_src kappa_bulk kappa_bulkc flux_src flux_bulk flux_bulkc slope'.split(' '),data[:numS],"scan.txt")
Exemple #12
0
def run(method, begin, timestep, conti, excRate, swapEnergyRate, upP, deta,
        tcfactor, fourierTc, computeTc, corRate, kb, T, xp, yp, zp,
        enforceThick, thick, zfactor, S, box, **rest):

    p = profile()
    p.method = method
    lx, ly, lz = box[-3:]
    if method == 'greenkubo':
        f = open('result.txt', 'w')
        if (computeTc):
            os.popen("tail -2000 kappa.txt>tailKp.txt 2>err")
            df = pd.read_csv("tailKp.txt", sep=' ', header=None)
            kx = np.average(np.array(df)[:, 1], axis=0)

        elif (fourierTc):
            # v=lx*ly*lz;
            # factor=corRate*timestep/(v*kb*T*T)*zfactor*tcfactor;
            SRCHOME = tools.dirname(__file__)
            kx = os.popen(
                "%s/correlation/corr factor" %
                SRCHOME).read()  # generate a correlation file named jcor.txt
        else:

            gk_result = os.popen("tail -1 fileKappa 2>err").read()
            kx = gk_result.split()[1]

        f.write("kappa_src=%f\n" % kx)
        return
    flux_src = p.getFlux(begin, timestep, S, conti, lz, excRate,
                         swapEnergyRate)[0]

    aveC, aveN, aveTemp, avejx = p.getTempProfile(begin, upP, deta, S,
                                                  tcfactor, zfactor)
    slope, flux_bulk = p.sslope(aveC, aveTemp, aveN, avejx, upP, deta, S)
    kappa_src = flux_src / slope * tcfactor * zfactor
    kappa_bulk = flux_bulk / slope * tcfactor * zfactor
    f = open('result.txt', 'w')
    f.write('method:' + method + '\n')
    f.write("kappa_src=%f\n" % (kappa_src))
    f.close()

    numS = 0
    n = len(aveC) - 3
    slopes = np.zeros(n)
    J_bulks = np.zeros(n)
    J_bulkcs = np.zeros(n)
    if (method == "muller" or method == "inject"):
        for upP in range(1, n / 4):
            s = p.mullerSlope(aveC, aveTemp, aveN, avejx, upP)
            slopes[numS], J_bulks[numS], J_bulkcs[numS] = s
            numS += 1

    if (method == "nvt"):
        for upP in range(1, n / 2):
            s = p.nvtSlope(aveC, aveTemp, aveN, avejx, upP)
            slopes[numS], J_bulks[numS], J_bulkcs[numS] = s
            numS += 1

    kappa_src = flux_src / slopes * tcfactor * zfactor
    flux_bulk = J_bulks / (deta * S)
    flux_bulkc = J_bulkcs / (deta * S)
    kappa_bulk = flux_bulk / slopes * tcfactor * zfactor
    kappa_bulkc = flux_bulkc / slopes * tcfactor * zfactor
    data = np.c_[np.arange(n) + 1, kappa_src, kappa_bulk, kappa_bulkc,
                 np.ones(n) * flux_src, flux_bulk, flux_bulkc, slopes]
    tools.to_txt(
        ('upP kappa_src kappa_bulk' +
         'kappa_bulkc flux_src flux_bulk flux_bulkc slope').split(' '),
        data[:numS], "scan.txt")
Exemple #13
0
    def postold(self):
        try:
            df = pd.read_csv(
                "BTE.kappa_scalar",
                sep=r"[ \t]+",
                header=None,
                names=['step', 'kappa'],
                engine='python')
            ks = np.array(df['kappa'])
            plot(
                (np.array(df['step']), 'Iteration Step'),
                (ks, 'Thermal Conductivity (W/mK)'),
                'kappa_scalar.png',
                grid=True,
                linewidth=2)
        except Exception as e:
            print(e)

        try:
            df = pd.read_csv(
                "BTE.cumulative_kappa_scalar",
                sep=r"[ \t]+",
                header=None,
                names=['l', 'kappa'],
                engine='python')
            ks = np.array(df['kappa'])
            plot(
                (np.array(df['l']),
                 'Cutoff Mean Free Path for Phonons (Angstrom)'),
                (ks, 'Thermal Conductivity (W/mK)'),
                'cumulative_kappa_scalar.png',
                grid=True,
                linewidth=2,
                logx=True)
        except Exception as e:
            print(e)
        try:
            omega = np.loadtxt('BTE.omega') / (2.0 * np.pi)
            kappa = np.loadtxt('BTE.kappa')[-1, 1:]
            kappa = np.einsum('jji', kappa.reshape([3, 3, -1])) / 3.0
            plot(
                (np.arange(len(omega[0])), 'Band'),
                (kappa, 'Thermal Conductivity (W/mK)'),
                'kappa_band.png',
                grid=True,
                linewidth=2)
            plot(
                (np.arange(len(omega[0])), 'Band'),
                (kappa.cumsum(), 'Thermal Conductivity (W/mK)'),
                'cumulative_kappa_band.png',
                grid=True,
                linewidth=2)
        except Exception as e:
            print(e)
        try:
            w = np.loadtxt('BTE.w_final')
            w = np.abs(w)
            w[omega < omega.flatten().max() * 0.005] = float('nan')
            plot(
                (omega.flatten(), 'Frequency (THz)'), (w.flatten(),
                                                       'Scatter Rate (THz)'),
                'scatter_freq.png',
                grid=True,
                scatter=True,
                logy=True)
            tao = 1.0 / w + 1e-6
            with fig('tao_freq.png'):
                pl.semilogy(
                    omega.flatten(),
                    tao.flatten(),
                    linestyle='.',
                    marker='.',
                    color='r',
                    markersize=5)
                pl.xlabel('Frequency (THz)')
                pl.ylabel('Relaxation Time (ps)')
                pl.grid(True)
                pl.xlim([0, omega.max()])
                # pl.ylim([0,tao.flatten().max()])
            to_txt(['freq', 'tao'],
                   np.c_[omega.flatten(), tao.flatten()], 'tao_freq.txt')
        except Exception as e:
            print(e)
        """
        if not exists('relaxtime'):mkdir('relaxtime')
        cd('relaxtime')
        for i,om in enumerate(omega[:6]):
            print "q : ",i
            plot((om,'Frequency (THz)'),(tao[i],'Relaxation Time (ps)'),
            'tao_freq_q%d.png'%i,grid=True,scatter=True,logx=True,logy=True)
        cd('..')
        """

        try:
            v = np.loadtxt(open('BTE.v'))
            n, m = v.shape
            v = v.reshape([n, 3, m / 3])
            v = np.linalg.norm(v, axis=1)
            y = (v.flatten(), 'Group Velocity (nm/ps)')
            plot(
                (omega.flatten(), 'Frequency (THz)'),
                y,
                'v_freq.png',
                grid=True,
                scatter=True)
            to_txt(['freq', 'vg'],
                   np.c_[omega.flatten(), v.flatten()], 'v_freq.txt')
        except Exception as e:
            print(e)
        try:
            l = v * tao
            l[l < 1e-6] = None
            plot(
                (omega.flatten(), 'Frequency (THz)'), (l.flatten(),
                                                       'Mean Free Path (nm)'),
                'lamda_freq.png',
                grid=True,
                scatter=True,
                logy=True,
                logx=True,
                xmin=0)
            to_txt(['freq', 'mfp'],
                   np.c_[omega.flatten(), l.flatten()], 'lamda_freq.txt')
        except Exception as e:
            print(e)
        try:
            q = np.loadtxt(open('BTE.qpoints'))
            qnorm = np.linalg.norm(q[:, -3:], axis=1)
            data = []
            n, m = w.shape
            for i in range(m):
                data.append([qnorm, w[:, i], 'b'])
            series(
                xlabel='|q| (1/nm)',
                ylabel='Scatter Rate (THz)',
                datas=data,
                filename='branchscatter.png',
                scatter=True,
                legend=False,
                logx=True,
                logy=True)
        except Exception as e:
            print(e)
Exemple #14
0
    def post(self):
        cd('T300K')
        try:
            df = pd.read_csv(
                "BTE.kappa_scalar",
                sep=r"[ \t]+",
                header=None,
                names=['step', 'kappa'],
                engine='python')
            ks = np.array(df['kappa'])
            plot(
                (np.array(df['step']), 'Iteration Step'),
                (ks, 'Thermal Conductivity (W/mK)'),
                'kappa_scalar.png',
                grid=True,
                linewidth=2)
        except Exception as e:
            print(e)

        try:
            df = pd.read_csv(
                "BTE.cumulative_kappa_scalar",
                sep=r"[ \t]+",
                header=None,
                names=['l', 'kappa'],
                engine='python')
            ks = np.array(df['kappa'])
            plot(
                (np.array(df['l']),
                 'Cutoff Mean Free Path for Phonons (Angstrom)'),
                (ks, 'Thermal Conductivity (W/mK)'),
                'cumulative_kappa_scalar.png',
                grid=True,
                linewidth=2,
                logx=True)
        except Exception as e:
            print(e)
        try:
            omega = np.loadtxt('../BTE.omega') / (2.0 * np.pi)
            kappa = np.loadtxt('BTE.kappa')[-1, 1:]
            kappa = np.einsum('jji', kappa.reshape([3, 3, -1])) / 3.0
            plot(
                (np.arange(len(omega[0])), 'Band'),
                (kappa, 'Thermal Conductivity (W/mK)'),
                'kappa_band.png',
                grid=True,
                linewidth=2)
            plot(
                (np.arange(len(omega[0])), 'Band'),
                (kappa.cumsum(), 'Thermal Conductivity (W/mK)'),
                'cumulative_kappa_band.png',
                grid=True,
                linewidth=2)
        except Exception as e:
            print(e)
        try:

            kappa = np.loadtxt('BTE.cumulative_kappaVsOmega_tensor')
            with fig("atc_freq.png"):
                pl.plot(kappa[:, 0], kappa[:, 1], label="${\kappa_{xx}}$")
                pl.plot(kappa[:, 0], kappa[:, 5], label="${\kappa_{xx}}$")
                pl.plot(kappa[:, 0], kappa[:, 9], label="${\kappa_{xx}}$")
                pl.xlabel("Frequency (THz)")
                pl.ylabel("Cumulative Thermal Conductivity(W/mK)")
            with fig("tc_freq.png"):
                pl.plot(
                    kappa[:, 0],
                    np.gradient(kappa[:, 1]),
                    label="${\kappa_{xx}}$")
                pl.plot(
                    kappa[:, 0],
                    np.gradient(kappa[:, 5]),
                    label="${\kappa_{xx}}$")
                pl.plot(
                    kappa[:, 0],
                    np.gradient(kappa[:, 9]),
                    label="${\kappa_{xx}}$")
                pl.xlabel("Frequency (THz)")
                pl.ylabel("Cumulative Thermal Conductivity(W/mK)")
        except Exception as e:
            print(e)

        try:
            g = np.loadtxt('../BTE.gruneisen')
            y = (g.flatten(), 'Gruneisen')
            plot(
                (omega.flatten(), 'Frequency (THz)'),
                y,
                'gruneisen_freq.png',
                grid=True,
                scatter=True)
            with fig('gruneisen_freq.png'):
                pl.scatter(
                    omega.flatten(), g.flatten(), marker='.', color='r', s=50)
                pl.xlabel('Frequency (THz)')
                pl.ylabel('Gruneisen Coeffecient')
                # pl.grid(True)
                pl.xlim([0, omega.max()])
                pl.ylim([-10, 5])
                # pl.tick_params(axis='both', which='major', labelsize=14)
            to_txt(['freq', 'gruneisen'],
                   np.c_[omega.flatten(), g.flatten()], 'gruneisen_freq.txt')
            g = np.loadtxt('../BTE.P3')

            with fig('p3_freq.png'):
                pl.scatter(
                    omega.flatten(),
                    g.flatten() * 1e6,
                    marker='.',
                    color='r',
                    s=50)
                pl.xlabel('Frequency (THz)')
                pl.ylabel('P3 $(\\times 10^{-6})$')
                # pl.grid(True)
                pl.xlim([0, omega.max()])
                pl.ylim([0, g.max() * 1e6])

            to_txt(['freq', 'p3'],
                   np.c_[omega.flatten(), g.flatten()], 'p3_freq.txt')
        except Exception as e:
            print(e)
        self.draw_gv()
        self.draw_branch_scatter()
        self.draw_tau()
        cd('..')
Exemple #15
0
    def drawlifetime(self):
        a = np.loadtxt('allnma.txt', skiprows=1)
        om = a[:, 3]
        tao = a[:, 6]  # np.abs(1/a[:,5])
        tao[np.abs(om) < 1e-6] = 0.0
        n = len(tao)

        filter = tao < 1e5
        om = om[filter]
        tao = tao[filter] / 6.28
        plot((om, 'Frequency (THz)'), (tao, 'Relaxation Time (ps)'),
             'tao_freq.png',
             grid=True,
             scatter=True,
             logy=True)
        tl.to_txt(['freq', 'tao'], np.c_[om, tao], 'tao_freq.txt')

        v = np.loadtxt('vqpoints/v.txt')[:n, 4]
        v = v[filter]
        l = v * tao
        tl.to_txt(['freq', 'lamda'], np.c_[om[om.argsort()], l[om.argsort()]],
                  'lamda_freq.txt')

        plot((om, 'Frequency (THz)'), (l, 'Mean Free Path (Angstrom)'),
             'lamda_freq.png',
             grid=True,
             scatter=True,
             logy=True)
        T = self.m.T
        w = om * 1e12 * 2.0 * np.pi
        from ase import io
        atoms = io.read('POSCAR')
        cs = self.m.correlation_supercell

        V = np.linalg.det(atoms.cell * cs)
        m = self.m
        # print m.enforceThick,m.thick,atoms.cell[2,2]
        if m.enforceThick:
            V *= m.thick / atoms.cell[2, 2]
        c = hbar * w * (BE(w, T + 0.005) - BE(w, T - 0.005)) * 100.0 / V * 1e30
        tl.to_txt(['freq', 'capacity(J/K)'], np.c_[om[om.argsort()],
                                                   c[om.argsort()]],
                  'capacity_freq.txt')
        plot((om[om.argsort()], 'Frequency (THz)'),
             (c[om.argsort()], 'Mode Specific Heat (J/K)'),
             'capacity_freq.png',
             grid=True,
             linewidth=2)
        tl.to_txt(['freq', 'cumsumcapacity'], np.c_[om[om.argsort()],
                                                    c[om.argsort()].cumsum()],
                  'cumsumcapacity_freq.txt')
        plot((om[om.argsort()], 'Frequency (THz)'),
             (c[om.argsort()].cumsum(), 'Acummulate Specific Heat (J/K)'),
             'cumsumcapacity_freq.png',
             grid=True,
             linewidth=2)

        k = l * 1e-10 * c * v * 1e-10 / 1e-12
        tl.to_txt(['freq', 'kappa'], np.c_[om[om.argsort()], k[om.argsort()]],
                  'kappa_freq.txt')
        plot((om, 'Frequency (THz)'), (k, 'Mode Themal Conductivity (W/mK)'),
             'kappa_freq.png',
             grid=True,
             scatter=True,
             logy=True,
             logx=False)

        tl.to_txt(['freq', 'cumsumkappa'], np.c_[om[om.argsort()],
                                                 k[om.argsort()].cumsum()],
                  'cumsumkappa_freq.txt')
        plot((om[om.argsort()], 'Frequency (THz)'),
             (k[om.argsort()].cumsum(),
              'Acummulate Themal Conductivity (W/mK)'),
             'cumsumkappa_freq.png',
             grid=True,
             linewidth=2)

        tl.to_txt(['lamda', 'cumsumkappa'], np.c_[l[l.argsort()],
                                                  k[l.argsort()].cumsum()],
                  'cumsumkappa_lamda.txt')
        plot(
            (l[l.argsort()], 'Mean Free Path (Angstrom)'),
            (k[l.argsort()].cumsum(), 'Acummulate Themal Conductivity (W/mK)'),
            'cumsumkappa_lamda.png',
            grid=True,
            linewidth=2)
Exemple #16
0
    def drawlifetime(self):
        a = np.loadtxt('allnma.txt', skiprows=1)
        om = a[:, 3]
        tao = a[:, 6]  # np.abs(1/a[:,5])
        tao[np.abs(om) < 1e-6] = 0.0
        n = len(tao)

        filter = tao < 1e5
        om = om[filter]
        tao = tao[filter] / 6.28
        plot(
            (om, 'Frequency (THz)'), (tao, 'Relaxation Time (ps)'),
            'tao_freq.png',
            grid=True,
            scatter=True,
            logy=True)
        tl.to_txt(['freq', 'tao'], np.c_[om, tao], 'tao_freq.txt')

        v = np.loadtxt('vqpoints/v.txt')[:n, 4]
        v = v[filter]
        l = v * tao
        tl.to_txt(['freq', 'lamda'], np.c_[om[om.argsort()], l[om.argsort()]],
                  'lamda_freq.txt')

        plot(
            (om, 'Frequency (THz)'), (l, 'Mean Free Path (Angstrom)'),
            'lamda_freq.png',
            grid=True,
            scatter=True,
            logy=True)
        T = self.m.T
        w = om * 1e12 * 2.0 * np.pi
        from ase import io
        atoms = io.read('POSCAR')
        cs = self.m.correlation_supercell

        V = np.linalg.det(atoms.cell * cs)
        m = self.m
        # print m.enforceThick,m.thick,atoms.cell[2,2]
        if m.enforceThick:
            V *= m.thick / atoms.cell[2, 2]
        c = hbar * w * (BE(w, T + 0.005) - BE(w, T - 0.005)) * 100.0 / V * 1e30
        tl.to_txt(['freq',
                   'capacity(J/K)'], np.c_[om[om.argsort()], c[om.argsort()]],
                  'capacity_freq.txt')
        plot(
            (om[om.argsort()], 'Frequency (THz)'),
            (c[om.argsort()], 'Mode Specific Heat (J/K)'),
            'capacity_freq.png',
            grid=True,
            linewidth=2)
        tl.to_txt(['freq', 'cumsumcapacity'],
                  np.c_[om[om.argsort()], c[om.argsort()].cumsum()],
                  'cumsumcapacity_freq.txt')
        plot(
            (om[om.argsort()], 'Frequency (THz)'),
            (c[om.argsort()].cumsum(), 'Acummulate Specific Heat (J/K)'),
            'cumsumcapacity_freq.png',
            grid=True,
            linewidth=2)

        k = l * 1e-10 * c * v * 1e-10 / 1e-12
        tl.to_txt(['freq', 'kappa'], np.c_[om[om.argsort()], k[om.argsort()]],
                  'kappa_freq.txt')
        plot(
            (om, 'Frequency (THz)'), (k, 'Mode Themal Conductivity (W/mK)'),
            'kappa_freq.png',
            grid=True,
            scatter=True,
            logy=True,
            logx=False)

        tl.to_txt(['freq', 'cumsumkappa'],
                  np.c_[om[om.argsort()], k[om.argsort()].cumsum()],
                  'cumsumkappa_freq.txt')
        plot(
            (om[om.argsort()], 'Frequency (THz)'),
            (k[om.argsort()].cumsum(),
             'Acummulate Themal Conductivity (W/mK)'),
            'cumsumkappa_freq.png',
            grid=True,
            linewidth=2)

        tl.to_txt(['lamda', 'cumsumkappa'],
                  np.c_[l[l.argsort()], k[l.argsort()].cumsum()],
                  'cumsumkappa_lamda.txt')
        plot(
            (l[l.argsort()], 'Mean Free Path (Angstrom)'),
            (k[l.argsort()].cumsum(), 'Acummulate Themal Conductivity (W/mK)'),
            'cumsumkappa_lamda.png',
            grid=True,
            linewidth=2)