Source code for sharpy.postproc.pickledata

import os
import pickle

import h5py

import sharpy
import sharpy.utils.cout_utils as cout
from sharpy.utils.solver_interface import solver, BaseSolver
import sharpy.utils.settings as settings
import sharpy.utils.h5utils as h5utils


# Define basic numerical types
# BasicNumTypes=(float,float32,float64,int,int32,int64,complex)

[docs]@solver class PickleData(BaseSolver): """ This postprocessor writes the SHARPy ``data`` structure in a pickle file, such that classes and methods from SHARPy are retained for restarted solutions or further post-processing. """ solver_id = 'PickleData' solver_classification = 'post-processor' settings_types = dict() settings_default = dict() settings_description = dict() settings_types['folder'] = 'str' settings_default['folder'] = './output' settings_description['folder'] = 'Folder to output pickle file' settings_table = settings.SettingsTable() __doc__ += settings_table.generate(settings_types, settings_default, settings_description) def __init__(self): import sharpy self.settings = None self.data = None self.filename = None self.folder = None def initialise(self, data, custom_settings=None): self.data = data if custom_settings is None: self.settings = data.settings[self.solver_id] else: self.settings = custom_settings settings.to_custom_types(self.settings, self.settings_types, self.settings_default) # create folder for containing files if necessary if not os.path.exists(self.settings['folder']): os.makedirs(self.settings['folder']) self.folder = self.settings['folder'] + '/' if not os.path.exists(self.folder): os.makedirs(self.folder) self.filename = self.folder + self.data.settings['SHARPy']['case']+'.pkl' def run(self, online=False): with open(self.filename, 'wb') as f: pickle.dump(self.data, f, protocol=pickle.HIGHEST_PROTOCOL) return self.data