Module Spacing Investigation
Introduction
The module thermal sim investigation is an investigation to determine optimal sets of independent variables, or the relation of several output variables to input variables of a single battery pack module.
This investigation uses SimScale, a cloud-based CFD solver to investigate the relationship of 3 variables to the function of a single module in a channel. These variables have a baseline set of baseline values which vary to determine overall behavioural trends when varied. The simulation project can be found at Cell Test
Spacing between cells in x
Baseline of 31.5mm
Varies by increments of 2mm
Investigated between 23.5mm and 43.5mm
Spacing between cells in y
Baseline of 31.5mm
Varies by increments of 2mm
Investigated between 23.5mm and 43.5mm
Inlet air velocity
Baseline of 1 m/s
Varies by increments of 1 m/s
Investigated between 1 m/s and 4 m/s
Based on MSXIV inlet velocities –- Battery Pack Cooling - Mechanical - Confluence (atlassian.net)
Maximum airflow for fans used to test MSXIV battery box was around 3.6m/s, according to fan curves from NF-F12 industrialPPC-3000 PWM (noctua.at)
Velocity of air being blown by “fans” through module
Due to a limited number of yearly processor hours on SimScale for free members, we will initially simulate these variables independent of one another, i.e. the simulations investigating spacing of cells in y will always have an x value of 31.5mm and a constant air inlet velocity.
The Software
SimScale has a variety of different simulation types for different FEA and CFD simulations. The type we will use is the Conjugate Heat Transfer, which models the flow of fluids and the transfer of energy in fluids and solids. It uses the Finite Volume Method to model the flow of fluids and energy, breaking up the geometry into a mesh of very small pieces, or “cells”, for which a set of boundary value problems can be solved to determine the given section of geometry’s conditions, using their relationships with the surrounding cells. A set of boundary conditions allows the simulation software to solve the boundary volume problem by giving it a set of constraints.
To become familiarized with SimScale and CFD, please see SimScale Resources - Mechanical - Confluence (atlassian.net)
The Simulation
Geometry Introduction
The simulation requires a geometry imported from Solidworks. This geometry will have 4 components, as seen in the image above.
This image above shows the overall geometry of the simulation for illustrative purposes and is not representative of the final geometry fed into SimScale.
Components
Tunnel
Shell for flow domain
Unsimulated in final simulation
Cell holder
Holds cells
Adapted from Jeyoung’s module design sprint model
Cells
21700 li-ion battery cells
Fluid Flow Region
Area where fluid flows
~0.5m larger than the cells on both sides
Independent Variables: Illustrated
Simulation Explanation
We will simulate using steady-state conjugate heat transfer simulations, which are capable of simulating the flow of energy between solids and fluids.
These simulations accept a set of boundary conditions. Under these boundary conditions, the simulations determine a steady, final state for the simulation.
Additionally, as the tunnel is symmetrical, it has been halved across the width of the tunnel to decrease simulation requirements. This halving has been addressed with boundary conditions in SimScale.
The simulation software pipeline has 4 stages:
Geometry preparation: Importing and setting up a geometry created outside of SimScale. All geometries have been prepared prior to the creation of this design log.
Simulation Preparation: Setting boundary values, materials, and initial values
Meshing: Converting continuous geometries into a discrete mesh of cells, with which the Finite Volume Method can be used to approximate a solution for a problem.
Simulation: Setting up the boundary conditions, running the simulation.
Creating a Simulation
Geometry
The first step to creating a simulation is to set up the geometry.
Preparing Geometry
The geometry of the simulation fed into SimScale differs from the illustrative geometry shown above the model. The geometry has been halved, and the tail end of the flow region has been lengthened to allow for total resolution of fluid flow. This allows any air jets, vortices, convection zones, etc to combine, mix and homogenize.
The source of the geometry is a Solidworks assembly called [name] using design tables to generate configurations. Currently, all configurations have been generated, and to use one, one must only select the correct configuration, rebuild the geometry, and save the file.
Importing and Preparing Geometry in SimScale
After having selected the correct configuration, rebuilding the geometry with ctrl-b, and saving it, zip the assembly and all its parts into one zip file. This will be the file imported into SimScale.
Import it in SimScale by pressing the “+” symbol, select the correct zip file and file format, and allow it to import.
We must then generate an internal volume called the flow domain representing the air inside of the tunnel, delete the tunnel, and imprint contacts to allow SimScale to properly register surfaces in contact with one another. To do this, select the imported geometry, and select the “edit in CAD mode” button.
An internal flow volume needs a seed face, a face on the inside of the flow volume, and boundary faces, which cap the ends of the flow volume. I typically use a face on the cell holder as the seed face, and the ends of the tunnel as the boundary faces.
Exporting Geometry
Exporting geometry creates a copy of the geometry, with all the edits applied to it.
After exporting, the geometry should be renamed with the following naming convention to avoid confusion: {x_spacing}x{y_spacing}_Rd{Revision number}, e.g. 31.5x31.5_Rd6.
Simulation Preparation
Creating a Simulation
Click “Create Simulation” and choose Conjugate Heat Transfer as the simulation type.
Ensure that the time dependency is steady state, meaning that it tries to find a set of conditions that the simulation will eventually reach under the given boundary conditions, no matter the initial conditions. Ensure that radiation is turned off, as it is excess computational overhead and does not contribute much to heat transfer under the temperatures reached by lithium-ion battery cells without undergoing thermal runaway.
The simulation naming convention is the same as the name of the geometry.
In the model tab of the sidebar, set gravity to -9.81m/s2 in the z direction, to allow proper convection.
Materials
The thermal and mechanical properties of many materials are required to properly simulate them. There are many materials provided by SimScale by default, however, some may need to be created by hand.
Air – Default SimScale Material
Assign air to flow domain
PLA – Default SimScale Material
Assign PLA to cell holders
We’re assuming the cell holders are solid PLA, when in fact they likely use semi-hollow 3D printed PETG. For this qualitative evaluation, this disparity should not matter, as plastic is a poor thermal conductor across the board.
Cell – Custom Material
Assign Cell to battery cells
See that the cells are aligned so that their axis is aligned with the z-axis
See section below
Creating the Cell Material
To create a custom material, we will copy an existing material and duplicate it as a base. We will use tin as our base material. This is arbitrary, as there are no properties of tin used in our simulations that are not overwritten for different materials.
Now change the following properties:
(Cp) Specific heat at constant pressure: 1040 J/(kg·K)
(ρ) Density: 2887 kg/m3
Transport: CONST_CROSS_PLANE_ORTHO
Allows us to define a different rate of heat transfer in the x-y plane than the z-axis
(kx) Thermal conductivity in x: 0.22 W/(m·K)
(ky) Thermal conductivity in y: 0.22 W/(m·K)
(kz) Thermal conductivity in z: 32.0 W/(m·K)
Initial Conditions
In a steady-state simulation, any set of initial conditions will (theoretically) lead to the same result[citation needed]. As such, we will use a set of initial conditions very close to the theoretical end results calculated with other simulations for faster “convergence”, the condition when the imbalances in mass, energy, and other conserved quantities in the simulation drop below a critical threshold.
As such, change the following variables:
Velocity: uy→1m/s
Temperature: 35oC
Boundary Conditions
Each simulation has the following boundary conditions that must be set:
Inlet Velocity:
Sets the desired flow velocity through the inlet of the flow domain. Assign this boundary condition to the inlet face of the flow domain.
Velocity type: Fixed value
Velocity: [ux, uy, uz] = [0, v, 0].
Uy depends on which simulation you are running.
Temperature: Fixed at 25oC for SATP conditions.
Outlet Pressure:
Fixes the pressure at the outlet of the flow domain. Assign this boundary condition to the outlet of the flow domain.
Pressure type: Fixed value
Absolute pressure: 1.013e+5 Pa, or 1 atm
Symmetry:
Since we’ve split the module in half parallel to the y-z plane, we have to compensate for splitting it in half by declaring it to the simulation.
Assign it to the “cut faces” of the model.
Wall:
A way to keep the air enclosed inside the flow domain. Assign to all sides of the flow domain not already assigned to a different boundary condition and not covered by other solid objects, e.g. cell holders.
Type: Slip
As we simulate the flow as if it is not truly bounded by any physical material, and to save on the meshing work of defining inflation layers for the walls, we will make the walls frictionless.
Temperature type: Adiabatic
Keeps energy from escaping from the sides of the tunnel, decreasing dependency of the results on variables such as length of tunnel.
Advanced Concepts
Add an absolute power source, so that the simulation is not dead on arrival. Add 16, in fact, as there are 16 battery cells. Each of them should have a value of 1W.
Meshing
Meshing is the step where SimScale divides the geometry into a set of “cells” prior to simulation. Mesh settings largely vary with the judgment of the simulationist, and a set of mesh settings values may be found in the section called Running a Mesh Independence Study. This section will describe the mesh settings required to run a simulation.
Creating a Mesh
Naming
As with human infants, the first thing to do with your new infant mesh is to give it a name. Many human parents consult name guides or registries for ideas. A similar thing occurs with the mesh naming. They are named RR{Region refinement size} F{Large-scale fineness level}, e.g. RR4.4 F4.
See the following sections on region refinement and fineness.
Settings
The mesh creation dialog will give you a series of settings to use to create your mesh. For this investigation, the standard mesh algorithm will be used, with automatic sizing and a variable fineness level between 3.5 and 5.5.
Fineness:
The finer the mesh, the more accurate the results may be. This trades off with computing power, and free plans on SimScale only have limited computing power. Additionally, often, there is a mesh fineness level after which drastically diminishing returns in precision occurs. To find out if you have attained this level, it is useful to run a mesh independence study.
For this specific simulation case, a global fineness of 3.0 is sufficient, as the important features of the simulation are refined with a much finer region refinement. Any level of global fineness for this specific simulation case should be permissible, as long as it is balanced out with the correct combination of a decreased global gradation rate and does not cause mesh-dependency in results, i.e. seeing sharp shifts in the velocity gradients across mesh boundaries.
Automatic Boundary Layers:
This setting allows SimScale to automatically generate cells to accurately model the boundary layers near solid surfaces. We will leave this on, as for surfaces of concern, we will use a boundary layer refinement to manually set the boundary layers.
Physics-based meshing:
Leave this on for better results
Hex element core:
Improves CFD efficacy by replacing tetrahedral cells with hexahedral cells whenever possible.
Advanced Settings:
Small feature suppression: 5e-7
Merges cells below a certain size threshold with larger ones so as to not have too many small cells increasing the runtime of the simulation
Should be set small enough such that your smallest cells (usually boundary layers) are not suppressed.
Gap refinement factor: 0.05
A setting used to control the minimum number of cells in a small “gap”. There should be no gaps in our model, as to improve the simplicity of the model
Global gradation rate: 1.22
Maximum ratio of sizes between neighboring cells. Can be any value between 1 and 3, depending on the opinion of the simulationist.
The smaller this value is, the smoother the gradient between fine and coarse cells. If using especially coarse meshes, the global gradation rate should be decreased to prevent mesh dependency.
Refinements
Refinements are adjustments made to mesh characteristics to improve the performance of the simulation.
We use region refinements and boundary layer refinements to improve the mesh characteristics.
Region Refinement
With a region refinement, we will set a maximum edge length for cells inside of a defined region to improve the accuracy inside of it. This region will be the area with the cells and the area 10cm downstream, to allow for any vortices or high-speed airflows to properly resolve.
To create a region refinement, create a new region refinement, and a new geometry primitive to represent the refinement region.
Inflate Boundary Layer Refinement
Otherwise called an “inflation layer refinement”, we will “inflate” the layers near boundary layers of concern to accurately capture them. This refinement has 3 settings: the number of layers, overall relative thickness, and growth rate. These quantities are determinable by solving a series of equations, however, there are also calculators online which can be used to find an ideal boundary layer size.
The boundary layer height that should be captured is represented by δ99 on the calculator. By leaving viscosity and density as their default values, the length scale as ½ the circumference of the battery cell (as any given air particle in the boundary layer passes over ½ of the battery at one time), velocity as the free-stream velocity (a good starting point is equal to the inlet area divided by the area displaced by the battery cells at their widest point, all multiplied by the inlet velocity, however, a preliminary simulation with coarse settings will find a better free-stream velocity), and any number of layers. I have accidentally used the inlet velocity before, but the simulations have still converged.
The number of boundary layers should be between roughly 7 and 20, and a good target y+ value is slightly above 1. To convert the values given by the calculator to a relative thickness, divide the value given for δ99 by the refinement region maximum size.
Assign this refinement to all the inside faces of the flow domain which touch the cells.
Mesh Quality
After generating the mesh, one should inspect the mesh quality in the Meshing Log. This log contains a set of values which have acceptable ranges. If a value is outside of the acceptable range, you can use the Mesh quality tab to filter for the cells and areas of concern. If the non-orthogonality is between 70 and 80, you can use one non-orthogonality corrector in the Numerics tab to compensate. Between 80 and 90, you can use two. The more non-orthogonality correctors you add, the longer the simulation time. Please see How to Check and Improve Mesh Quality | SimScale.
Simulating
Only a few more things must be done before simulation begins.
Numerics
Numerics is the tab which controls many factors of the simulation solver. Relaxation may be left as it is by default. It determines the amount the results may change between iterations. The number of non-orthogonal correctors may be changed from 0, if the mesh quality suffers from high non-orthogonality. In Darton’s simulations, all other numerics tabs have been left as their default values.
Simulation Control
Simulation control allows for the user to set an end time for the simulation, a “delta t”, for each “time step” the simulation takes, a data write interval, a maximum real-life runtime, and a decompose algorithm. The end time settings only come into play if the residuals do not decrease to a point under the thresholds set in the numerics tab. I have set the end time for 7000s, a delta t of 1s, a write interval of 250 time steps, and a maximum runtime of 30000s, the maximum max runtime under a free account.
With the number of simulations you will be running, you will likely run out of simulations before simulation hours, so being a little liberal with the simulation hours is encouraged.
Result Control
Result control allows for one to monitor quantities throughout the runtime of the simulation, which help monitor if the simulation has converged on an accurate result or not. We will be using probe points and surface data.
Probe Points
Probe points measure the conserved quantities in the cell they are placed in. In this case, we will measure temperature. We will use one probe point result control, with 16 points, one in the center of each cell. To do this, from the probe point dialog box, create 16 point geometry primitives. First position them on the center of the top or bottom surface of a cell, then increase or decrease the z coordinate by 35mm until it is in the center of the cell.
Surface Data
Place an average and integral on both the outlet and inlet. These are not explicitly used, however, one may find them useful to troubleshoot problems.
Running a Mesh Independence Study
Running a mesh independence study is useful to assess if the results of the simulation are “independent” from the mesh fineness level by simulating with progressively finer meshes and comparing their results. At some point, results (especially thermal probe point results) should start to “converge” between mesh fineness levels. The simulationist should find the coarsest mesh possible with still accurate results with a given geometry and use it as the base mesh for future simulations.
To run a mesh independence study, we will run a set of simulations with different meshes with different region refinements and global fineness levels. I typically start by creating a mesh with a 4.4mm region refinement, and then create a series of meshes with each successive refinement level 1.5x finer until you reach a mesh refinement of around 1mm. I often do not change the global refinement level, as the critical area used to resolve the airflow is included in the mesh refinement.
Remember to also adjust the boundary layer relative sizes to compensate for the increased refinement levels.
Running The Experiment
To run the experiment, first:
Prepare a geometry
Import the geometry
Create a simulation for the geometry
Run a mesh independence study for the geometry at 1m/s
(Optional) Run simulations with different air velocities using the coarsest level of mesh independent mesh
Take the average of the converged probe points and plot them the spreadsheet
Repeat for a different geometry
Note: You will have to make multiple SimScale accounts. If you want to use the same email account for all of them, if you use gmail, you can add a “+” and text before the @ to reuse the same email. e.g. placeholder+1@gmail.com, placeholder+2@gmail.com, etc
Design Log
https://docs.google.com/presentation/d/1MHdJ954tNe6LjBfGjypy8glz35UrmO3hQx6L3k3Hv7M/edit?usp=sharing