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()
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)
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)
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
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)
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()
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')
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')
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')
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)
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")
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")
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)
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('..')
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)
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)