# coding=utf-8
"""Simulation controls for which types of calculations to run."""
from __future__ import division
from ..reader import parse_idf_string
from ..writer import generate_idf_string
[docs]
class SimulationControl(object):
"""Simulation controls for which types of calculations to run.
Args:
do_zone_sizing: Boolean for whether the zone sizing calculation
should be run. Default: True.
do_system_sizing: Boolean for whether the system sizing calculation
should be run. Default: True.
do_plant_sizing: Boolean for whether the plant sizing calculation
should be run. Default: True.
run_for_sizing_periods: Boolean for whether the simulation should
be run for the sizing periods. Default: False.
run_for_run_periods: Boolean for whether the simulation should
be run for the run periods. Default: True.
Properties:
* do_zone_sizing
* do_system_sizing
* do_plant_sizing
* run_for_sizing_periods
* run_for_run_periods
"""
__slots__ = ('_do_zone_sizing', '_do_system_sizing', '_do_plant_sizing',
'_run_for_sizing_periods', '_run_for_run_periods')
def __init__(self, do_zone_sizing=True, do_system_sizing=True,
do_plant_sizing=True, run_for_sizing_periods=False,
run_for_run_periods=True):
"""Initialize SimulationControl."""
self.do_zone_sizing = do_zone_sizing
self.do_system_sizing = do_system_sizing
self.do_plant_sizing = do_plant_sizing
self.run_for_sizing_periods = run_for_sizing_periods
self.run_for_run_periods = run_for_run_periods
@property
def do_zone_sizing(self):
"""Get or set a boolean for whether the zone sizing calculation is run."""
return self._do_zone_sizing
@do_zone_sizing.setter
def do_zone_sizing(self, value):
self._do_zone_sizing = bool(value)
@property
def do_system_sizing(self):
"""Get or set a boolean for whether the system sizing calculation is run."""
return self._do_system_sizing
@do_system_sizing.setter
def do_system_sizing(self, value):
self._do_system_sizing = bool(value)
@property
def do_plant_sizing(self):
"""Get or set a boolean for whether the plant sizing calculation is run."""
return self._do_plant_sizing
@do_plant_sizing.setter
def do_plant_sizing(self, value):
self._do_plant_sizing = bool(value)
@property
def run_for_sizing_periods(self):
"""Get or set a boolean for whether the simulation is run for sizing periods."""
return self._run_for_sizing_periods
@run_for_sizing_periods.setter
def run_for_sizing_periods(self, value):
self._run_for_sizing_periods = bool(value)
@property
def run_for_run_periods(self):
"""Get or set a boolean for whether the simulation is run for run periods."""
return self._run_for_run_periods
@run_for_run_periods.setter
def run_for_run_periods(self, value):
self._run_for_run_periods = bool(value)
[docs]
@classmethod
def from_idf(cls, idf_string):
"""Create a SimulationControl object from an EnergyPlus IDF text string.
Args:
idf_string: A text string fully describing an EnergyPlus
SimulationControl definition.
"""
# check the inputs
ep_strs = parse_idf_string(idf_string, 'SimulationControl,')
# extract the properties from the string
do_zone_sizing = False
do_system_sizing = False
do_plant_sizing = False
run_for_sizing_periods = True
run_for_run_periods = True
try:
do_zone_sizing = True if ep_strs[0].lower() == 'yes' else False
do_system_sizing = True if ep_strs[1].lower() == 'yes' else False
do_plant_sizing = True if ep_strs[2].lower() == 'yes' else False
run_for_sizing_periods = False if ep_strs[3].lower() == 'no' else True
run_for_run_periods = False if ep_strs[4].lower() == 'no' else True
except IndexError:
pass # shorter SimulationControl definition
return cls(do_zone_sizing, do_system_sizing, do_plant_sizing,
run_for_sizing_periods, run_for_run_periods)
[docs]
@classmethod
def from_dict(cls, data):
"""Create a SimulationControl object from a dictionary.
Args:
data: A SimulationControl dictionary in following the format below.
.. code-block:: python
{
"type": "SimulationControl",
"do_zone_sizing": True,
"do_system_sizing": True,
"do_plant_sizing": True,
"run_for_sizing_periods": False,
"run_for_run_periods": True
}
"""
assert data['type'] == 'SimulationControl', \
'Expected SimulationControl dictionary. Got {}.'.format(data['type'])
do_zone_sizing = data['do_zone_sizing'] if \
'do_zone_sizing' in data else True
do_system_sizing = data['do_system_sizing'] if \
'do_system_sizing' in data else True
do_plant_sizing = data['do_plant_sizing'] if \
'do_plant_sizing' in data else True
run_for_sizing_periods = data['run_for_sizing_periods'] if \
'run_for_sizing_periods' in data else False
run_for_run_periods = data['run_for_run_periods'] if \
'run_for_run_periods' in data else False
return cls(do_zone_sizing, do_system_sizing, do_plant_sizing,
run_for_sizing_periods, run_for_run_periods)
[docs]
def to_idf(self):
"""Get an EnergyPlus string representation of the SimulationControl.
.. code-block:: shell
SimulationControl,
Yes, !- do zone sizing
Yes, !- do system sizing
Yes, !- do plant sizing
No, !- run for sizing periods
Yes; !- run for run periods
"""
do_zone_sizing = 'Yes' if self.do_zone_sizing else 'No'
do_system_sizing = 'Yes' if self.do_system_sizing else 'No'
do_plant_sizing = 'Yes' if self.do_plant_sizing else 'No'
run_for_sizing_periods = 'Yes' if self.run_for_sizing_periods else 'No'
run_for_run_periods = 'Yes' if self.run_for_run_periods else 'No'
values = (do_zone_sizing, do_system_sizing, do_plant_sizing,
run_for_sizing_periods, run_for_run_periods)
comments = ('do zone sizing', 'do system sizing', 'do plant sizing',
'run for sizing periods', 'run for run periods')
return generate_idf_string('SimulationControl', values, comments)
[docs]
def to_dict(self):
"""SimulationControl dictionary representation."""
return {
'type': 'SimulationControl',
'do_zone_sizing': self.do_zone_sizing,
'do_system_sizing': self.do_system_sizing,
'do_plant_sizing': self.do_plant_sizing,
'run_for_sizing_periods': self.run_for_sizing_periods,
'run_for_run_periods': self.run_for_run_periods
}
[docs]
def duplicate(self):
"""Get a copy of this object."""
return self.__copy__()
[docs]
def ToString(self):
"""Overwrite .NET ToString."""
return self.__repr__()
def __copy__(self):
return SimulationControl(
self.do_zone_sizing, self.do_system_sizing,
self.do_plant_sizing, self.run_for_sizing_periods,
self.run_for_run_periods)
def __key(self):
"""A tuple based on the object properties, useful for hashing."""
return (self.do_zone_sizing, self.do_system_sizing, self.do_plant_sizing,
self.run_for_sizing_periods, self.run_for_run_periods)
def __hash__(self):
return hash(self.__key())
def __eq__(self, other):
return isinstance(other, SimulationControl) and self.__key() == other.__key()
def __ne__(self, other):
return not self.__eq__(other)
def __repr__(self):
return self.to_idf()