Exemple #1
0
    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('../')
Exemple #2
0
    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))