Source code for RCAIDE.Library.Methods.Thermal_Management.Reservoirs.Reservoir_Tank.compute_mixing_temperature
# RCAIDE/Library/Methods/Thermal_Management/Reservoirs/Reservoir_Tank/compute_mixing_temperature.py
# Created: Apr 2024, S. Shekar
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
import RCAIDE
import numpy as np
from scipy.optimize import fsolve
[docs]
def compute_mixing_temperature(reservoir, state, coolant_line, delta_t, t_idx):
"""
Computes the resultant temperature of the reservoir at each time step with coolant exchanging heat to the environment.
:param reservoir: Reservoir Data Structure
- reservoir.surface_area
- reservoir.volume
- reservoir.thickness
- reservoir.material.conductivity
- reservoir.material.emissivity
- reservoir.coolant
:type reservoir: dict
:param state: State Data Structure
- state.conditions.freestream.temperature
- state.conditions.energy.coolant_line[reservoir.tag].coolant_temperature
:type state: dict
:param coolant_line: Coolant Line Data Structure
:type coolant_line: dict
:param delta_t: Time step
:type delta_t: float
:param t_idx: Time index
:type t_idx: int
:return: Updated temperature of the reservoir coolant
:rtype: float
:Assumptions:
N/A
:Source:
None
"""
T_current = 0
volume = 0
for reservoir in coolant_line.reservoirs:
T_current += state.conditions.energy[coolant_line.tag][reservoir.tag].coolant_temperature[t_idx, 0]
volume += reservoir.volume
T_current = T_current / len(coolant_line.reservoirs)
# Reservoir Properties
coolant = reservoir.coolant
rho_coolant = coolant.compute_density(T_current)
Cp_RES = coolant.compute_cp(T_current)
mass_coolant = rho_coolant * volume
mass_flow_HAS = []
T_outlet_HAS = []
Cp_HAS = []
mass_flow_HEX = []
T_outlet_HEX = []
Cp_HEX = []
for battery in coolant_line.battery_modules:
for HAS in battery:
if isinstance(HAS, RCAIDE.Library.Components.Thermal_Management.Batteries.Liquid_Cooled_Wavy_Channel):
mass_flow_HAS.append(state.conditions.energy[coolant_line.tag][HAS.tag].coolant_mass_flow_rate[t_idx + 1])
T_outlet_HAS.append(state.conditions.energy[coolant_line.tag][HAS.tag].outlet_coolant_temperature[t_idx + 1])
Cp_HAS.append(coolant.compute_cp(T_outlet_HAS[-1]))
for HEX in coolant_line.heat_exchangers:
mass_flow_HEX.append(state.conditions.energy[coolant_line.tag][HEX.tag].coolant_mass_flow_rate[t_idx + 1])
T_outlet_HEX.append(state.conditions.energy[coolant_line.tag][HEX.tag].outlet_coolant_temperature[t_idx + 1])
Cp_HEX.append(coolant.compute_cp(T_outlet_HEX[-1]))
# Solve for T_final using fsolve
T_final = fsolve(energy_balance, T_current, args=(T_current, delta_t, mass_coolant, Cp_RES, Cp_HAS, Cp_HEX, mass_flow_HAS, T_outlet_HAS, mass_flow_HEX, T_outlet_HEX, reservoir, state, t_idx))[0]
# Update the reservoir temperature
state.conditions.energy[coolant_line.tag][reservoir.tag].coolant_temperature[t_idx + 1, 0] = T_final
return
[docs]
def compute_heat_loss_to_environment(T_final, T_ambient, reservoir):
# Properties of Reservoir
A_surface = reservoir.surface_area
thickness = reservoir.thickness
conductivity = reservoir.material.conductivity
emissivity_res = reservoir.material.emissivity
# Heat Transfer properties
sigma = 5.69e-8 # Stefan Boltzmann Constant
h = 1000 # [W/m^2-K]
emissivity_air = 0.9
# Heat Transfer due to conduction
dQ_dt_cond = conductivity * A_surface * (T_final - T_ambient) / thickness
# Heat Transfer due to natural convection
dQ_dt_conv = h * A_surface * (T_final - T_ambient)
# Heat Transfer due to radiation
dQ_dt_rad = sigma * A_surface * ((emissivity_res * T_final ** 4) - (emissivity_air * T_ambient ** 4))
return dQ_dt_cond + dQ_dt_conv + dQ_dt_rad
[docs]
def energy_balance(T_final, T_current, delta_t, mass_coolant, Cp_RES, Cp_HAS, Cp_HEX, mass_flow_HAS, T_outlet_HAS, mass_flow_HEX, T_outlet_HEX, reservoir, state, t_idx):
# Ambient Air Temperature
T_ambient = state.conditions.freestream.temperature[t_idx, 0]
# Compute heat loss to the environment
dQ_dt_env = compute_heat_loss_to_environment(T_final, T_ambient, reservoir)
return (T_final - T_current
- (delta_t / (mass_coolant * Cp_RES)) *
(sum(mass_flow_HAS) * np.average(Cp_HAS) * (np.average(T_outlet_HAS) - T_final) +
sum(mass_flow_HEX) * np.average(Cp_HEX) * (np.average(T_outlet_HEX) - T_final) -
dQ_dt_env))