1. Introduction
This tutorial guides you through the process of simulating a garage ventilation system using SimFlow CFD software. You will learn to simulate airflow within the garage, analyze the impact of a car fire, and assess the effectiveness of the ventilation system in removing smoke and reducing temperature over time.
Throughout this tutorial, you will learn how to:
- Simulate a garage ventilation system using SimFlow
- Model a source term (thermal and scalar) within a specific region and time range
- Incorporate a simplified fan model into your simulation
By the end of this tutorial, you will have a solid understanding of how to simulate and evaluate the performance of a garage ventilation system under fire conditions.
This tutorial is compatible with SimFlow version 5.0.40 or newer. Please make sure you are using an up-to-date version to ensure all features and options are available. |
2. Download SimFlow
SimFlow is a general purpose CFD Software
To follow this tutorial, you will need SimFlow free version, you may download it via the following link:
Download SimFlow
3. Create Case
Open SimFlow and create a new case named garage ventilation
- Click New
- Provide name garage ventilation
- Click Create to open a new case

4. Import Geometry
5. Import Geometry II
In some cases, the imported external geometry may contain multiple parts. SimFlow will ask you whether you want to join all geometries into a single component. If not, each part will be put into separate items.
For the purposes of this tutorial, we will combine all parts within each file into a single geometry.
- Press Yes button

6. Imported Geometry Units
The imported fan geometry is in STL format, which does not include unit information. Therefore, you need to manually specify the correct unit after import. If you are unsure about the original export unit, you can estimate it based on the total size of the imported geometry, shown next to the Geometry size
label in the interface.
In this case, the geometry dimensions are already correctly defined in meters, so no rescaling to SI units is required.
- To confirm default unit meter, press OK

7. Geometry - Garage
The resulting geometry will be displayed in the graphics window. The geometry components include:
- garage walls
- ventilation duct
- two faces of the internal fan:
- cylindrical fan wall
- inner cross-section (to specify the pressure jump required to enforce airflow through the fan)
The bottom and top surfaces of the garage are not included, as they will be constrained by the base mesh in later steps.
- Click Fit View to zoom in the geometry

8. Creating Face Group - Exhaust
The imported ventilation duct geometry is used to extract air from the garage. To define where the outlet boundary of the mesh should be created, we will use Face Groups.
- Select the outlet face by holding CTRL key and clicking on the geometry faces in a 3D view. The selection should be marked in red
- Click on the Face Group button in the graphics context toolbar

9. Rename Face Group
In the Geometry Panel, find the new Face Group under the vent_duct geometry. The first group, named default, contains all non-selected surfaces, which will become the duct walls.
The new group represents the exhausts. Rename this group to exhaust. If the face group panel is open, go to point 3 directly.
- Select vent_duct geometry
- Expand Geometry Faces
- Change face group name (double-click on a group name to start editing)
group_1 \(\rightarrow\) exhaust

10. Meshing Parameters - Fan
To create the mesh, we need to specify the meshing options for the given geometries.
For the fan, we will refine the mesh near its faces. Since the fan is represented by a surface geometry, make sure to enable the Create Baffle option. A baffle is a thin internal surface that separates regions without adding physical thickness. It is commonly used for internal walls, fans, or porous surfaces. By duplicating the original surface, it creates two coincident faces—allowing different boundary conditions to be applied on each side (immersed boundary approach).
- Go to Hex Meshing panel
- Select the fan component
- Enable Mesh Geometry
- Set Refinement to Min 2 Max 2
- Mark Create Baffle

11. Meshing Parameters - Fan Wall
Repeat the same settings for the fan_wall geometry.
- Select the fan_wall component
- Enable Mesh Geometry
- Set Refinement to Min 2 Max 2
- Mark Create Baffle

12. Meshing Parameters - Garage
For the garage, we will apply mesh refinement near its surfaces to level 1.
- Select the garage component
- Enable Mesh Geometry
- Set Refinement to Min 1 Max 1

13. Meshing Parameters - Vent Duct
For the vent_duct, we will refine the mesh near its faces to level 2.
- Select the vent_duct component
- Enable Mesh Geometry
- Set Refinement to Min 2 Max 2

14. Base Mesh - Domain
Since we are simulating internal flow with an open geometry, the computational domain is bounded by both the geometry itself and the size of the base mesh. For the background mesh, we will use the Box base mesh type, which defines the domain boundaries—limiting the region from the top and bottom.
- Go to Base tab
- Set the base mesh size:
Min \({\sf [m]}\)000
Min \({\sf [m]}\)324610 - Mark Lock Cell Size
- Define the number of divisions along one axis — the remaining directions will adjust automatically
Division8011510

15. Base Mesh Boundaries
Now, we need to assign individual names to each side of the base mesh to define different conditions on each side.
- Define inlet boundary name for X- plane
X- inlet - Define boundaries names for Z- and Z+ plane
Z- bottom
Z+ top - Define boundary types accordingly
Z- Wall
Z+ Wall

16. Material Point
The material point indicates which side of the geometry the mesh will be retained on. Since we are simulating airflow inside the garage, the material point must be placed within the garage.
- Go to Point tab
- Specify location inside garage
Material Point8102

17. Start Meshing
In this step, we will initiate the meshing process.
In the meshing panel, you can indicate how many CPUs you would like to use for this process. Note that if you are using the free version of SimFlow, you may only use serial meshing and cannot create meshes larger than 200,000 nodes.
If you would like to test full version Request 30-day Trial
- Switch to Mesh tab
- Start the meshing process with Mesh button

18. Mesh
After the meshing process is finished, the mesh should appear on the screen.

19. Create Fan Interface
In the mesh setup, we enabled baffle creation for the fan, allowing it to act as a split surface for the internal fan model. Now, we will create a Cyclic Interface on the fan baffle to connect both sides of the internal boundary, enabling airflow through the fan. Note that the cylindrical surface remains split.
- Holding Ctrl key select fan and fan_slave boundaries
- Select Create Cyclic Interface

20. Check Mesh
To verify the mesh, review the boundary names and types. Then, check the mesh quality.
- Make sure the boundaries have the correct names and types
- Expand the Options list next to default region
- Select Check
- Check summary will be displayed in the command window. It also shows checking criteria.

21. Select Solver - Buoyant PIMPLE
We want to analyze the transient simulation of the airflow with heat transfer. For this purpose, we will use the Buoyant PIMPLE (buoyantPimpleFoam) solver.
- Go to SETUP panel
- Select Transient type and Compressible flow filter
- Select Buoyant PIMPLE (buoyantPimpleFoam) solver
- Click Select button to confirm

22. Radiation
We will run a simulation without taking radiative heat transfer into account.
- Go to Radiation panel
- Uncheck Enable Radiation

23. Turbulence
We are going to use the standard \(k{-}\omega \; SST\) model to resolve turbulence.
- Go to Turbulence panel
- Select RANS modeling
- Select \(k{-}\omega \; SST\) model

24. Transport Properties - Air
To assign specific materials, we will use the built-in database of material properties.
- Go to Thermo panel
- Open Material Database
Selecting material from the Material Database will fill all the inputs in the Transport Properties panel. We are still able to overwrite these values at any time.

25. Transport Properties - Air II
Air will be used as a fluid material.
- Scroll down to find air
- Click Apply

26. Boundary Conditions - Inlet
We will now specify the model’s boundary conditions. Begin by setting the Pressure Inlet for the garage entrance.
- Go to Boundary Conditions panel
- Select inlet boundary
- Set the Pressure Inlet character
- Switch to Thermal tab
- Set the Inlet-Outlet type with constant inlet temperature
T TypeInlet-Outlet
T Inlet Value \({\sf [K]}\)300

27. Boundary Conditions - Exhaust I
To model the garage ventilation, we will apply an exhaust boundary condition with a predefined mass flow rate.
- Select vent_duct_exhaust boundary
- Set the Mass Flow Inlet character
- Switch to Flow tab
- Set the Flow Rate Outlet Velocity type with constant flow rate of 15 kg/s
U TypeFlow Rate Outlet Velocity
U Flow Rate \({\sf [kg/s]}\)15
Please note that after setting the Flow Rate Outlet Velocity, the boundary type will change automatically from Mass Flow Rate to Custom. |

28. Boundary Conditions - Exhaust II
- Switch to Thermal tab
- Set the Inlet-Outlet type with constant temperature
T TypeInlet-Outlet
T Inlet Value \({\sf [K]}\)300

29. Boundary Conditions - Fan
A fan has been installed in the garage to direct airflow toward the exhaust. In the model, the fan consists of a cylindrical sidewall, with a section where a pressure jump will be applied to drive the flow.
To enforce the airflow through the fan, we will use the Fan boundary condition. This condition allows you to define the relationship between the flow rate and pressure jump using an external file.
You will need to download this file and load it into SimFlow.
Download Fan Curve
- Select fan boundary
- Switch to Flow tab
- Set the Fan type for pressure equation
\(p-\rho gh\) TypeFan - Change the Jump Table setting to table, then press Edit Table

30. Boundary Conditions - Fan II
Now, load the fan characteristic data from the downloaded file.
- Click Load Data From File and select the fan_curve.dat file
- Once loaded, the table will be filled with the corresponding values
- Press Close to finalize the setup.

31. Fire Source - Introduction
In this tutorial, we aim to model a car fire in a simplified way. We will not simulate combustion chemistry, but instead represent the fire as a source of heat and smoke.
To achieve this, we will first create a cell zone in the region of the car fire. This zone defines a group of cells where additional models can be applied.
Next, we will introduce a passive scalar to represent smoke concentration within the garage. This scalar does not influence the physical properties of air but acts as a tracer to visualize the spread of smoke throughout the domain.
The fire source will be modeled using a constant temperature of 550K and a smoke concentration of 1. The buoyancy forces resulting from the heat will drive the motion of hot, smoke-laden air.
We will assume the fire burns for the first 60 seconds of the simulation, after which it is extinguished. The remainder of the simulation will focus on how the ventilation system removes the heat and smoke from the garage.
32. Fire Source - Geometry
First, we will create the geometry representing the fire source. Its size will correspond to the volume of the car.
- Go to GEOMETRY panel
- Select Create Box
- Change geometry name from box_1 to car
- Set the origin and box dimensions
Origin \({\sf [m]}\)2460
Dimensions \({\sf [m]}\)252

33. Heat Source - Create Cell Zone (I)
Now we will define the cell zone using car geometry.
- Go to MESH panel
- Expand the Options list next to default region
- Select Add Cell Zones

34. Heat Source - Create Cell Zone (II)
Select the geometry within which the cell zone should be created.
- Check the car
- Click on Create Cell Zones

35. Heat Source - Passive Scalar
We will use a passive scalar to simulate smoke concentration. The passive scalar introduces an additional transport equation into the system of governing equations.
It is important to note that the passive scalar does not affect the flow itself; rather, it serves purely as a marker to trace the movement of smoke within the domain.
The scalar value ranges from 0 to 1, where 0 represents clean air and 1 corresponds to the smoke concentration at the source.
To control how the smoke spreads, we may define a custom diffusivity for the scalar. In this case, it is set to the default value of 1e-05.
- Go to Passive Scalars panel
- Press Add new passive scalar Equations button
- Double-click on scalar1 and rename it to smoke

36. Heat Source - Cell Zone Properties
To define the heat and smoke source for our simulation, we will use the Fixed Value Constraint option for the designated car cell zone. This option assigns fixed values to specified parameters for all cells within the selected zone. It allows us to set a constant fire temperature, which is useful when the exact firepower (heat release rate) is unknown or cannot be accurately estimated.
- Go to Cell Zones panel
- Mark Fixed Value Constraints next to the car zone
- Enable Custom Time Range for the source
- Define the time range to:
Start Time \({\sf [s]}\)0
Duration \({\sf [s]}\)60 - Expand Add/Remove fields
- Enable Fixed Value Constraint for T - temperature, and smoke - smoke concentration
- Specify the constant value of selected parameters
T \({\sf [K]}\)550
smoke \({\sf [-]}\)1

37. Monitors - Sampling
During the calculation, we can observe intermediate results using section planes or probe plots. Note that runtime post-processing must be defined before starting the calculations and cannot be modified afterward.
First, we need to specify the variables to be sampled. After that, we will define the section planes.
- Go to Monitors panel
- Switch to Sampling tab
- Expand Fields list
- Select the velocity U, temperature T and smoke concentration smoke

38. Monitors - Create Slice (I)
To add sampling data on a plane, we need to create a slice by defining a normal vector and a point that lies on the section plane. Since the normal vector aligns with the default Z-axis, we only need to specify the point coordinates.
- Select Create Slice
- Set the origin to
Point \({\sf [m]}\)001

39. Monitors - Create Slice (II)
Create a second slice above the first one at a height of 3.3 m to cross-section the vent ducts.
- Select Create Slice
- Set the origin to
Point \({\sf [m]}\)003.3

40. Run - Time Control
For any simulation, it is very convenient to let the solver automatically determine the proper time step value. To use this option, we need to define time step constraints by providing the initial time step (adjusted by the solver during computations) and maximal time step value. The remaining parameters can be left at their default values.
- Go to RUN panel
- Set the Simulation Time [s] to 240
- Change Time Stepping to Automatic
- Set initial and maximum timesteps (solver will start computation with the initial value and adjust it in the next iterations not exceeding the maximum value)
Initial \(\Delta t\) \({\sf [s]}\)0.01
Max \(\Delta t\) \({\sf [s]}\)1
Due to the long calculation time, you can reduce the simulation time to 120s. |

41. Run - Output
We can control how often results should be saved on the hard drive. Only this data will be available for post-processing.
- Switch to Output tab
- Set the Interval [s] to 1

42. Run - CPU
To speed up the calculation process, take advantage of parallel computing and increase the number of CPUs based on your PC’s capability. The free version allows you to use only one processor (serial mode). To get the full version, you can use the contact form to Request 30-day Trial
Estimated computation time for serial mode: {time}
- Switch to CPU tab
- Click Run Simulation button

43. Residuals
When the calculation is finished, we should see a similar residual plot.
- Go to Residuals tab

44. Slice - Velocity Field
During the simulation, the Slices tab appears next to the Residuals . Under this tab, you can preview live results during the simulation on the defined section plane.
- Change tab to Slices
- Select the velocity U, temperature T, or smoke
- Play the animation
- Velocity field

- Temperature field

- Smoke concentration field

45. Postprocessing - ParaView
Once the computations have been completed, we can perform advanced visualization of the results using ParaView.
- Go to POSTPROCESSING panel
- Click on Run ParaView

46. ParaView - Load Results
Load the results into the program.
- Make sure you have your case selected garage_ventilation.foam
- Click Apply to load results
- Select contour coloring variable to Solid Color
- Change the display type to Feature Edges

47. ParaView - Import Geometries
Now, import the geometries to visualize the flow pattern in relation to the structure of the garage.
- Select Open
- Go to case folder garage_ventilation
- Navigate to folder constant/triSurface/
- Select all geometry fieles
- Press OK

48. ParaView - Display Geometries
Adjust the geometry display settings to enhance visualization.
- Click Apply to load the geometries
- Select car.stl
- Select contour coloring variable to Solid Color
- Set the Opacity to 0.3
- Set the Solid Color for remaining geometries

49. ParaView - Display Vector Field
In order to display the vector fields, follow these steps:
- Select baseline results garage_ventilation.foam
- Select Glyph
- Set the Scale Array to velocity U
- Set the Scale factor to 1
- Specify the number of vectors and their distribution across the domain.
Glyph ModeUniform Spatial Distribution (Bounds Based)
Maximum Number Of Sample Points7000 - Confirm with the Apply button
- Select contour coloring variable to temperature T
- Play the animation buttons

50. ParaView - Display Smoke I
Now, we will visualize the smoke propagation inside the garage. We will use grayscale color mapping and transparency to make the distribution more visible and intuitive.
- Hide the glyphs
- Select baseline results garage_ventilation.foam
- Change the display type to Surface
- Select coloring variable to smoke
- Select Edit Color Map

51. ParaView - Display Smoke II
Now, enhance the visual appearance using a different color preset and enable transparency.
- In the Color Map Editor panel, set X Ray color preset
- Mark the Enable Opacity Mapping For Surfaces to make denser areas more visible through transparency.
- Play the animation

52. Advanced Postprocessing with ParaView
This concludes the tutorial, covering all the aspects we intended to showcase. For a finely tuned presentation of the results, you may take advantage of the more advanced features.
In ParaView, you can display streamlines, contour plots, vector fields, line or time plots, calculating volume or surface integrals and create animations.
To familiarize yourself with the ParaView capabilities, it’s worth checking out our video tutorial, Paraview CFD Tutorial - Advanced Postprocessing in ParaView, in which we demonstrate some of the most commonly used post-processing techniques.