def run_anaddb(self, dipdip=1): print("Run anaddb") #os.system('cp ./abinit.mrgddb.tmpl %s/abinit.mrgddb.in' % self.dirname) gen_mrgddb_input(self.dirname) os.chdir(self.dirname) os.system('mrgddb <abinit.mrgddb.in>abinit.mrgddb.log') myDDB = DdbFile(filepath='abinit_mrgddb.out', read_blocks=True) nqpts = ' '.join(map(str, myDDB._guess_ngqpt())) natifc = len(self.atoms) atifc = ' '.join([str(i + 1) for i in range(len(self.atoms))]) dipdip = dipdip tdict = { 'nqpts': nqpts, 'natifc': natifc, 'atifc': atifc, 'dipdip': dipdip } with open("../abinit_ifc.in.tmpl") as myfile: tmpl = string.Template(myfile.read()) text = tmpl.substitute(tdict) os.system('cp ../abinit_ifc.files.tmpl abinit_ifc.files') with open('abinit_ifc.in', 'w') as myfile: myfile.write(text) #os.system('cp ../abinit_ifc.in.tmpl %s/abinit_ifc.in' % self.dirname) os.system('anaddb <abinit_ifc.files >abinit_ifc.log') os.chdir('../')
def analyze_all_modes(self): self.results = OrderedDict() self.results[ 'lattice_parameter'] = self.atoms.get_cell_lengths_and_angles() # emacro & BEC myDDB = DdbFile(filepath='%s/abinit_mrgddb.out' % (self.dirname), read_blocks=True) emacro, becs = myDDB.anaget_emacro_and_becs() self.results['dielectric_tensor'] = emacro[0].reduced_tensor self.results['Born_effective_charges'] = becs self.results['number_of_qpoints'] = myDDB._guess_ngqpt() self.results['ecut'] = myDDB.params[u'ecut'] self.results['tsmear'] = myDDB.params[u'tsmear'] self.results['nsppol'] = myDDB.params[u'nsppol'] self.results['nkpt'] = myDDB.params[u'nkpt'] filefname = os.path.join(self.dirname, 'abinit.files') with open(filefname) as myfile: self.results['pseudopotentials'] = [ os.path.split(x)[-1].strip() for x in myfile.readlines()[5:] ] # Phonon self.results['phonon'] = OrderedDict() qpoints = OrderedDict([('Gamma', (0, 0, 0)), ('X', (0.5, 0, 0)), ('M', (0.5, 0.5, 0)), ('R', (0.5, 0.5, 0.5))]) # Phonon: Gamma_reduced qname = 'Gamma_reduced' self.results['phonon'][qname] = OrderedDict() hamk, freqs, evals, evecs, edisps, dc, ds = self.analyze_gamma( ibands=None, label='DYM_Gamma_reduced', is_asr=False) self.results['phonon'][qname]['dynamic_matrix'] = hamk self.results['phonon'][qname]['eigenvalues'] = evals self.results['phonon'][qname]['frequencies'] = freqs self.results['phonon'][qname]['eigenvectors'] = evecs self.results['phonon'][qname]['eigen_displacements'] = edisps self.results['phonon'][qname]['dynamic_matrix_contributions'] = dc self.results['phonon'][qname]['dynamic_matrix_sensitivities'] = ds # Phonon: Other Qpoints for qname in qpoints: qpoint = qpoints[qname] self.results['phonon'][qname] = OrderedDict() self.results['phonon'][qname]['qpoint'] = qpoint hamk, freqs, evals, evecs, edisps, dc, ds = self.analyze_qpoint( qpoint=qpoint, qpt_name=qname, ibands=None) self.results['phonon'][qname]['dynamic_matrix'] = hamk self.results['phonon'][qname]['eigenvalues'] = evals self.results['phonon'][qname]['frequencies'] = freqs self.results['phonon'][qname]['eigenvectors'] = evecs self.results['phonon'][qname]['eigen_displacements'] = edisps self.results['phonon'][qname]['dynamic_matrix_contributions'] = dc self.results['phonon'][qname]['dynamic_matrix_sensitivities'] = ds #with open('data/%s.json' % (self.dirname), 'w') as myfile: # json.dump(self.results, myfile) with open('data/%s.pickle' % (self.dirname), 'wb') as myfile: cPickle.dump(self.results, myfile) datadir = 'data/%s' % self.dirname if not os.path.exists(datadir): os.makedirs(datadir) os.system('cp %s/*.in %s' % (self.dirname, datadir)) os.system('cp %s/*.nc %s' % (self.dirname, datadir)) os.system('cp %s/*DDB %s' % (self.dirname, datadir)) os.system('cp %s/*.files %s' % (self.dirname, datadir)) os.system('cp %s/CONTCAR %s' % (self.dirname, datadir)) os.system('cp %s/*.txt %s' % (self.dirname, datadir)) os.system('cp %s/*.out %s' % (self.dirname, datadir)) os.system('tar -zcvf data/%s.tar.gz %s' % (self.dirname, datadir))