def METHOD_NAME(self):
    """
    run the file save procedure
    """
    # try:
    path, fname = os.path.split(self.file_name)
    self.progress_text.emit('Flushing ' + fname + ' into ' + fname + '...')
    self.logger = Logger()
    # names_dict = {DeviceType.BusDevice: self.circuit.get_bus_names(),
    #               DeviceType.BranchDevice: self.circuit.get_branch_names(),
    #               DeviceType.BusDevice.LoadDevice: self.circuit.get_load_names(),
    #               DeviceType.BusDevice.GeneratorDevice: self.circuit.get_controlled_generator_names(),
    #               DeviceType.BusDevice.BatteryDevice: self.circuit.get_battery_names()}
    # open zip file for writing
    try:
        with zipfile.ZipFile(self.file_name, 'w', zipfile.ZIP_DEFLATED) as myzip:
            n = len(self.simulations_list)
            for k, driver in enumerate(self.simulations_list):
                self.progress_signal.emit((k + 1) / n * 100.0)
                if isinstance(driver.results.available_results, dict):
                    available_res = [e for tpe, lst in driver.results.available_results.items() for e in lst]
                else:
                    available_res = driver.results.available_results
                for available_result in available_res:
                    # ge the result type definition
                    result_name, device_type = available_result.value
                    self.progress_text.emit('flushing ' + driver.results.name + ' ' + result_name)
                    # save the DataFrame to the buffer
                    mdl = driver.results.mdl(result_type=available_result)
                    if mdl is not None:
                        with StringIO() as buffer:
                            filename = driver.results.name + ' ' + result_name + '.csv'
                            try:
                                mdl.save_to_csv(buffer)
                                myzip.writestr(filename, buffer.getvalue())
                            except ValueError:
                                self.logger.add_error('Value error', filename)
                    else:
                        self.logger.add_info('No results for ' + driver.results.name + ' - ' + result_name)
    except PermissionError:
        self.logger.add('Permission error.\nDo you have the file open?')
    self.valid = True
    # post events
    self.progress_text.emit('Done!')
    self.done_signal.emit()