Back to all tutorials

Garage Ventilation - CFD Simulation CFD Software Tutorial

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:

  1. Simulate a garage ventilation system using SimFlow
  2. Model a source term (thermal and scalar) within a specific region and time range
  3. 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

  1. Click New
  2. Provide name garage ventilation
  3. Click Create to open a new case
simflow-launcher

4. Import Geometry

Firstly, we need to download and import the following geometries:

Download GeometriesGarageVent_ductFanFan_wall

  1. Click Import Geometry
  2. Select geometry files garage.step, vent_duct.step, fan.stl and fan_wall.stl
  3. Click Open
gv 04 import

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.

  1. Press Yes button
gv 05 import

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.

  1. To confirm default unit meter, press OK
gv 06 unit

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.

  1. Click Fit View to zoom in the geometry
gv 07 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.

  1. 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
  2. Click on the Face Group button in the graphics context toolbar
gv 08 exhaust

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.

  1. Select vent_duct geometry
  2. Expand Geometry Faces
  3. Change face group name (double-click on a group name to start editing)
    group_1 \(\rightarrow\) exhaust
gv 09 face group name

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).

  1. Go to Hex Meshing panel
  2. Select the fan component
  3. Enable Mesh Geometry
  4. Set Refinement to Min 2 Max 2
  5. Mark Create Baffle
gv 10 hex meshing fan

11. Meshing Parameters - Fan Wall

Repeat the same settings for the fan_wall geometry.

  1. Select the fan_wall component
  2. Enable Mesh Geometry
  3. Set Refinement to Min 2 Max 2
  4. Mark Create Baffle
gv 11 hex meshing fan wall

12. Meshing Parameters - Garage

For the garage, we will apply mesh refinement near its surfaces to level 1.

  1. Select the garage component
  2. Enable Mesh Geometry
  3. Set Refinement to Min 1 Max 1
gv 12 hex meshing garage

13. Meshing Parameters - Vent Duct

For the vent_duct, we will refine the mesh near its faces to level 2.

  1. Select the vent_duct component
  2. Enable Mesh Geometry
  3. Set Refinement to Min 2 Max 2
gv 13 hex meshing vent duct

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.

  1. Go to Base tab
  2. Set the base mesh size:
    Min \({\sf [m]}\)000
    Min \({\sf [m]}\)324610
  3. Mark Lock Cell Size
  4. Define the number of divisions along one axis — the remaining directions will adjust automatically
    Division8011510
gv 14 base mesh domain

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.

  1. Define inlet boundary name for X- plane
    X- inlet
  2. Define boundaries names for Z- and Z+ plane
    Z- bottom
    Z+ top
  3. Define boundary types accordingly
    Z- Wall
    Z+ Wall
gv 15 base mesh boundaries

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.

  1. Go to Point tab
  2. Specify location inside garage
    Material Point8102
gv 16 material point

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

  1. Switch to Mesh tab
  2. Start the meshing process with Mesh button
gv 17 meshing

18. Mesh

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

gv 18 mesh

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.

  1. Holding Ctrl key select fan and fan_slave boundaries
  2. Select Create Cyclic Interface
gv 19 fan interface

20. Check Mesh

To verify the mesh, review the boundary names and types. Then, check the mesh quality.

  1. Make sure the boundaries have the correct names and types
  2. Expand the Options list next to default region
  3. Select Check
  4. Check summary will be displayed in the command window. It also shows checking criteria.
gv 20 mesh quality

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.

  1. Go to SETUP panel
  2. Select Transient type and Compressible flow filter
  3. Select Buoyant PIMPLE (buoyantPimpleFoam) solver
  4. Click Select button to confirm
gv 21 solver

22. Radiation

We will run a simulation without taking radiative heat transfer into account.

  1. Go to Radiation panel
  2. Uncheck Enable Radiation
gv 22 radiation

23. Turbulence

We are going to use the standard \(k{-}\omega \; SST\) model to resolve turbulence.

  1. Go to Turbulence panel
  2. Select RANS modeling
  3. Select \(k{-}\omega \; SST\) model
gv 23 turbulence

24. Transport Properties - Air

To assign specific materials, we will use the built-in database of material properties.

  1. Go to Thermo panel
  2. 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.

gv 24 thermo

25. Transport Properties - Air II

Air will be used as a fluid material.

  1. Scroll down to find air
  2. Click Apply
gv 25 thermo air

26. Boundary Conditions - Inlet

We will now specify the model’s boundary conditions. Begin by setting the Pressure Inlet for the garage entrance.

  1. Go to Boundary Conditions panel
  2. Select inlet boundary
  3. Set the Pressure Inlet character
  4. Switch to Thermal tab
  5. Set the Inlet-Outlet type with constant inlet temperature
    T TypeInlet-Outlet
    T Inlet Value \({\sf [K]}\)300
gv 26 bc inlet

27. Boundary Conditions - Exhaust I

To model the garage ventilation, we will apply an exhaust boundary condition with a predefined mass flow rate.

  1. Select vent_duct_exhaust boundary
  2. Set the Mass Flow Inlet character
  3. Switch to Flow tab
  4. 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.
gv 27 bc exhaust flow

28. Boundary Conditions - Exhaust II

  1. Switch to Thermal tab
  2. Set the Inlet-Outlet type with constant temperature
    T TypeInlet-Outlet
    T Inlet Value \({\sf [K]}\)300
gv 28 bc exhaust thermal

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

  1. Select fan boundary
  2. Switch to Flow tab
  3. Set the Fan type for pressure equation
    \(p-\rho gh\) TypeFan
  4. Change the Jump Table setting to table, then press Edit Table
gv 29 bc fan

30. Boundary Conditions - Fan II

Now, load the fan characteristic data from the downloaded file.

  1. Click Load Data From File and select the fan_curve.dat file
  2. Once loaded, the table will be filled with the corresponding values
  3. Press Close to finalize the setup.
gv 29 bc fan2

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.

  1. Go to GEOMETRY panel
  2. Select Create Box
  3. Change geometry name from box_1 to car
  4. Set the origin and box dimensions
    Origin \({\sf [m]}\)2460
    Dimensions \({\sf [m]}\)252
gv 30 car

33. Heat Source - Create Cell Zone (I)

Now we will define the cell zone using car geometry.

  1. Go to MESH panel
  2. Expand the Options list next to default region
  3. Select Add Cell Zones
gv 31 cell zone

34. Heat Source - Create Cell Zone (II)

Select the geometry within which the cell zone should be created.

  1. Check the car
  2. Click on Create Cell Zones
gv 32 cell zone

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.

  1. Go to Passive Scalars panel
  2. Press Add new passive scalar Equations button
  3. Double-click on scalar1 and rename it to smoke
gv 33 passive scalar 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.

  1. Go to Cell Zones panel
  2. Mark Fixed Value Constraints next to the car zone
  3. Enable Custom Time Range for the source
  4. Define the time range to:
    Start Time \({\sf [s]}\)0
    Duration \({\sf [s]}\)60
  5. Expand Add/Remove fields
  6. Enable Fixed Value Constraint for T - temperature, and smoke - smoke concentration
  7. Specify the constant value of selected parameters
    T \({\sf [K]}\)550
    smoke \({\sf [-]}\)1
gv 34 cell zone source

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.

  1. Go to Monitors panel
  2. Switch to Sampling tab
  3. Expand Fields list
  4. Select the velocity U, temperature T and smoke concentration smoke
gv 35 monitors

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.

  1. Select Create Slice
  2. Set the origin to
    Point \({\sf [m]}\)001
gv 36 monitors slice1

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.

  1. Select Create Slice
  2. Set the origin to
    Point \({\sf [m]}\)003.3
gv 37 monitors slice2

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.

  1. Go to RUN panel
  2. Set the Simulation Time [s] to 240
  3. Change Time Stepping to Automatic
  4. 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.
gv 38 run time control

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.

  1. Switch to Output tab
  2. Set the Interval [s] to 1
gv 39 run output

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}

  1. Switch to CPU tab
  2. Click Run Simulation button
run cpu serial

43. Residuals

When the calculation is finished, we should see a similar residual plot.

  1. Go to Residuals tab
gv 40 residuals

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.

  1. Change tab to Slices
  2. Select the velocity U, temperature T, or smoke
  3. Play the animation
    • Velocity field
gv 41 velocity
  • Temperature field
gv 42 temperature
  • Smoke concentration field
gv 43 smoke

45. Postprocessing - ParaView

Once the computations have been completed, we can perform advanced visualization of the results using ParaView.

  1. Go to POSTPROCESSING panel
  2. Click on Run ParaView
gv 44 paraview

46. ParaView - Load Results

Load the results into the program.

  1. Make sure you have your case selected garage_ventilation.foam
  2. Click Apply to load results
  3. Select contour coloring variable to Solid Color
  4. Change the display type to Feature Edges
gv 45 pv load results

47. ParaView - Import Geometries

Now, import the geometries to visualize the flow pattern in relation to the structure of the garage.

  1. Select Open
  2. Go to case folder garage_ventilation
  3. Navigate to folder constant/triSurface/
  4. Select all geometry fieles
  5. Press OK
gv 46 pv load geometry

48. ParaView - Display Geometries

Adjust the geometry display settings to enhance visualization.

  1. Click Apply to load the geometries
  2. Select car.stl
  3. Select contour coloring variable to Solid Color
  4. Set the Opacity to 0.3
  5. Set the Solid Color for remaining geometries
gv 47 pv display geometry

49. ParaView - Display Vector Field

In order to display the vector fields, follow these steps:

  1. Select baseline results garage_ventilation.foam
  2. Select Glyph
  3. Set the Scale Array to velocity U
  4. Set the Scale factor to 1
  5. Specify the number of vectors and their distribution across the domain.
    Glyph ModeUniform Spatial Distribution (Bounds Based)
    Maximum Number Of Sample Points7000
  6. Confirm with the Apply button
  7. Select contour coloring variable to temperature T
  8. Play the animation buttons
gv 48 pv vector field

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.

  1. Hide the glyphs
  2. Select baseline results garage_ventilation.foam
  3. Change the display type to Surface
  4. Select coloring variable to smoke
  5. Select Edit Color Map
gv 49 pv smoke

51. ParaView - Display Smoke II

Now, enhance the visual appearance using a different color preset and enable transparency.

  1. In the Color Map Editor panel, set X Ray color preset
  2. Mark the Enable Opacity Mapping For Surfaces to make denser areas more visible through transparency.
  3. Play the animation
gv 50 pv smoke x ray

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.