コード例 #1
0
 def write(self, filename):
     self.log('%s: Writing to %s' % (self.__class__.__name__, filename))
     writer = Writer(filename,
                     self.world,
                     mode='w',
                     tag=self.__class__.ulmtag)
     writer.write(version=self.__class__.version)
     writer.write(time=self.time)
     writer.write(foldedfreqs_f=[ff.todict() for ff in self.foldedfreqs_f])
     wfs = self.wfs
     write_uMM(wfs, writer, 'rho0_uMM', self.rho0_uMM)
     wlist = range(self.Nw)
     write_wuMM(wfs, writer, 'FReDrho_wuMM', self.FReDrho_wuMM, wlist)
     write_wuMM(wfs, writer, 'FImDrho_wuMM', self.FImDrho_wuMM, wlist)
     writer.close()
コード例 #2
0
ファイル: ksdecomposition.py プロジェクト: thonmaker/gpaw
    def write(self, filename):
        self.log('%s: Writing to %s' % (self.__class__.__name__, filename))
        writer = Writer(filename,
                        self.world,
                        mode='w',
                        tag=self.__class__.ulmtag)
        writer.write(version=self.__class__.version)

        wfs = self.wfs
        writer.write(ha=Hartree)
        write_uMM(wfs, writer, 'S_uMM', self.S_uMM)
        wfs.write_wave_functions(writer)
        wfs.write_eigenvalues(writer)
        wfs.write_occupations(writer)
        # write_unM(wfs, writer, 'C0_unM', self.C0_unM)
        # write_un(wfs, writer, 'eig_un', self.eig_un)
        # write_un(wfs, writer, 'occ_un', self.occ_un)

        for arg in self.readwrite_attrs:
            writer.write(arg, getattr(self, arg))

        writer.close()
コード例 #3
0
class WaveFunctionWriter(TDDFTObserver):
    version = 3
    ulmtag = 'WFW'
    ulmtag_split = ulmtag + 'split'

    def __init__(self, paw, filename, split=False, interval=1):
        TDDFTObserver.__init__(self, paw, interval)
        self.split = split
        if paw.niter == 0:
            self.writer = Writer(filename,
                                 paw.world,
                                 mode='w',
                                 tag=self.__class__.ulmtag)
            self.writer.write(version=self.__class__.version)
            self.writer.write(split=self.split)
            self.writer.sync()
            self.index = 1
        else:
            # Check the earlier file
            reader = WaveFunctionReader(filename)
            assert reader.version == self.__class__.version
            self.split = reader.split  # Use the earlier split value
            self.index = len(reader)
            reader.close()

            # Append to earlier file
            self.writer = Writer(filename,
                                 paw.world,
                                 mode='a',
                                 tag=self.__class__.ulmtag)

        if self.split:
            name, ext = tuple(filename.rsplit('.', 1))
            self.split_filename_fmt = name + '-%06d.' + ext

    def _update(self, paw):
        # Write metadata to main writer
        self.writer.write(niter=paw.niter, time=paw.time, action=paw.action)
        if paw.action == 'kick':
            self.writer.write(kick_strength=paw.kick_strength)

        if self.split:
            # Use separate writer for actual data
            filename = self.split_filename_fmt % self.index
            writer = Writer(filename,
                            paw.world,
                            mode='w',
                            tag=self.__class__.ulmtag_split)
        else:
            # Use the same writer for actual data
            writer = self.writer
        w = writer.child('wave_functions')
        paw.wfs.write_wave_functions(w)
        paw.wfs.write_occupations(w)
        if self.split:
            writer.close()
        # Sync the main writer
        self.writer.sync()
        self.index += 1

    def __del__(self):
        self.writer.close()
        TDDFTObserver.__del__(self)