Incorporated 1st version Domestic Hot Water, still not working.
This commit is contained in:
parent
6de00c0331
commit
40fe325a18
@ -19,7 +19,7 @@ class ThermalControl:
|
|||||||
heating_set_point_schedules,
|
heating_set_point_schedules,
|
||||||
cooling_set_point_schedules):
|
cooling_set_point_schedules):
|
||||||
#todo: eliminate negative value
|
#todo: eliminate negative value
|
||||||
deltaTsetpoint=-1
|
deltaTsetpoint=0
|
||||||
self._mean_heating_set_point = mean_heating_set_point
|
self._mean_heating_set_point = mean_heating_set_point
|
||||||
self._heating_set_back = heating_set_back
|
self._heating_set_back = heating_set_back
|
||||||
self._mean_cooling_set_point = mean_cooling_set_point
|
self._mean_cooling_set_point = mean_cooling_set_point
|
||||||
|
@ -603,7 +603,8 @@ class ThermalZone:
|
|||||||
_mean_peak_flow = 0
|
_mean_peak_flow = 0
|
||||||
_mean_service_temperature = 0
|
_mean_service_temperature = 0
|
||||||
for usage in self.usages:
|
for usage in self.usages:
|
||||||
_mean_peak_density_load += usage.percentage * usage.domestic_hot_water.density
|
# todo: change hardcoded density DHW
|
||||||
|
_mean_peak_density_load += usage.percentage * 1 #usage.domestic_hot_water.density
|
||||||
_mean_peak_flow += usage.percentage * usage.domestic_hot_water.peak_flow
|
_mean_peak_flow += usage.percentage * usage.domestic_hot_water.peak_flow
|
||||||
_mean_service_temperature += usage.percentage * usage.domestic_hot_water.service_temperature
|
_mean_service_temperature += usage.percentage * usage.domestic_hot_water.service_temperature
|
||||||
self._domestic_hot_water.density = _mean_peak_density_load
|
self._domestic_hot_water.density = _mean_peak_density_load
|
||||||
@ -630,6 +631,7 @@ class ThermalZone:
|
|||||||
schedule.values = new_values
|
schedule.values = new_values
|
||||||
_schedules.append(schedule)
|
_schedules.append(schedule)
|
||||||
self._domestic_hot_water.schedules = _schedules
|
self._domestic_hot_water.schedules = _schedules
|
||||||
|
|
||||||
return self._domestic_hot_water
|
return self._domestic_hot_water
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -23,6 +23,7 @@ class Idf:
|
|||||||
_LIGHTS = 'LIGHTS'
|
_LIGHTS = 'LIGHTS'
|
||||||
_APPLIANCES = 'OTHEREQUIPMENT'
|
_APPLIANCES = 'OTHEREQUIPMENT'
|
||||||
_PEOPLE = 'PEOPLE'
|
_PEOPLE = 'PEOPLE'
|
||||||
|
_DHW = 'WATERUSE:EQUIPMENT'
|
||||||
_THERMOSTAT = 'HVACTEMPLATE:THERMOSTAT'
|
_THERMOSTAT = 'HVACTEMPLATE:THERMOSTAT'
|
||||||
_IDEAL_LOAD_AIR_SYSTEM = 'HVACTEMPLATE:ZONE:IDEALLOADSAIRSYSTEM'
|
_IDEAL_LOAD_AIR_SYSTEM = 'HVACTEMPLATE:ZONE:IDEALLOADSAIRSYSTEM'
|
||||||
_SURFACE = 'BUILDINGSURFACE:DETAILED'
|
_SURFACE = 'BUILDINGSURFACE:DETAILED'
|
||||||
@ -247,6 +248,28 @@ class Idf:
|
|||||||
return
|
return
|
||||||
return self._add_standard_compact_hourly_schedule(usage, schedule_type, new_schedules)
|
return self._add_standard_compact_hourly_schedule(usage, schedule_type, new_schedules)
|
||||||
|
|
||||||
|
def _add_servicetemp_schedules(self, thermal_zone):
|
||||||
|
#todo: clean Domestic Hot Water
|
||||||
|
_schedule = Schedule()
|
||||||
|
_schedule.type = cte.DOMESTIC_HOT_WATER
|
||||||
|
_schedule.data_type = cte.TEMPERATURE
|
||||||
|
_schedule.time_step = cte.HOUR
|
||||||
|
_schedule.time_range = cte.DAY
|
||||||
|
#_schedule.day_types = copy.deepcopy(hvac_availability_schedule.day_types)
|
||||||
|
_servicetemp_values = []
|
||||||
|
for schedule_value in thermal_zone._domestic_hot_water.schedules:
|
||||||
|
if schedule_value == 0:
|
||||||
|
_servicetemp_values.append(60)
|
||||||
|
else:
|
||||||
|
_servicetemp_values.append(60)
|
||||||
|
_schedule.values = _servicetemp_values
|
||||||
|
_servicetemp_values.append(_schedule)
|
||||||
|
for schedule in self._idf.idfobjects[self._HOURLY_SCHEDULE]:
|
||||||
|
if schedule.Name == f'DHW_temp schedules {thermal_zone.usage_name}':
|
||||||
|
return
|
||||||
|
return self._add_standard_compact_hourly_schedule(thermal_zone.usage_name, 'DHW_temp', _servicetemp_values)
|
||||||
|
|
||||||
|
|
||||||
def _add_construction(self, thermal_boundary):
|
def _add_construction(self, thermal_boundary):
|
||||||
for construction in self._idf.idfobjects[self._CONSTRUCTION]:
|
for construction in self._idf.idfobjects[self._CONSTRUCTION]:
|
||||||
if thermal_boundary.parent_surface.vegetation is not None:
|
if thermal_boundary.parent_surface.vegetation is not None:
|
||||||
@ -371,8 +394,6 @@ class Idf:
|
|||||||
method = 'Watts/Area'
|
method = 'Watts/Area'
|
||||||
factor_size = thermal_zone.total_floor_area / thermal_zone.footprint_area
|
factor_size = thermal_zone.total_floor_area / thermal_zone.footprint_area
|
||||||
watts_per_zone_floor_area = thermal_zone.appliances.density*factor_size
|
watts_per_zone_floor_area = thermal_zone.appliances.density*factor_size
|
||||||
print(thermal_zone.appliances.density)
|
|
||||||
print(watts_per_zone_floor_area)
|
|
||||||
subcategory = f'ELECTRIC EQUIPMENT#{zone_name}#InteriorEquipment'
|
subcategory = f'ELECTRIC EQUIPMENT#{zone_name}#InteriorEquipment'
|
||||||
# _object = self._idf.newidfobject(self._APPLIANCES)
|
# _object = self._idf.newidfobject(self._APPLIANCES)
|
||||||
# print(vars(_object))
|
# print(vars(_object))
|
||||||
@ -404,7 +425,23 @@ class Idf:
|
|||||||
Design_Flow_Rate_Calculation_Method='AirChanges/Hour',
|
Design_Flow_Rate_Calculation_Method='AirChanges/Hour',
|
||||||
Air_Changes_per_Hour=thermal_zone.infiltration_rate_system_off*factorreduct
|
Air_Changes_per_Hour=thermal_zone.infiltration_rate_system_off*factorreduct
|
||||||
)
|
)
|
||||||
|
def _add_DHW(self, thermal_zone, zone_name):
|
||||||
|
fuel_type = 'Electricity'
|
||||||
|
method = 'Watts/Area'
|
||||||
|
factor_size = thermal_zone.total_floor_area / thermal_zone.footprint_area
|
||||||
|
peak_flow_rate = thermal_zone.domestic_hot_water.peak_flow*factor_size
|
||||||
|
#_object = self._idf.newidfobject(self._DHW)
|
||||||
|
#print(vars(_object))
|
||||||
|
self._idf.newidfobject(self._DHW,
|
||||||
|
Name=f'{zone_name}_DHW',
|
||||||
|
Zone_or_ZoneList_Name=zone_name,
|
||||||
|
Schedule_Name=f'DHW {thermal_zone.usage_name}',
|
||||||
|
Peak_flow_rate=peak_flow_rate,
|
||||||
|
Flow_Rate_Fraction_Schedule_Name=f'DHW_prof {thermal_zone.usage_name}',
|
||||||
|
Target_Temperature_Schedule_Name=f'DHW_temp {thermal_zone.usage_name}',
|
||||||
|
Cold_Water_Supply_Temperature_Schedule_Name=f'CW_temp {thermal_zone.usage_name}',
|
||||||
|
EndUse_Subcategory=f'DHW {thermal_zone.usage_name}'
|
||||||
|
)
|
||||||
def _rename_building(self, city_name):
|
def _rename_building(self, city_name):
|
||||||
name = str(str(city_name.encode("utf-8")))
|
name = str(str(city_name.encode("utf-8")))
|
||||||
for building in self._idf.idfobjects[self._BUILDING]:
|
for building in self._idf.idfobjects[self._BUILDING]:
|
||||||
@ -453,6 +490,9 @@ class Idf:
|
|||||||
self._add_schedules(usage, 'Cooling thermostat', thermal_zone.thermal_control.cooling_set_point_schedules)
|
self._add_schedules(usage, 'Cooling thermostat', thermal_zone.thermal_control.cooling_set_point_schedules)
|
||||||
self._add_schedules(usage, 'Lighting', thermal_zone.lighting.schedules)
|
self._add_schedules(usage, 'Lighting', thermal_zone.lighting.schedules)
|
||||||
self._add_schedules(usage, 'Appliance', thermal_zone.appliances.schedules)
|
self._add_schedules(usage, 'Appliance', thermal_zone.appliances.schedules)
|
||||||
|
self._add_schedules(usage, 'DHW_prof', thermal_zone.domestic_hot_water.schedules)
|
||||||
|
self._add_servicetemp_schedules(thermal_zone)
|
||||||
|
self._add_schedules(usage, 'CW_temp', building.cold_water_temperature.hour)
|
||||||
|
|
||||||
self._add_people_activity_level_schedules(thermal_zone)
|
self._add_people_activity_level_schedules(thermal_zone)
|
||||||
|
|
||||||
@ -462,6 +502,7 @@ class Idf:
|
|||||||
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)
|
||||||
self._add_appliances(thermal_zone, building.name)
|
self._add_appliances(thermal_zone, building.name)
|
||||||
|
self._add_DHW(thermal_zone, building.name)
|
||||||
|
|
||||||
if self._export_type == "Surfaces":
|
if self._export_type == "Surfaces":
|
||||||
if building.name in self._target_buildings or building.name in self._adjacent_buildings:
|
if building.name in self._target_buildings or building.name in self._adjacent_buildings:
|
||||||
|
@ -148,7 +148,6 @@
|
|||||||
|
|
||||||
OutputControl:Table:Style, CommaAndHTML,JtoKWH;
|
OutputControl:Table:Style, CommaAndHTML,JtoKWH;
|
||||||
|
|
||||||
Output:Meter,Electricity:Facility,monthly;
|
|
||||||
Output:Meter,DISTRICTHEATING:Facility,monthly;
|
Output:Meter,DISTRICTHEATING:Facility,monthly;
|
||||||
Output:Meter,DISTRICTCOOLING:Facility,monthly;
|
Output:Meter,DISTRICTCOOLING:Facility,monthly;
|
||||||
Output:Meter,InteriorEquipment:Electricity,monthly;
|
Output:Meter,InteriorEquipment:Electricity,monthly;
|
||||||
|
@ -123,9 +123,9 @@ class InselMonthlyEnergyBalance(Insel):
|
|||||||
for ig in usage.internal_gains:
|
for ig in usage.internal_gains:
|
||||||
total_internal_gain += ig.average_internal_gain * (ig.convective_fraction + ig.radiative_fraction)
|
total_internal_gain += ig.average_internal_gain * (ig.convective_fraction + ig.radiative_fraction)
|
||||||
parameters.append(f'{total_internal_gain} % BP(12) #2 Internal gains of zone {i + 1}')
|
parameters.append(f'{total_internal_gain} % BP(12) #2 Internal gains of zone {i + 1}')
|
||||||
parameters.append(f'{usage.thermal_control.mean_heating_set_point+1} % BP(13) #3 Heating setpoint temperature '
|
parameters.append(f'{usage.thermal_control.mean_heating_set_point} % BP(13) #3 Heating setpoint temperature '
|
||||||
f'zone {i + 1} (degree Celsius)')
|
f'zone {i + 1} (degree Celsius)')
|
||||||
parameters.append(f'{usage.thermal_control.heating_set_back+1} % BP(14) #4 Heating setback temperature '
|
parameters.append(f'{usage.thermal_control.heating_set_back} % BP(14) #4 Heating setback temperature '
|
||||||
f'zone {i + 1} (degree Celsius)')
|
f'zone {i + 1} (degree Celsius)')
|
||||||
parameters.append(f'{usage.thermal_control.mean_cooling_set_point+4} % BP(15) #5 Cooling setpoint temperature '
|
parameters.append(f'{usage.thermal_control.mean_cooling_set_point+4} % BP(15) #5 Cooling setpoint temperature '
|
||||||
f'zone {i + 1} (degree Celsius)')
|
f'zone {i + 1} (degree Celsius)')
|
||||||
@ -153,8 +153,8 @@ class InselMonthlyEnergyBalance(Insel):
|
|||||||
for day_type in schedule.day_types:
|
for day_type in schedule.day_types:
|
||||||
infiltration += infiltration_day * cte.DAYS_A_YEAR[day_type] / 365
|
infiltration += infiltration_day * cte.DAYS_A_YEAR[day_type] / 365
|
||||||
ventilation += ventilation_day * cte.DAYS_A_YEAR[day_type] / 365
|
ventilation += ventilation_day * cte.DAYS_A_YEAR[day_type] / 365
|
||||||
|
#todo: eliminate hardcoded coefficient to ventilationinf
|
||||||
ventilation_infiltration = ventilation + infiltration
|
ventilation_infiltration = (ventilation + infiltration)*0.5
|
||||||
parameters.append(f'{ventilation_infiltration} % BP(18) #8 Minimum air change rate zone {i + 1} (ACH)')
|
parameters.append(f'{ventilation_infiltration} % BP(18) #8 Minimum air change rate zone {i + 1} (ACH)')
|
||||||
|
|
||||||
parameters.append(f'{len(thermal_zone.thermal_boundaries)} % Number of surfaces = BP(11+8z) \n'
|
parameters.append(f'{len(thermal_zone.thermal_boundaries)} % Number of surfaces = BP(11+8z) \n'
|
||||||
|
Loading…
Reference in New Issue
Block a user