class VoluPhon(): def __init__(self, prcntVolume, filename = None ): """ This class requires a set of "n_matdyn.modes" files corresponding to different volume expansions prcntVolume - array with """ self.pw = PWTask(filename = filename) self.matdyn = MatdynTask(filename = filename) self.__prcntVolume = prcntVolume def setA(self, values, fitter): self.a = volufit.ValueFit(self.__prcntVolume, values, fitter) def setC(self, values, fitter): self.c = volufit.ValueFit(self.__prcntVolume, values, fitter) def setEnergy(self, values, fitter): self.energy = volufit.ValueFit(self.__prcntVolume, values, fitter) def setPhonons(self, indexRange, fitter): """Will read freqs from x_matdyn.modes files and fit the freqs""" matdynModesName = self.matdyn.setting.get('flvec') self.matdyn.setting.set('flvec', str(indexRange[0]) + '_' + matdynModesName) self.matdyn.output.parse() Pol, Omega, qPoints = self.matdyn.output.property('multi phonon') volOmega = numpy.zeros(shape=(len(indexRange), numpy.shape(Omega)[0], \ numpy.shape(Omega)[1] ) ) volOmega[0] = Omega for i in range(1,len(indexRange)): self.matdyn.setting.set('flvec', str(indexRange[i]) + '_' + matdynModesName) self.matdyn.output.parse() Pol, Omega, qPoints = self.matdyn.output.property('multi phonon') volOmega[i] = Omega self.matdyn.setting.set('flvec', matdynModesName) self.freqs = volufit.FreqFit(self.__prcntVolume, volOmega,fitter) def gammaDispersion(self, *pathNPoints): #self.pw.input.parse() #self.matdyn.input.parse() self.dispersion = PHDispersion( self.pw.input.structure.lattice, self.matdyn) if self.freqs.fitter.type != 'polynom': raise Exception('This method is only relevant for polynomial fit') self.dispersion = PHDispersion( self.pw.input.structure.lattice, self.matdyn) self.dispersion.setPath(*pathNPoints) self.dispersion.setValues(-self.freqs.coeff()[:,:,-1]) self.dispersion.save('gamma_disp') self.dispersion.plot() def prcntVolume (self): return self.__prcntVolume
class VoluPhon(): def __init__(self, prcntVolume, filename=None): """ This class requires a set of "n_matdyn.modes" files corresponding to different volume expansions prcntVolume - array with """ self.pw = PWTask(filename=filename) self.matdyn = MatdynTask(filename=filename) self.__prcntVolume = prcntVolume def setA(self, values, fitter): self.a = volufit.ValueFit(self.__prcntVolume, values, fitter) def setC(self, values, fitter): self.c = volufit.ValueFit(self.__prcntVolume, values, fitter) def setEnergy(self, values, fitter): self.energy = volufit.ValueFit(self.__prcntVolume, values, fitter) def setPhonons(self, indexRange, fitter): """Will read freqs from x_matdyn.modes files and fit the freqs""" matdynModesName = self.matdyn.setting.get('flvec') self.matdyn.setting.set('flvec', str(indexRange[0]) + '_' + matdynModesName) self.matdyn.output.parse() Pol, Omega, qPoints = self.matdyn.output.property('multi phonon') volOmega = numpy.zeros(shape=(len(indexRange), numpy.shape(Omega)[0], \ numpy.shape(Omega)[1] ) ) volOmega[0] = Omega for i in range(1, len(indexRange)): self.matdyn.setting.set('flvec', str(indexRange[i]) + '_' + matdynModesName) self.matdyn.output.parse() Pol, Omega, qPoints = self.matdyn.output.property('multi phonon') volOmega[i] = Omega self.matdyn.setting.set('flvec', matdynModesName) self.freqs = volufit.FreqFit(self.__prcntVolume, volOmega, fitter) def gammaDispersion(self, *pathNPoints): #self.pw.input.parse() #self.matdyn.input.parse() self.dispersion = PHDispersion(self.pw.input.structure.lattice, self.matdyn) if self.freqs.fitter.type != 'polynom': raise Exception('This method is only relevant for polynomial fit') self.dispersion = PHDispersion(self.pw.input.structure.lattice, self.matdyn) self.dispersion.setPath(*pathNPoints) self.dispersion.setValues(-self.freqs.coeff()[:, :, -1]) self.dispersion.save('gamma_disp') self.dispersion.plot() def prcntVolume(self): return self.__prcntVolume
# print abs((a.conj()*b).sum()) # # thrsh_scl = 0.8 # #dispersion = [list(Omegas[0])] # idxs = [range(Omegas.shape[1])] # for k in range(1, Omegas.shape[0]): # omg = [] # idx = [] # for i, o1 in zip( idxs[k-1], Omegas[k-1]): # for j, o2 in enumerate(Omegas[k]): # if ( abs((Pol2[k,j,:].conj()*Pol2[k-1,i,:]).sum()) > thrsh_scl): # #omg.append(o2) # idx.append(j) # break # if len(omg) != 9: # print "OMG!!! ", k, Omegas[k-1], Omegas[k], omg, '\n' # #dispersion.append(omg) # idxs.append(idx) # dispersion = [] # for k, idx in enumerate(idxs): # dispersion.append( Omegas[k, idx]) #print dispersion #print dispersion[0] #phDisp.dispersion = numpy.array(dispersion) phDisp.dispersion = phDisp.dispersion*0.1239 phDisp.solveAllCrossings(thrsh_scl = 0.75) phDisp.plot() #print phDisp.dispersion
# print abs((a.conj()*b).sum()) # # thrsh_scl = 0.8 # #dispersion = [list(Omegas[0])] # idxs = [range(Omegas.shape[1])] # for k in range(1, Omegas.shape[0]): # omg = [] # idx = [] # for i, o1 in zip( idxs[k-1], Omegas[k-1]): # for j, o2 in enumerate(Omegas[k]): # if ( abs((Pol2[k,j,:].conj()*Pol2[k-1,i,:]).sum()) > thrsh_scl): # #omg.append(o2) # idx.append(j) # break # if len(omg) != 9: # print "OMG!!! ", k, Omegas[k-1], Omegas[k], omg, '\n' # #dispersion.append(omg) # idxs.append(idx) # dispersion = [] # for k, idx in enumerate(idxs): # dispersion.append( Omegas[k, idx]) #print dispersion #print dispersion[0] #phDisp.dispersion = numpy.array(dispersion) phDisp.dispersion = phDisp.dispersion * 0.1239 phDisp.solveAllCrossings(thrsh_scl=0.75) phDisp.plot() #print phDisp.dispersion