Heat Exchanger Calcs

Heat Exchanger Calcs

Model:
- Cleaned

- update, figuring out how battery works

  • CoolProp –> library used to obtain temp-dependent thermophysical properties (density, viscosity, thermal cond, cp, etc.) for both coolant and air.

Hand calcs (pretty messy):

Structure:

Setup & Inputs

  • Geometry: all physical dims—>radiator FPI, core size, cold plate channel width/height. hose ID, etc.

  • Fluids → tells CoolProp what fluids to use (like MEG-30% and Air).

  • Fans/Pump: simple two-point linear curves (shutoff head H0 and free-flow Q0

  • Conditions: t_air_in_c, t_cool_in_c, mph list

  • Masses: weight of cells, plate, and coolant (for transient model)

Heat Generation: Calculates the total watts (Q gen) the system has to reject. Joule + reversible heating + I^2R from busbars and collectors.

Liquid Loop Solver:

  • Finds operating point where the pump "push" = loop "resistance"

  • Push: Calculated by pump_head_m linear (pump curve).

  • Resistance: Calculated by get_loop_head_m. Adds up the pressure drop from hose, cold plate, radiator, friction + minor losses

  • dp functions use the darcy weisbach eqn for pressure drop. Friction factor 'f' is found by colebrook friction factor.

Air Loop Solver:

  • Finds the air flow operating point (in CFM) where "push" = "resistance."

  • Push: fan pressure single pa at cfm (fan curve) + get ram dp

  • Resistance: air system split dp at cfm sums up all the air-side losses:

    • intake dp pa: Loss at the inlet scoop.

    • mesh dp pa ergun hole: Uses the Ergun equation for flow through the porous mesh.

    • air duct dp pa: Darcy-Weisbach again for the duct friction.

    • radiator core air dp pa: pressure drop through the fin stack.

Heat Transfer Calcs:

  • Stop 1: Cell -> Coolant (get_coldplate_ua)

    • First, heat goes through the TIM and plate (contact chain r k per w).

    • Then it gets into the coolant. The convection coefficient 'h' inside the cold plate channels is found using the Dittus-Boelter equation.

  • Stop 2: Coolant → Air (get rad ua overall finned)

    • This finds the total UA for the radiator. It's a sum of resistances: R_liquid + R_wall + R_air

    • R_liquid (get rad liq h): Uses Dittus-Boelter again to find 'h' for the coolant inside the rad tubes.

    • R_air (get air h from cfm): Finds the air-side 'h' by:

      • Calculating air Re and Pr inside fin gaps

      • Using a Nusselt number correlation for parallel plates to find h

      • ua air finned from h then applies fin efficiency to get the final air-side UA

  • Final Rejection (get_rad_q)

    • Takes the total radiator UA and uses the epsilon-NTU method

    • It finds C_min and effectiveness to get final Q_rej

Transient analysis:

  • Lumped-capacity model. It treats the whole system (cells, plate, coolant) as one big object with one thermal mass

Output:

image-20251023-155923.png

 

Heat Exchanger (Radiator):

  • Core of the thermal model. The goal is to find the radiator's total UA value (overall heat transfer coefficient x area).

  • UA os the inverse of total thermal resistance (R_th). "Total heat-moving ability." Higher UA = better cooling.

  • Model builds UA by adding 3 main resistances in series:

    1. R_liquid (coolant ->tube):

      • How fast heat gets from coolant to the inside of tube wall

        • Dittus-Boelter equation.

      • It finds Nu=f(Re, Pr) for the coolant flow, which gives us the liquid-side heat transfer coefficient (h).

    2. R_wall (through tube):

      • How fast heat conducts through the thin copper tube walls.

      • Standard conduction calc: R=t/(k*A)

    3. R_air (tube → air):

      • the main bottleneck in the whole system.

      • We calculate the air-side h based on actual fin geometry (17 FPI)

      • It finds the air's Reynolds number (Re) in the tiny fin gaps (using D_h =2*S)

      • It then uses Nusselt number (Nu) correlation for parallel plates to get the air-side h

      • Finally it applies fin efficiency (eta_f) because the fin tips are always cooler than at the base

      • This gives the final, effective air-side UA

  • Final Rejection (Q_rej):

    • Once we have the total UA for the radiator, we use the Epsilon-NTU (eps-NTU) method to find the actual watts of heat it rejects

      • Incropera, Ch. 11

    • It finds C_min (the lowest heat capacity rate, which is almost always the air) and eps (the radiator's "effectiveness").

    • The final calc is: Q_rej=eps*C_min*(T_cool_in-T_air_in)

Some Comments:

Fans are currently placed before the radiator -> this is a pusher setup.
-> switch to a puller configuration (fans mounted after the radiator).

  • Ram air from driving helps push air through the radiator → fans work less at speed

  • Air gets pulled evenly through the whole radiator → better cooling performance

  • Lower risk of recirculation (air looping backward into the intake)

  • Overall → better airflow, better cooling margin

when pushers (fans before radiator) might be better:

  • Not enough room behind radiator

  • Fans can’t handle hot air after radiator

  • Want fans protected from debris/water

  •  

Condensation Risk

Decision: No expected condensation

Why: Condensation occurs if any exposed surface temperature < ambient dew‑point.

  • With t_air_in =23 C and t_cool_in =40 C, radiator fins and cold‑plate externals will sit > 30–38 °C, which is above typical Austin dew‑points (~14–22 C at 50–90% RH)

  • Interior of battery and coolant loop cannot condense (no humid air exposure)

  • External surfaces only risk if T_surface < dew point

  • Battery pack exterior stays warm during operation → very low risk

  • Radiator fins might “sweat” only in cool, humid conditions (harmless)

  • Result: No risk; margin > ~8  in typical conditions.

    • Inside coolant loop: sealed liquid path → no humid air → internal condensation correlations do not apply.

    • Inside battery pack: no free moisture and parts are hotter than coolant → no internal condensation.

    • Two‑phase condensation inside tubes: not present in this water‑glycol loop → ignore Dobson–Chato / inside‑tube correlations.

References:

[1] Incropera, DeWitt, Bergman, Lavine. Fundamentals of Heat and Mass Transfer, 7th ed.

- Ch.2–3 thermal resistance networks & conduction

- Ch.5 lumped-capacitance transients

- Ch.6–8 convection basics, Re/Pr/Nu, internal correlations (Dittus–Boelter, laminar 4.36)

- Ch.11 heat exchangers, ε–NTU framework (crossflow charts)

- Ch.12 radiation (linearized hr ≈ 4 σε T̄^3)

[2] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe (TP-410)

[3] Kays, London. Compact Heat Exchangers

[4] Ergun, S. “Fluid Flow Through Packed Columns,” Chem. Eng. Prog. 48 (1952)

[5] 1130061074-MIT.pdf / FSAE Electric Vehicle Cooling System Design / nbnfioulu-202001181034.pdf / Zips Electric - Cooling System

note:

spent a while digging through Incropera/ME 339 notes for the right equations and piecing the workflow together. all calcs built using textbook. used chat to turn equations into working code and clean up the structure/printout style.

Design modifications to improve thermal performance (probably wont):

Air path (fans & ducting)

  • Add additional fans

    • directly increases total cfm

      • adds weight, cost, electrical complexity/load

  • Specify fans with higher static pressure

    • better ability to push air through the high-resistance radiator core, improving cfm

      • less efficient and consume more power

  • Optimize duct geometry (smoother bends/better sealing)

    • lowers air-side pressure drop, again, more cfm

      • major packaging and integration challenge. redesign would impact mechanical interfaces.

Heat exchanger (radiator)

  • Add a second radiator

    • doubles heat rejection surface area

      • significant added weight (radiator + coolant), cost, plumbing complexity, and doubled failure points (leaks)

  • Thicker radiator core

    • increases fin surface area

      • dramatically increases air-side deltaP. could "stall" the existing fans, leading to less cfm

  • Radiator with larger frontal area

    • more surface area

      • packaging constraint

Liquid path (pump/plumbing/cold-plate)

  • Stronger pump (higher head/flow)

    • increases L/min → improves h

      • more power consumption

  • Larger diameter hoses

    • lowers liquid-side deltaP -> higher flow rate.

      • weight. larger total coolant volume

  • Re-design cold plate/manifolds (more channels, CFD-optimized)

    • improve flow distribution/ increase the cold plate's internal surface area.

    • high CAD/CFD/manufacturing effort. more/smaller channels would increase liquid-side deltaP, could overwhelm the low-power pump and reduce flow rate.

 

Workday 10/25:

**update* – I did not think of time-dependency

Lithium-ion battery thermal modelling and characterisation: A comprehensive review - ScienceDirect

Assumptions:

  • battery heat → constant

  • coolant flow → constant

  • airflow → constant

  • UA air-side/liquid-side → constant (computed once based on fixed temps)

How evolve the ss model → dynamic

  • accounts for battery heat generation changing with SOC, current, and surface temp

  • updates coolant loop performance so cell surface stays < 80 C

What needs to change

  • battery heat gen q_gen changing so that changes temp of cell surface

    • what drives battery generation:

      • entropic coefficient → based on chemistry, SOC, T

      • internal resistance → based on SOC, cell temp, cycle aging

      • pack current → throttle/load, regen braking, grade, speed, HVAC, pikes/accel/ drive-cycle effects

  • fluid properties then change

  • hydraulics: Re, f, dP change

    • airflow I will assume to remain constant because air-side is not affected by changing cell surface temp changing

  • ua of radiator: Re, Nu => h since coolant side changing

Solution??

  1. add time loop around solver

  2. add m*cp energy balance to update T_cell each step

  3. drive with speed/current/SOC profiles

  4. make R_internal (SOC,T) and dS (SOC,T) functions (start simple)

  5. add guards/controls and validate with a few canned scenarios

 

 

Battery + Electrical Info

  • Cell type: Samsung INR21700-50S (NMC)

  • Pack layout: 9P32S → 288 cells

  • Nominal pack voltage: ~115–120 V

  • Max allowable cell surface temp: 80C

  • Internal resistance reference: ≤14 mΩ @ mid-SOC

  • Max discharge limits:

    • 25A continuous without cooling cutoff

    • 45A with cutoff at high temps

Vehicle Integration Info

  • BPS provides CAN signals for:

    • Current (0x103)

    • SOC (0x106)

    • Pack voltage (0x10D)

  • Motor controller CAN publishes:

    • Vehicle velocity (0x243) → for ram-pressure airflow

“If the battery is discharging over 30 min, how does temperature actually change each second
when SOC drops + cooling varies + speed changes?”

Real Condition

What Changes

Real Condition

What Changes

Speed up

More heat + ram airflow incr

Hairpin turn / slow section

Ram airflow decr, heat still up

Regen braking

Current flips sign, heat decr or even cooling

SOC decrease

DCIR incr → heat incr over time

Pack warms

Electrical resistance incr → heat incr further

 

Q_gen → Heat depends on:

  • current draw (I)

  • internal resistance (R changes with SOC & temp)

  • electrochemistry (entropic heat)

→ ohmic heating + reversible heat

 

Control loop??????

  • if battery temp is low → slow pump

  • if battery temp is rising → increase speed

  • if near 80C → full send

 

Cooling performance changes when:

  • coolant heats up → viscosity drops → pump flows more

  • car speeds up → ram pressure → fans do less work

  • coolant flow changes → UA changes → better/worse cooling

→ feeds back every second

 

If the battery produces more heat than cooling can remove → temperature rises
If cooling > heat generation → temperature drops

  • model like a thermal capacitor: New Temp = Old Temp + (Qgen – Qrej) / (thermal mass)

 

SOC → as battery drains:

  • internal resistance goes up

  • entropic heat changes

  • voltage & current shift

 

ram pressure → more air to radiator → cooler battery at higher speed

So: lower speeds → battery heats, higher speeds → battery cools

I(t), SOC(t), T(t), Speed(t)

 

 

Trying to understand battery heat generation:

Joule heating increases from “struggle” of:

  • battery almost empty

  • battery getting hot

  • battery pushing a ton of power

  • battery aging

Entropic heating → chemical reactions releasing/absorbing heat

  • discharging (accelerating) → heats up

  • Regen braking → cools

Interconnection heating → busbars and welds have electrical resistance

  • bad welds → more heat

  • busbars thin → more heat

 

 

SOC = State of Charge → how full is the battery

  • “low SOC means more heat” → “an empty battery “struggles” harder and gets hotter”

 

Regen = Regenerative Braking

  • acceleration: battery → motor → wheels → car moves → battery loses energy

    • acceleration → discharge → heat

  • braking: wheels → motor → battery → car slows → battery gains energy

    • regen → charge → slight cooling

    • motor sends electricity back into the battery

Purpose

  • Predict transient pack temperature during race operation

  • Ensure battery cell surface temperature remains < 80°C

  • Inform cooling system sizing (fans, pump, radiator, ducting)

  • Support control strategy development for safe power output

 

 

Modeling Approach: Lumped Capacitance Method

Treat the entire pack (cells + cooling plate + coolant mass) as a single thermal node with uniform temperature:

m*cp​*dT(t)/dt​=Q_gen​(t)−Q_​rej​(t)

Time Integration Loop:

  1. Get I(t), SOC(t), and speed(t) from profiles.

  2. Update fluid properties (CoolProp) → Re, f, dp, UA.

  3. Compute Qgen and Qrej

  4. Update cell temperature using energy balance.

  5. Log temperature, SOC, and power each timestep.

 

 

What heat sources we model

  • Joule Heating

  • Entropic Heating: reversible thermal term v soc & temperature

  • Interconnect Resistances: included in pack losses

All vary with SOC, T, and current → dynamic behavior.

What cooling mechanisms we model

  • Liquid cooling via cold plate convection to coolant

  • Radiator exchange to airflow using eps–NTU method

  • Pump and fan performance vs operating point

  • Ram pressure contribution from vehicle velocity

 

Battery runs so long as:

  • SOC > minimum cutoff

  • temperature < 80C

  • voltage > safe limit

  • current < BMS fault

Battery heat generation:

Heat depends on:

  • Pack current (from drive cycle):
    → I2R losses

  • Internal resistance (DCIR) varies with:

    • SOC (battery empties → R incr)

    • Temperature (warmer cells → R incr)

  • Entropic heat varies with:

    • SOC

    • Temperature (positive when discharging, negative during regen)

 

Coolant performance:

CoolProp recalculates fluid properties vs new temps

  • rho(T) —> density,

  • mu(T) —> viscosity,

  • k(T), cp(T) —> thermal performance

This changes:

  • reynolds number, pressure drops, pump curve intersection, coolant flow rate

  • UA updates on coolant-side changes

  •  

 

Airflow performance:

  • fan curve + ram pressure from vehicle velocity

Benefit:

  • Cooling improves on straights

  • Cooling collapses in slow corners

 

SOC tracking:

Each timestep:

  • Integrate current → energy used

  • SOC drop causes:

    • OCV changes

    • DCIR increases → heat ↑ (late-race)

 

  • CAN signals: current, SOC, velocity

  • Samsung INR21700-50S → references for:

    • DCIR behavior

    • thermal limits

 

  • DCIR vs SOC & Temp → using assumed curve

  • OCV vs SOC curve → using generic NMC curve

  • Coolant inlet/outlet temp location on CAN

  • Fan control strategy (currently fixed fan)

 

 

 

Dynamic sim :
Every time step: get current & speed from a profile → update fluid properties → solve flows (coolant + air) → compute UA → get Q_reject → compute battery heat → lumped-capacitance temperature step on the pack → coulomb-count SOC. Logs everything.

 

 

Model placeholders + assumptions/guesses:

Battery Placeholders

  • OCV curve: ocv_from_soc(SOC)

  • Internal resistance model: rint_from_soc_T(SOC, Tcell_C)

  • Entropic heating coefficient: dUdT_from_soc_T(SOC, Tcell_C)

Thermal Contact Placeholders

  • TIM conductivity: tim_k_w_per_m_k

  • Contact heat transfer coefficients:

    • h_contact1_w_m2k