Mixer - Nouman090/ThermoSim GitHub Wiki

A mixer combines multiple inlet streams into a single outlet stream. Mass and energy are conserved; the outlet enthalpy is calculated from the mass-weighted average of inlet enthalpies.

Physics

ṁ_out = Σ ṁ_in,i
H_out = (Σ ṁ_in,i × H_in,i) / ṁ_out
Ex_D = Σ Ex_in,i - Ex_out

Pressure is typically taken from the first inlet or can be specified for the outlet.

Syntax

Mixer(Model, ID, In_states, Out_state, Calculate=False)
Parameter Type Default Description
Model ThermodynamicModel The model object
ID str Unique component name
In_states list of str List of inlet state point names
Out_state str Outlet state point name
Calculate bool False Solve immediately if True

Output Attributes

Attribute Type Unit Description
.Ex_D float/str W Exergy destruction
.Solution_Status bool True if solved
.Out Prop Outlet state point object

Cases

Case 1: Two Inlets, One Outlet

Most common. Mix two streams with known mass flows and enthalpies.

from Thermosim import ThermodynamicModel, Mixer

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet 1: hot water
Model.add_point('water', 'In1', P=2e5, T=353.15, Mass_flowrate=0.5)

# Inlet 2: cold water
Model.add_point('water', 'In2', P=2e5, T=293.15, Mass_flowrate=0.3)

# Outlet: pressure known
Model.add_point('water', 'Out', P=2e5)

Mixer(Model, 'Mix1', In_states=['In1', 'In2'], Out_state='Out', Calculate=True)

print(f"Outlet mass flow: {Model.Point['Out'].Mass_flowrate:.2f} kg/s")
print(f"Outlet T:         {Model.Point['Out'].T - 273.15:.2f} °C")
print(f"Outlet H:         {Model.Point['Out'].H:.2f} J/kg")

Case 2: Three Inlets

Mix three streams with different temperatures.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('water', 'A', P=1.5e5, T=363.15, Mass_flowrate=0.4)
Model.add_point('water', 'B', P=1.5e5, T=323.15, Mass_flowrate=0.3)
Model.add_point('water', 'C', P=1.5e5, T=293.15, Mass_flowrate=0.2)
Model.add_point('water', 'Mixed', P=1.5e5)

Mixer(Model, 'Mixer3', In_states=['A', 'B', 'C'], Out_state='Mixed', Calculate=True)

print(f"Total flow: {Model.Point['Mixed'].Mass_flowrate:.2f} kg/s")
print(f"Mixed T:    {Model.Point['Mixed'].T - 273.15:.2f} °C")

Case 3: Regenerative Rankine Cycle (Feedwater Heater)

Mix extracted steam with feedwater.

Model = ThermodynamicModel()
Model.set_dead_state()

# Extraction steam
Model.add_point('water', 'Extraction', P=5e5, T=425.15, Mass_flowrate=0.2)

# Feedwater from pump
Model.add_point('water', 'Feedwater', P=5e5, T=313.15, Mass_flowrate=0.8)

# Mixed outlet
Model.add_point('water', 'FWH_out', P=5e5)

Mixer(Model, 'FeedwaterHeater', In_states=['Extraction', 'Feedwater'],
      Out_state='FWH_out', Calculate=True)

print(f"FWH outlet T: {Model.Point['FWH_out'].T - 273.15:.2f} °C")

Case 4: Different Fluids (Error Case)

Mixing different fluids will cause errors in property calculations.

# NOT RECOMMENDED: different fluids
Model.add_point('water', 'In1', P=2e5, T=353.15, Mass_flowrate=0.5)
Model.add_point('air', 'In2', P=2e5, T=293.15, Mass_flowrate=0.3)
Model.add_point('water', 'Out', P=2e5)

# This will fail because CoolProp cannot mix fluids
# Mixer(Model, 'Mix1', In_states=['In1', 'In2'], Out_state='Out', Calculate=True)

Print Component Data

print(Model.Component['Mix1'])

Output:

Mix1 (Mixer):
  Total mass flow : 0.8000 kg/s
  Outlet H        : XXXXXX.XX J/kg
  Exergy destr.   : XXXX.XX
  Solved          : True

Complete Example

from Thermosim import ThermodynamicModel, Mixer

# Create model
Model = ThermodynamicModel()
Model.set_dead_state()

# Define inlets
Model.add_point('water', 'Hot', P=2e5, T=363.15, Mass_flowrate=0.6)
Model.add_point('water', 'Cold', P=2e5, T=293.15, Mass_flowrate=0.4)

# Define outlet
Model.add_point('water', 'Mixed', P=2e5)

# Add mixer
Mixer(Model, 'MainMixer', In_states=['Hot', 'Cold'], Out_state='Mixed', Calculate=True)

# Access results
mixer = Model.Component['MainMixer']
print(f"Total mass flow:    {Model.Point['Mixed'].Mass_flowrate:.2f} kg/s")
print(f"Mixed temperature:  {Model.Point['Mixed'].T - 273.15:.2f} °C")
print(f"Mixed enthalpy:     {Model.Point['Mixed'].H:.2f} J/kg")
print(f"Exergy destruction: {mixer.Ex_D:.2f} W")