feat: add all the simulation files

This commit is contained in:
Majid Rezaei 2024-10-21 07:56:48 -04:00
parent 9670f3a3fd
commit 8d614582b4
23 changed files with 8590 additions and 160 deletions

146
ALLIS.py Normal file
View File

@ -0,0 +1,146 @@
from scripts.district_heating_network.directory_manager import DirectoryManager
import subprocess
from building_modelling.ep_run_enrich import energy_plus_workflow
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
from hub.imports.results_factory import ResultFactory
from building_modelling.geojson_creator import process_geojson
import hub.helpers.constants as cte
from hub.exports.exports_factory import ExportsFactory
import matplotlib.pyplot as plt
import numpy as np
from scripts.district_heating_network.district_heating_network_creator import DistrictHeatingNetworkCreator
from scripts.district_heating_network.district_heating_factory import DistrictHeatingFactory
import json
# Manage File Path
base_path = "./"
dir_manager = DirectoryManager(base_path)
# Input files directory
input_files_path = dir_manager.create_directory('input_files')
geojson_file_path = input_files_path / 'MACH.geojson'
pipe_data_file = input_files_path / 'pipe_data.json'
# Output files directory
output_path = dir_manager.create_directory('out_files')
# Subdirectories for output files
energy_plus_output_path = dir_manager.create_directory('out_files/energy_plus_outputs')
simulation_results_path = dir_manager.create_directory('out_files/simulation_results')
sra_output_path = dir_manager.create_directory('out_files/sra_outputs')
cost_analysis_output_path = dir_manager.create_directory('out_files/cost_analysis')
# Create ciry and run energyplus workflow
city = GeometryFactory(file_type='geojson',
path=geojson_file_path,
height_field='maximum_roof_height',
year_of_construction_field='year_built',
function_field='building_type',
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
ConstructionFactory('nrcan', city).enrich()
UsageFactory('nrcan', city).enrich()
WeatherFactory('epw', city).enrich()
# energy_plus_workflow(city, energy_plus_output_path)
ResultFactory('energy_plus_multiple_buildings', city, energy_plus_output_path).enrich()
# District Heating Network Creator
central_plant_locations = [(-73.6641097164314, 45.433637169890005)] # Add at least one location
roads_file = "input_files/roads.json"
dhn_creator = DistrictHeatingNetworkCreator(geojson_file_path, roads_file, central_plant_locations)
network_graph = dhn_creator.run()
# Pipe and pump sizing
with open(pipe_data_file, 'r') as f:
pipe_data = json.load(f)
factory = DistrictHeatingFactory(
city=city,
graph=network_graph,
supply_temperature=80 + 273, # in Kelvin
return_temperature=60 + 273, # in Kelvin
simultaneity_factor=0.9
)
factory.enrich()
factory.sizing()
factory.calculate_diameters_and_costs(pipe_data)
pipe_groups, total_cost = factory.analyze_costs()
# Save the pipe groups with total costs to a CSV file
factory.save_pipe_groups_to_csv('pipe_groups.csv')
import json
import matplotlib.pyplot as plt
import networkx as nx
from shapely.geometry import shape, Polygon, MultiPolygon
from shapely.validation import explain_validity
# Load the GeoJSON file
with open("input_files/MACH.geojson", "r") as file:
geojson_data = json.load(file)
# Initialize a figure
fig, ax = plt.subplots(figsize=(15, 10))
# Set aspect to equal
ax.set_aspect('equal')
# Set figure and axes backgrounds to transparent
fig.patch.set_facecolor('none')
ax.set_facecolor('none')
# Iterate over each feature in the GeoJSON
for feature in geojson_data['features']:
geom = shape(feature['geometry'])
# Check if the geometry is valid
if not geom.is_valid:
print(f"Invalid geometry: {explain_validity(geom)}")
continue # Skip invalid geometries
# Plot polygons
if isinstance(geom, Polygon):
x, y = geom.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
elif isinstance(geom, MultiPolygon):
for poly in geom.geoms:
x, y = poly.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
else:
print(f"Unhandled geometry type: {type(geom)}")
continue
# Prepare and plot the network graph
G = network_graph
# Get positions from node attributes
pos = nx.get_node_attributes(G, 'pos')
# Draw nodes, using different colors based on node type
node_types = nx.get_node_attributes(G, 'type')
colors = {'building': 'blue', 'generation': 'green', 'junction': 'red'}
node_colors = [colors.get(node_types.get(node, 'junction'), 'black') for node in G.nodes()]
nx.draw_networkx_nodes(G, pos, ax=ax, node_size=50, node_color=node_colors)
nx.draw_networkx_edges(G, pos, ax=ax, edge_color="red", width=1.2)
# Remove axes, ticks, and background
ax.axis("off")
# Adjust plot limits to the data
x_values = [coord[0] for coord in pos.values()]
y_values = [coord[1] for coord in pos.values()]
ax.set_xlim(min(x_values) - 0.001, max(x_values) + 0.001)
ax.set_ylim(min(y_values) - 0.001, max(y_values) + 0.001)
# Save the plot with transparency
plt.savefig("network_plot.png", bbox_inches='tight', pad_inches=0, transparent=True)
plt.show()

146
MACH.py Normal file
View File

@ -0,0 +1,146 @@
from scripts.district_heating_network.directory_manager import DirectoryManager
import subprocess
from building_modelling.ep_run_enrich import energy_plus_workflow
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
from hub.imports.results_factory import ResultFactory
from building_modelling.geojson_creator import process_geojson
import hub.helpers.constants as cte
from hub.exports.exports_factory import ExportsFactory
import matplotlib.pyplot as plt
import numpy as np
from scripts.district_heating_network.district_heating_network_creator import DistrictHeatingNetworkCreator
from scripts.district_heating_network.district_heating_factory import DistrictHeatingFactory
import json
# Manage File Path
base_path = "./"
dir_manager = DirectoryManager(base_path)
# Input files directory
input_files_path = dir_manager.create_directory('input_files')
geojson_file_path = input_files_path / 'MAXX.geojson'
pipe_data_file = input_files_path / 'pipe_data.json'
# Output files directory
output_path = dir_manager.create_directory('out_files')
# Subdirectories for output files
energy_plus_output_path = dir_manager.create_directory('out_files/energy_plus_outputs')
simulation_results_path = dir_manager.create_directory('out_files/simulation_results')
sra_output_path = dir_manager.create_directory('out_files/sra_outputs')
cost_analysis_output_path = dir_manager.create_directory('out_files/cost_analysis')
# Create ciry and run energyplus workflow
city = GeometryFactory(file_type='geojson',
path=geojson_file_path,
height_field='maximum_roof_height',
year_of_construction_field='year_built',
function_field='building_type',
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
ConstructionFactory('nrcan', city).enrich()
UsageFactory('nrcan', city).enrich()
WeatherFactory('epw', city).enrich()
# energy_plus_workflow(city, energy_plus_output_path)
ResultFactory('energy_plus_multiple_buildings', city, energy_plus_output_path).enrich()
# District Heating Network Creator
central_plant_locations = [(-73.656602760176, 45.43968832385218) ] # Add at least one location
roads_file = "input_files/roads.json"
dhn_creator = DistrictHeatingNetworkCreator(geojson_file_path, roads_file, central_plant_locations)
network_graph = dhn_creator.run()
# Pipe and pump sizing
with open(pipe_data_file, 'r') as f:
pipe_data = json.load(f)
factory = DistrictHeatingFactory(
city=city,
graph=network_graph,
supply_temperature=80 + 273, # in Kelvin
return_temperature=60 + 273, # in Kelvin
simultaneity_factor=0.9
)
factory.enrich()
factory.sizing()
factory.calculate_diameters_and_costs(pipe_data)
pipe_groups, total_cost = factory.analyze_costs()
# Save the pipe groups with total costs to a CSV file
factory.save_pipe_groups_to_csv('pipe_groups.csv')
import json
import matplotlib.pyplot as plt
import networkx as nx
from shapely.geometry import shape, Polygon, MultiPolygon
from shapely.validation import explain_validity
# Load the GeoJSON file
with open("input_files/MAXX.geojson", "r") as file:
geojson_data = json.load(file)
# Initialize a figure
fig, ax = plt.subplots(figsize=(15, 10))
# Set aspect to equal
ax.set_aspect('equal')
# Set figure and axes backgrounds to transparent
fig.patch.set_facecolor('none')
ax.set_facecolor('none')
# Iterate over each feature in the GeoJSON
for feature in geojson_data['features']:
geom = shape(feature['geometry'])
# Check if the geometry is valid
if not geom.is_valid:
print(f"Invalid geometry: {explain_validity(geom)}")
continue # Skip invalid geometries
# Plot polygons
if isinstance(geom, Polygon):
x, y = geom.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
elif isinstance(geom, MultiPolygon):
for poly in geom.geoms:
x, y = poly.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
else:
print(f"Unhandled geometry type: {type(geom)}")
continue
# Prepare and plot the network graph
G = network_graph
# Get positions from node attributes
pos = nx.get_node_attributes(G, 'pos')
# Draw nodes, using different colors based on node type
node_types = nx.get_node_attributes(G, 'type')
colors = {'building': 'blue', 'generation': 'green', 'junction': 'red'}
node_colors = [colors.get(node_types.get(node, 'junction'), 'black') for node in G.nodes()]
nx.draw_networkx_nodes(G, pos, ax=ax, node_size=50, node_color=node_colors)
nx.draw_networkx_edges(G, pos, ax=ax, edge_color="red", width=1.2)
# Remove axes, ticks, and background
ax.axis("off")
# Adjust plot limits to the data
x_values = [coord[0] for coord in pos.values()]
y_values = [coord[1] for coord in pos.values()]
ax.set_xlim(min(x_values) - 0.001, max(x_values) + 0.001)
ax.set_ylim(min(y_values) - 0.001, max(y_values) + 0.001)
# Save the plot with transparency
plt.savefig("network_plot.png", bbox_inches='tight', pad_inches=0, transparent=True)
plt.show()

View File

@ -1,26 +1,15 @@
from scripts.district_heating_network.directory_manager import DirectoryManager
import subprocess
from scripts.ep_run_enrich import energy_plus_workflow
from building_modelling.ep_run_enrich import energy_plus_workflow
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
from hub.imports.results_factory import ResultFactory
from scripts.energy_system_retrofit_report import EnergySystemRetrofitReport
from scripts.geojson_creator import process_geojson
from scripts import random_assignation
from hub.imports.energy_systems_factory import EnergySystemsFactory
from scripts.energy_system_sizing import SystemSizing
from scripts.solar_angles import CitySolarAngles
from scripts.pv_sizing_and_simulation import PVSizingSimulation
from scripts.energy_system_retrofit_results import consumption_data, cost_data
from scripts.energy_system_sizing_and_simulation_factory import EnergySystemsSimulationFactory
from scripts.costs.cost import Cost
from scripts.costs.constants import SKIN_RETROFIT_AND_SYSTEM_RETROFIT_AND_PV, SYSTEM_RETROFIT_AND_PV, CURRENT_STATUS
from building_modelling.geojson_creator import process_geojson
import hub.helpers.constants as cte
from hub.exports.exports_factory import ExportsFactory
from scripts.pv_feasibility import pv_feasibility
import matplotlib.pyplot as plt
import numpy as np
from scripts.district_heating_network.district_heating_network_creator import DistrictHeatingNetworkCreator
@ -34,7 +23,7 @@ dir_manager = DirectoryManager(base_path)
# Input files directory
input_files_path = dir_manager.create_directory('input_files')
geojson_file_path = input_files_path / 'output_buildings.geojson'
geojson_file_path = input_files_path / 'Lachine_Geojson_Mixed_Use.geojson'
pipe_data_file = input_files_path / 'pipe_data.json'
# Output files directory
@ -58,28 +47,29 @@ process_geojson(x=location[1], y=location[0], diff=0.001)
# Create ciry and run energyplus workflow
city = GeometryFactory(file_type='geojson',
path=geojson_file_path,
height_field='height',
year_of_construction_field='year_of_construction',
function_field='function',
height_field='maximum_roof_height',
year_of_construction_field='year_built',
function_field='building_type',
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
ConstructionFactory('nrcan', city).enrich()
UsageFactory('nrcan', city).enrich()
WeatherFactory('epw', city).enrich()
# SRA
ExportsFactory('sra', city, output_path).export()
sra_path = (output_path / f'{city.name}_sra.xml').resolve()
subprocess.run(['sra', str(sra_path)])
ResultFactory('sra', city, output_path).enrich()
#
# # SRA
# ExportsFactory('sra', city, output_path).export()
# sra_path = (output_path / f'{city.name}_sra.xml').resolve()
# subprocess.run(['sra', str(sra_path)])
# ResultFactory('sra', city, output_path).enrich()
# EP Workflow
energy_plus_workflow(city, energy_plus_output_path)
# energy_plus_workflow(city, energy_plus_output_path)
ResultFactory('energy_plus_multiple_buildings', city, energy_plus_output_path).enrich()
#%% --------------------------------------------------------------------------------------------------------------------
# District Heating Network Creator
central_plant_locations = [(-73.57812571080625, 45.49499447346277)] # Add at least one location
central_plant_locations = [(-73.6641097164314, 45.433637169890005)] # Add at least one location
roads_file = "./input_files/roads.json"
roads_file = "./input_files/majid.geojson"
dhn_creator = DistrictHeatingNetworkCreator(geojson_file_path, roads_file, central_plant_locations)

146
dom.py Normal file
View File

@ -0,0 +1,146 @@
from scripts.district_heating_network.directory_manager import DirectoryManager
import subprocess
from building_modelling.ep_run_enrich import energy_plus_workflow
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
from hub.imports.results_factory import ResultFactory
from building_modelling.geojson_creator import process_geojson
import hub.helpers.constants as cte
from hub.exports.exports_factory import ExportsFactory
import matplotlib.pyplot as plt
import numpy as np
from scripts.district_heating_network.district_heating_network_creator import DistrictHeatingNetworkCreator
from scripts.district_heating_network.district_heating_factory import DistrictHeatingFactory
import json
# Manage File Path
base_path = "./"
dir_manager = DirectoryManager(base_path)
# Input files directory
input_files_path = dir_manager.create_directory('input_files')
geojson_file_path = input_files_path / 'Dombridge.geojson'
pipe_data_file = input_files_path / 'pipe_data.json'
# Output files directory
output_path = dir_manager.create_directory('out_files')
# Subdirectories for output files
energy_plus_output_path = dir_manager.create_directory('out_files/energy_plus_outputs')
simulation_results_path = dir_manager.create_directory('out_files/simulation_results')
sra_output_path = dir_manager.create_directory('out_files/sra_outputs')
cost_analysis_output_path = dir_manager.create_directory('out_files/cost_analysis')
# Create ciry and run energyplus workflow
city = GeometryFactory(file_type='geojson',
path=geojson_file_path,
height_field='maximum_roof_height',
year_of_construction_field='year_built',
function_field='building_type',
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
ConstructionFactory('nrcan', city).enrich()
UsageFactory('nrcan', city).enrich()
WeatherFactory('epw', city).enrich()
# energy_plus_workflow(city, energy_plus_output_path)
ResultFactory('energy_plus_multiple_buildings', city, energy_plus_output_path).enrich()
# District Heating Network Creator
central_plant_locations = [(-73.66314280001727, 45.43813943275185)] # Add at least one location
roads_file = "input_files/roads.json"
dhn_creator = DistrictHeatingNetworkCreator(geojson_file_path, roads_file, central_plant_locations)
network_graph = dhn_creator.run()
# Pipe and pump sizing
with open(pipe_data_file, 'r') as f:
pipe_data = json.load(f)
factory = DistrictHeatingFactory(
city=city,
graph=network_graph,
supply_temperature=80 + 273, # in Kelvin
return_temperature=60 + 273, # in Kelvin
simultaneity_factor=0.9
)
factory.enrich()
factory.sizing()
factory.calculate_diameters_and_costs(pipe_data)
pipe_groups, total_cost = factory.analyze_costs()
# Save the pipe groups with total costs to a CSV file
factory.save_pipe_groups_to_csv('pipe_groups.csv')
import json
import matplotlib.pyplot as plt
import networkx as nx
from shapely.geometry import shape, Polygon, MultiPolygon
from shapely.validation import explain_validity
# Load the GeoJSON file
with open("input_files/Dombridge.geojson", "r") as file:
geojson_data = json.load(file)
# Initialize a figure
fig, ax = plt.subplots(figsize=(15, 10))
# Set aspect to equal
ax.set_aspect('equal')
# Set figure and axes backgrounds to transparent
fig.patch.set_facecolor('none')
ax.set_facecolor('none')
# Iterate over each feature in the GeoJSON
for feature in geojson_data['features']:
geom = shape(feature['geometry'])
# Check if the geometry is valid
if not geom.is_valid:
print(f"Invalid geometry: {explain_validity(geom)}")
continue # Skip invalid geometries
# Plot polygons
if isinstance(geom, Polygon):
x, y = geom.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
elif isinstance(geom, MultiPolygon):
for poly in geom.geoms:
x, y = poly.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
else:
print(f"Unhandled geometry type: {type(geom)}")
continue
# Prepare and plot the network graph
G = network_graph
# Get positions from node attributes
pos = nx.get_node_attributes(G, 'pos')
# Draw nodes, using different colors based on node type
node_types = nx.get_node_attributes(G, 'type')
colors = {'building': 'blue', 'generation': 'green', 'junction': 'red'}
node_colors = [colors.get(node_types.get(node, 'junction'), 'black') for node in G.nodes()]
nx.draw_networkx_nodes(G, pos, ax=ax, node_size=50, node_color=node_colors)
nx.draw_networkx_edges(G, pos, ax=ax, edge_color="red", width=1.2)
# Remove axes, ticks, and background
ax.axis("off")
# Adjust plot limits to the data
x_values = [coord[0] for coord in pos.values()]
y_values = [coord[1] for coord in pos.values()]
ax.set_xlim(min(x_values) - 0.001, max(x_values) + 0.001)
ax.set_ylim(min(y_values) - 0.001, max(y_values) + 0.001)
# Save the plot with transparency
plt.savefig("network_plot.png", bbox_inches='tight', pad_inches=0, transparent=True)
plt.show()

View File

@ -1,87 +1,98 @@
from pathlib import Path
from scripts.district_heating_network.directory_manager import DirectoryManager
import subprocess
from building_modelling.ep_run_enrich import energy_plus_workflow
from energy_system_modelling_package.energy_system_modelling_factories.montreal_energy_system_archetype_modelling_factory import \
MontrealEnergySystemArchetypesSimulationFactory
from energy_system_modelling_package.energy_system_modelling_factories.pv_assessment.pv_feasibility import \
pv_feasibility
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
from hub.imports.results_factory import ResultFactory
from energy_system_modelling_package.energy_system_retrofit.energy_system_retrofit_report import EnergySystemRetrofitReport
from building_modelling.geojson_creator import process_geojson
from energy_system_modelling_package import random_assignation
from hub.imports.energy_systems_factory import EnergySystemsFactory
from energy_system_modelling_package.energy_system_modelling_factories.energy_system_sizing_factory import EnergySystemsSizingFactory
from energy_system_modelling_package.energy_system_retrofit.energy_system_retrofit_results import consumption_data, cost_data
from costing_package.cost import Cost
from costing_package.constants import SYSTEM_RETROFIT_AND_PV, CURRENT_STATUS
import hub.helpers.constants as cte
from hub.exports.exports_factory import ExportsFactory
import matplotlib.pyplot as plt
import numpy as np
from scripts.district_heating_network.district_heating_network_creator import DistrictHeatingNetworkCreator
from scripts.district_heating_network.district_heating_factory import DistrictHeatingFactory
import json
# Specify the GeoJSON file path
input_files_path = (Path(__file__).parent / 'input_files')
input_files_path.mkdir(parents=True, exist_ok=True)
geojson_file = process_geojson(x=-73.5681295982132, y=45.49218262677643, diff=0.0001)
geojson_file_path = input_files_path / 'output_buildings.geojson'
output_path = (Path(__file__).parent / 'out_files').resolve()
output_path.mkdir(parents=True, exist_ok=True)
energy_plus_output_path = output_path / 'energy_plus_outputs'
energy_plus_output_path.mkdir(parents=True, exist_ok=True)
simulation_results_path = (Path(__file__).parent / 'out_files' / 'simulation_results').resolve()
simulation_results_path.mkdir(parents=True, exist_ok=True)
sra_output_path = output_path / 'sra_outputs'
sra_output_path.mkdir(parents=True, exist_ok=True)
cost_analysis_output_path = output_path / 'cost_analysis'
cost_analysis_output_path.mkdir(parents=True, exist_ok=True)
# Manage File Path
base_path = "./"
dir_manager = DirectoryManager(base_path)
# Input files directory
input_files_path = dir_manager.create_directory('input_files')
geojson_file_path = input_files_path / 'Lachine_Geojson_Mixed_Use.geojson'
pipe_data_file = input_files_path / 'pipe_data.json'
# Output files directory
output_path = dir_manager.create_directory('out_files')
# Subdirectories for output files
energy_plus_output_path = dir_manager.create_directory('out_files/energy_plus_outputs')
simulation_results_path = dir_manager.create_directory('out_files/simulation_results')
sra_output_path = dir_manager.create_directory('out_files/sra_outputs')
cost_analysis_output_path = dir_manager.create_directory('out_files/cost_analysis')
# Area Under Study
location = [45.4934614681437, -73.57982834742518]
# Create geojson of buildings
process_geojson(x=location[1], y=location[0], diff=0.001)
# Create ciry and run energyplus workflow
city = GeometryFactory(file_type='geojson',
path=geojson_file_path,
height_field='height',
year_of_construction_field='year_of_construction',
function_field='function',
height_field='maximum_roof_height',
year_of_construction_field='year_built',
function_field='building_type',
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
ConstructionFactory('nrcan', city).enrich()
UsageFactory('nrcan', city).enrich()
WeatherFactory('epw', city).enrich()
ExportsFactory('sra', city, sra_output_path).export()
sra_path = (sra_output_path / f'{city.name}_sra.xml').resolve()
subprocess.run(['sra', str(sra_path)])
ResultFactory('sra', city, sra_output_path).enrich()
pv_feasibility(-73.5681295982132, 45.49218262677643, 0.0001, selected_buildings=city.buildings)
#
# # SRA
# ExportsFactory('sra', city, output_path).export()
# sra_path = (output_path / f'{city.name}_sra.xml').resolve()
# subprocess.run(['sra', str(sra_path)])
# ResultFactory('sra', city, output_path).enrich()
# EP Workflow
energy_plus_workflow(city, energy_plus_output_path)
random_assignation.call_random(city.buildings, random_assignation.residential_systems_percentage)
EnergySystemsFactory('montreal_custom', city).enrich()
EnergySystemsSizingFactory('peak_load_sizing', city).enrich()
current_status_energy_consumption = consumption_data(city)
current_status_life_cycle_cost = {}
for building in city.buildings:
cost_retrofit_scenario = CURRENT_STATUS
lcc_dataframe = Cost(building=building,
retrofit_scenario=cost_retrofit_scenario,
fuel_tariffs=['Electricity-D', 'Gas-Energir']).life_cycle
lcc_dataframe.to_csv(cost_analysis_output_path / f'{building.name}_current_status_lcc.csv')
current_status_life_cycle_cost[f'{building.name}'] = cost_data(building, lcc_dataframe, cost_retrofit_scenario)
random_assignation.call_random(city.buildings, random_assignation.residential_new_systems_percentage)
EnergySystemsFactory('montreal_future', city).enrich()
EnergySystemsSizingFactory('pv_sizing', city).enrich()
EnergySystemsSizingFactory('peak_load_sizing', city).enrich()
for building in city.buildings:
MontrealEnergySystemArchetypesSimulationFactory(f'archetype_cluster_{building.energy_systems_archetype_cluster_id}',
building,
simulation_results_path).enrich()
retrofitted_energy_consumption = consumption_data(city)
retrofitted_life_cycle_cost = {}
for building in city.buildings:
cost_retrofit_scenario = SYSTEM_RETROFIT_AND_PV
lcc_dataframe = Cost(building=building,
retrofit_scenario=cost_retrofit_scenario,
fuel_tariffs=['Electricity-D', 'Gas-Energir']).life_cycle
lcc_dataframe.to_csv(cost_analysis_output_path / f'{building.name}_retrofitted_lcc.csv')
retrofitted_life_cycle_cost[f'{building.name}'] = cost_data(building, lcc_dataframe, cost_retrofit_scenario)
EnergySystemRetrofitReport(city, output_path, 'PV Implementation and System Retrofit',
current_status_energy_consumption, retrofitted_energy_consumption,
current_status_life_cycle_cost, retrofitted_life_cycle_cost).create_report()
# District Heating Network Creator
central_plant_locations = [(-73.6641097164314, 45.433637169890005)] # Add at least one location
roads_file = "./input_files/majid.geojson"
dhn_creator = DistrictHeatingNetworkCreator(geojson_file_path, roads_file, central_plant_locations)
network_graph = dhn_creator.run()
# Pipe and pump sizing
with open(pipe_data_file, 'r') as f:
pipe_data = json.load(f)
factory = DistrictHeatingFactory(
city=city,
graph=network_graph,
supply_temperature=80 + 273, # in Kelvin
return_temperature=60 + 273, # in Kelvin
simultaneity_factor=0.9
)
factory.enrich()
factory.sizing()
factory.calculate_diameters_and_costs(pipe_data)
pipe_groups, total_cost = factory.analyze_costs()
# Save the pipe groups with total costs to a CSV file
factory.save_pipe_groups_to_csv('pipe_groups.csv')

File diff suppressed because it is too large Load Diff

1983
input_files/MACH.geojson Normal file

File diff suppressed because it is too large Load Diff

621
input_files/MAXX.geojson Normal file
View File

@ -0,0 +1,621 @@
{
"type": "FeatureCollection",
"features": [
{
"geometry": {
"coordinates": [
[
[
-73.66027183456654,
45.43682640515838
],
[
-73.65980092076161,
45.436935379465496
],
[
-73.65958858851806,
45.43699072995751
],
[
-73.6596646362897,
45.437135324833925
],
[
-73.65980280828376,
45.437135324833925
],
[
-73.65980549164702,
45.43741954031219
],
[
-73.66026656265554,
45.43741954031219
],
[
-73.66027183456654,
45.43682640515838
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_366",
"year_built": 2024,
"footprint_area": 2443.0417281824775,
"id": "BuildingB7",
"type": "Building",
"floor_area": 9772.16691272991,
"usages": [
{
"usage": "6111",
"percentage": 25
},
{
"usage": "4413",
"percentage": 75
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.65950945269662,
45.43888004389084
],
[
-73.6591598283532,
45.43896421741208
],
[
-73.6593463406809,
45.43933186962929
],
[
-73.65950186839818,
45.4393030538919
],
[
-73.65950945269662,
45.43888004389084
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_374",
"year_built": 2024,
"footprint_area": 907.9995030083592,
"id": "BuildingB2",
"type": "Building",
"floor_area": 3631.9980120334367,
"usages": [
{
"usage": "6111",
"percentage": 22
},
{
"usage": "4413",
"percentage": 78
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.6586465565685,
45.43794502009898
],
[
-73.65877820605229,
45.43820592631496
],
[
-73.65907725301875,
45.43820592631496
],
[
-73.65907725301875,
45.438178967489094
],
[
-73.65920582090638,
45.438178967489094
],
[
-73.65920582090638,
45.43820592631496
],
[
-73.65951490453769,
45.43820592631496
],
[
-73.65951864171541,
45.43794501706367
],
[
-73.65920581873392,
45.4379450182182
],
[
-73.6592058189376,
45.437971976604835
],
[
-73.65907725301875,
45.437971977079336
],
[
-73.65907725301875,
45.43794502035566
],
[
-73.6586465565685,
45.43794502009898
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": 4413,
"name": "Building_377",
"year_built": 2019,
"footprint_area": 1756.5275000615802,
"id": "BuildingB8",
"type": "Building",
"floor_area": 7026.110000246321,
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.65932645417877,
45.4370671419759
],
[
-73.65890157746759,
45.43729789907689
],
[
-73.65894120771091,
45.437333276458844
],
[
-73.65883997788825,
45.43738867571641
],
[
-73.65880034764496,
45.43735329833445
],
[
-73.65844561006861,
45.43754677933583
],
[
-73.65859847737923,
45.43784973556784
],
[
-73.65907725082093,
45.4376004860529
],
[
-73.65905346577388,
45.43757925346323
],
[
-73.65915660532876,
45.437525558997784
],
[
-73.65918039037581,
45.43754679158746
],
[
-73.65949381251329,
45.43738535192706
],
[
-73.65932645417877,
45.4370671419759
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_367",
"year_built": 2024,
"footprint_area": 2959.1453306355543,
"id": "BuildingB9",
"type": "Building",
"floor_area": 11836.581322542217,
"usages": [
{
"usage": "6111",
"percentage": 25
},
{
"usage": "4413",
"percentage": 75
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.65978535158648,
45.43925053092525
],
[
-73.66024298387394,
45.43916574210401
],
[
-73.66024690026592,
45.43887926502197
],
[
-73.65978976299151,
45.43887926502197
],
[
-73.65978535158648,
45.43925053092525
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_375",
"year_built": 2024,
"footprint_area": 1300.4263094531598,
"id": "BuildingB1",
"type": "Building",
"floor_area": 5201.705237812639,
"usages": [
{
"usage": "6111",
"percentage": 22
},
{
"usage": "4413",
"percentage": 78
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.65885600897847,
45.438360118085996
],
[
-73.65908668813303,
45.43881728376249
],
[
-73.65950948612074,
45.4387155014277
],
[
-73.65951434452148,
45.438360118085996
],
[
-73.65885600897847,
45.438360118085996
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_368",
"year_built": 2024,
"footprint_area": 1950.623916595192,
"id": "BuildingB5",
"type": "Building",
"floor_area": 7802.495666380768,
"usages": [
{
"usage": "4413",
"percentage": 71
},
{
"usage": "6591",
"percentage": 29
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.65915368916939,
45.43936756355871
],
[
-73.65897287754876,
45.43900922659924
],
[
-73.65832172130257,
45.43916599518572
],
[
-73.65835188947426,
45.43923721973516
],
[
-73.65822761369208,
45.43926024520204
],
[
-73.65820255408917,
45.43919468519017
],
[
-73.65774333549116,
45.439305243986034
],
[
-73.6578898826934,
45.439601718062896
],
[
-73.65832644225709,
45.43952083353656
],
[
-73.65830997082959,
45.43947740214748
],
[
-73.65843424661176,
45.43945437668061
],
[
-73.65845071803926,
45.43949780806969
],
[
-73.65915368916939,
45.43936756355871
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_376",
"year_built": 2024,
"footprint_area": 3780.178467150601,
"id": "BuildingB3",
"type": "Building",
"floor_area": 15120.713868602405,
"usages": [
{
"usage": "6111",
"percentage": 22
},
{
"usage": "4413",
"percentage": 78
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66025445947743,
45.438360118085996
],
[
-73.65979593152835,
45.438360118085996
],
[
-73.65979170884093,
45.4387155014277
],
[
-73.66024960107669,
45.4387155014277
],
[
-73.66025445947743,
45.438360118085996
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_369",
"year_built": 2024,
"footprint_area": 1409.4494032830407,
"id": "BuildingB4",
"type": "Building",
"floor_area": 5637.797613132163,
"usages": [
{
"usage": "4413",
"percentage": 71
},
{
"usage": "6591",
"percentage": 29
}
],
"area": "BAIN MAXX"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66026447427403,
45.437593757702075
],
[
-73.65980503747107,
45.437593757702075
],
[
-73.65980191509843,
45.437840927821476
],
[
-73.6598661965366,
45.43784132452748
],
[
-73.65986488161884,
45.43794541472223
],
[
-73.65980060018067,
45.43794501801622
],
[
-73.65979730426068,
45.43820592631496
],
[
-73.6602561053943,
45.43820592631496
],
[
-73.6602596335108,
45.4379478508912
],
[
-73.6601953520557,
45.437947454185085
],
[
-73.66019677505048,
45.43784336465734
],
[
-73.6602611322575,
45.43784376183094
],
[
-73.66026447427403,
45.437593757702075
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_370",
"year_built": 2024,
"footprint_area": 2316.9198841373,
"id": "BuildingB6",
"type": "Building",
"floor_area": 9267.6795365492,
"usages": [
{
"usage": "4413",
"percentage": 71
},
{
"usage": "6591",
"percentage": 29
}
],
"area": "BAIN MAXX"
}
}
]
}

963
input_files/Varin.geojson Normal file
View File

@ -0,0 +1,963 @@
{
"type": "FeatureCollection",
"features": [
{
"geometry": {
"coordinates": [
[
[
-73.6695976944962,
45.43335516296276
],
[
-73.66960024279547,
45.432530734047525
],
[
-73.66942024880322,
45.4325302583109
],
[
-73.66941770326802,
45.433353792992946
],
[
-73.6695976944962,
45.43335516296276
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": 1000,
"name": "Building_432",
"year_built": 2024,
"footprint_area": 1283.7100725430791,
"id": "BuildingV8",
"type": "Building",
"floor_area": 10269.680580344633,
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66648692309116,
45.43299315240255
],
[
-73.66632685307951,
45.432875724577684
],
[
-73.6662869496342,
45.432885533312565
],
[
-73.6662314899197,
45.432844847905145
],
[
-73.66627139336501,
45.43283503917027
],
[
-73.66605577451121,
45.43267686055366
],
[
-73.66586395238267,
45.43274007194359
],
[
-73.66604809279451,
45.433100812915356
],
[
-73.66648692309116,
45.43299315240255
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": 1000,
"name": "Building_437",
"year_built": 2019,
"footprint_area": 1132.643133031641,
"id": "BuildingC71C72",
"type": "Building",
"floor_area": 9061.145064253142,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66629596106894,
45.43393581468737
],
[
-73.66710397267735,
45.43340975213673
],
[
-73.66692397641738,
45.43327468829026
],
[
-73.66611659102344,
45.43380083110689
],
[
-73.66629137947669,
45.4339323350389
],
[
-73.66629596106894,
45.43393581468737
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": 1000,
"name": "Building_438",
"year_built": 2019,
"footprint_area": 1762.1328271207167,
"id": "BuildingC42",
"type": "Building",
"floor_area": 14097.062616965733,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66630016267872,
45.433181827906395
],
[
-73.66659194009395,
45.433395876664555
],
[
-73.66666616625498,
45.43334644669076
],
[
-73.66673557085116,
45.43339746453596
],
[
-73.66686723112655,
45.43331166688867
],
[
-73.66679650050222,
45.433259652246115
],
[
-73.66682464757157,
45.433240908061016
],
[
-73.66663285326406,
45.433100207200695
],
[
-73.66630016267872,
45.433181827906395
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": 1000,
"name": "Building_439",
"year_built": 2019,
"footprint_area": 792.3225780949724,
"id": "BuildingC41",
"type": "Building",
"floor_area": 6338.580624759779,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66777119983375,
45.43291379849753
],
[
-73.66794163235893,
45.43277880685048
],
[
-73.66763418630634,
45.432534285118734
],
[
-73.66744119858484,
45.432654156485185
],
[
-73.66777119983375,
45.43291379849753
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": 1000,
"name": "Building_440",
"year_built": 2019,
"footprint_area": 748.011685138903,
"id": "BuildingC2",
"type": "Building",
"floor_area": 5984.093481111224,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66819794401755,
45.43186867295574
],
[
-73.66804117421117,
45.43196526756795
],
[
-73.66800714623197,
45.431938283882864
],
[
-73.66756485935377,
45.43220526910353
],
[
-73.6677330994405,
45.43234142634308
],
[
-73.66775286505397,
45.43232919625106
],
[
-73.66782879665047,
45.432390260560695
],
[
-73.66780944495402,
45.432402201569644
],
[
-73.66811035706213,
45.43263953554871
],
[
-73.66826963062728,
45.432467024254805
],
[
-73.66802200920615,
45.432271479585275
],
[
-73.66800234780891,
45.43228284176986
],
[
-73.6679250253185,
45.43222250053311
],
[
-73.66817288428344,
45.43206987204648
],
[
-73.6681473062388,
45.43204957976885
],
[
-73.66825137202584,
45.43198558294379
],
[
-73.66819794401755,
45.43186867295574
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 48,
"number_of_stories_above_ground": 12,
"number_of_stories": 12,
"floor_height": 4,
"building_type": 1000,
"name": "Building_441",
"year_built": 2019,
"footprint_area": 1939.1643211467454,
"id": "BuildingV21V22",
"type": "Building",
"floor_area": 23269.971853760944,
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66898528166195,
45.432805443096115
],
[
-73.66916472638917,
45.432804646258106
],
[
-73.66916349367183,
45.432327695076836
],
[
-73.66898349941692,
45.4323281078871
],
[
-73.66898528166195,
45.432805443096115
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 24,
"number_of_stories_above_ground": 6,
"number_of_stories": 6,
"floor_height": 4,
"building_type": 1000,
"name": "Building_442",
"year_built": 2019,
"footprint_area": 742.2262415656805,
"id": "BuildingV5",
"type": "Building",
"floor_area": 4453.357449394083,
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66559134943027,
45.4333842960544
],
[
-73.66571975526693,
45.433486126417385
],
[
-73.6661604725183,
45.43337800298111
],
[
-73.66610085913331,
45.433259295411155
],
[
-73.66559134943027,
45.4333842960544
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 24,
"number_of_stories_above_ground": 6,
"number_of_stories": 6,
"floor_height": 4,
"building_type": 1000,
"name": "Building_443",
"year_built": 2019,
"footprint_area": 548.3050135533558,
"id": "BuildingC6",
"type": "Building",
"floor_area": 3289.830081320135,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.668561692655,
45.43272452290231
],
[
-73.66881597030792,
45.432324936312554
],
[
-73.6686515057645,
45.43227380894239
],
[
-73.66843060658469,
45.432620946767024
],
[
-73.668561692655,
45.43272452290231
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 24,
"number_of_stories_above_ground": 6,
"number_of_stories": 6,
"floor_height": 4,
"building_type": 1000,
"name": "Building_444",
"year_built": 2019,
"footprint_area": 636.6193997243245,
"id": "BuildingV6",
"type": "Building",
"floor_area": 3819.716398345947,
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.6684107088873,
45.43260529773849
],
[
-73.66825696634365,
45.43275505829395
],
[
-73.66855993403234,
45.43299429839817
],
[
-73.66875110847464,
45.43287409614764
],
[
-73.6684107088873,
45.43260529773849
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 24,
"number_of_stories_above_ground": 6,
"number_of_stories": 6,
"floor_height": 4,
"building_type": 1000,
"name": "Building_445",
"year_built": 2019,
"footprint_area": 755.0037339057599,
"id": "BuildingV7",
"type": "Building",
"floor_area": 4530.022403434559,
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66523035916975,
45.43344428835361
],
[
-73.66558718585024,
45.433725662980414
],
[
-73.66560646249896,
45.43371372054428
],
[
-73.6656917418297,
45.43378096950345
],
[
-73.66567246673941,
45.43379291097411
],
[
-73.6660489787878,
45.43408980779488
],
[
-73.66629137947669,
45.4339323350389
],
[
-73.66611658917947,
45.43380082971957
],
[
-73.66556383389526,
45.43336247526904
],
[
-73.66523035916975,
45.43344428835361
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": 1000,
"name": "Building_446",
"year_built": 2019,
"footprint_area": 2278.027963784494,
"id": "BuildingC52",
"type": "Building",
"floor_area": 18224.223710275997,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66826976340244,
45.43246688044427
],
[
-73.6684431234713,
45.432207191678195
],
[
-73.66827958361108,
45.43215461639845
],
[
-73.66814405056857,
45.432367606017834
],
[
-73.66826976340244,
45.43246688044427
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 16,
"number_of_stories_above_ground": 4,
"number_of_stories": 4,
"floor_height": 4,
"building_type": 1000,
"name": "Building_447",
"year_built": 2019,
"footprint_area": 397.34580822650605,
"id": "BuildingV3",
"type": "Building",
"floor_area": 1589.3832329060242,
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66478481369315,
45.4331999405812
],
[
-73.66486641573151,
45.4333624124384
],
[
-73.66493012111978,
45.43334678530579
],
[
-73.66495552903392,
45.43339738198849
],
[
-73.66545538522467,
45.43327479625445
],
[
-73.66542923451642,
45.43322270281657
],
[
-73.66602930406131,
45.43307548268369
],
[
-73.66594975277539,
45.43291410222965
],
[
-73.66478481369315,
45.4331999405812
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 4,
"number_of_stories_above_ground": 1,
"number_of_stories": 1,
"floor_height": 4,
"building_type": 1000,
"name": "Building_448",
"year_built": 2019,
"footprint_area": 2076.7223687399237,
"id": "Building104",
"type": "Building",
"floor_area": 2076.7223687399237,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66687523305983,
45.43300569788887
],
[
-73.66704845294669,
45.43312925943825
],
[
-73.66724401867715,
45.43327505802548
],
[
-73.66769630737754,
45.432975018696354
],
[
-73.66747581970738,
45.432811552149246
],
[
-73.66721111358372,
45.432987152927446
],
[
-73.66706730008384,
45.4328863982505
],
[
-73.66687523305983,
45.43300569788887
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 31.999999999999996,
"number_of_stories_above_ground": 8,
"number_of_stories": 8,
"floor_height": 3.9999999999999996,
"building_type": "mixed use",
"name": "Building_433",
"year_built": 2024,
"footprint_area": 1535.5010229039326,
"id": "BuildingC12C11",
"type": "Building",
"floor_area": 12284.00818323146,
"usages": [
{
"usage": "6111",
"percentage": 15
},
{
"usage": "1000",
"percentage": 85
}
],
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66870958267681,
45.432179123945076
],
[
-73.66887583321109,
45.432232570660354
],
[
-73.66916353210719,
45.43223257066049
],
[
-73.66916407405287,
45.431945627832995
],
[
-73.66887548077842,
45.431945926632814
],
[
-73.66870958267681,
45.432179123945076
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 24,
"number_of_stories_above_ground": 6,
"number_of_stories": 6,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_434",
"year_built": 2024,
"footprint_area": 921.4234756113219,
"id": "BuildingV41V42",
"type": "Building",
"floor_area": 5528.5408536679315,
"usages": [
{
"usage": "6111",
"percentage": 21
},
{
"usage": "1000",
"percentage": 79
}
],
"area": "VARIN"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66671707646795,
45.43262783473566
],
[
-73.66685886651642,
45.432581110480704
],
[
-73.6668862801576,
45.432621751492384
],
[
-73.66725575717793,
45.432499997260074
],
[
-73.6673362319882,
45.43256349177961
],
[
-73.66752392585083,
45.43244732020689
],
[
-73.66727006379638,
45.432246909463274
],
[
-73.66674921195168,
45.432418546433944
],
[
-73.6667870120313,
45.43247563465473
],
[
-73.66659568493438,
45.432538682916395
],
[
-73.66655833369327,
45.432511251587385
],
[
-73.6663128232714,
45.43259215494888
],
[
-73.66675709111809,
45.432922821917856
],
[
-73.66695200967966,
45.43280195609688
],
[
-73.66671707646795,
45.43262783473566
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 44,
"number_of_stories_above_ground": 11,
"number_of_stories": 11,
"floor_height": 4,
"building_type": 1000,
"name": "Building_435",
"year_built": 2024,
"footprint_area": 2485.3035762150394,
"id": "BuildingC32C31C33",
"type": "Building",
"floor_area": 27338.339338365433,
"area": "CINTUBE"
}
},
{
"geometry": {
"coordinates": [
[
[
-73.66855504604872,
45.43177302438879
],
[
-73.66819134139887,
45.43185422525132
],
[
-73.66826818123967,
45.43202236449439
],
[
-73.66852125151473,
45.43210372227767
],
[
-73.66863632927094,
45.43195088654097
],
[
-73.66855504604872,
45.43177302438879
]
]
],
"type": "Polygon"
},
"type": "Feature",
"properties": {
"maximum_roof_height": 60,
"number_of_stories_above_ground": 15,
"number_of_stories": 15,
"floor_height": 4,
"building_type": "mixed use",
"name": "Building_436",
"year_built": 2024,
"footprint_area": 808.0809936788719,
"id": "BuildingV11V12",
"type": "Building",
"floor_area": 12121.214905183078,
"usages": [
{
"usage": "6111",
"percentage": 9
},
{
"usage": "1000",
"percentage": 91
}
],
"area": "VARIN"
}
}
]
}

122
input_files/pipe_data.json Normal file
View File

@ -0,0 +1,122 @@
[
{
"DN": 16,
"inner_diameter": 16.1,
"cost_per_meter": 320
},
{
"DN": 20,
"inner_diameter": 21.7,
"cost_per_meter": 320
},
{
"DN": 25,
"inner_diameter": 27.3,
"cost_per_meter": 320
},
{
"DN": 30,
"inner_diameter": 32.5,
"cost_per_meter": 350
},
{
"DN": 32,
"inner_diameter": 37.2,
"cost_per_meter": 350
},
{
"DN": 40,
"inner_diameter": 43.1,
"cost_per_meter": 375
},
{
"DN": 50,
"inner_diameter": 54.5,
"cost_per_meter": 400
},
{
"DN": 60,
"inner_diameter": 65.0,
"cost_per_meter": 450
},
{
"DN": 65,
"inner_diameter": 70.3,
"cost_per_meter": 450
},
{
"DN": 70,
"inner_diameter": 75.0,
"cost_per_meter": 450
},
{
"DN": 80,
"inner_diameter": 82.5,
"cost_per_meter": 480
},
{
"DN": 90,
"inner_diameter": 100.8,
"cost_per_meter": 480
},
{
"DN": 100,
"inner_diameter": 107.1,
"cost_per_meter": 550
},
{
"DN": 110,
"inner_diameter": 120.0,
"cost_per_meter": 550
},
{
"DN": 120,
"inner_diameter": 125.0,
"cost_per_meter": 550
},
{
"DN": 125,
"inner_diameter": 132.5,
"cost_per_meter": 630
},
{
"DN": 130,
"inner_diameter": 140.0,
"cost_per_meter": 630
},
{
"DN": 140,
"inner_diameter": 151.0,
"cost_per_meter": 630
},
{
"DN": 150,
"inner_diameter": 160.3,
"cost_per_meter": 700
},
{
"DN": 160,
"inner_diameter": 170.0,
"cost_per_meter": 700
},
{
"DN": 170,
"inner_diameter": 180.0,
"cost_per_meter": 700
},
{
"DN": 180,
"inner_diameter": 190.0,
"cost_per_meter": 700
},
{
"DN": 190,
"inner_diameter": 200.0,
"cost_per_meter": 700
},
{
"DN": 200,
"inner_diameter": 210.1,
"cost_per_meter": 860
}
]

1795
input_files/roads.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +1,41 @@
Processing Schedule Input -- Start
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 33-commercial_67-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 33-commercial_67-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 33-commercial_67-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 16-commercial_84-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 16-commercial_84-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 16-commercial_84-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 25-commercial_75-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 25-commercial_75-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 25-commercial_75-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 22-commercial_78-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 22-commercial_78-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 22-commercial_78-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 100-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 100-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 100-warehouse.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 15-commercial_46-warehouse_39-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 15-commercial_46-warehouse_39-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 15-commercial_46-warehouse_39-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 71-warehouse_29-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 71-warehouse_29-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 71-warehouse_29-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 75-warehouse_25-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 75-warehouse_25-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 75-warehouse_25-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 100-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 100-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 100-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 100-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 100-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 100-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 15-commercial_85-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 15-commercial_85-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 15-commercial_85-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 21-commercial_79-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 21-commercial_79-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 21-commercial_79-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 9-commercial_91-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 9-commercial_91-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 9-commercial_91-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 33-commercial_33-warehouse_33-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 33-commercial_33-warehouse_33-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 33-commercial_33-warehouse_33-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 8-commercial_92-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 8-commercial_92-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 8-commercial_92-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 6-commercial_94-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 6-commercial_94-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 6-commercial_94-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 67-warehouse_33-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 67-warehouse_33-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 67-warehouse_33-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 50-warehouse_50-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 50-warehouse_50-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 50-warehouse_50-office and administration.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 18-commercial_82-residential.csv
not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp3nu1pbf5\cold_temp schedules 18-commercial_82-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 18-commercial_82-residential.csv
Processing Schedule Input -- Complete
MonthlyInputCount= 2

View File

@ -1,4 +1,4 @@
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
! This file shows details about the branches, nodes, and other
! elements of the flow connections.
! This file is intended for use in "debugging" potential problems

View File

@ -1,4 +1,4 @@
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
! <Version>, Version ID
Version, 23.2
! <Timesteps per Hour>, #TimeSteps, Minutes per TimeStep {minutes}

View File

@ -1 +1 @@
EnergyPlus Completed Successfully-- 160 Warning; 0 Severe Errors; Elapsed Time=00hr 01min 37.44sec
EnergyPlus Completed Successfully-- 160 Warning; 0 Severe Errors; Elapsed Time=00hr 02min 21.30sec

View File

@ -1,4 +1,4 @@
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17,
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57,
** Warning ** GetHTSurfaceData: Surfaces with interface to Ground found but no "Ground Temperatures" were input.
** ~~~ ** Found first in surface=BUILDING_BUILDING10A_SURFACE_0
** ~~~ ** Defaults, constant throughout the year of (18.0) will be used.
@ -428,4 +428,4 @@ Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17,
*************
************* EnergyPlus Warmup Error Summary. During Warmup: 0 Warning; 0 Severe Errors.
************* EnergyPlus Sizing Error Summary. During Sizing: 0 Warning; 0 Severe Errors.
************* EnergyPlus Completed Successfully-- 160 Warning; 0 Severe Errors; Elapsed Time=00hr 01min 37.44sec
************* EnergyPlus Completed Successfully-- 160 Warning; 0 Severe Errors; Elapsed Time=00hr 02min 21.30sec

View File

@ -1,4 +1,4 @@
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
1,5,Environment Title[],Latitude[deg],Longitude[deg],Time Zone[],Elevation[m]
2,8,Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],Hour[],StartMinute[],EndMinute[],DayType
3,5,Cumulative Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],DayType ! When Daily Report Variables Requested

View File

@ -1,4 +1,4 @@
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
1,5,Environment Title[],Latitude[deg],Longitude[deg],Time Zone[],Elevation[m]
2,8,Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],Hour[],StartMinute[],EndMinute[],DayType
3,5,Cumulative Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],DayType ! When Daily Meters Requested

View File

@ -1,16 +1,16 @@
ReadVarsESO
processing:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_dd62c9.rvi
processing:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_21f119.rvi
input file:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_out.eso
output file:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_out.csv
getting all vars from:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_out.eso
number variables requested for output= 498
ReadVars Run Time=00hr 00min 7.50sec
ReadVars Run Time=00hr 00min 4.06sec
ReadVarsESO program completed successfully.
ReadVarsESO
processing:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_dd62c9.mvi
processing:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_21f119.mvi
input file:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_out.mtr
output file:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_mtr.csv
getting all vars from:C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\Cote-Saint-Luc_out.mtr
number variables requested for output= 3
ReadVars Run Time=00hr 00min 0.14sec
ReadVars Run Time=00hr 00min 0.06sec
ReadVarsESO program completed successfully.

View File

@ -1,4 +1,4 @@
Program Version:,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
Program Version:,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
Tabular Output Report in Format: ,Comma
Building:,Buildings in b'Cote-Saint-Luc'
@ -488,7 +488,7 @@ FOR:,Entire Facility
General
,,Value
,Program Version and Build,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
,Program Version and Build,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
,RunPeriod,RUN PERIOD 1
,Weather File,Montreal Int'l PQ CAN WYEC2-B-94792 WMO#=716270
,Latitude [deg],45.47

1 Program Version:,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17 Program Version:,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57
2 Tabular Output Report in Format: ,Comma
3 Building:,Buildings in b'Cote-Saint-Luc'
4 Environment:,RUN PERIOD 1 ** Montreal Int'l PQ CAN WYEC2-B-94792 WMO#=716270
488 ,BUILDINGB1,1700.26,Yes,Yes,27204.22,1.00,2663.00,0.00,532.07,532.07,34.0444,31.82,5.3219
489 ,BUILDINGB5,2550.43,Yes,Yes,40806.92,1.00,3283.49,0.00,656.04,656.04,30.3831,20.70,11.5442
490 ,BUILDINGB3,4942.50,Yes,Yes,79080.06,1.00,5604.88,0.00,1119.85,1119.85,34.0444,31.82,5.3219
491 ,BUILDINGB4,1842.83,Yes,Yes,29485.34,1.00,2750.69,0.00,549.59,549.59,30.3831,20.70,11.5442
492 ,BUILDINGB6,3029.39,Yes,Yes,48470.27,1.00,4162.52,0.00,831.67,831.67,30.3831,20.70,11.5442
493 ,BUILDING4,5060.30,Yes,Yes,80964.74,1.00,5096.17,0.00,1018.21,1018.21,30.1110,23.80,10.5038
494 ,BUILDINGL19,549.11,Yes,Yes,17571.50,1.00,2710.18,0.00,541.49,541.49,55.0200,2.50,50.0182

View File

@ -2,27 +2,27 @@
<html>
<head>
<title> Buildings in b'Cote-Saint-Luc' RUN PERIOD 1 ** Montreal Int'l PQ CAN WYEC2-B-94792 WMO#=716270
2024-09-24
22:17:09
2024-10-17
15:57:09
- EnergyPlus</title>
</head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<p><a href="#toc" style="float: right">Table of Contents</a></p>
<a name=top></a>
<p>Program Version:<b>EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17</b></p>
<p>Program Version:<b>EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57</b></p>
<p>Tabular Output Report in Format: <b>HTML</b></p>
<p>Building: <b>Buildings in b'Cote-Saint-Luc'</b></p>
<p>Environment: <b>RUN PERIOD 1 ** Montreal Int'l PQ CAN WYEC2-B-94792 WMO#=716270</b></p>
<p>Simulation Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Simulation Timestamp: <b>2024-10-17
15:57:09</b></p>
<hr>
<p><a href="#toc" style="float: right">Table of Contents</a></p>
<a name=AnnualBuildingUtilityPerformanceSummary::EntireFacility></a>
<p>Report:<b> Annual Building Utility Performance Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Values gathered over 8760.00 hours</b><br><br>
<b></b><br><br>
<b>Site and Source Energy</b><br><br>
@ -6709,8 +6709,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=InputVerificationandResultsSummary::EntireFacility></a>
<p>Report:<b> Input Verification and Results Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>General</b><br><br>
<!-- FullName:Input Verification and Results Summary_Entire Facility_General-->
<table border="1" cellpadding="4" cellspacing="0">
@ -6719,7 +6719,7 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
</tr>
<tr>
<td align="right">Program Version and Build</td>
<td align="right">EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17</td>
<td align="right">EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.10.17 15:57</td>
</tr>
<tr>
<td align="right">RunPeriod</td>
@ -9948,8 +9948,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=DemandEndUseComponentsSummary::EntireFacility></a>
<p>Report:<b> Demand End Use Components Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>End Uses</b><br><br>
<!-- FullName:Demand End Use Components Summary_Entire Facility_End Uses-->
<table border="1" cellpadding="4" cellspacing="0">
@ -15831,15 +15831,15 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=ComponentSizingSummary::EntireFacility></a>
<p>Report:<b> Component Sizing Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<hr>
<p><a href="#toc" style="float: right">Table of Contents</a></p>
<a name=AdaptiveComfortSummary::EntireFacility></a>
<p>Report:<b> Adaptive Comfort Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Time Not Meeting the Adaptive Comfort Models during Occupied Hours</b><br><br>
<!-- FullName:Adaptive Comfort Summary_Entire Facility_Time Not Meeting the Adaptive Comfort Models during Occupied Hours-->
<table border="1" cellpadding="4" cellspacing="0">
@ -15857,8 +15857,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=ClimaticDataSummary::EntireFacility></a>
<p>Report:<b> Climatic Data Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>SizingPeriod:DesignDay</b><br><br>
<!-- FullName:Climatic Data Summary_Entire Facility_SizingPeriod:DesignDay-->
<table border="1" cellpadding="4" cellspacing="0">
@ -16006,8 +16006,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=EnvelopeSummary::EntireFacility></a>
<p>Report:<b> Envelope Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Opaque Exterior</b><br><br>
<!-- FullName:Envelope Summary_Entire Facility_Opaque Exterior-->
<table border="1" cellpadding="4" cellspacing="0">
@ -42863,8 +42863,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=LightingSummary::EntireFacility></a>
<p>Report:<b> Lighting Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Interior Lighting</b><br><br>
<!-- FullName:Lighting Summary_Entire Facility_Interior Lighting-->
<table border="1" cellpadding="4" cellspacing="0">
@ -44639,8 +44639,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=EquipmentSummary::EntireFacility></a>
<p>Report:<b> Equipment Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Central Plant</b><br><br>
<!-- FullName:Equipment Summary_Entire Facility_Central Plant-->
<table border="1" cellpadding="4" cellspacing="0">
@ -45152,8 +45152,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=HVACSizingSummary::EntireFacility></a>
<p>Report:<b> HVAC Sizing Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Space Sensible Cooling</b><br><br>
<!-- FullName:HVAC Sizing Summary_Entire Facility_Space Sensible Cooling-->
<table border="1" cellpadding="4" cellspacing="0">
@ -45443,8 +45443,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=SystemSummary::EntireFacility></a>
<p>Report:<b> System Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Economizer</b><br><br>
<!-- FullName:System Summary_Entire Facility_Economizer-->
<table border="1" cellpadding="4" cellspacing="0">
@ -46827,8 +46827,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=OutdoorAirSummary::EntireFacility></a>
<p>Report:<b> Outdoor Air Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Average Outdoor Air During Occupied Hours</b><br><br>
<!-- FullName:Outdoor Air Summary_Entire Facility_Average Outdoor Air During Occupied Hours-->
<table border="1" cellpadding="4" cellspacing="0">
@ -48844,8 +48844,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=ObjectCountSummary::EntireFacility></a>
<p>Report:<b> Object Count Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Surfaces by Class</b><br><br>
<!-- FullName:Object Count Summary_Entire Facility_Surfaces by Class-->
<table border="1" cellpadding="4" cellspacing="0">
@ -48994,8 +48994,8 @@ Note 1: An asterisk (*) indicates that the feature is not yet implemented.<br>
<a name=SensibleHeatGainSummary::EntireFacility></a>
<p>Report:<b> Sensible Heat Gain Summary</b></p>
<p>For:<b> Entire Facility</b></p>
<p>Timestamp: <b>2024-09-24
22:17:09</b></p>
<p>Timestamp: <b>2024-10-17
15:57:09</b></p>
<b>Annual Building Sensible Heat Gain Components</b><br><br>
<!-- FullName:Sensible Heat Gain Summary_Entire Facility_Annual Building Sensible Heat Gain Components-->
<table border="1" cellpadding="4" cellspacing="0">

View File

@ -84,7 +84,7 @@ class DistrictHeatingNetworkCreator:
building_polygon = Polygon(coordinates)
centroid = building_polygon.centroid
self.centroids.append(centroid)
self.building_names.append(str(building['id']))
self.building_names.append(str(building['properties']['id']))
self.building_positions.append((centroid.x, centroid.y))
# Add central plant locations as centroids

146
varin.py Normal file
View File

@ -0,0 +1,146 @@
from scripts.district_heating_network.directory_manager import DirectoryManager
import subprocess
from building_modelling.ep_run_enrich import energy_plus_workflow
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
from hub.imports.results_factory import ResultFactory
from building_modelling.geojson_creator import process_geojson
import hub.helpers.constants as cte
from hub.exports.exports_factory import ExportsFactory
import matplotlib.pyplot as plt
import numpy as np
from scripts.district_heating_network.district_heating_network_creator import DistrictHeatingNetworkCreator
from scripts.district_heating_network.district_heating_factory import DistrictHeatingFactory
import json
# Manage File Path
base_path = "./"
dir_manager = DirectoryManager(base_path)
# Input files directory
input_files_path = dir_manager.create_directory('input_files')
geojson_file_path = input_files_path / 'Varin.geojson'
pipe_data_file = input_files_path / 'pipe_data.json'
# Output files directory
output_path = dir_manager.create_directory('out_files')
# Subdirectories for output files
energy_plus_output_path = dir_manager.create_directory('out_files/energy_plus_outputs')
simulation_results_path = dir_manager.create_directory('out_files/simulation_results')
sra_output_path = dir_manager.create_directory('out_files/sra_outputs')
cost_analysis_output_path = dir_manager.create_directory('out_files/cost_analysis')
# Create ciry and run energyplus workflow
city = GeometryFactory(file_type='geojson',
path=geojson_file_path,
height_field='maximum_roof_height',
year_of_construction_field='year_built',
function_field='building_type',
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
ConstructionFactory('nrcan', city).enrich()
UsageFactory('nrcan', city).enrich()
WeatherFactory('epw', city).enrich()
# energy_plus_workflow(city, energy_plus_output_path)
ResultFactory('energy_plus_multiple_buildings', city, energy_plus_output_path).enrich()
# District Heating Network Creator
central_plant_locations = [(-73.6641097164314, 45.433637169890005)] # Add at least one location
roads_file = "input_files/roads.json"
dhn_creator = DistrictHeatingNetworkCreator(geojson_file_path, roads_file, central_plant_locations)
network_graph = dhn_creator.run()
# Pipe and pump sizing
with open(pipe_data_file, 'r') as f:
pipe_data = json.load(f)
factory = DistrictHeatingFactory(
city=city,
graph=network_graph,
supply_temperature=80 + 273, # in Kelvin
return_temperature=60 + 273, # in Kelvin
simultaneity_factor=0.9
)
factory.enrich()
factory.sizing()
factory.calculate_diameters_and_costs(pipe_data)
pipe_groups, total_cost = factory.analyze_costs()
# Save the pipe groups with total costs to a CSV file
factory.save_pipe_groups_to_csv('pipe_groups.csv')
import json
import matplotlib.pyplot as plt
import networkx as nx
from shapely.geometry import shape, Polygon, MultiPolygon
from shapely.validation import explain_validity
# Load the GeoJSON file
with open("input_files/Varin.geojson", "r") as file:
geojson_data = json.load(file)
# Initialize a figure
fig, ax = plt.subplots(figsize=(15, 10))
# Set aspect to equal
ax.set_aspect('equal')
# Set figure and axes backgrounds to transparent
fig.patch.set_facecolor('none')
ax.set_facecolor('none')
# Iterate over each feature in the GeoJSON
for feature in geojson_data['features']:
geom = shape(feature['geometry'])
# Check if the geometry is valid
if not geom.is_valid:
print(f"Invalid geometry: {explain_validity(geom)}")
continue # Skip invalid geometries
# Plot polygons
if isinstance(geom, Polygon):
x, y = geom.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
elif isinstance(geom, MultiPolygon):
for poly in geom.geoms:
x, y = poly.exterior.xy
ax.plot(x, y, color='black', linewidth=1) # Plot only the edges
else:
print(f"Unhandled geometry type: {type(geom)}")
continue
# Prepare and plot the network graph
G = network_graph
# Get positions from node attributes
pos = nx.get_node_attributes(G, 'pos')
# Draw nodes, using different colors based on node type
node_types = nx.get_node_attributes(G, 'type')
colors = {'building': 'blue', 'generation': 'green', 'junction': 'red'}
node_colors = [colors.get(node_types.get(node, 'junction'), 'black') for node in G.nodes()]
nx.draw_networkx_nodes(G, pos, ax=ax, node_size=50, node_color=node_colors)
nx.draw_networkx_edges(G, pos, ax=ax, edge_color="red", width=1.2)
# Remove axes, ticks, and background
ax.axis("off")
# Adjust plot limits to the data
x_values = [coord[0] for coord in pos.values()]
y_values = [coord[1] for coord in pos.values()]
ax.set_xlim(min(x_values) - 0.001, max(x_values) + 0.001)
ax.set_ylim(min(y_values) - 0.001, max(y_values) + 0.001)
# Save the plot with transparency
plt.savefig("network_plot.png", bbox_inches='tight', pad_inches=0, transparent=True)
plt.show()