Merge branch 'infilt_availability_oriol'
This commit is contained in:
commit
4738de0d8c
@ -128,6 +128,12 @@ class NrcanCatalog(Catalog):
|
|||||||
infiltration_rate_for_ventilation_system_on = (
|
infiltration_rate_for_ventilation_system_on = (
|
||||||
archetype['infiltration_rate_for_ventilation_system_on'] / cte.HOUR_TO_SECONDS
|
archetype['infiltration_rate_for_ventilation_system_on'] / cte.HOUR_TO_SECONDS
|
||||||
)
|
)
|
||||||
|
infiltration_rate_area_for_ventilation_system_off = (
|
||||||
|
archetype['infiltration_rate_area_for_ventilation_system_off'] * 1
|
||||||
|
)
|
||||||
|
infiltration_rate_area_for_ventilation_system_on = (
|
||||||
|
archetype['infiltration_rate_area_for_ventilation_system_on'] * 1
|
||||||
|
)
|
||||||
|
|
||||||
archetype_constructions = []
|
archetype_constructions = []
|
||||||
for archetype_construction in archetype['constructions']:
|
for archetype_construction in archetype['constructions']:
|
||||||
@ -153,7 +159,6 @@ class NrcanCatalog(Catalog):
|
|||||||
_window)
|
_window)
|
||||||
archetype_constructions.append(_construction)
|
archetype_constructions.append(_construction)
|
||||||
break
|
break
|
||||||
|
|
||||||
_catalog_archetypes.append(Archetype(archetype_id,
|
_catalog_archetypes.append(Archetype(archetype_id,
|
||||||
name,
|
name,
|
||||||
function,
|
function,
|
||||||
@ -165,7 +170,10 @@ class NrcanCatalog(Catalog):
|
|||||||
extra_loses_due_to_thermal_bridges,
|
extra_loses_due_to_thermal_bridges,
|
||||||
None,
|
None,
|
||||||
infiltration_rate_for_ventilation_system_off,
|
infiltration_rate_for_ventilation_system_off,
|
||||||
infiltration_rate_for_ventilation_system_on))
|
infiltration_rate_for_ventilation_system_on,
|
||||||
|
infiltration_rate_area_for_ventilation_system_off,
|
||||||
|
infiltration_rate_area_for_ventilation_system_on
|
||||||
|
))
|
||||||
return _catalog_archetypes
|
return _catalog_archetypes
|
||||||
|
|
||||||
def names(self, category=None):
|
def names(self, category=None):
|
||||||
|
@ -23,7 +23,10 @@ class Archetype:
|
|||||||
extra_loses_due_to_thermal_bridges,
|
extra_loses_due_to_thermal_bridges,
|
||||||
indirect_heated_ratio,
|
indirect_heated_ratio,
|
||||||
infiltration_rate_for_ventilation_system_off,
|
infiltration_rate_for_ventilation_system_off,
|
||||||
infiltration_rate_for_ventilation_system_on):
|
infiltration_rate_for_ventilation_system_on,
|
||||||
|
infiltration_rate_area_for_ventilation_system_off,
|
||||||
|
infiltration_rate_area_for_ventilation_system_on
|
||||||
|
):
|
||||||
self._id = archetype_id
|
self._id = archetype_id
|
||||||
self._name = name
|
self._name = name
|
||||||
self._function = function
|
self._function = function
|
||||||
@ -36,6 +39,8 @@ class Archetype:
|
|||||||
self._indirect_heated_ratio = indirect_heated_ratio
|
self._indirect_heated_ratio = indirect_heated_ratio
|
||||||
self._infiltration_rate_for_ventilation_system_off = infiltration_rate_for_ventilation_system_off
|
self._infiltration_rate_for_ventilation_system_off = infiltration_rate_for_ventilation_system_off
|
||||||
self._infiltration_rate_for_ventilation_system_on = infiltration_rate_for_ventilation_system_on
|
self._infiltration_rate_for_ventilation_system_on = infiltration_rate_for_ventilation_system_on
|
||||||
|
self._infiltration_rate_area_for_ventilation_system_off = infiltration_rate_area_for_ventilation_system_off
|
||||||
|
self._infiltration_rate_area_for_ventilation_system_on = infiltration_rate_area_for_ventilation_system_on
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self):
|
def id(self):
|
||||||
@ -133,6 +138,22 @@ class Archetype:
|
|||||||
"""
|
"""
|
||||||
return self._infiltration_rate_for_ventilation_system_on
|
return self._infiltration_rate_for_ventilation_system_on
|
||||||
|
|
||||||
|
@property
|
||||||
|
def infiltration_rate_area_for_ventilation_system_off(self):
|
||||||
|
"""
|
||||||
|
Get archetype infiltration rate for ventilation system off in m3/sm2
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._infiltration_rate_area_for_ventilation_system_off
|
||||||
|
|
||||||
|
@property
|
||||||
|
def infiltration_rate_area_for_ventilation_system_on(self):
|
||||||
|
"""
|
||||||
|
Get archetype infiltration rate for ventilation system on in m3/sm2
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._infiltration_rate_for_ventilation_system_on
|
||||||
|
|
||||||
def to_dictionary(self):
|
def to_dictionary(self):
|
||||||
"""Class content to dictionary"""
|
"""Class content to dictionary"""
|
||||||
_constructions = []
|
_constructions = []
|
||||||
@ -149,6 +170,8 @@ class Archetype:
|
|||||||
'indirect heated ratio': self.indirect_heated_ratio,
|
'indirect heated ratio': self.indirect_heated_ratio,
|
||||||
'infiltration rate for ventilation off [1/s]': self.infiltration_rate_for_ventilation_system_off,
|
'infiltration rate for ventilation off [1/s]': self.infiltration_rate_for_ventilation_system_off,
|
||||||
'infiltration rate for ventilation on [1/s]': self.infiltration_rate_for_ventilation_system_on,
|
'infiltration rate for ventilation on [1/s]': self.infiltration_rate_for_ventilation_system_on,
|
||||||
|
'infiltration rate area for ventilation off [m3/sm2]': self.infiltration_rate_area_for_ventilation_system_off,
|
||||||
|
'infiltration rate area for ventilation on [m3/sm2]': self.infiltration_rate_area_for_ventilation_system_on,
|
||||||
'constructions': _constructions
|
'constructions': _constructions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ class ThermalArchetype:
|
|||||||
self._indirect_heated_ratio = None
|
self._indirect_heated_ratio = None
|
||||||
self._infiltration_rate_for_ventilation_system_off = None
|
self._infiltration_rate_for_ventilation_system_off = None
|
||||||
self._infiltration_rate_for_ventilation_system_on = None
|
self._infiltration_rate_for_ventilation_system_on = None
|
||||||
|
self._infiltration_rate_area_for_ventilation_system_off=None
|
||||||
|
self._infiltration_rate_area_for_ventilation_system_on=None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def constructions(self) -> [Construction]:
|
def constructions(self) -> [Construction]:
|
||||||
@ -132,3 +134,35 @@ class ThermalArchetype:
|
|||||||
:param value: float
|
:param value: float
|
||||||
"""
|
"""
|
||||||
self._infiltration_rate_for_ventilation_system_on = value
|
self._infiltration_rate_for_ventilation_system_on = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def infiltration_rate_area_for_ventilation_system_off(self):
|
||||||
|
"""
|
||||||
|
Get infiltration rate for ventilation system off in l/s/m2
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._infiltration_rate_for_ventilation_system_off
|
||||||
|
|
||||||
|
@infiltration_rate_area_for_ventilation_system_off.setter
|
||||||
|
def infiltration_rate_area_for_ventilation_system_off(self, value):
|
||||||
|
"""
|
||||||
|
Set infiltration rate for ventilation system off in l/s/m2
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._infiltration_rate_for_ventilation_system_off = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def infiltration_rate_area_for_ventilation_system_on(self):
|
||||||
|
"""
|
||||||
|
Get infiltration rate for ventilation system on in l/s/m2
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._infiltration_rate_for_ventilation_system_on
|
||||||
|
|
||||||
|
@infiltration_rate_area_for_ventilation_system_on.setter
|
||||||
|
def infiltration_rate_area_for_ventilation_system_on(self, value):
|
||||||
|
"""
|
||||||
|
Set infiltration rate for ventilation system on in l/s/m2
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._infiltration_rate_for_ventilation_system_on = value
|
||||||
|
@ -44,6 +44,8 @@ class ThermalZone:
|
|||||||
self._indirectly_heated_area_ratio = None
|
self._indirectly_heated_area_ratio = None
|
||||||
self._infiltration_rate_system_on = None
|
self._infiltration_rate_system_on = None
|
||||||
self._infiltration_rate_system_off = None
|
self._infiltration_rate_system_off = None
|
||||||
|
self._infiltration_rate_area_system_on = None
|
||||||
|
self._infiltration_rate_area_system_off = None
|
||||||
self._volume = volume
|
self._volume = volume
|
||||||
self._ordinate_number = None
|
self._ordinate_number = None
|
||||||
self._view_factors_matrix = None
|
self._view_factors_matrix = None
|
||||||
@ -166,6 +168,24 @@ class ThermalZone:
|
|||||||
self._infiltration_rate_system_off = self._parent_internal_zone.thermal_archetype.infiltration_rate_for_ventilation_system_off
|
self._infiltration_rate_system_off = self._parent_internal_zone.thermal_archetype.infiltration_rate_for_ventilation_system_off
|
||||||
return self._infiltration_rate_system_off
|
return self._infiltration_rate_system_off
|
||||||
|
|
||||||
|
@property
|
||||||
|
def infiltration_rate_area_system_on(self):
|
||||||
|
"""
|
||||||
|
Get thermal zone infiltration rate system on in air changes per second (1/s)
|
||||||
|
:return: None or float
|
||||||
|
"""
|
||||||
|
self._infiltration_rate_area_system_on = self._parent_internal_zone.thermal_archetype.infiltration_rate_area_for_ventilation_system_on
|
||||||
|
return self._infiltration_rate_area_system_on
|
||||||
|
|
||||||
|
@property
|
||||||
|
def infiltration_rate_area_system_off(self):
|
||||||
|
"""
|
||||||
|
Get thermal zone infiltration rate system off in air changes per second (1/s)
|
||||||
|
:return: None or float
|
||||||
|
"""
|
||||||
|
self._infiltration_rate_area_system_off = self._parent_internal_zone.thermal_archetype.infiltration_rate_area_for_ventilation_system_off
|
||||||
|
return self._infiltration_rate_area_system_off
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def volume(self):
|
def volume(self):
|
||||||
"""
|
"""
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -392,9 +392,9 @@ class Idf:
|
|||||||
thermostat = self._add_thermostat(thermal_zone)
|
thermostat = self._add_thermostat(thermal_zone)
|
||||||
self._idf.newidfobject(self._IDEAL_LOAD_AIR_SYSTEM,
|
self._idf.newidfobject(self._IDEAL_LOAD_AIR_SYSTEM,
|
||||||
Zone_Name=zone_name,
|
Zone_Name=zone_name,
|
||||||
System_Availability_Schedule_Name=f'HVAC AVAIL SCHEDULES {thermal_zone.usage_name}',
|
System_Availability_Schedule_Name=f'Thermostat_availability schedules {thermal_zone.usage_name}',
|
||||||
Heating_Availability_Schedule_Name=f'HVAC AVAIL SCHEDULES {thermal_zone.usage_name}',
|
Heating_Availability_Schedule_Name=f'Thermostat_availability schedules {thermal_zone.usage_name}',
|
||||||
Cooling_Availability_Schedule_Name=f'HVAC AVAIL SCHEDULES {thermal_zone.usage_name}',
|
Cooling_Availability_Schedule_Name=f'Thermostat_availability schedules {thermal_zone.usage_name}',
|
||||||
Template_Thermostat_Name=thermostat.Name)
|
Template_Thermostat_Name=thermostat.Name)
|
||||||
|
|
||||||
def _add_occupancy(self, thermal_zone, zone_name):
|
def _add_occupancy(self, thermal_zone, zone_name):
|
||||||
@ -454,7 +454,7 @@ class Idf:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _add_infiltration(self, thermal_zone, zone_name):
|
def _add_infiltration(self, thermal_zone, zone_name):
|
||||||
schedule = f'Infiltration schedules {thermal_zone.usage_name}'
|
schedule = f'INF_CONST schedules {thermal_zone.usage_name}'
|
||||||
_infiltration = thermal_zone.infiltration_rate_system_off * cte.HOUR_TO_SECONDS
|
_infiltration = thermal_zone.infiltration_rate_system_off * cte.HOUR_TO_SECONDS
|
||||||
self._idf.newidfobject(self._INFILTRATION,
|
self._idf.newidfobject(self._INFILTRATION,
|
||||||
Name=f'{zone_name}_infiltration',
|
Name=f'{zone_name}_infiltration',
|
||||||
@ -464,6 +464,17 @@ class Idf:
|
|||||||
Air_Changes_per_Hour=_infiltration
|
Air_Changes_per_Hour=_infiltration
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _add_infiltration_surface(self, thermal_zone, zone_name):
|
||||||
|
schedule = f'INF_CONST schedules {thermal_zone.usage_name}'
|
||||||
|
_infiltration = thermal_zone.infiltration_rate_area_system_off*1
|
||||||
|
self._idf.newidfobject(self._INFILTRATION,
|
||||||
|
Name=f'{zone_name}_infiltration',
|
||||||
|
Zone_or_ZoneList_or_Space_or_SpaceList_Name=zone_name,
|
||||||
|
Schedule_Name=schedule,
|
||||||
|
Design_Flow_Rate_Calculation_Method='Flow/ExteriorWallArea',
|
||||||
|
Flow_Rate_per_Exterior_Surface_Area=_infiltration
|
||||||
|
)
|
||||||
|
|
||||||
def _add_ventilation(self, thermal_zone, zone_name):
|
def _add_ventilation(self, thermal_zone, zone_name):
|
||||||
schedule = f'Ventilation schedules {thermal_zone.usage_name}'
|
schedule = f'Ventilation schedules {thermal_zone.usage_name}'
|
||||||
_air_change = thermal_zone.mechanical_air_change * cte.HOUR_TO_SECONDS
|
_air_change = thermal_zone.mechanical_air_change * cte.HOUR_TO_SECONDS
|
||||||
@ -549,9 +560,12 @@ class Idf:
|
|||||||
self._add_schedules(usage, 'DHW_prof', thermal_zone.domestic_hot_water.schedules)
|
self._add_schedules(usage, 'DHW_prof', thermal_zone.domestic_hot_water.schedules)
|
||||||
_new_schedules = self._create_yearly_values_schedules('cold_temp', building.cold_water_temperature[cte.HOUR])
|
_new_schedules = self._create_yearly_values_schedules('cold_temp', building.cold_water_temperature[cte.HOUR])
|
||||||
self._add_schedules(usage, 'cold_temp', _new_schedules)
|
self._add_schedules(usage, 'cold_temp', _new_schedules)
|
||||||
|
|
||||||
_new_schedules = self._create_constant_value_schedules('DHW_temp', service_temperature)
|
_new_schedules = self._create_constant_value_schedules('DHW_temp', service_temperature)
|
||||||
self._add_schedules(usage, 'DHW_temp', _new_schedules)
|
self._add_schedules(usage, 'DHW_temp', _new_schedules)
|
||||||
|
_new_schedules = self._create_constant_value_schedules('INF_CONST', 1)
|
||||||
|
self._add_schedules(usage, 'INF_CONST', _new_schedules)
|
||||||
|
_new_schedules = self._create_constant_value_schedules('Thermostat_availability', 1)
|
||||||
|
self._add_schedules(usage, 'Thermostat_availability', _new_schedules)
|
||||||
_occ = thermal_zone.occupancy
|
_occ = thermal_zone.occupancy
|
||||||
if _occ.occupancy_density == 0:
|
if _occ.occupancy_density == 0:
|
||||||
_total_heat = 0
|
_total_heat = 0
|
||||||
@ -562,7 +576,7 @@ class Idf:
|
|||||||
self._add_schedules(usage, 'Activity Level', _new_schedules)
|
self._add_schedules(usage, 'Activity Level', _new_schedules)
|
||||||
self._add_zone(thermal_zone, building.name)
|
self._add_zone(thermal_zone, building.name)
|
||||||
self._add_heating_system(thermal_zone, building.name)
|
self._add_heating_system(thermal_zone, building.name)
|
||||||
self._add_infiltration(thermal_zone, building.name)
|
self._add_infiltration_surface(thermal_zone, building.name)
|
||||||
self._add_ventilation(thermal_zone, building.name)
|
self._add_ventilation(thermal_zone, building.name)
|
||||||
self._add_occupancy(thermal_zone, building.name)
|
self._add_occupancy(thermal_zone, building.name)
|
||||||
self._add_lighting(thermal_zone, building.name)
|
self._add_lighting(thermal_zone, building.name)
|
||||||
@ -611,6 +625,18 @@ class Idf:
|
|||||||
Reporting_Frequency="Hourly",
|
Reporting_Frequency="Hourly",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self._idf.newidfobject(
|
||||||
|
"OUTPUT:VARIABLE",
|
||||||
|
Variable_Name="Zone Air Temperature",
|
||||||
|
Reporting_Frequency="Hourly",
|
||||||
|
)
|
||||||
|
|
||||||
|
self._idf.newidfobject(
|
||||||
|
"OUTPUT:VARIABLE",
|
||||||
|
Variable_Name="Zone Air Relative Humidity",
|
||||||
|
Reporting_Frequency="Hourly",
|
||||||
|
)
|
||||||
|
|
||||||
# post-process to erase windows associated to adiabatic walls
|
# post-process to erase windows associated to adiabatic walls
|
||||||
windows_list = []
|
windows_list = []
|
||||||
for window in self._idf.idfobjects[self._WINDOW]:
|
for window in self._idf.idfobjects[self._WINDOW]:
|
||||||
|
@ -25,6 +25,7 @@ KILO_WATTS_HOUR_TO_JULES = 3600000
|
|||||||
WATTS_HOUR_TO_JULES = 3600
|
WATTS_HOUR_TO_JULES = 3600
|
||||||
GALLONS_TO_QUBIC_METERS = 0.0037854117954011185
|
GALLONS_TO_QUBIC_METERS = 0.0037854117954011185
|
||||||
|
|
||||||
|
|
||||||
# time
|
# time
|
||||||
SECOND = 'second'
|
SECOND = 'second'
|
||||||
MINUTE = 'minute'
|
MINUTE = 'minute'
|
||||||
|
@ -67,6 +67,8 @@ class NrcanPhysicsParameters:
|
|||||||
thermal_archetype.indirect_heated_ratio = 0
|
thermal_archetype.indirect_heated_ratio = 0
|
||||||
thermal_archetype.infiltration_rate_for_ventilation_system_on = catalog_archetype.infiltration_rate_for_ventilation_system_on
|
thermal_archetype.infiltration_rate_for_ventilation_system_on = catalog_archetype.infiltration_rate_for_ventilation_system_on
|
||||||
thermal_archetype.infiltration_rate_for_ventilation_system_off = catalog_archetype.infiltration_rate_for_ventilation_system_off
|
thermal_archetype.infiltration_rate_for_ventilation_system_off = catalog_archetype.infiltration_rate_for_ventilation_system_off
|
||||||
|
thermal_archetype.infiltration_rate_area_for_ventilation_system_on = catalog_archetype.infiltration_rate_area_for_ventilation_system_on
|
||||||
|
thermal_archetype.infiltration_rate_area_for_ventilation_system_off = catalog_archetype.infiltration_rate_area_for_ventilation_system_off
|
||||||
_constructions = []
|
_constructions = []
|
||||||
for catalog_construction in catalog_archetype.constructions:
|
for catalog_construction in catalog_archetype.constructions:
|
||||||
construction = Construction()
|
construction = Construction()
|
||||||
|
0
hub/imports/weather/EPWCLEANER
Normal file
0
hub/imports/weather/EPWCLEANER
Normal file
Loading…
Reference in New Issue
Block a user