Heat Exchanger#

Introduction#

A heat exchanger is used to transfer heat from one fluid to a different one. We can write the energy balance for the component assuming, that no heat is lost to the ambient.

(19)#\[ 0 = \dot m_1 \cdot \left(h_\text{1,out} - h_\text{1,in}\right) + \dot m_2 \cdot \left(h_\text{2,out} - h_\text{2,in}\right)\]

The hot side \(1\) transfers heat to the cold side \(2\), as shown in Fig. 10. We can see, that all heat provided by the hot side is transferred to the cold side. However, in this process it is not possible to reach the same temperature level on the cold side as on the hot side. Reversing the heat transfer is for the same reason not possible: You cannot transfer heat against the direction of the temperature gradient. That obviously means, that the heat transfer incurs thermodynamic losses. To make them visible, we will again calculate the exergy of each of the flows.

../_images/HeatExchanger.svg

Fig. 10 Schematic of a heat exchanger.#

District heating delivery heat exchanger for radiator heating system#

As an example we want to have a look at a home heating system that uses centralized district heat as a source. To separate the district heating system from the home system, a heat exchanger is set in place. The radiator of the home system needs a feed flow temperature of \(70\) degrees Celsius. By transferring heat to the home, its temperature reduces by \(15\) Kelvin. It operates at a pressure of roughly \(1.5\) bar above atmospheric pressure. The district heating system provides a flow of \(1\) kg/s with a temperature of \(90\) degrees Celsius at \(8\) bar above atmospheric pressure. It returns with a temperature of \(60\) degrees Celsius.

from CoolProp.CoolProp import PropsSI as PSI

# Properties of hot side fluid
fluid_1 = 'water'
m_dot_1 = 1  # kg/s
p_1 = (1.013 + 8) * 1e5  # Pa
T_in_1 = 90 + 273.15  # K
T_out_1 = 60 + 273.15  # K

# Properties of cold side fluid
fluid_2 = 'water'
p_2 = (1.013 + 1.5) * 1e5  # Pa
T_in_2 = 55 + 273.15  # K
T_out_2 = 70 + 273.15  # K

Let’s find out how much water is flowing through the home heating system. To employ equation (19), we have to get the specific enthalpies of our fluids.

h_in_1 = PSI('H', 'P', p_1, 'T', T_in_1, fluid_1)
h_out_1 = PSI('H', 'P', p_1, 'T', T_out_1, fluid_1)

h_in_2 = PSI('H', 'P', p_2, 'T', T_in_2, fluid_2)
h_out_2 = PSI('H', 'P', p_2, 'T', T_out_2, fluid_2)

m_dot_2 = m_dot_1 * (h_out_1 - h_in_1) / -(h_out_2 - h_in_2)

m_dot_2
2.00294954481023

The home heating system mass flow is about \(2 \frac{kg}{s}\), which makes sense due to the temperature spread of the radiator being smaller, than that of the district heat. After this calculation, we have all the information we need to calculate the physical exergy of both flows. For that we can use the function we built within the Adiabatic Pipe Flow example. But first, we have to define an ambient state:

# Ambient state
p0 = 1.013 * 1e5  # Pa
T0 = 20 + 273.15  # K

Tip

We have provided the function to calculate the exergy in the ‘utilities’ file in this directory, so we can import it from there instead of redefining it here.

from utilities import calc_splitted_physical_exergy


ex_in_1 = calc_splitted_physical_exergy(p_1, h_in_1, p0, T0, fluid_1)
ex_out_1 = calc_splitted_physical_exergy(p_1, h_out_1, p0, T0, fluid_1)
ex_in_2 = calc_splitted_physical_exergy(p_2, h_in_2, p0, T0, fluid_2)
ex_out_2 = calc_splitted_physical_exergy(p_2, h_out_2, p0, T0, fluid_2)

In this specific case, all fluid temperatures are above our ambient temperature. This means, that the following equations describe the fuel and product exergies:

(20)#\[ \dot{E}_F = \dot{E}^{PH}_{in,1} - \dot{E}^{PH}_{out,1} + \dot{E}^{M}_{in,2} - \dot{E}^{M}_{out,2}\]
(21)#\[ \dot{E}_P = \dot{E}^{T}_{out,2} - \dot{E}^{T}_{in,2}\]

Let’s calculate them.

Ex_dot_F = m_dot_1 * (sum(ex_in_1) - sum(ex_out_1)) + m_dot_2 * (ex_in_2[1] - ex_out_2[1])
Ex_dot_P = m_dot_2 * (ex_out_2[0] - ex_in_2[0])

Ex_dot_F, Ex_dot_P
(19805.698084773787, 15906.4158830616)

The fuel exergy comes out to about \(19.81\) kJ and the product exergy to about \(15.91\) kJ. With these values, we can finally calculate exergy destruction, exergy destruction ratio and exergy efficiency. That works analogously as described in Adiabatic Pipe Flow.

Ex_dot_D = Ex_dot_F - Ex_dot_P
y_D = Ex_dot_D / Ex_dot_F
eta_Ex = Ex_dot_P / Ex_dot_F

Ex_dot_D, y_D, eta_Ex
(3899.282201712187, 0.19687678692375277, 0.8031232130762472)

The total exergy destruction is about \(3.899\) kJ, resulting in an exergy destruction ratio of about \(19.7\) % and an exergy efficiency of about \(80.3\) %.

District heating delivery heat exchanger for underfloor heating system#

Now let’s compare the radiator with an underfloor heating system. Typically, these work at a feed flow temperature of \(40\) degrees Celsius with a temperature spread of \(10\) K.

T_in_2_uf = 30 + 273.15  # K
T_out_2_uf = 40 + 273.15  # K

h_in_2_uf = PSI('H', 'P', p_2, 'T', T_in_2_uf, fluid_2)
h_out_2_uf = PSI('H', 'P', p_2, 'T', T_out_2_uf, fluid_2)

m_dot_2_uf = m_dot_1 * (h_out_1 - h_in_1) / -(h_out_2_uf - h_in_2_uf)
  • What do you expect the result of the exergy analysis of the underfloor heater to be in comparison to the radiator?

  • How do the lower system temperatures affect the fuel and product exergy?

Take a guess before continuing. Then, let’s calculate the physical, as well as the fuel and product exergies.

ex_in_2_uf = calc_splitted_physical_exergy(p_2, h_in_2_uf, p0, T0, fluid_2)
ex_out_2_uf = calc_splitted_physical_exergy(p_2, h_out_2_uf, p0, T0, fluid_2)

Ex_dot_F_uf = m_dot_1 * (sum(ex_in_1) - sum(ex_out_1)) + m_dot_2_uf * (ex_in_2_uf[1] - ex_out_2_uf[1])
Ex_dot_P_uf = m_dot_2_uf * (ex_out_2_uf[0] - ex_in_2_uf[0])

With these, we can calculate exergy destruction, exergy destruction ratio and exergy efficiency again.

Ex_dot_D_uf = Ex_dot_F_uf - Ex_dot_P_uf
y_D_uf = Ex_dot_D_uf / Ex_dot_F_uf
eta_Ex_uf = Ex_dot_P_uf / Ex_dot_F_uf

Ex_dot_D_uf, y_D_uf, eta_Ex_uf
(13694.426035151324, 0.6914386948915129, 0.3085613051084871)

The total exergy destruction is about \(13.69 \frac{kJ}{kg}\), resulting in an exergy destruction ratio of about \(69.1\) % and an exergy efficiency of about \(30.9\) %. That’s an increase in exergy destruction of around \(151.2\) %.

Do the results match your expectations? What does this say about the process of providing heat to the underfloor system from the district heating system? How could a dhs operator reduce exergy destruction in home systems in general?

Exercise 1#

The analysis above assumes a constant ambient state. In reality, the reference temperature for a heating system – the temperature outside – varies throughout the year. To find out how a varying ambient temperature influences the results of the exergy analysis above, do the following exercise for a typical temperature range of \(5\) to \(30\) degrees Celsius.

  1. Using the radiator home system example as a use case, create a plot of the exergy destruction against the ambient temperature. How do you interpret the results?

Proposed solution 1#

Hide code cell content
import matplotlib.pyplot as plt

T0_range = [T + 273.15 for T in range(5, 35, 5)]

Ex_dot_D_range = list()
for T0_val in T0_range:
    ex_in_1 = calc_splitted_physical_exergy(p_1, h_in_1, p0, T0_val, fluid_1)
    ex_out_1 = calc_splitted_physical_exergy(p_1, h_out_1, p0, T0_val, fluid_1)
    ex_in_2 = calc_splitted_physical_exergy(p_2, h_in_2, p0, T0_val, fluid_2)
    ex_out_2 = calc_splitted_physical_exergy(p_2, h_out_2, p0, T0_val, fluid_2)

    Ex_dot_F = m_dot_1 * (sum(ex_in_1) - sum(ex_out_1)) + m_dot_2 * (ex_in_2[1] - ex_out_2[1])
    Ex_dot_P = m_dot_2 * (ex_out_2[0] - ex_in_2[0])

    Ex_dot_D_range += [(Ex_dot_F - Ex_dot_P) * 1e-3]

fig, ax = plt.subplots(figsize=(8, 6))

ax.plot(
    [T - 273.15 for T in T0_range],
    Ex_dot_D_range, color='#B54036'
    )

ax.set_ylabel('Exergy destruction in kJ')
ax.set_xlabel('Ambient temperature in °C')
ax.grid()
ax.set_axisbelow(True)
../_images/2818866aea8e9ba42388b6f133ab01f88e09b81fb6a3724671991da260f9bce4.png

Exercise 2#

To further analyze the influence of the key parameters of a heat exchanger, let’s variate them and study their effects. Based on the first example (see: District heating delivery heat exchanger for radiator heating system) and with a constant heat flow rate from hot to cold side, implement the following variation routines and plot the resulting exergy destruction and efficiency:

  1. Variable inlet temperatures with constant outlet temperatures.

  2. Variable outlet temperatures with constant inlet temperatures.

Proposed solution 2.1#

Zeroth step: Let’s create some helper functions

Hide code cell content
def calc_massflow(which, m_dot, h_in_1, h_out_1, h_in_2, h_out_2):
    """Energy balance of heat exchanger that is adiabatic to surroundings."""
    if which == 'cold':
        return m_dot * (h_out_1 - h_in_1) / -(h_out_2 - h_in_2)
    elif which == 'hot':
        return m_dot * -(h_out_2 - h_in_2) / (h_out_1 - h_in_1)

def calc_ex_fuel_prod(m_dot_1, ex_in_1, ex_out_1, m_dot_2, ex_in_2, ex_out_2):
    """Defined for all temperatures above T0."""
    Ex_dot_F = (
        m_dot_1 * (sum(ex_in_1) - sum(ex_out_1))
        + m_dot_2 * (ex_in_2[1] - ex_out_2[1])
        )
    Ex_dot_P = m_dot_2 * (ex_out_2[0] - ex_in_2[0])
    return Ex_dot_F, Ex_dot_P

def plot_ex_D_eta_ex(T_range, Ex_D_range, eta_Ex_range):
    """Plot exergy destruction and efficiency against variable temperature."""
    fig, axs = plt.subplots(1, 2, figsize=(10, 4))

    axs[0].plot(T_range, Ex_D_range, color='#B54036')
    axs[1].plot(T_range, eta_Ex_range, color='#00395B')

    axs[0].set_ylabel('Exergy destruction in kJ')
    axs[0].grid()
    axs[0].set_axisbelow(True)

    axs[1].set_ylabel('Exergetic efficiency')
    axs[1].grid()
    axs[1].set_axisbelow(True)

    return fig, axs

First step: Variate hot side inlet temperature

Hide code cell content
Q_nominal = abs(m_dot_1 * (h_out_1 - h_in_1))
m_dot_2 = Q_nominal / (h_out_2 - h_out_1)

T_in_1_range = [*range(70, 121)]
h_in_1_range = [PSI('H', 'P', p_1, 'T', T_in_1+273.15, fluid_1) for T_in_1 in T_in_1_range]
ex_in_1_range = [calc_splitted_physical_exergy(p_1, h_in_1, p0, T0, fluid_1) for h_in_1 in h_in_1_range]

m_dot_1_range = [
    calc_massflow('hot', m_dot_2, h_in_1, h_out_1, h_in_2, h_out_2) for h_in_1 in h_in_1_range
    ]

Ex_dot_D_range = list()
eta_Ex_range = list()
Ex_dot_P_range = list()
Ex_dot_F_range = list()

for ex_in_1, m_dot_1 in zip(ex_in_1_range, m_dot_1_range):
    Ex_dot_F, Ex_dot_P = calc_ex_fuel_prod(
        m_dot_1, ex_in_1, ex_out_1, m_dot_2, ex_in_2, ex_out_2
        )
    Ex_dot_F_range += [Ex_dot_F * 1e-3]
    Ex_dot_P_range += [Ex_dot_P * 1e-3]
    Ex_dot_D_range += [(Ex_dot_F - Ex_dot_P) * 1e-3]
    eta_Ex_range += [Ex_dot_P / Ex_dot_F]

fig, axs = plot_ex_D_eta_ex(T_in_1_range, Ex_dot_D_range, eta_Ex_range)
# axs[0].plot(T_in_1_range, Ex_dot_F_range, color='r')
# axs[0].plot(T_in_1_range, Ex_dot_P_range, color='b')
# axs[0].plot(T_in_1_range, [sum(exer) * 1e-3 for exer in ex_in_1_range], color='g')
# axs[1].plot(T_in_1_range, m_dot_1_range, color='g')

_ = fig.supxlabel(
    'Feed flow temperature of district heating system in °C',
    fontsize='medium'
    )
../_images/b3846484bedb790dc6cf646bb829e6d97448f6baad18a846f85a24bcbaba82e2.png

Second step: Variate cold side inlet temperature

Hide code cell content
# Reset hot side inlet temperature
m_dot_1 = 1
T_in_1 = 90
h_in_1 = PSI('H', 'P', p_1, 'T', T_in_1+273.15, fluid_1)
ex_in_1 = calc_splitted_physical_exergy(p_1, h_in_1, p0, T0, fluid_1)

T_in_2_range = [*range(40, 56)]
h_in_2_range = [PSI('H', 'P', p_2, 'T', T_in_2+273.15, fluid_2) for T_in_2 in T_in_2_range]
ex_in_2_range = [calc_splitted_physical_exergy(p_2, h_in_2, p0, T0, fluid_2) for h_in_2 in h_in_2_range]
m_dot_2_range = [
    calc_massflow('cold', m_dot_1, h_in_1, h_out_1, h_in_2, h_out_2) for h_in_2 in h_in_2_range
]

Ex_dot_D_range = list()
eta_Ex_range = list()
for ex_in_2, m_dot_2 in zip(ex_in_2_range, m_dot_2_range):
    Ex_dot_F, Ex_dot_P = calc_ex_fuel_prod(m_dot_1, ex_in_1, ex_out_1, m_dot_2, ex_in_2, ex_out_2)
    Ex_dot_D_range += [(Ex_dot_F - Ex_dot_P) * 1e-3]
    eta_Ex_range += [Ex_dot_P / Ex_dot_F]

fig, axs = plot_ex_D_eta_ex(T_in_2_range, Ex_dot_D_range, eta_Ex_range)

_ = fig.supxlabel(
    'Back flow temperature of home heating system in °C',
    fontsize='medium'
)
../_images/44f58d17b623e831ca1486f77a6dc7537db05f1bd122f2c7d9cde66d877392ef.png

Third step: Variate both inlet temperatures simultaneously

Hide code cell content
fig, axs = plt.subplots(1, 2, figsize=(10, 4))

for T_in_1 in range(70, 120, 10):
    h_in_1 = PSI('H', 'P', p_1, 'T', T_in_1+273.15, fluid_1)
    ex_in_1 = calc_splitted_physical_exergy(p_1, h_in_1, p0, T0, fluid_1)
    m_dot_1 = abs(Q_nominal / (h_out_1 - h_in_1))

    Ex_dot_D_range = list()
    eta_Ex_range = list()
    T_in_2_range = list()
    for T_in_2 in range(42, 60, 2):
        T_in_2_range += [T_in_2]
        h_in_2 = PSI('H', 'P', p_2, 'T', T_in_2+273.15, fluid_2)
        ex_in_2 = calc_splitted_physical_exergy(p_2, h_in_2, p0, T0, fluid_2)
        m_dot_2 = calc_massflow('cold', m_dot_1, h_in_1, h_out_1, h_in_2, h_out_2)

        Ex_dot_F, Ex_dot_P = calc_ex_fuel_prod(
            m_dot_1, ex_in_1, ex_out_1, m_dot_2, ex_in_2, ex_out_2
            )
        Ex_dot_D_range += [(Ex_dot_F - Ex_dot_P) * 1e-3]
        eta_Ex_range += [Ex_dot_P / Ex_dot_F]

    axs[0].plot(T_in_2_range, Ex_dot_D_range, label=f'{T_in_1:.0f} °C')
    axs[1].plot(T_in_2_range, eta_Ex_range, label=f'{T_in_1:.0f} °C')

axs[0].set_ylabel('Specific exergy destruction in kJ/kg')
axs[0].grid()
axs[0].set_axisbelow(True)

axs[1].set_ylabel('Exergetic efficiency')
axs[1].grid()
axs[1].set_axisbelow(True)
axs[1].legend(title='T_in_1:', alignment='left')

fig.supxlabel(
    'Back flow temperature of home heating system in °C',
    fontsize='medium'
)
Text(0.5, 0.01, 'Back flow temperature of home heating system in °C')
../_images/7cbed775d76fd34f585a3547b695a20cd814f94cbcb7dcd308be3d4822d43ab9.png

Proposed solution 2.2#

First step: Variate hot side outlet temperature

Hide code cell content
# Reset inlet temperatures
T_in_1 = 90
h_in_1 = PSI('H', 'P', p_1, 'T', T_in_1+273.15, fluid_1)
ex_in_1 = calc_splitted_physical_exergy(p_1, h_in_1, p0, T0, fluid_1)
T_in_2 = 55
h_in_2 = PSI('H', 'P', p_2, 'T', T_in_2+273.15, fluid_2)
ex_in_2 = calc_splitted_physical_exergy(p_2, h_in_2, p0, T0, fluid_2)

T_out_1_range = [*range(60, 81)]
h_out_1_range = [PSI('H', 'P', p_1, 'T', T_out_1+273.15, fluid_1) for T_out_1 in T_out_1_range]
ex_out_1_range = [calc_splitted_physical_exergy(p_1, h_out_1, p0, T0, fluid_1) for h_out_1 in h_out_1_range]

ex_D_range = list()
eta_ex_range = list()
for ex_out_1 in ex_out_1_range:
    ex_F = sum(ex_in_1) - sum(ex_out_1) + ex_in_2[1] - ex_out_2[1]
    ex_P = ex_out_2[0] - ex_in_2[0]
    ex_D_range += [(ex_F - ex_P) * 1e-3]
    eta_ex_range += [ex_P / ex_F]

fig, axs = plot_ex_D_eta_ex(T_out_1_range, ex_D_range, eta_ex_range)

fig.supxlabel(
    'Back flow temperature of district heating system in °C',
    fontsize='medium'
    )
Text(0.5, 0.01, 'Back flow temperature of district heating system in °C')
../_images/f15fc51cc8d3e0c906dae53de514a2ef9a5268b336810a44ba8cefb8691e9d99.png

Second step: Variate cold side outlet temperature

Hide code cell content
# Reset hot side outlet temperature
T_out_1 = 60
h_out_1 = PSI('H', 'P', p_1, 'T', T_out_1+273.15, fluid_1)
ex_out_1 = calc_splitted_physical_exergy(p_1, h_out_1, p0, T0, fluid_1)

T_out_2_range = [*range(60, 86)]
h_out_2_range = [PSI('H', 'P', p_2, 'T', T_out_2+273.15, fluid_2) for T_out_2 in T_out_2_range]
ex_out_2_range = [calc_splitted_physical_exergy(p_2, h_out_2, p0, T0, fluid_2) for h_out_2 in h_out_2_range]

ex_D_range = list()
eta_ex_range = list()
for ex_out_2 in ex_out_2_range:
    ex_F = sum(ex_in_1) - sum(ex_out_1) + ex_in_2[1] - ex_out_2[1]
    ex_P = ex_out_2[0] - ex_in_2[0]
    ex_D_range += [(ex_F - ex_P) * 1e-3]
    eta_ex_range += [ex_P / ex_F]

fig, axs = plot_ex_D_eta_ex(T_out_2_range, ex_D_range, eta_ex_range)
fig.supxlabel(
    'Feed flow temperature of home heating system in °C',
    fontsize='medium'
    )
Text(0.5, 0.01, 'Feed flow temperature of home heating system in °C')
../_images/2c24dd7962b093e23f3142548dc1d5b684b745569cc5e268f02530f2d0c5c229.png

Third step: Variate both outlet temperatures simultaneously

Hide code cell content
fig, axs = plt.subplots(1, 2, figsize=(10, 4))

for T_out_1 in range(60, 75, 5):
    h_out_1 = PSI('H', 'P', p_1, 'T', T_out_1+273.15, fluid_1)
    ex_out_1 = calc_splitted_physical_exergy(p_1, h_out_1, p0, T0, fluid_1)

    ex_D_range = list()
    eta_ex_range = list()
    T_out_2_range = list()
    for T_out_2 in range(60, 86):
        T_out_2_range += [T_out_2]
        h_out_2 = PSI('H', 'P', p_2, 'T', T_out_2+273.15, fluid_2)
        ex_out_2 = calc_splitted_physical_exergy(p_2, h_out_2, p0, T0, fluid_2)

        ex_F = sum(ex_in_1) - sum(ex_out_1) + ex_in_2[1] - ex_out_2[1]
        ex_P = ex_out_2[0] - ex_in_2[0]
        ex_D_range += [(ex_F - ex_P) * 1e-3]
        eta_ex_range += [ex_P / ex_F]

    axs[0].plot(T_out_2_range, ex_D_range, label=f'{T_out_1:.0f} °C')
    axs[1].plot(T_out_2_range, eta_ex_range, label=f'{T_out_1:.0f} °C')

axs[0].set_ylabel('Specific exergy destruction in kJ/kg')
axs[0].grid()
axs[0].set_axisbelow(True)

axs[1].set_ylabel('Exergetic efficiency')
axs[1].grid()
axs[1].set_axisbelow(True)
axs[1].legend(title='T_out_1:', alignment='left')

fig.supxlabel(
    'Feed flow temperature of home heating system in °C',
    fontsize='medium'
    )
Text(0.5, 0.01, 'Feed flow temperature of home heating system in °C')
../_images/bdf0111a0bb892c8828365d79aaa64a216bf579c120b386135757a742dc2e651.png

Evaporator of an air-water heat pump#

For our next example, consider the heat exchanger used for evaporation of the refrigerant of an air-water heat pump. As the name implies, ambient air is used as the heat source of the cycle. That means, that the ambient temperature \(T_0\) occurs at the inlet of the hot side of the evaporator. As the air is supplying the heat, its temperatures decreases until it exits the heat exchanger. The evaporation of the refrigerant must occur at an even lower temperature. This means, that all temperatures lie at our below the defined ambient temperature \(T_0\).

As heat must always flow from a higher to a lower temperature, the direction of the heat flow of the evaporator is from the ambient air to the evaporating refrigerant. In our preceding examples, the direction of the exergy flow aligned with the heat flow. But exergy always flows from a point of higher potential – meaning higher distance to the ambient state – to that of a lower one. In this case, the refrigerant is cooler and therefore exhibits a higher exergetic potential. This means, that the direction of the exergy flow is opposite to the heat flow direction: from the refrigerant to the ambient air.

What does this mean for our exergy analysis? The increase in exergy, i.e. the product of the process, is the hot side of the heat exchanger. Vice versa, the thermal fuel exergy stems from the evaporating refrigerant, which approaches ambient enthalpy. Therefore, we have to adjust the equations accordingly. As you can see, Eq. (22) and (23) reflect the switch up between the thermal exergy of the hot and the cold side. The mechanical exergy, i.e. in case of the heat exchanger the pressure losses, both remain part of the fuel.

(22)#\[ \dot{E}_F = \dot{E}^{PH}_{in,2} - \dot{E}^{PH}_{out,2} + \dot{E}^{M}_{in,1} - \dot{E}^{M}_{out,1}\]
(23)#\[ \dot{E}_P = \dot{E}^{T}_{out,1} - \dot{E}^{T}_{in,1}\]

Note

As you can imagine by now, the location of the ambient state has a big influence of the results of the exergy. Other constellations are possible, with the ambient temperature lying somewhere between the inlet and outlet tempereture of either side of the heat exchanger. All eqautions implemented in the exergy analysis tool of the TESPy module can be found in Witte et al. [3].

Exercise 3#

Compare the old calculation rule with the adjusted one by calculating fuel and product exergy for a range of evaporation temperatures from 2 to 15 degrees Celsius below the hot side outlet temperature. Use Ammonia as the refrigerant. Let the hot side outlet temperature be 5 degrees cooler than the inlet temperature and a heat flow of 500 kW be exchanged. Assume an inlet enthalpy of the refrigerant of 600 kJ/kg and a full evaporation.

Proposed solution 3#

Hide code cell content
T0 = 15 + 273.15 # Ambient and hot side inlet temperature
p0 = 1.013e5  # Ambient and hot side pressure
T_1_out = T0 - 5

h_in_1 = PSI('H', 'P', p0, 'T', T0, 'Air')
h_out_1 = PSI('H', 'P', p0, 'T', T_1_out, 'Air')
ex_in_1 = calc_splitted_physical_exergy(p0, h_in_1, p0, T0, 'Air')
ex_out_1 = calc_splitted_physical_exergy(p0, h_out_1, p0, T0, 'Air')
m_dot_1 = 500e3 / -(h_out_1 - h_in_1)

h_in_2 = 600e3

T_2_range = list()
Ex_dot_wrong = list()
Ex_dot = list()
for ttd in range(2, 16):
    T_2 = T_1_out - ttd
    T_2_range += [T_2 - 273.15]
    p_2 = PSI('P', 'Q', 1, 'T', T_2, 'Ammonia')
    h_out_2 = PSI('H', 'Q', 1, 'T', T_2, 'Ammonia')
    ex_in_2 = calc_splitted_physical_exergy(p_2, h_in_2, p0, T0, 'Ammonia')
    ex_out_2 = calc_splitted_physical_exergy(p_2, h_out_2, p0, T0, 'Ammonia')
    m_dot_2 = 500e3 / (h_out_2 - h_in_2)

    Ex_dot_F_wrong, Ex_dot_P_wrong = calc_ex_fuel_prod(
        m_dot_1, ex_in_1, ex_out_1, m_dot_2, ex_in_2, ex_out_2
        )
    Ex_dot_wrong += [(Ex_dot_F_wrong*1e-3, Ex_dot_P_wrong*1e-3)]

    Ex_dot_F = (
        m_dot_2 * (sum(ex_in_2) - sum(ex_out_2))
        + m_dot_1 * (ex_in_1[1] - ex_out_1[1])
        )
    Ex_dot_P = m_dot_1 * (ex_out_1[0] - ex_in_1[0])
    Ex_dot += [(Ex_dot_F*1e-3, Ex_dot_P*1e-3)]

fig, ax = plt.subplots(figsize=(8, 6))

ax.plot(T_2_range, [Ex[0] for Ex in Ex_dot], color='#00395B', label='Fuel (adjusted)')
ax.plot(T_2_range, [Ex[1] for Ex in Ex_dot], color='#00395B', ls=':', label='Product (adjusted)')
ax.plot(T_2_range, [Ex[0] for Ex in Ex_dot_wrong], color='#B54036', label='Fuel (wrong)')
ax.plot(T_2_range, [Ex[1] for Ex in Ex_dot_wrong], color='#B54036', ls=':', label='Product (wrong)')

ax.set_xlabel('Evaporation temperature in °C')
ax.set_ylabel('Exergy in kJ')
ax.legend()
ax.grid()
ax.set_axisbelow(True)
../_images/40b16f44dc561eb13cb7e347492a12c89322ddc2112c9e394f354271c43c7459.png

Lessons Learned#

After this section you should be able to perform a simple exergy analysis of a heat exchanger. You should be aware of the influence of the chosen ambient state and how the underlying equations have to be arranged. On top of that, you should have learned how the key parameters of a heat exchanger, e.g. the fluids temperatures, impact the exergy fuel and product and finally the processes exergy destruction and efficiency.