def plot_smooth(): df = pd.read_csv("VDOS.txt", sep=r"[ \t]", engine="python") freq, ave = getDos(df['Freq_THz'], df['vdos_av']) dp = pd.DataFrame() dp['Freq_THz'] = freq dp["vdos_av"] = ave dp.to_csv('smooth_dos.txt', sep='\t', index=False, float_format="%f") plot((freq, 'Frequency(THz)'), (ave, 'Phonon Density of states'), "smooth_dos.png", grid=True) alldos = [df['vdos_x'], df['vdos_y'], df['vdos_z']] filter = getFilter(alldos) dp = pd.DataFrame() freq, ave = getDos(df['Freq_THz'], df['vdos_x'], filter) dp['Freq_x'] = freq dp["vdos_x"] = ave freq, ave = getDos(df['Freq_THz'], df['vdos_y'], filter) dp['Freq_y'] = freq dp["vdos_y"] = ave freq, ave = getDos(df['Freq_THz'], df['vdos_z'], filter) dp['Freq_z'] = freq dp["vdos_z"] = ave dp.to_csv('smooth_dosxyz.txt', sep='\t', index=False, float_format="%f") series(xlabel='Frequency(THz)', ylabel='Phonon Density of States', datas=[(dp['Freq_x'], dp["vdos_x"], "dos_x"), (dp['Freq_y'], dp["vdos_y"], "dos_y"), (dp['Freq_z'], dp["vdos_z"], "dos_z")], filename='smooth_dosxyz.png', grid=True)
def sca(self,th=0.0): qpoints_full=np.loadtxt('BTE.qpoints_full') ks=qpoints_full[:,2:4] f=self.direction(ks,th) ids=qpoints_full[:,1].astype(np.int)[f] qpoints=np.loadtxt('BTE.qpoints') idx=qpoints[:,0].astype(np.int) u=[list(idx).index(i) for i in ids] w=np.loadtxt('BTE.w_final') omega=np.loadtxt('BTE.omega')/(2.0*np.pi) #w[omega<omega.flatten().max()*0.005]=float('nan') tao=1.0/w+1e-6 rt=tao[u,:3] rom=omega[u,:3] data=[] n,m=rom.shape for i in range(m): data.append([rom[:,i],rt[:,i],'b']) series(xlabel='Frequency (THz)', ylabel='Relaxation Time (ps)', datas=data, filename='scaling-%f.png'%th,scatter=True,legend=False,logx=True,logy=True)
def sca(self, th=0.0): qpoints_full = np.loadtxt('BTE.qpoints_full') ks = qpoints_full[:, 2:4] f = filter_along_direction(ks, th, eps=0.5) ids = qpoints_full[:, 1].astype(np.int)[f] qpoints = np.loadtxt('BTE.qpoints') idx = qpoints[:, 0].astype(np.int) u = [list(idx).index(i) for i in ids] w = np.loadtxt('BTE.w_final') omega = np.loadtxt('BTE.omega') / (2.0 * np.pi) # w[omega<omega.flatten().max()*0.005]=float('nan') tao = 1.0 / w + 1e-6 rt = tao[u, :3] rom = omega[u, :3] data = [] n, m = rom.shape for i in range(m): data.append([rom[:, i], rt[:, i], 'b']) series( xlabel='Frequency (THz)', ylabel='Relaxation Time (ps)', datas=data, filename='scaling-%f.png' % th, scatter=True, legend=False, logx=True, logy=True)
def plot_regiondos(regions, filename='region_dos.png'): import h5py db = h5py.File('velocity.hdf5') freq = db['/freq'] datas = [] alldos = [] for region, rname in regions: dos = get_regiondos(region) alldos.append(dos) filter = getFilter(alldos) dp = pd.DataFrame() for region, rname in regions: dos = get_regiondos(region) x, y = getDos(freq, dos, filter) datas.append((x, y, "region:%s" % rname)) dp['freq_%s' % rname] = x dp['dos_%s' % rname] = y dp.to_csv('region_dos.txt', sep='\t', index=False, float_format="%f") series(xlabel='Frequency (THz)', ylabel='Phonon Density of States', datas=datas, linewidth=1, filename=filename, legend=True)
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 drawDos(self): freq,pdos=self.getpdos() datas=[(freq,p,'') for p in pdos.T] series('Frequency (THz)','Partial Density of States', datas=datas, filename='partial_dos.png',legend=False,grid=True) plot((freq,'Frequency (THz)'),(np.sum(pdos,axis=1),'Density of States'),filename='total_dos.png')
def plot_dos(): df = pd.read_csv("VDOS.txt", sep=r"[ \t]", engine="python") freq, dosx, dosy, dosz = df['Freq_THz'], df['vdos_x'], df['vdos_y'], df[ 'vdos_z'] series(xlabel='Frequency(THz)', ylabel='Phonon Density of States', datas=[(freq, dosx, "dos_x"), (freq, dosy, "dos_y"), (freq, dosz, "dos_z")], linewidth=0.3, filename='VDOS.png')
def modefit(self, iqp, ibr, k, freq, q): totalStep = self.totalStep x = np.linspace(0, 1, totalStep / 2 + 1) * 1 / 2.0 / self.timestep q1 = q x1 = x df = 1.0 / (2.0 * self.timestep) / (self.totalStep / 2) span = int(1.5 / df) ori = q.argmax() # int(freq/df) low = max(ori - 1 * span, 0) hi = min(ori + 1 * span, len(q) - 1) filter = range(low, hi) x = x[filter] q = q[filter] / 1e10 # q=self.lowess(x,q) # q=self.smo(q,3) p0 = np.array([x[q.argmax()], 0.01, q[q.argmax()]]) # Initial guess p = self.fitLife(x, q, p0) p = np.abs(p) # to_txt(['Freq','dos'],np.c_[x,q],'SED/single%s%s.txt'%(str(k),freq)) if self.partsed: xv = x # np.linspace(x.min(),x.max(),1000) series( xlabel='Frequency (THz)', ylabel='Single Phonon Power Spectrum', datas=[ (x, q, "origin"), (xv, self.lorentz( p, xv), "fitting")], linewidth=1, filename='NMA/nmapart_%s_%s_%s_%s.png' % (iqp, ibr, str(k), freq)) if self.totalsed: xv = np.linspace(x.min(), x.max(), 100) series( xlabel='Frequency (THz)', ylabel='Single Phonon Power Spectrum', datas=[ (x1, q1 / 1e10, "origin"), (xv, self.lorentz( p, xv), "fitting")], linewidth=1, filename='NMA/nma_%s_%s_%s_%s.png' % (iqp, ibr, str(k), freq)) v = map(str, list(k) + [freq, p[0], p[1], 1.0 / p[1]]) c = '\t'.join(v) print("[nma]", c) return c, q1
def plot_vacf(): df = pd.read_csv("VACF.txt", sep=r"[ \t]", engine="python") time, vx, vy, vz = df['correlation_time(ps)'], df['vcaf_x'], df[ 'vcaf_y'], df['vcaf_z'] xx = select(time) time = time[xx] vx, vy, vz = vx[xx], vy[xx], vz[xx] series(xlabel='Correlation Time (ps)', ylabel='Normalized Velocity Auto Correlation Function', datas=[(time, vx, "vcf_x"), (time, vy, "vcf_y"), (time, vz, "vcf_z")], linewidth=0.3, filename='VACF.png')
def plot_atomdos(atoms=range(24), filename='atom_dos.png'): import h5py db = h5py.File('velocity.hdf5') freq = db['/freq'] datas = [] for i in atoms: dos = db['/dos_atom/%d' % i] x, y = getDos(freq, dos) datas.append((x, y, "dos_atom_%d" % i)) series(xlabel='Frequency (THz)', ylabel='Phonon Density of States', datas=datas, linewidth=0.3, filename=filename, legend=False)
def drawDos(self): freq, pdos = self.getpdos() datas = [(freq, p, '') for p in pdos.T] series( 'Frequency (THz)', 'Partial Density of States', datas=datas, filename='partial_dos.png', legend=False, grid=True) plot( (freq, 'Frequency (THz)'), (np.sum(pdos, axis=1), 'Density of States'), filename='total_dos.png')
def sca2(self): w=np.loadtxt('BTE.w_final') omega=np.loadtxt('BTE.omega')/(2.0*np.pi) w[omega<omega.flatten().max()*0.005]=float('nan') tao=1.0/w+1e-6 rt=tao[50:55,:] rom=omega[50:55,:] data=[] n,m=rom.shape for i in range(n): data.append([rom[i,:],rt[i,:],'b']) series(xlabel='Frequency (THz)', ylabel='Relaxation Time (ps)', datas=data, filename='k.png',scatter=True,legend=False,logx=True,logy=True)
def reduce(self, n=1, name0=500000): name = 'ac' + str(name0) + '.dat' m = self.m xs = [] for i in range(n): dir = '../%d/' % i print dir x = np.loadtxt(dir + name) xs.append(x[:, 1]) ts = x[:, 0] xs = np.array(xs) avexs = xs.mean(axis=0) np.savetxt('aveac.txt', np.c_[ts, avexs]) plot([ts, 'Correlation Time (ps)'], [avexs, 'Heat Flut Correlation Function'], 'aveac.png') datas = [] for i in range(n): datas.append([ts, xs[i], 'b']) series(xlabel='Correlation Time (ps)', ylabel='Heat Flut Correlation Function', datas=datas, filename='ac.png', legend=False) name = 'tc' + str(name0) + '.dat' xs = [] for i in range(n): dir = '../%d/' % i print dir x = np.loadtxt(dir + name) xs.append(x[:, 1]) ts = x[:, 0] xs = np.array(xs) avexs = xs.mean(axis=0) np.savetxt('avetc.txt', np.c_[ts, avexs]) plot([ts, 'Correlation Time (ps)'], [avexs, 'Thermal Conductivity (W/mK)'], 'avetc.png') datas = [] for i in range(n): datas.append([ts, xs[i], 'b']) series(xlabel='Correlation Time (ps)', ylabel='Thermal Conductivity (W/mK)', datas=datas, filename='tc.png', legend=False)
def modefit(self, iqp, ibr, k, freq, q): totalStep = self.totalStep x = np.linspace(0, 1, totalStep / 2 + 1) * 1 / 2.0 / self.timestep q1 = q x1 = x df = 1.0 / (2.0 * self.timestep) / (self.totalStep / 2) span = int(1.5 / df) ori = q.argmax() #int(freq/df) low = max(ori - 1 * span, 0) hi = min(ori + 1 * span, len(q) - 1) filter = range(low, hi) x = x[filter] q = q[filter] / 1e10 #q=self.lowess(x,q) #q=self.smo(q,3) p0 = np.array([x[q.argmax()], 0.01, q[q.argmax()]]) #Initial guess p = self.fitLife(x, q, p0) p = np.abs(p) #to_txt(['Freq','dos'],np.c_[x,q],'SED/single%s%s.txt'%(str(k),freq)) if self.partsed: xv = x #np.linspace(x.min(),x.max(),1000) series(xlabel='Frequency (THz)', ylabel='Single Phonon Power Spectrum', datas=[(x, q, "origin"), (xv, self.lorentz(p, xv), "fitting")], linewidth=1, filename='NMA/nmapart_%s_%s_%s_%s.png' % (iqp, ibr, str(k), freq)) if self.totalsed: xv = np.linspace(x.min(), x.max(), 100) series(xlabel='Frequency (THz)', ylabel='Single Phonon Power Spectrum', datas=[(x1, q1 / 1e10, "origin"), (xv, self.lorentz(p, xv), "fitting")], linewidth=1, filename='NMA/nma_%s_%s_%s_%s.png' % (iqp, ibr, str(k), freq)) v = map(str, list(k) + [freq, p[0], p[1], 1.0 / p[1]]) c = '\t'.join(v) print "[nma]", c return c, q1
def calculateSED(self, k, natom_unitcell): totalStep = self.totalStep phase = self.getPhase(k, natom_unitcell) # phase1=self.getPhase(-np.array(k),natom_unitcell) nd = 1 d = totalStep - nd + 1 phi = np.zeros(d) # print phase for j in range(natom_unitcell): q = np.zeros([totalStep, 3], dtype=np.complex) # q1=np.zeros([totalStep,3],dtype=np.complex) for i in range(j, self.natom, natom_unitcell): fv = self.velocity_atom(i) q += np.array(fv) * phase[i] # q+=np.array(fv)*phase1[i] for k0 in range(nd): u0 = k0 + d # if u0>len(q): # u0=len(q) u1 = u0 - d q0 = fft(q[u1:u0], axis=0) # q0=q0[:totalStep/2+1] phi += (q0 * q0.conjugate()).real.sum(axis=1) phi = phi[:d / 2 + 1] / nd # df = 1.0 / (2.0 * self.timestep) / (self.totalStep / 2) phi = self.smo(phi, 50) if self.totalsed: x = np.linspace(0, 1, d / 2 + 1) * 1 / 2.0 / self.timestep series( xlabel='Frequency (THz)', ylabel='Phonon Energy Spectrum', datas=[ (x, phi, "origin")], linewidth=1, filename='NMA/sed%s.png' % (str(k)), logy=True) return phi
def draw_branch_scatter(self): try: w = get_w_final('..') q = get_qpoints('..') qnorm = np.linalg.norm(q, 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: pass
def calculateSED(self, k, natom_unitcell): totalStep = self.totalStep phase = self.getPhase(k, natom_unitcell) phase1 = self.getPhase(-np.array(k), natom_unitcell) nd = 1 d = totalStep - nd + 1 phi = np.zeros(d) #print phase for j in range(natom_unitcell): q = np.zeros([totalStep, 3], dtype=np.complex) #q1=np.zeros([totalStep,3],dtype=np.complex) for i in range(j, self.natom, natom_unitcell): fv = self.velocity_atom(i) q += np.array(fv) * phase[i] #q+=np.array(fv)*phase1[i] for k0 in range(nd): u0 = k0 + d #if u0>len(q): # u0=len(q) u1 = u0 - d q0 = fft(q[u1:u0], axis=0) #q0=q0[:totalStep/2+1] phi += (q0 * q0.conjugate()).real.sum(axis=1) phi = phi[:d / 2 + 1] / nd s = np.zeros_like(phi) df = 1.0 / (2.0 * self.timestep) / (self.totalStep / 2) span = int(1.0 / df) phi = self.smo(phi, 50) if self.totalsed: x = np.linspace(0, 1, d / 2 + 1) * 1 / 2.0 / self.timestep series(xlabel='Frequency (THz)', ylabel='Phonon Energy Spectrum', datas=[(x, phi, "origin")], linewidth=1, filename='NMA/sed%s.png' % (str(k)), logy=True) return phi
def sca2(self): w = np.loadtxt('BTE.w_final') omega = np.loadtxt('BTE.omega') / (2.0 * np.pi) w[omega < omega.flatten().max() * 0.005] = float('nan') tao = 1.0 / w + 1e-6 rt = tao[50:55, :] rom = omega[50:55, :] data = [] n, m = rom.shape for i in range(n): data.append([rom[i, :], rt[i, :], 'b']) series( xlabel='Frequency (THz)', ylabel='Relaxation Time (ps)', datas=data, filename='k.png', scatter=True, legend=False, logx=True, logy=True)
import pandas as pd df = pd.read_csv("region_dos.txt", sep=r"[ \t]", engine="python") npair = len(df.columns) / 2 datas = [] for i in range(npair): rname = df.columns[i * 2][5:] datas.append((df['freq_' + rname], df['dos_' + rname], "region:" + rname)) dc = pd.read_csv("graphenedos.txt", sep=r"[ \t]", engine="python") datas.append((dc[dc.columns[0]], dc[dc.columns[1]], 'GNR')) from aces.graph import series series(xlabel='Frequency (THz)', ylabel='Phonon Density of States', datas=datas, linewidth=1, filename='camparedos.png', legend=True, xmax=60)
def cal_lc(self, r, dr, m): from aces.lammpsdata import lammpsdata atoms = lammpsdata().set_src('correlation_structure') atoms.set_pbc([m.xp, m.yp, m.zp]) nw = self.totalStep / 2 + 1 nr = int(r / dr) + 1 n = len(atoms) dis = atoms.get_all_distances(mic=True) pos = atoms.positions cell = atoms.cell symbols = atoms.get_chemical_symbols() masses = self.getMassFromLabel(symbols) if not exists('g.npz'): g = np.zeros([nw, nr], dtype=np.complex) ng = np.zeros(nr, dtype=np.int) c = self.get_nei(r, dr, pos, cell) for i, j, q in c: if j == 0: print "center atom:%d/%d" % (i, n) aij = np.einsum('ij,ij->i', self.fourier_atom(i).conjugate(), self.fourier_atom(j)) aii = np.einsum('ij,ij->i', self.fourier_atom(i).conjugate(), self.fourier_atom(i)) ajj = np.einsum('ij,ij->i', self.fourier_atom(j).conjugate(), self.fourier_atom(j)) x = aij / np.sqrt(aii * ajj) * np.sqrt(masses[i] * masses[j]) for ir in q: g[:, ir] += x ng[ir] += 1 np.savez('g.npz', g=g, ng=ng) npz = np.load('g.npz') g = npz['g'] ng = npz['ng'] rs = (np.arange(nr)) * dr rs = rs[:-1] def aa(x): if x > 0: return 1.0 / x else: return 0.0 ivr = [aa(x) for x in ng] #1.0/4.0/np.pi/rs**2 g = np.einsum('ij,j->ij', g, ivr)[:, :-1] g = (g.conjugate() * g).real imshow(g, 'g.png', extent=[0, 1, 0, 1]) data = [] for i in range(0, self.totalStep / 2 + 1, self.totalStep / 20): data.append([rs, g[i, :], str(i)]) series(xlabel='length (A)', ylabel='Cross Phonon Energy Spectrum', datas=data, linewidth=2, filename='cpes.png') cg = g.cumsum(axis=1) imshow(cg, 'cg.png', extent=[0, 1, 0, 1]) cg = np.einsum('ij,i->ij', cg, 1.0 / cg[:, -1]) data = [] for i in range(0, self.totalStep / 2 + 1, self.totalStep / 10): data.append([rs, cg[i, :], str(i)]) series(xlabel='length (A)', ylabel='Cross Phonon Energy Spectrum', datas=data, linewidth=2, filename='cges.png') lc = ((cg < 0.80).sum(axis=1)) * dr x = np.linspace(0, 1, self.totalStep / 2 + 1) * 1 / 2.0 / self.timestep plot([x, 'Frequency (THz)'], [lc, 'Coherence length(A)'], 'coherence.png') return lc
import numpy as np data = [] kapitza = [] i = -1 for dT in range(0, 60, 10): i += 1 p = np.loadtxt(str(i) + '/tempAve.txt', skiprows=1) data.append([p[:, 1], p[:, 3], 'dT=' + str(dT)]) dataT = p[30, 3] - p[20, 3] j = (p[:, 4] * p[:, 2]).sum() / p[:, 2].sum() kapitza.append([dT, np.abs(j) / dataT]) kapitza = np.array(kapitza) from aces.graph import series, plot, fig, pl series(xlabel='x (Angstrom)', ylabel='Temperature (K)', datas=data, filename='profile.png') with fig('kapitza.png'): x = kapitza[:, 0] y = kapitza[:, 1] pl.plot(x, y, marker='v', ms=12, mec='b', mfc='w', mfcalt="w", mew=1.5, linewidth=1) pl.xlabel('dT(K)') pl.ylabel('Kapitza Conductance (W/m2K)')
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 postnew(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: w=np.loadtxt('BTE.w_final')[:,1] w=np.abs(w) q=np.loadtxt(open('../BTE.qpoints')) n=len(q) w=w.T.reshape([-1,n]) w=np.einsum('jk->kj',w) w.flags.writeable = True print w.shape,omega.shape 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 plot((omega.flatten(),'Frequency (THz)'),(tao.flatten(),'Relaxation Time (ps)'),'tao_freq.png',grid=True,scatter=True,logy=True) to_txt(['freq','tao'],np.c_[omega.flatten(),tao.flatten()],'tao_freq.txt') except Exception as e: print e try: v=np.loadtxt(open('../BTE.v')) q=np.loadtxt(open('../BTE.qpoints')) n=len(q) v=v.T.reshape([3,-1,n]) v=np.einsum('ijk->kji',v) v=np.linalg.norm(v,axis=-1) plot((omega.flatten(),'Frequency (THz)'),(v.flatten(),'Group Velocity (nm/ps)'),'v_freq.png',grid=True,scatter=True) to_txt(['freq','vg'],np.c_[omega.flatten(),v.flatten()],'v_freq.txt') l=v*tao plot((omega.flatten(),'Frequency (THz)'),(l.flatten(),'Mean Free Path (nm)'),'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 try: g=np.loadtxt('../BTE.gruneisen') plot((omega.flatten(),'Frequency (THz)'),(g.flatten(),'Gruneisen'),'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 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: pass cd('..')
def postsheng(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) plot((omega.flatten(),'Frequency (THz)'),(v.flatten(),'Group Velocity (nm/ps)'),'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
import pandas as pd df=pd.read_csv("region_dos.txt",sep=r"[ \t]",engine="python"); npair=len(df.columns)/2 datas=[] for i in range(npair): rname=df.columns[i*2][5:] datas.append((df['freq_'+rname],df['dos_'+rname],"region:"+rname)) dc=pd.read_csv("graphenedos.txt",sep=r"[ \t]",engine="python"); datas.append((dc[dc.columns[0]],dc[dc.columns[1]],'GNR')) from aces.graph import series series(xlabel='Frequency (THz)', ylabel='Phonon Density of States', datas=datas ,linewidth=1 ,filename='camparedos.png',legend=True,xmax=60)
datas=[] import pandas as pd import numpy as np from aces.tools import * youngs=[] temps=range(200,300,10) for i in range(10): print i cd(str(i)) from aces.App import App App().runner.post() df=pd.read_csv("cal_stress.txt",sep=r"[ \t]",engine="python"); datas.append([df['Strain'],df['Stress_GPa'],str(temps[i])+'K' ]) youngs.append(float(read("YoungsModulus.txt"))) cd('..') from aces.graph import series,plot plot((np.array(temps),'Temperature (K)'),(np.array(youngs),'Young\'s Modulus (GPa)'),'youngs.png') series(xlabel='Strain', ylabel='Stress (GPa)', datas=datas ,linewidth=1 ,filename='stress_strain.png',legend=True)
import pandas as pd import numpy as np from aces.tools import * youngs = [] temps = np.arange(100, 300, 20) sel = np.arange(0, 10, 2) for i in sel: print i cd(str(i * 2 + 1)) #from aces.App import App #App().runner.post() df = pd.read_csv("cal_stress.txt", sep=r"[ \t]", engine="python") datas.append([df['Strain'], df['Stress_GPa'], str(temps[i]) + 'K']) cd('..') for i in np.arange(0, 10): print i cd(str(i * 2)) youngs.append(float(read("YoungsModulus.txt"))) cd('..') from aces.graph import series, plot series(xlabel='Strain', ylabel='Stress (GPa)', datas=datas, linewidth=1, filename='stress_strain.png', legend=True, grid=True) plot((np.array(temps), 'Temperature (K)'), (np.array(youngs), 'Young\'s Modulus (GPa)'), 'youngs.png')
def cal_lc(self, r, dr, m): from aces.lammpsdata import lammpsdata atoms = lammpsdata().set_src('correlation_structure') atoms.set_pbc([m.xp, m.yp, m.zp]) nw = self.totalStep / 2 + 1 nr = int(r / dr) + 1 n = len(atoms) pos = atoms.positions cell = atoms.cell symbols = atoms.get_chemical_symbols() masses = self.getMassFromLabel(symbols) if not tl.exists('g.npz'): g = np.zeros([nw, nr], dtype=np.complex) ng = np.zeros(nr, dtype=np.int) c = self.get_nei(r, dr, pos, cell) for i, j, q in c: if j == 0: print("center atom:%d/%d" % (i, n)) aij = np.einsum( 'ij,ij->i', self.fourier_atom(i).conjugate(), self.fourier_atom(j)) aii = np.einsum( 'ij,ij->i', self.fourier_atom(i).conjugate(), self.fourier_atom(i)) ajj = np.einsum( 'ij,ij->i', self.fourier_atom(j).conjugate(), self.fourier_atom(j)) x = aij / np.sqrt(aii * ajj) * np.sqrt(masses[i] * masses[j]) for ir in q: g[:, ir] += x ng[ir] += 1 np.savez('g.npz', g=g, ng=ng) npz = np.load('g.npz') g = npz['g'] ng = npz['ng'] rs = (np.arange(nr)) * dr rs = rs[:-1] def aa(x): if x > 0: return 1.0 / x else: return 0.0 ivr = [aa(x) for x in ng] # 1.0/4.0/np.pi/rs**2 g = np.einsum('ij,j->ij', g, ivr)[:, :-1] g = (g.conjugate() * g).real imshow(g, 'g.png', extent=[0, 1, 0, 1]) data = [] for i in range(0, self.totalStep / 2 + 1, self.totalStep / 20): data.append([rs, g[i, :], str(i)]) series(xlabel='length (A)', ylabel='Cross Phonon Energy Spectrum', datas=data, linewidth=2, filename='cpes.png') cg = g.cumsum(axis=1) imshow(cg, 'cg.png', extent=[0, 1, 0, 1]) cg = np.einsum('ij,i->ij', cg, 1.0 / cg[:, -1]) data = [] for i in range(0, self.totalStep / 2 + 1, self.totalStep / 10): data.append([rs, cg[i, :], str(i)]) series(xlabel='length (A)', ylabel='Cross Phonon Energy Spectrum', datas=data, linewidth=2, filename='cges.png') lc = ((cg < 0.80).sum(axis=1)) * dr x = np.linspace(0, 1, self.totalStep / 2 + 1) * 1 / 2.0 / self.timestep plot([x, 'Frequency (THz)'], [lc, 'Coherence length(A)'], 'coherence.png') return lc