def getcurrentfft(direction, dumping=0.00): from scipy.fftpack import fft timeArray,afield =getAField() current =getCurrentPython() option = tdapOptions() lengthTime = option.tdTimeStep[0] timeArray = timeArray[2:]/option.tdTimeStep[0] numStep = len(timeArray) current = current[:,1] #perform FFT for current in different directions,eg:the second line is y direction current *= np.exp(-dumping*timeArray) freqResolution =1.0/(lengthTime*numStep) freqArray = (timeArray-(numStep/2.0))*freqResolution energyArray = freqArray*4.1356 energyArray = energyArray[numStep/2:] epsilon_current = fft(current)[:numStep/2] epsilon_current = (np.real(epsilon_current),np.imag(epsilon_current)) current_fft_mode=np.power(epsilon_current[0],2)+np.power(epsilon_current[1],2) import pandas as pd df = pd.DataFrame({'x-energy':energyArray, 'y1-Im(current)':np.abs(epsilon_current[0]*energyArray/4.1356), 'y2-Re(current)':np.abs(epsilon_current[1]*energyArray/4.1356)}) #print df df.to_csv('current_fft.csv',sep=',') return current,energyArray[10:],current_fft_mode[10:]#current,energyArray[76:],current_fft_mode[76:]#to ensure that the nth order is the maximum
def getEigAndPar(timeSteps=None, forceReread = False): """ return the Times, Eigvalues and Partitions at selected timeSteps write two files EIG and PAR """ options = tdapOptions() systemLabel = options.label timestep = options.tdTimeStep[0] if timeSteps == None: timeSteps = getEIGSteps() time = np.array(timeSteps)*timestep eig = loadSaved('EIG') par = loadSaved('PAR') saved = ((len(eig)) != 0 and (len(par)) != 0) if (not saved) or forceReread: eig = []; par = [] for i in timeSteps: eig.append(readEigFile(systemLabel+str(i)+'.EIG')) par.append(readEigFile(systemLabel+str(i)+'q.EIG')) eig = np.array(eig) par = np.array(par) np.save('EIG',eig) np.save('PAR',par) return time, eig, par
def calculateRMSD(selectedStep=None,atomsOrigin=None,init=0, selectedAtoms=None): """ return the radius mean square displacements of the selected steps compared with the init step """ from ase.io.trajectory import Trajectory traj = Trajectory("Trajectory") options = tdapOptions() timestep = options.mdTimeStep[0] if atomsOrigin is None: atomsOrigin = traj[0] #print 'no' if selectedStep == None: selectedStep = range(len(traj)) #print selectedStep, timestep time = np.array(selectedStep) * timestep SaveName = 'RMSD' distance = loadSaved(SaveName) if len(distance) != len(selectedStep): #print 'Calculation' distance = np.array([np.mean(calculateDisplacement(traj[step],atomsOrigin,selectedAtoms)**2)**0.5 for step in selectedStep]) np.save(SaveName,distance) return time,distance
def getImagElectricFunction(direction, dumping=0.00): from scipy.fftpack import fft timeArray, efield = getEField() timeArray, dipole = getDipolePython() option = tdapOptions() lengthTime = option.tdTimeStep[0] timeArray = timeArray[2:] / option.tdTimeStep[0] numStep = len(timeArray) dipole = dipole[2:, direction] dipole *= np.exp(-dumping * timeArray) freqResolution = 1.0 / (lengthTime * numStep) freqArray = (timeArray - (numStep / 2.0)) * freqResolution energyArray = freqArray * 4.1356 energyArray = energyArray[numStep / 2:] epsilon = fft(dipole)[:numStep / 2] epsilon = (np.real(epsilon), np.imag(epsilon)) import pandas as pd df = pd.DataFrame({ 'x-energy': energyArray, 'y1-Im(alpha)': np.abs(epsilon[0] * energyArray / 4.1356), 'y2-Re(alpha)': np.abs(epsilon[1] * energyArray / 4.1356) }) #print df df.to_csv('DielectricFunction.csv', sep=',') return energyArray, np.abs(epsilon[0] * energyArray / 4.1356), np.abs( epsilon[1] * energyArray / 4.1356)
def getExcitedElectrons(selectK=None, comp=False): """ """ h**o = getHomo() kpoint, kweight = readKpoints() options = tdapOptions() selectStep = getEIGSteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep * timestep SaveName = 'ExcitedElectrons' SaveName1 = 'ExcitedElectrons1' exe = loadSaved(SaveName) exe1 = loadSaved(SaveName) if len(exe) != len(selectStep): exe = np.zeros([len(selectStep)]) exe1 = np.zeros([len(selectStep)]) for index, step in enumerate(selectStep): partition = readEigFile(options.label + str(step) + 'q.EIG') for i in range(partition.shape[0]): partition[i, :] *= kweight[i] if selectK is not None: exe[index] = np.sum(partition[selectK, h**o:]) else: exe[index] = h**o * 2 - np.sum(partition[:, :h**o]) exe1[index] = np.sum(partition[:, h**o:]) np.save(SaveName, exe) np.save(SaveName1, exe1) if comp: return selectTime, exe, exe1 else: return selectTime, exe
def getEnergyTemperaturePressure(ave=False): """ return the Temperature, KS Energy and Total Energy as the dimension of Nstep read from systemLabel.MDE returns the Temperature, KS Energy, Total Energy, Volume, Pressure """ options = tdapOptions() systemLabel = options.label if options.mdTimeStep[0] < 1E-10: timestep = options.tdTimeStep[0] start = 2 else: start = 0 timestep = options.mdTimeStep[0] if(os.path.exists(systemLabel+'.MDE')): energy_file = open(systemLabel+'.MDE') data = [] for i in energy_file.readlines(): if i.split()[0]=='#': continue data.append([float(j.replace('*','0')) for j in i.split()]) data=np.array(data) if ave: numAtom = getNumOfAtoms() #print numAtom data[start:,2:3] /= numAtom #print data X = data[:,0]*timestep return X[start:], data[start:,1], data[start:,2], data[start:,3], data[start:,4], data[start:,5] else: time, msd = readMSD() f = os.popen('grep "Ekin + Etot (const)" result') energy = np.array([float(line.split()[-2]) for line in f.readlines()])*13.6 #data=np.array([energy,energy,energy,energy,energy]).T return time, energy, energy, energy, energy,energy
def getExcitedElectrons(selectK=None, comp = False): """ """ h**o = getHomo() kpoint,kweight = readKpoints() options = tdapOptions() selectStep = getEIGSteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep*timestep SaveName = 'ExcitedElectrons' SaveName1 = 'ExcitedElectrons1' exe = loadSaved(SaveName) exe1 = loadSaved(SaveName) if len(exe) != len(selectStep): exe = np.zeros([len(selectStep)]) exe1 = np.zeros([len(selectStep)]) for index,step in enumerate(selectStep): partition = readEigFile(options.label+str(step)+'q.EIG') for i in range(partition.shape[0]): partition[i,:] *= kweight[i] if selectK is not None: exe[index] = np.sum(partition[selectK,h**o:]) else: exe[index] = h**o*2 - np.sum(partition[:,:h**o]) exe1[index] = np.sum(partition[:,h**o:]) np.save(SaveName,exe) np.save(SaveName1,exe1) if comp: return selectTime, exe, exe1 else: return selectTime, exe
def getImagElectricFunction(direction, dumping=0.00): from scipy.fftpack import fft timeArray, efield = getEField() timeArray, dipole = getDipolePython() option = tdapOptions() lengthTime = option.tdTimeStep[0] timeArray = timeArray[2:]/option.tdTimeStep[0] numStep = len(timeArray) dipole = dipole[2:,direction] dipole *= np.exp(-dumping*timeArray) freqResolution = 1.0/(lengthTime*numStep) freqArray = (timeArray-(numStep/2.0))*freqResolution energyArray = freqArray*4.1356 energyArray = energyArray[numStep/2:] epsilon = fft(dipole)[:numStep/2] epsilon = (np.real(epsilon),np.imag(epsilon)) import pandas as pd df = pd.DataFrame({'x-energy':energyArray, 'y1-Im(alpha)':np.abs(epsilon[0]*energyArray/4.1356), 'y2-Re(alpha)':np.abs(epsilon[1]*energyArray/4.1356)}) #print df df.to_csv('DielectricFunction.csv',sep=',') return energyArray, np.abs(epsilon[0]*energyArray/4.1356), np.abs(epsilon[1]*energyArray/4.1356)
def getEigAndPar(timeSteps=None, forceReread=False): """ return the Times, Eigvalues and Partitions at selected timeSteps write two files EIG and PAR """ options = tdapOptions() systemLabel = options.label timestep = options.tdTimeStep[0] if timeSteps == None: timeSteps = getEIGSteps() time = np.array(timeSteps) * timestep eig = loadSaved('EIG') par = loadSaved('PAR') saved = ((len(eig)) != 0 and (len(par)) != 0) if (not saved) or forceReread: eig = [] par = [] for i in timeSteps: eig.append(readEigFile(systemLabel + str(i) + '.EIG')) par.append(readEigFile(systemLabel + str(i) + 'q.EIG')) eig = np.array(eig) par = np.array(par) np.save('EIG', eig) np.save('PAR', par) return time, eig, par
def calculateRMSD(selectedStep=None,atomsOrigin=None,init=0, selectedAtoms=None): """ return the radius mean square displacements of the selected steps compared with the init step """ from ase.io.trajectory import Trajectory traj = Trajectory("Trajectory") options = tdapOptions() timestep = options.mdTimeStep[0] if atomsOrigin is None: atomsOrigin = traj[init] #print 'no' if selectedStep == None: selectedStep = range(len(traj)) #print selectedStep, timestep time = np.array(selectedStep) * timestep SaveName = 'RMSD' distance = loadSaved(SaveName) if len(distance) != len(selectedStep): #print 'Calculation' distance = np.array([np.mean(calculateDisplacement(traj[step],atomsOrigin,selectedAtoms)**2)**0.5 for step in selectedStep]) np.save(SaveName,distance) return time,distance
def getDipole(): options = tdapOptions() lines = os.popen('grep -n "Electric dipole (a.u.)" result').readlines() dipole = [(float(line.split()[-3]),float(line.split()[-2]),float(line.split()[-1])) for line in lines] timestep = options.tdTimeStep[0] dipole = np.array(dipole[:-1]) time = np.arange(len(dipole))*timestep return time, dipole
def getBerry(): options = tdapOptions() selectStep = getBerrySteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep*timestep berry = np.array([readBerryFile(str(step)) for step in selectStep]) return selectTime, berry
def getBerrySteps(): options = tdapOptions() stepLines = os.popen('ls ' + options.label + '*.Berry').readlines() steps = [ int(step.split('.')[0].replace(options.label, '')) for step in stepLines ] return np.sort(steps)
def getBerry(): options = tdapOptions() selectStep = getBerrySteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep * timestep berry = np.array([readBerryFile(str(step)) for step in selectStep]) return selectTime, berry
def getDipole(): options = tdapOptions() lines = os.popen('grep -n "Electric dipole (a.u.)" result').readlines() dipole = [(float(line.split()[-3]), float(line.split()[-2]), float(line.split()[-1])) for line in lines] timestep = options.tdTimeStep[0] dipole = np.array(dipole[:-1]) time = np.arange(len(dipole)) * timestep return time, dipole
def readBerryFile(step = ''): """ return the Eigenvalues read from systemLabel.EIG """ options = tdapOptions() systemLabel = options.label BerryFile = open(systemLabel+step+'.Berry') Berry = [[float(value) for value in line.split()] for line in BerryFile.readlines()] return np.array(Berry)
def getEIGSteps(): options = tdapOptions() steps = [] for i in os.listdir('.'): if i[:6] == 'siesta' and i[-5:] == 'q.EIG': steps.append(int(i[6:-5])) a = np.array(np.sort(steps),dtype=int) #print a return a
def readBerryFile(step=''): """ return the Eigenvalues read from systemLabel.EIG """ options = tdapOptions() systemLabel = options.label BerryFile = open(systemLabel + step + '.Berry') Berry = [[float(value) for value in line.split()] for line in BerryFile.readlines()] return np.array(Berry)
def getEIGSteps(): options = tdapOptions() steps = [] for i in os.listdir('.'): if i[:6] == 'siesta' and i[-5:] == 'q.EIG': steps.append(int(i[6:-5])) a = np.array(np.sort(steps), dtype=int) #print a return a
def getAField(): if os.path.exists('TDAFIELD'): Afield = [[float(i) for i in line.split()] for line in open('TDAFIELD')] Afield = np.array(Afield)/1E5 options = tdapOptions() timestep = options.tdTimeStep[0] time = np.arange(len(Afield))*timestep else: time = np.zeros(2) Afield = np.zeros([2,3]) return time, Afield
def getFermiEnergy(): """ return the Fermi Energy read from systemLabel.EIG if failed, return 0 rather than raise an exception """ options = tdapOptions() systemLabel = options.label if os.path.exists(systemLabel + '.EIG'): Efermi = float(open(systemLabel + '.EIG').readline().split()[0]) else: Efermi = 0.0 return Efermi
def getFermiEnergy(): """ return the Fermi Energy read from systemLabel.EIG if failed, return 0 rather than raise an exception """ options = tdapOptions() systemLabel = options.label if os.path.exists(systemLabel+'.EIG'): Efermi = float(open(systemLabel+'.EIG').readline().split()[0]) else: Efermi = 0.0 return Efermi
def getCurrent(): #bug if os.path.exists('TDEFIELD'): Efield = [[float(i) for i in line.split()] for line in open('TDEFIELD')] Efield = np.array(Efield)/1E5 options = tdapOptions() timestep = options.tdTimeStep[0] time = np.arange(len(Efield))*timestep else: time = np.zeros(2) Efield = np.zeros([2,3]) return time, Efield
def getCurrent(): #bug if os.path.exists('TDEFIELD'): Efield = [[float(i) for i in line.split()] for line in open('TDEFIELD')] Efield = np.array(Efield) / 1E5 options = tdapOptions() timestep = options.tdTimeStep[0] time = np.arange(len(Efield)) * timestep else: time = np.zeros(2) Efield = np.zeros([2, 3]) return time, Efield
def getEField(): if os.path.exists('TDEFIELD'): Efield = [[float(i) for i in line.split()] for line in open('TDEFIELD')] Efield = np.array(Efield)/1E5 if os.path.exists('input.fdf'): options = tdapOptions() timestep = options.tdTimeStep[0] time = np.arange(len(Efield))*timestep else: time, msd = readMSD() else: time = np.zeros(2) Efield = np.zeros([2,3]) return time, Efield
def readKpoints(): options = tdapOptions() systemLabel = options.label bohr=0.52917721 filename = systemLabel+'.KP' f=open(filename,'r') nkpts = int(f.readline().split()[0]) kcood = [] ; kweight = [] for i in range(nkpts): index, kx, ky, kz, wk = [float(value) for value in f.readline().split()] kcood.append((kx,ky,kz)) kweight.append(wk) return np.array(kcood)/bohr, np.array(kweight) #getTrajactory()
def getHomo(): """ return the index of the highest occupied molecular orbital (H**O) """ options = tdapOptions() #NumElectron=float(os.popen('grep "Total number of electrons:" result').readline().split()[-1]) NumElectron=float(pythonGrep("Total number of electrons:",'result')[0].split()[-1]) readFile = os.popen('grep -i "SpinPolarized" '+ options.inputFile) line = readFile.readline() if line == '': nspin = 2 else: nspin = 1 h**o = int(NumElectron) / nspin return h**o
def getCurrentPython(): options = tdapOptions() context = [] for line in open('result').readlines(): if len(line) == 1: continue if 'Current' in line.split() : context.append(line[:-1]) #print context current = [[float(line.split()[-4]),float(line.split()[-3]),float(line.split()[-2])] for line in context] #print current data = np.array(current) #time = np.arange(len(current))*timestep # print data return data
def getEField(): if os.path.exists('TDEFIELD'): Efield = [[float(i) for i in line.split()] for line in open('TDEFIELD')] Efield = np.array(Efield) / 1E5 if os.path.exists('input.fdf'): options = tdapOptions() timestep = options.tdTimeStep[0] time = np.arange(len(Efield)) * timestep else: time, msd = readMSD() else: time = np.zeros(2) Efield = np.zeros([2, 3]) return time, Efield
def getHomo(): """ return the index of the highest occupied molecular orbital (H**O) """ options = tdapOptions() #NumElectron=float(os.popen('grep "Total number of electrons:" result').readline().split()[-1]) NumElectron = float( pythonGrep("Total number of electrons:", 'result')[0].split()[-1]) readFile = os.popen('grep -i "SpinPolarized" ' + options.inputFile) line = readFile.readline() if line == '': nspin = 2 else: nspin = 1 h**o = int(NumElectron) // nspin return h**o
def getTrajactory(): options = tdapOptions() #print(options.laserParam) systemLabel = options.label NumBlocks = int( os.popen('grep -i %s %s.MD_CAR | wc -l' % (systemLabel, systemLabel)).readline().split()[0]) position_file = open(systemLabel + '.MD_CAR') atomNumList = [ int(i) for i in os.popen('head -6 siesta.MD_CAR |tail -1').readline().split() ] numAtomPositionLine = sum(atomNumList) totalNumLine = numAtomPositionLine + 7 context = position_file.readlines() #import ase.calculators.vasp as vinter #from ase.visualize import view atoms = xv_to_atoms(systemLabel + '.XV') atoms.pbc = [True, True, True] filename = 'Trajectory' from ase.io.trajectory import Trajectory if not os.path.exists(filename) or os.path.getmtime( filename) < os.path.getmtime(systemLabel + '.MD_CAR'): atomsList = [] for index in range(NumBlocks): output = context[index * totalNumLine:(index + 1) * totalNumLine] coodinates = np.array( [[float(value.replace('\n', '')) for value in line.split()] for line in output[7:]]) atomsCurrent = atoms.copy() atomsCurrent.set_scaled_positions(coodinates) atomsList.append(atomsCurrent) #poscarFileName = "POSCAR"+str(index) #poscarFile=open(poscarFileName,'w') #poscarFile.writelines(output) from ase.io import write write(filename, atomsList, 'traj') atomsList = Trajectory(filename) #print atomsList return atomsList
def getTDEig(timeSteps=None, forceReread = False): """ return the Times, Eigvalues and Partitions at selected timeSteps write two files EIG and PAR """ options = tdapOptions() systemLabel = options.label timestep = options.tdTimeStep[0] steps = np.arange(3,options.mdFinalStep) time = np.array(steps)*timestep eig = loadSaved('TDEIG') saved = ((len(eig)) != 0) if (not saved) or forceReread: eig=np.array([readEigFile(systemLabel+str(i)+'td.EIG',sep=False) for i in steps]) np.save('TDEIG',eig) return time, eig
def getBands(bandType='e'): """ return the bands read from systemLabel.bands as the dimension numKpoint x numBand x numSpin returns: X, Ek, xticks, xticklabels """ import math options = tdapOptions() systemLabel = options.label band_file = open(systemLabel + '.bands') if bandType == 'e': FermiEnergy = float(band_file.readline().split()[0]) else: band_file.readline() FermiEnergy = 0.0 kmin, kmax = (float(i) for i in band_file.readline().split()) emin, emax = (float(i) for i in band_file.readline().split()) numBand, numSpin, numKpoint = (int(i) for i in band_file.readline().split()) Ek = np.zeros([numKpoint, numBand, numSpin]) X = np.zeros(numKpoint) for kpt in range(numKpoint): eigen = [] for ispin in range(numSpin): for iband in range(int(math.ceil(numBand / 10.0))): line = band_file.readline() eigen.extend([float(i) for i in line.split()]) X[kpt] = eigen[0] eigen.pop() Ek[kpt, :, :] = np.array(eigen).reshape( numBand, numSpin) - FermiEnergy #.reshape(1,-1) - EFermi numSpecK = int(band_file.readline().split()[0]) xticks = [] xticklabels = [] for i in range(numSpecK): line = band_file.readline() xticks.append(float(line.split()[0])) xticklabels.append(r'$' + line.split()[1][1:-1] + '$') return X, Ek, xticks, xticklabels
def getcurrentfft_angle(angle, dumping=0.00): from scipy.fftpack import fft timeArray, afield = getAField() current = getCurrentPython() option = tdapOptions() lengthTime = option.tdTimeStep[0] timeArray = timeArray[2:] / option.tdTimeStep[0] numStep = len(timeArray) freqResolution = 1.0 / (lengthTime * numStep) freqArray = (timeArray - (numStep / 2.0)) * freqResolution energyArray = freqArray * 4.1356 energyArray = energyArray[numStep / 2:] angle = angle * np.pi / 180.0 # print current[:,0] , current[:,1] current_x = current[:, 0] #perform FFT for current in different directions,eg:the second line is y direction current_y = current[:, 1] current_x *= np.exp(-dumping * timeArray) current_y *= np.exp(-dumping * timeArray) current_par = np.cos(angle) * current_y + np.sin(angle) * current_x current_per = np.sin(angle) * current_y + np.cos(angle) * current_x epsilon_currentpar = fft(current_par)[:numStep / 2] epsilon_currentpar = (np.real(epsilon_currentpar), np.imag(epsilon_currentpar)) currentpar_fft_mode = np.power(epsilon_currentpar[0], 2) + np.power( epsilon_currentpar[1], 2) epsilon_currentper = fft(current_per)[:numStep / 2] epsilon_currentper = (np.real(epsilon_currentper), np.imag(epsilon_currentper)) currentper_fft_mode = np.power(epsilon_currentper[0], 2) + np.power( epsilon_currentper[1], 2) return energyArray[20:], currentpar_fft_mode[20:], currentper_fft_mode[ 20:] #to ensure that the nth order is the maximum
def getProjectedPartition(selectK=None): """ """ options = tdapOptions() selectStep = getEIGSteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep*timestep SaveName = 'ProjectedPartition' exe = [] if len(exe) != len(selectStep): exe = [] for index,step in enumerate(selectStep): partition = readEigFile(options.label+str(step)+'q.EIG') exe.append(partition) exe = np.array(exe) np.save(SaveName,exe) return selectTime, exe
def getAdiabaticEigenvalue(selectK=None): """ """ options = tdapOptions() selectStep = getEIGSteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep*timestep SaveName = 'AdiabaticEigenvalue' exe = loadSaved(SaveName) if len(exe) != len(selectStep): exe = [] for index,step in enumerate(selectStep): partition = readEigFile(options.label+str(step)+'.EIG') exe.append(partition) exe = np.array(exe) np.save(SaveName,exe) return selectTime, exe
def getAdiabaticEigenvalue(selectK=None): """ """ options = tdapOptions() selectStep = getEIGSteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep * timestep SaveName = 'AdiabaticEigenvalue' exe = loadSaved(SaveName) if len(exe) != len(selectStep): exe = [] for index, step in enumerate(selectStep): partition = readEigFile(options.label + str(step) + '.EIG') exe.append(partition) exe = np.array(exe) np.save(SaveName, exe) return selectTime, exe
def getProjectedPartition(selectK=None): """ """ options = tdapOptions() selectStep = getEIGSteps() #print selectStep timestep = options.tdTimeStep[0] selectTime = selectStep * timestep SaveName = 'ProjectedPartition' exe = [] if len(exe) != len(selectStep): exe = [] for index, step in enumerate(selectStep): partition = readEigFile(options.label + str(step) + 'q.EIG') exe.append(partition) exe = np.array(exe) np.save(SaveName, exe) return selectTime, exe
def getDipolePython(): options = tdapOptions() context = [] for line in open('result').readlines(): if len(line) == 1: continue #print line, if 'Electric' in line.split() and 'TDAP' in line.split() : context.append(line[:-1]) #for line in context: # print line.split()[-3:] dipole = [[float(line.split()[-3]),float(line.split()[-2]),float(line.split()[-1])] for line in context] #print context #dipole = [(float(line.split()[-3]),float(line.split()[-2]),float(line.split()[-1])) for line in lines] timestep = options.tdTimeStep[0] dipole = np.array(dipole) time = np.arange(len(dipole))*timestep return np.array(time), np.array(dipole)
def readKpoints(): options = tdapOptions() systemLabel = options.label bohr = 0.52917721 filename = systemLabel + '.KP' f = open(filename, 'r') nkpts = int(f.readline().split()[0]) kcood = [] kweight = [] for i in range(nkpts): index, kx, ky, kz, wk = [ float(value) for value in f.readline().split() ] kcood.append((kx, ky, kz)) kweight.append(wk) return np.array(kcood) / bohr, np.array(kweight) #getTrajactory()
def getBands(bandType='e'): """ return the bands read from systemLabel.bands as the dimension numKpoint x numBand x numSpin returns: X, Ek, xticks, xticklabels """ import math options = tdapOptions() systemLabel = options.label band_file = open(systemLabel+'.bands') if bandType == 'e': FermiEnergy = float(band_file.readline().split()[0]) else: band_file.readline() FermiEnergy = 0.0 kmin,kmax=(float(i) for i in band_file.readline().split()) emin,emax=(float(i) for i in band_file.readline().split()) numBand,numSpin,numKpoint=(int(i) for i in band_file.readline().split()) Ek = np.zeros([numKpoint,numBand,numSpin]) X = np.zeros(numKpoint) for kpt in range(numKpoint): eigen = [] for ispin in range(numSpin): for iband in range(int(math.ceil(numBand/10.0))): line = band_file.readline() eigen.extend([float(i) for i in line.split()]) X[kpt]=eigen[0] eigen.pop() Ek[kpt,:,:] = np.array(eigen).reshape(numBand,numSpin) - FermiEnergy #.reshape(1,-1) - EFermi numSpecK = int(band_file.readline().split()[0]) xticks = [] xticklabels =[] for i in range(numSpecK): line = band_file.readline() xticks.append(float(line.split()[0])) xticklabels.append(r'$'+line.split()[1][1:-1]+'$') return X, Ek, xticks, xticklabels
def getEnergyTemperaturePressure(ave=False): """ return the Temperature, KS Energy and Total Energy as the dimension of Nstep read from systemLabel.MDE returns the Temperature, KS Energy, Total Energy, Volume, Pressure """ options = tdapOptions() systemLabel = options.label if options.mdTimeStep[0] < 1E-10: timestep = options.tdTimeStep[0] start = 2 else: start = 0 timestep = options.mdTimeStep[0] if (os.path.exists(systemLabel + '.MDE')): energy_file = open(systemLabel + '.MDE') data = [] for i in energy_file.readlines(): if i.split()[0] == '#': continue data.append([float(j.replace('*', '0')) for j in i.split()]) data = np.array(data) if ave: numAtom = getNumOfAtoms() #print numAtom data[start:, 2:4] /= numAtom #print data X = data[:, 0] * timestep return X[start:], data[start:, 1], data[start:, 2], data[start:, 3], data[start:, 4], data[start:, 5] else: time, msd = readMSD() f = os.popen('grep "Ekin + Etot (const)" result') energy = np.array([float(line.split()[-2]) for line in f.readlines()]) * 13.6 #data=np.array([energy,energy,energy,energy,energy]).T return time, energy, energy, energy, energy, energy
def getTDEig(timeSteps=None, forceReread=False): """ return the Times, Eigvalues and Partitions at selected timeSteps write two files EIG and PAR """ options = tdapOptions() systemLabel = options.label timestep = options.tdTimeStep[0] steps = np.arange(3, options.mdFinalStep) time = np.array(steps) * timestep eig = loadSaved('TDEIG') saved = ((len(eig)) != 0) if (not saved) or forceReread: eig = np.array([ readEigFile(systemLabel + str(i) + 'td.EIG', sep=False) for i in steps ]) np.save('TDEIG', eig) return time, eig
def getTrajactory(): options = tdapOptions() systemLabel = options.label NumBlocks=int(os.popen('grep -i '+systemLabel+' '+systemLabel+'.MD_CAR | wc -l').readline().split()[0]) position_file = open(systemLabel+'.MD_CAR') atomNumList = [int(i) for i in os.popen('head -6 siesta.MD_CAR |tail -1').readline().split()] numAtomPositionLine = sum(atomNumList) totalNumLine = numAtomPositionLine + 7 context = position_file.readlines() from ase.calculators.siesta.import_functions import xv_to_atoms #import ase.calculators.vasp as vinter #from ase.visualize import view atoms = xv_to_atoms(systemLabel+'.XV') atoms.pbc = [True,True,True] filename = 'Trajectory' from ase.io.trajectory import Trajectory if not os.path.exists(filename) or os.path.getmtime(filename) < os.path.getmtime(systemLabel+'.MD_CAR'): atomsList = [] for index in range(NumBlocks): output=context[index*totalNumLine:(index+1)*totalNumLine] coodinates=np.array([[float(value.replace('\n','')) for value in line.split()] for line in output[7:]]) atomsCurrent = atoms.copy() atomsCurrent.set_scaled_positions(coodinates) atomsList.append(atomsCurrent) #poscarFileName = "POSCAR"+str(index) #poscarFile=open(poscarFileName,'w') #poscarFile.writelines(output) from ase.io import write write(filename,atomsList,'traj') atomsList = Trajectory(filename) #print atomsList return atomsList
def getcurrentfft_angle(angle, dumping=0.00): from scipy.fftpack import fft timeArray,afield =getAField() current =getCurrentPython() option = tdapOptions() lengthTime = option.tdTimeStep[0] timeArray = timeArray[2:]/option.tdTimeStep[0] numStep = len(timeArray) freqResolution =1.0/(lengthTime*numStep) freqArray = (timeArray-(numStep/2.0))*freqResolution energyArray = freqArray*4.1356 energyArray = energyArray[numStep/2:] angle =angle*np.pi/180.0 # print current[:,0] , current[:,1] current_x = current[:,0] #perform FFT for current in different directions,eg:the second line is y direction current_y = current[:,1] current_x *= np.exp(-dumping*timeArray) current_y *= np.exp(-dumping*timeArray) current_par=np.cos(angle)*current_y+np.sin(angle)*current_x current_per=np.sin(angle)*current_y+np.cos(angle)*current_x epsilon_currentpar = fft(current_par)[:numStep/2] epsilon_currentpar = (np.real(epsilon_currentpar),np.imag(epsilon_currentpar)) currentpar_fft_mode=np.power(epsilon_currentpar[0],2)+np.power(epsilon_currentpar[1],2) epsilon_currentper= fft(current_per)[:numStep/2] epsilon_currentper = (np.real(epsilon_currentper),np.imag(epsilon_currentper)) currentper_fft_mode=np.power(epsilon_currentper[0],2)+np.power(epsilon_currentper[1],2) return energyArray[20:],currentpar_fft_mode[20:],currentper_fft_mode[20:]#to ensure that the nth order is the maximum
def getDipolePython(): options = tdapOptions() context = [] for line in open('result').readlines(): if len(line) == 1: continue #print line, if 'Electric' in line.split() and 'TDAP' in line.split(): context.append(line[:-1]) #for line in context: # print line.split()[-3:] dipole = [[ float(line.split()[-3]), float(line.split()[-2]), float(line.split()[-1]) ] for line in context] #print context #dipole = [(float(line.split()[-3]),float(line.split()[-2]),float(line.split()[-1])) for line in lines] timestep = options.tdTimeStep[0] dipole = np.array(dipole) time = np.arange(len(dipole)) * timestep return np.array(time), np.array(dipole)
for i, direct in enumerate(['x','y','z']): if not os.path.exists(direct): continue # os.chdir(direct) # import pyramids.plot.PlotUtility as pu # rotation = [0,0,0] # rotation[i] = 90 # pu.insertStruct(axs, width="50%", height=1.5, loc=2, # rotation=rotation, # camera='perspective', cell=False) timeArray, efield = dp.getEField() option = tdapOptions() lengthTime = option.tdTimeStep[0] numStep = option.tdFinalStep - 2 timeArray = timeArray[2:]/option.tdTimeStep[0] time, dipole = dp.getDipolePython() dipole = dipole[2:,i] freqResolution = 1.0/(lengthTime*numStep) freqArray = (timeArray-(numStep/2.0))*freqResolution energyArray = freqArray*4.1356 energyArray = energyArray[numStep/2:] epsilon = fft(dipole)[:numStep/2]
import numpy as np import matplotlib.pyplot as plt import pyramids.io.result as dp from pyramids.io.fdf import tdapOptions import pyramids.plot.setting as ma #------------------------------------------------------------------------------ fig, axs = plt.subplots(1, 2, sharex=False, sharey=False, figsize=(8, 6)) SaveName = __file__.split('/')[-1].split('.')[0] h**o = dp.getHomo() time, exe = dp.getProjectedPartition() time, eigen = dp.getAdiabaticEigenvalue() print eigen.shape option = tdapOptions() import numpy as np import matplotlib.pyplot as plt import pyramids.io.result as dp import pyramids.plot.setting as ma import pyramids.plot.PlotUtility as pu import os from ase.dft.kpoints import special_paths, special_points ax = axs[1] import pyramids.plot.PlotUtility as pu pu.plotEField(ax) timeE, Efield = dp.getEField() lightScat, = ax.plot(0, Efield[0, 0], 'o') kargs = ma.getPropertyFromPosition(xlabel=r'Time', ylabel=r'EField')
def huskyOnTheFly(index, folder): count = 0 for i, direct in enumerate(['x', 'y', 'z']): #print os.listdir('.') if not os.path.exists(direct): continue os.chdir(direct) timeArray, efield = dp.getEField() option = tdapOptions() lengthTime = option.tdTimeStep[0] numStep = option.tdFinalStep - 2 timeArray = timeArray[2:] / option.tdTimeStep[0] time, dipole = dp.getDipolePython() dipole = dipole[2:, i] dipole *= np.exp(-dumping * timeArray) freqResolution = 1.0 / (lengthTime * numStep) freqArray = (timeArray - (numStep / 2.0)) * freqResolution energyArray0 = freqArray * 4.1356 energyArray = energyArray0[numStep / 2:] # energyArray1 = list(energyArray0[numStep/2:]) # energyArray2 = list(energyArray0[:numStep/2]) # energyArray1 +=energyArray2 # energyArray = np.array(energyArray1) epsilon = fft(dipole)[:numStep / 2] epsilon = (np.real(epsilon), np.imag(epsilon)) # print (energyArray) absorbanceimag = (epsilon[0] * energyArray * 0.0367 / 6.28) / (width * float(folder) * fieldE) absorbancereal = (epsilon[1] * energyArray * 0.0367 / 6.28) / (width * float(folder) * fieldE) # absorbanceimag = 3.334*(epsilon[0]*energyArray/4.1356)/0.25 # absorbancereal = 3.334*(epsilon[1]*energyArray/4.1356)/0.25 if count == 0: count += 1 absorbanceSumimag = absorbanceimag absorbanceSumreal = 0.25 / np.pi + absorbancereal else: absorbanceSumimag += absorbanceimag absorbanceSumreal += absorbancereal eels = absorbanceSumimag / (absorbanceSumimag**2 + absorbanceSumreal**2) os.chdir('..') peaks = [] # for j in range(1,len(absorbanceSum)-1): # if energyArray[j] > xlimits[0] and energyArray[j] < xlimits[1]: # if absorbanceSum[j] >= absorbanceSum[j-1] and absorbanceSum[j] >= absorbanceSum[j+1]: # if absorbanceSum[j] > 0.03 and energyArray[j] > 5 and energyArray[j] < 8: # energyArray[j] < 22.0 and # peaks.append(energyArray[j]) # print peaks return energyArray, absorbanceSumimag, folder, absorbanceSumreal, eels, peaks
@author: clian """ import numpy as np from matplotlib import pyplot as plt import pyramids.io.result as dp import pyramids.plot.PlotUtility as ppu import pyramids.plot.setting as ma from pyramids.io.fdf import tdapOptions numStep = 5 fig, axs = plt.subplots(numStep,1,sharex=True,sharey=True,figsize=(6,8)) timeStep = tdapOptions().tdTimeStep steps = dp.getEIGSteps() selectedSteps = range(0,len(steps),len(steps)/numStep) print selectedSteps for i in range(numStep): ax = axs[i] title = '$t = %3.2f$ %s' % (i*len(steps)/numStep*timeStep[0], timeStep[1]) ppu.plotDOS(ax, selectedSteps[i], bins=100, title = title, yticks=[]) plt.tight_layout() SaveName = __file__.split('/')[-1].split('.')[0] if True: for save_type in ['.pdf','.png']: filename = SaveName + save_type
Created on Thu Feb 2 09:55:49 2017 @author: clian """ import numpy as np from matplotlib import pyplot as plt import pyramids.io.result as dp import pyramids.plot.PlotUtility as ppu import pyramids.plot.setting as ma from pyramids.io.fdf import tdapOptions numStep = 5 fig, axs = plt.subplots(numStep, 1, sharex=True, sharey=True, figsize=(6, 8)) timeStep = tdapOptions().tdTimeStep steps = dp.getEIGSteps() selectedSteps = range(0, len(steps), len(steps) / numStep) print selectedSteps for i in range(numStep): ax = axs[i] title = '$t = %3.2f$ %s' % (i * len(steps) / numStep * timeStep[0], timeStep[1]) ppu.plotDistribution(ax, selectedSteps[i], yticks=[0, 1], title=title) plt.tight_layout() SaveName = __file__.split('/')[-1].split('.')[0] if True: for save_type in ['.pdf']: filename = SaveName + save_type
def getBerrySteps(): options = tdapOptions() stepLines = os.popen('ls '+options.label+'*.Berry').readlines() steps = [int(step.split('.')[0].replace(options.label,'')) for step in stepLines] return np.sort(steps)
import numpy as np def readCurrent(): import os lines = os.popen('grep "TDAP: Afield: Current" result').readlines() data = [] for line in lines: #print line.split() data.append([float(i) for i in line.split()[4:7]]) data = np.array(data) return data data = readCurrent() from pyramids.io.fdf import tdapOptions options = tdapOptions() timestep = options.tdTimeStep[0] fig, axs = plt.subplots(2,1,sharex=True,sharey=False)#,figsize=(10,6) ax = axs[0] for i in range(3): ax.plot(np.arange(data.shape[0])*timestep,data[:,i], label=['x','y','z'][i],lw=2, alpha=1.0) args = ma.getPropertyFromPosition() ma.setProperty(ax,**args) ax = axs[1] ppu.plotEField(ax,label='efield')
def huskyOnTheFly(index,folder): count = 0 for i, direct in enumerate(['x','y','z']): #print os.listdir('.') if not os.path.exists(direct): continue os.chdir(direct) timeArray, efield = dp.getEField() option = tdapOptions() lengthTime = option.tdTimeStep[0] numStep = option.tdFinalStep - 2 timeArray = timeArray[2:]/option.tdTimeStep[0] time, dipole = dp.getDipolePython() dipole = dipole[2:,i] dipole *= np.exp(-dumping*timeArray) freqResolution = 1.0/(lengthTime*numStep) freqArray = (timeArray-(numStep/2.0))*freqResolution energyArray0 = freqArray*4.1356 energyArray = energyArray0[numStep/2:] # energyArray1 = list(energyArray0[numStep/2:]) # energyArray2 = list(energyArray0[:numStep/2]) # energyArray1 +=energyArray2 # energyArray = np.array(energyArray1) epsilon = fft(dipole)[:numStep/2] epsilon = (np.real(epsilon),np.imag(epsilon)) # print (energyArray) absorbanceimag = (epsilon[0]*energyArray*0.0367/6.28)/(width*float(folder)*fieldE) absorbancereal = (epsilon[1]*energyArray*0.0367/6.28)/(width*float(folder)*fieldE) # absorbanceimag = 3.334*(epsilon[0]*energyArray/4.1356)/0.25 # absorbancereal = 3.334*(epsilon[1]*energyArray/4.1356)/0.25 if count == 0: count += 1 absorbanceSumimag = absorbanceimag absorbanceSumreal = 0.25/np.pi+absorbancereal else: absorbanceSumimag += absorbanceimag absorbanceSumreal += absorbancereal eels = absorbanceSumimag / (absorbanceSumimag**2 + absorbanceSumreal**2) os.chdir('..') peaks = [] # for j in range(1,len(absorbanceSum)-1): # if energyArray[j] > xlimits[0] and energyArray[j] < xlimits[1]: # if absorbanceSum[j] >= absorbanceSum[j-1] and absorbanceSum[j] >= absorbanceSum[j+1]: # if absorbanceSum[j] > 0.03 and energyArray[j] > 5 and energyArray[j] < 8: # energyArray[j] < 22.0 and # peaks.append(energyArray[j]) # print peaks return energyArray, absorbanceSumimag, folder, absorbanceSumreal, eels, peaks
def readCurrent(): import os lines = os.popen('grep "TDAP: Afield: Current" result').readlines() data = [] for line in lines: #print line.split() data.append([float(i) for i in line.split()[4:7]]) data = np.array(data) return data data = readCurrent() from pyramids.io.fdf import tdapOptions options = tdapOptions() timestep = options.tdTimeStep[0] fig, axs = plt.subplots(2, 1, sharex=True, sharey=False) #,figsize=(10,6) ax = axs[0] for i in range(3): ax.plot(np.arange(data.shape[0]) * timestep, data[:, i], label=['x', 'y', 'z'][i], lw=2, alpha=1.0) args = ma.getPropertyFromPosition() ma.setProperty(ax, **args) ax = axs[1]