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()
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()
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)