Heat Pump

This tutorial demonstrates how to perform an exergy analysis of a heat pump using ExerPy. The analysis is carried out with:

  • Ebsilon

  • Aspen Plus

  • tespy

The flowsheet of the system is shown below.

Heatpump flowsheet

Figure: Flowsheet of the heat pump model

Heatpump flowsheet

Figure: Flowsheet of the heat pump model

The import of the exerpy dependency is the same for all simulators:

  1. Import Necessary Modules

from exerpy import ExergyAnalysis

Download the Ebsilon simulation model here: hp.ebs

  1. Initialize the Exergy Analysis

Create an instance of the ExergyAnalysis class using the from_ebsilon method. Since this system operates at temperature under the ambient temperature, it is strongly recommended to split the physical exergy into its mechanical and thermal parts by setting the split_physical_exergy parameter to True.

model_path = 'hp.ebs'

ean = ExergyAnalysis.from_ebsilon(model_path, split_physical_exergy=True)
  1. Define the exergy flows crossing the system boundaries

ExerPy requires you to specify the fuel (E_F), product (E_P), and loss (E_L) exergy streams in your system. These are defined using dictionaries with "inputs" and "outputs" keys, containing lists of connection IDs from your Ebsilon model.

fuel = {
    "inputs": ['E1', 'E2', 'E3'],
    "outputs": []
}

product = {
    "inputs": ['23'],
    "outputs": ['21']
}

loss = {
    "inputs": ['13'],
    "outputs": ['11']
}

For this process, the exergetic fuel of the system (E_F) is the sum of the inlet power flows (E1, E2, E3). The exergetic product of the system (E_P) consists of the difference between the exergy of the hot water outlet (23) and the exergy of the cold water inlet (21). Air is the heat source of the system. However, it enters the system at the ambient state and is released at a lower temperature. Therefore, the difference between the exergy of the air outlet (13) and the exergy of the air inlet (11) represents the exergy loss of the system (E_L).

Note

The dictionary labels must exactly match the connection labels defined in the Ebsilon simulation model. By default, Ebsilon assigns generic names to streams (e.g., “water”, “water_1”). It is strongly recommended to rename the stream labels in Ebsilon using consistent and meaningful labels.

For example: use “1”, “2”, “3” for material connections and “E1”, “E2”, “E3” for electrical connections, “H1”, “H2”, “H3” for heat connections, etc.

Full Example Code:
from exerpy import ExergyAnalysis

model_path = 'hp.ebs'

ean = ExergyAnalysis.from_ebsilon(model_path, chemExLib='Ahrendts', split_physical_exergy=False)

fuel = {
    "inputs": ['E1', 'E2', 'E3'],
    "outputs": []
}

product = {
    "inputs": ['23'],
    "outputs": ['21']
}

loss = {
    "inputs": ['13'],
    "outputs": ['11']
}

ean.analyse(E_F=fuel, E_P=product, E_L=loss)
ean.exergy_results()

For the tespy model we have prepared the code to run the simulation in the dropdown below. To learn how to set up tespy models and what things to be aware of when working with tespy, we kindly refer to the online documentation of tespy.

Code of the tespy model
  1. Initialize the Exergy Analysis

After setting up the model, we set up the ExergyAnalysis instances using the from_tespy method. It takes the converged tespy.Network object along with ambient state and (optionally) the chemical exergy library as inputs.

Tip

TESPy can handle the splitting of physical exergy into its mechanical and thermal shares, therefore split_phyiscal_exergy can always be set to True when using tespy. In this instance it is set to False because ASPEN cannot handle this, and we wanted to cross validate the results of the examples for all three simulators.

  1. Define the exergy flows crossing the system boundaries

For this plant, the exergetic fuel of the system (E_F) is the total input of electrical power through the three motors. The cold air leaving the evaporator on the heat source side is considered a exergy loss of the system (E_L), and the change of exergy from the liquid water to steam is considered the exergy product (E_P).

Download the Aspen simulation model here: hp.bkp

  1. Initialize the Exergy Analysis

Create an instance of the ExergyAnalysis class using the from_aspen method. This system operates at temperature under the ambient temperature. Therefore it should be good practise to split the physical exergy into its mechanical and thermal parts by setting the split_physical_exergy parameter to True. However, at the moment, it is not possible to split the physical exergy into its mechanical and thermal shares when using Aspen Plus. Therefore, the split_physical_exergy parameter is not available when using the from_aspen method.

Note

At the moment, it is not possible to split the physical exergy into its mechanical and thermal shares when using Aspen Plus. Therefore, the split_physical_exergy parameter should be always set to False when using the from_aspen method.

model_path = 'hp.bkp'

ean = ExergyAnalysis.from_aspen(model_path, chemExLib='Ahrendts', split_physical_exergy=False)
  1. Define the exergy flows crossing the system boundaries

ExerPy requires you to specify the fuel (E_F), product (E_P), and loss (E_L) exergy streams in your system. These are defined using dictionaries with "inputs" and "outputs" keys, containing lists of connection IDs from your Aspen model.

fuel = {
    "inputs": ['E1', 'E2', 'E3'],
    "outputs": []
}

product = {
    "inputs": ['23'],
    "outputs": ['21']
}

loss = {
    "inputs": ['13'],
    "outputs": ['11']
}

For this process, the exergetic fuel of the system (E_F) is the sum of the inlet power flows (E1, E2, E3). The exergetic product of the system (E_P) consists of the difference between the exergy of the hot water outlet (23) and the exergy of the cold water inlet (21). Air is the heat source of the system. However, it enters the system at the ambient state and is released at a lower temperature. Therefore, the difference between the exergy of the air outlet (13) and the exergy of the air inlet (11) represents the exergy loss of the system (E_L).

Note

The dictionary labels must exactly match the connection labels defined in the Aspen simulation model. It is strongly recommended to rename the stream labels in Aspen using consistent and meaningful labels.

For example: use “1”, “2”, “3” for material connections and “E1”, “E2”, “E3” for electrical connections, “H1”, “H2”, “H3” for heat connections, etc.

Full Example Code:
from exerpy import ExergyAnalysis

model_path = 'heatpump.bkp'

ean = ExergyAnalysis.from_aspen(model_path, chemExLib='Ahrendts', split_physical_exergy=False)

fuel = {
    "inputs": ['E1', 'E2', 'E3'],
    "outputs": []
}

product = {
    "inputs": ['23'],
    "outputs": ['21']
}

loss = {
    "inputs": ['13'],
    "outputs": ['11']
}

ean.analyse(E_F=fuel, E_P=product, E_L=loss)
ean.exergy_results()

Running the exergy analysis and working with the results is now independant for all simulators.

  1. Perform the Exergy Analysis

Run the analysis by invoking the analyse method on the ExergyAnalysis instance, passing the defined fuel, product, and loss exergy streams.

ean.analyse(E_F=fuel, E_P=product, E_L=loss)
  1. Retrieve and Display Results

After the analysis is complete, retrieve the results using the exergy_results method.

# Retrieve and display the results
df_components, df_material_connections, df_non_material_connections = ean.exergy_results()

# Print the components exergy results
print(df_components)

# Optionally, save the results to CSV files
df_components.to_csv('components_exergy_results.csv')
df_material_connections.to_csv('material_connections_exergy_results.csv')
df_non_material_connections.to_csv('non_material_connections_exergy_results.csv')