![]() |
SLIDE
3.0.0
A simulator for lithium-ion battery pack degradation
|
#include <CoolSystem_HVAC.hpp>
Public Member Functions | |
CoolSystem_HVAC () | |
CoolSystem_HVAC (size_t Ncells, int control, double Q0) | |
double | getQcoolAC_tot () |
double | dstate (double Etot, double Echildren, double t) override |
calculate the new coolant temperature from a heat exchange of Etot More... | |
void | control (double Thot_local, double Thot_global) override |
virtual void | storeData (size_t Ncells) override |
virtual void | writeData (const std::string &prefix) override |
CoolSystem_HVAC * | copy () override |
![]() | |
CoolSystem () | |
CoolSystem (size_t Ncells, int control) | |
virtual | ~CoolSystem ()=default |
double | T () |
void | setT (double Tnew) |
virtual double | dstate (double Etot, double Echildren, double t) |
calculate the new coolant temperature from a heat exchange of Etot More... | |
virtual double | getH () |
auto | getFlr () |
auto | getControl () |
auto | getEoperation () |
void | reset_Eoperation () |
void | setControl (int control) |
virtual void | control (double Thot_local, double Thot_global) |
virtual void | storeData (size_t Ncells) |
virtual void | writeData (const std::string &prefix) |
auto | getHeatEvac () |
for unit testing, total heat evacuated from children over entire lifetime More... | |
auto | getHeatabsorbed () |
for unit testing, total heat evacuated from children over entire lifetime (heat capacity not constant -> cannot convert Tend-T1 to energy) More... | |
auto | getTotalTime () |
total time this coolsystem has existed for [s] More... | |
virtual CoolSystem * | copy () |
Public Attributes | |
CoolSystem_HVACData | HVACdata |
#TODO -> needs to be protected. More... | |
![]() | |
CoolSystemData | coolData |
Protected Member Functions | |
double | getACoperatingPower (double Qac, double t) |
calculate the operating power of the AC unit More... | |
Protected Attributes | |
double | Q_ac |
cooling power from the AC system [W]. This value will be controlled similarly to the flowrate inside the container More... | |
double | COP |
coefficient of performance of the AC system [-] More... | |
double | controlAC_onoff_Ton |
T when the AC unit switches on. More... | |
double | controlAC_onoff_Toff |
T when the AC unit switches off, ie minimum temperature. More... | |
double | controlAC_onoff_Q |
cooling power when on More... | |
double | controlAC_prop_T |
T to which the proportional control cools the container. More... | |
double | controlAC_prop_gain |
gain of the proportional controller for the AC unit More... | |
![]() | |
double | Tcoolant { settings::T_ENV } |
< state More... | |
double | flowrate {} |
flow rate of cooling fluid [m3/s] More... | |
double | fluid_rho |
density of cooling fluid kg / m3 More... | |
double | fluid_cp |
heat capcity of cooling fluid J / kG / K More... | |
double | fluid_V |
total volume of coolant available for this coolsystem m3 More... | |
size_t | Ncells { 0 } |
cooling system properties More... | |
int | control_strategy |
integer indicating how the cooling is done More... | |
double | control_onoff_Ton |
T when the system switches on. More... | |
double | control_onoff_Toff |
T when the system switches off. More... | |
double | control_onoff_flr |
flow rate when on More... | |
double | control_prop_T |
T to which the proportional control cools the children. More... | |
double | control_prop_gain |
gain of the proportional controller More... | |
double | Across |
cross section of the fluid [m2], used to convert flow rate to flow speed More... | |
double | eta { 0.5 } |
efficiency More... | |
Friends | |
struct | CoolSystem_HVACData |
slide::CoolSystem_HVAC::CoolSystem_HVAC | ( | ) |
< Nominal power of the AC system (active cooling of the container) For a battery of 2700 cells (continous 1C cycling) we need to evacuate about 4 kW continuously (at the begin of life) or about 1.5 W per cell (this is the heat evacuated by the top level module from its children, during equilibrium equal to total heat generation of all cells) which is 2.5% of total cell energy (cell power ~ 4V * 15A = 60 W) During degradation, R can easily double so we expect to have to cool about 3 W per cell continuous So the maximum power should be about double so we can cool down (3 W heating + 7.5 W cooling = cool down at 4.5 W or 50% faster than the cells heated up)
< cool 7.5 W per cell (5 times the heating load at begin of life)
< value from Schimpe's paper of thermal model of battery but double check
< if this value is < settings::T_ENV, then coolsystems can cool cells below their initial temperature (which is settings::T_ENV) resulting in negative total heat energy absorbed in cells. See unit tests for module_s and then some unit tests might fail because they demand positive heating energy (cells must heat up due to cycling) therefore, it is not recommended to set this T below settings::T_ENV (20 degrees at the moment)
< 1 at the T where the on/off control would go on, 0 at the target T
< Data storage
slide::CoolSystem_HVAC::CoolSystem_HVAC | ( | size_t | Ncells, |
int | control, | ||
double | Q0 | ||
) |
< cool 20 W per cell (cell power ~ 4V * 15A = 60 W so worst case 30% losses)
< value from Schimpe's paper of thermal model of battery but double check
< Increase the inertia of the coolsystem if Q0 >>>> Qac_per_cell * Ncells since the inertia in CoolSystem is based on Ncells only, and designed for 7.5W per cell
< increase proportional to the fraction of Q0 of the total heating
< todo control hotspot -> 20 to 30
< todo control the local T to 20 degrees
< todo control the hotspot to 25 degrees
< todo do something similar to cool3
< todo
< 1 at the T where the on/off control would go on, 0 at the target T
< Data storage
|
overridevirtual |
< Call the base class function to control the fan inside the container to cool the racks
< variables
< control the cooling power of the AC system note that the off criterium is always the same, never cool below the minimum temperature this is because we are controlling an active system, so in theory it would keep cooling to freezing, -100 and even -Inf degrees if you wouldn't stop it
< always on unless T of the container < minimum temperature
< on/off depending on child T -> on and off based on T of container
< on/off depending on global hot spot temperature -> on based on T of hottest cell, off based on T of container
< proportional to T of hottest child SU -> proportional to T of container
< error on the local temperature
< ensure we never go negative
< avoid very small cooling powers
< can't do more than the design-power
< proportional to global hot spot temperature -> on based on T of hottest cell, off based on T of container
< error on the global temperature
< ensure we never go negative
< avoid very small cooling powers
< can't do more than the design-power
< always on
Reimplemented from slide::CoolSystem.
|
inlineoverridevirtual |
|
overridevirtual |
calculate the new coolant temperature from a heat exchange of Etot
< Ensure Qtot == Qchildren for consistency
< - since it is cooling down
< calculate the new temperature
< increase the power required to run the cooling system power scales like speed ^ 3 and rho ^1 (kinetic energy/mass * flow rate = rho * A * v * v^2 / 2) see also https://fluidflowinfo.com/fan-performance-and-fan-laws/, and my undergrad course on wind energy [fan = opposite wind turbine]
< speed of the fluid
< this is the energy to speed up air from stationary to the required speed to cool the child SUs [W]
< this is the energy to operate the AC unit
< update the mean cooling power
< heat extracted from children, only until next data collection interval (reset to 0 in storeData)
< only until next data collection interval (reset to 0 in storeData)
< time since start of simulations
< increase the total operating energy for the fan
< increase the total lifetime operating poer
< increase the total operating energy for the AC unit
< heat extracted from the entire coolsystem by the AC system
< cout<<"\t HVAC system: Total heat energy "<<Qtotal<<", HVAC cooling "<<Q_ac*t<<" giving net energy "<<Q<<" and new T "<<Tnew<<" after "<<t<<" seconds"<<endl;
Reimplemented from slide::CoolSystem.
|
protected |
calculate the operating power of the AC unit
Data storage
< if the environment is too hot, use active cooling with the AC system
< else we can suck in cold air
< flow rate of environment air we need (cooling energy = flow rate * rho * cp * dT)
< assume the surface area of the fan to suck in air is twice the surface area of the fan to cool the cells
< speed of the air
< energy to operate the fan
|
inline |
|
overridevirtual |
< Call parent function to store conventional data
< sets ttot to 0 so do this after wards
Reimplemented from slide::CoolSystem.
|
overridevirtual |
< store histograms and degradation state of cell utilisation
< #TODO -> since we are doing append we cannot write like this IMPORTANT!!!!!
Reimplemented from slide::CoolSystem.
|
friend |
|
protected |
cooling power when on
|
protected |
T when the AC unit switches off, ie minimum temperature.
|
protected |
T when the AC unit switches on.
|
protected |
gain of the proportional controller for the AC unit
|
protected |
T to which the proportional control cools the container.
|
protected |
coefficient of performance of the AC system [-]
CoolSystem_HVACData slide::CoolSystem_HVAC::HVACdata |
#TODO -> needs to be protected.
|
protected |
cooling power from the AC system [W]. This value will be controlled similarly to the flowrate inside the container