Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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)
Exemple #9
0
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
Exemple #10
0
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
Exemple #11
0
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
Exemple #12
0
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
Exemple #13
0
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)
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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)
Exemple #17
0
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
Exemple #18
0
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)
Exemple #19
0
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
Exemple #20
0
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  
Exemple #21
0
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
Exemple #22
0
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
Exemple #23
0
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 
Exemple #24
0
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
Exemple #25
0
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 
Exemple #26
0
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()
Exemple #27
0
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
Exemple #28
0
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 
Exemple #29
0
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
Exemple #30
0
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
Exemple #31
0
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
Exemple #32
0
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
Exemple #33
0
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
Exemple #34
0
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
Exemple #35
0
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
Exemple #36
0
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
Exemple #37
0
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
Exemple #38
0
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
Exemple #39
0
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)
Exemple #40
0
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()
Exemple #41
0
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
Exemple #42
0
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
Exemple #43
0
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
Exemple #44
0
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
Exemple #46
0
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
Exemple #50
0
@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
Exemple #51
0
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
Exemple #52
0
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)
Exemple #53
0
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
Exemple #55
0
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]