diff --git a/energyplus_calibrator/calibration_class.py b/energyplus_calibrator/calibration_class.py index 05810b92c4a8fe725a96bcbd3f7cbddb10811680..167f8be08b115a66746d5e65081b5e75d461a9a1 100644 --- a/energyplus_calibrator/calibration_class.py +++ b/energyplus_calibrator/calibration_class.py @@ -187,7 +187,11 @@ class EnergyPlusCalibrator: if self.force_same is not None: for force_to, force_from in self.force_same.items(): check_param(force_to) - check_param(force_from[0]) + if isinstance(force_from[0], (list, tuple)): + for f in force_from[0]: + check_param(f) + else: + check_param(force_from[0]) def _get_tuner_paras_dict(self) -> Dict[str, Tuple[float, Tuple[float, float]]]: """ diff --git a/energyplus_calibrator/energy_plus_api.py b/energyplus_calibrator/energy_plus_api.py index 741159346bd6b884d98dd6df09b720ebe627ecff..aab0dadd2461326351193df621dc8f5dee0eee50 100644 --- a/energyplus_calibrator/energy_plus_api.py +++ b/energyplus_calibrator/energy_plus_api.py @@ -349,6 +349,7 @@ class EnergyPlusAPI(SimulationAPI): _df = self._single_simulation_solo_mp(kwargs.copy()) else: _df = self._single_simulation_solo(kwargs.copy()) + if _df is None: if queue is not None: queue.put(None) @@ -466,8 +467,19 @@ class EnergyPlusAPI(SimulationAPI): if self.force_same is not None and not dont_force_same: for force_to, force_from in self.force_same.items(): - parameters[force_to] = parameters[force_from[0]] + \ - force_from[1] + if isinstance(force_from[0], str): + parameters[force_to] = parameters[force_from[0]] + \ + force_from[1] + continue + elif not isinstance(force_from[0], tuple): + raise ValueError('force_from must be a tuple or a string') + + #force_from is a tuple + if force_from[1] == 'min': + parameters[force_to] = min([parameters[i] for i in force_from[0]]) + else: + raise NameError('force_from[1] must be "min"') + for key in self._set_output_timestep: self._set_output_timestep[key] = self.sim_setup.dataframe_interval @@ -509,6 +521,10 @@ class EnergyPlusAPI(SimulationAPI): self.logger.error('---ARGS---\n%s', result.args) self.logger.error('---STDOUT---\n%s', result.stdout.decode()) self.logger.error('---STDERR---\n%s', result.stderr.decode()) + error_file = _temp_output_directory / 'eplusout.err' + if error_file.exists(): + with open(error_file, 'r') as f: + self.logger.error(f.read()) shutil.rmtree(_temp_output_directory) shutil.rmtree(_temp_generated_inputs) if fail_on_error: