SLIDE  3.0.0
A simulator for lithium-ion battery pack degradation
Loading...
Searching...
No Matches
slide::CoolSystem_HVAC Class Reference

#include <CoolSystem_HVAC.hpp>

Inheritance diagram for slide::CoolSystem_HVAC:
[legend]
Collaboration diagram for slide::CoolSystem_HVAC:
[legend]

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_HVACcopy () override
 
- Public Member Functions inherited from slide::CoolSystem
 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 CoolSystemcopy ()
 

Public Attributes

CoolSystem_HVACData HVACdata
 #TODO -> needs to be protected. More...
 
- Public Attributes inherited from slide::CoolSystem
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...
 
- Protected Attributes inherited from slide::CoolSystem
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
 

Constructor & Destructor Documentation

◆ CoolSystem_HVAC() [1/2]

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CoolSystem_HVAC() [2/2]

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

Here is the call graph for this function:

Member Function Documentation

◆ control()

void slide::CoolSystem_HVAC::control ( double  Thot_local,
double  Thot_global 
)
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.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ copy()

CoolSystem_HVAC * slide::CoolSystem_HVAC::copy ( )
inlineoverridevirtual

Reimplemented from slide::CoolSystem.

Here is the call graph for this function:

◆ dstate()

double slide::CoolSystem_HVAC::dstate ( double  Etot,
double  Echildren,
double  t 
)
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.

Here is the call graph for this function:

◆ getACoperatingPower()

double slide::CoolSystem_HVAC::getACoperatingPower ( double  Qac,
double  t 
)
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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getQcoolAC_tot()

double slide::CoolSystem_HVAC::getQcoolAC_tot ( )
inline

◆ storeData()

void slide::CoolSystem_HVAC::storeData ( size_t  Ncells)
overridevirtual

< Call parent function to store conventional data

< sets ttot to 0 so do this after wards

Reimplemented from slide::CoolSystem.

Here is the call graph for this function:

◆ writeData()

void slide::CoolSystem_HVAC::writeData ( const std::string &  prefix)
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.

Here is the call graph for this function:

Friends And Related Function Documentation

◆ CoolSystem_HVACData

friend struct CoolSystem_HVACData
friend

Member Data Documentation

◆ controlAC_onoff_Q

double slide::CoolSystem_HVAC::controlAC_onoff_Q
protected

cooling power when on

◆ controlAC_onoff_Toff

double slide::CoolSystem_HVAC::controlAC_onoff_Toff
protected

T when the AC unit switches off, ie minimum temperature.

◆ controlAC_onoff_Ton

double slide::CoolSystem_HVAC::controlAC_onoff_Ton
protected

T when the AC unit switches on.

◆ controlAC_prop_gain

double slide::CoolSystem_HVAC::controlAC_prop_gain
protected

gain of the proportional controller for the AC unit

◆ controlAC_prop_T

double slide::CoolSystem_HVAC::controlAC_prop_T
protected

T to which the proportional control cools the container.

◆ COP

double slide::CoolSystem_HVAC::COP
protected

coefficient of performance of the AC system [-]

◆ HVACdata

CoolSystem_HVACData slide::CoolSystem_HVAC::HVACdata

#TODO -> needs to be protected.

◆ Q_ac

double slide::CoolSystem_HVAC::Q_ac
protected

cooling power from the AC system [W]. This value will be controlled similarly to the flowrate inside the container


The documentation for this class was generated from the following files: