# Tesla Valve - CFD Simulation

Source: https://help.sim-flow.com/tutorials/tesla-valve
Last updated: 2026-10-14

[Video](https://help.sim-flow.com/tutorials/images/tesla-valve.mp4)

## 1. Introduction

In the following tutorial, you will learn how to:

- Create periodic boundary conditions with non-conforming boundary mesh
- Apply a pressure jump between periodic boundaries
- Calculate the mass flow rate through a boundary

We will investigate mass flow rates obtained in two configurations of the infinite Tesla valve. We will create a two-dimensional model with periodic boundary conditions.

In the first part of the tutorial, we will calculate flow in the blocking direction of the valve. The flow will be forced by a prescribed pressure difference between the inlet and the outlet boundaries of the periodic domain segment.

In the second part, we will simulate flow in the opposite direction by changing the sign of the applied pressure difference. Finally, we will compare the results and the efficiency of the two configurations.

## 2. Download SimFlow

SimFlow is a general-purpose [CFD Software](https://sim-flow.com/download/cfd-simulation-software/)

To follow this tutorial, you will need the SimFlow free version. You may download it via the following link:
[Download SimFlow](https://sim-flow.com/download-simflow/)

## 3. Create Case

Open SimFlow and create a new case named *tesla valve*

1. Click **New**
2. Provide name `tesla valve`
3. Click **Create** to open a new case

![simflow-launcher](https://help.sim-flow.com/tutorials/images/launcher-tesla_valve.png)

## 4. Import Geometry - Tesla Valve

Firstly, we need to [Download GeometryTesla_valve](https://help.sim-flow.com/tutorials/downloads/tesla-valve/tesla_valve.step). The geometry will be imported in the same units as it was exported to the STEP format.

1. Click **Import Geometry**
2. Select geometry file *tesla_valve.step*
3. Click **Open**

![Tesl Valve 03 Import Geometry](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_03_Import_Geometry.png)

## 5. Geometry - Tesla Valve

After importing the geometry, it will appear in the 3D window.

1. Click **Fit View** to fit geometry in the view

![Tesl Valve 04 Geometry](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_04_Geometry.png)

## 6. Translate Geometry - Tesla Valve (I)

The geometry is a three-dimensional volume. However, in this tutorial, we will work on a two-dimensional case. To prepare this kind of mesh, we will use the *Plate* (2D plane) base mesh, which should cut through the 3D volume. Therefore, we need to adjust the location of the geometry so that its center will be located on the XY plane.

1. Expand the *Options* list for *tesla valve*
   (you can also right-click on geometry name)
2. Select *Translate*

![Tesl Valve 05 Geometry translate](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_05_Geometry_translate.png)

## 7. Translate Geometry - Tesla Valve (II)

Now we have to specify coordinates for the translation.

1. Set translation vector
   *Translation Vector \({\sf [m]}\)*`0``0``-2.5e-03`
2. Click **Translate**

![Tesl Valve 06 Geometry translate2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_06_Geometry_translate2.png)

## 8. Creating Face Groups (I)

In this fluid flow simulation, we are dealing with an internal flow problem. The imported geometry determines the bounds of the fluid domain. To inform the program where the boundaries of the inlet and outlet mesh should be created, we will use the *Face Groups* options. *Face Groups* can be created directly in the 3D graphics panel or from the *Face Group* geometry properties panel. In this tutorial, we will utilize the first approach.

1. Select the inlet face by holding `CTRL` button and clicking on the geometry face in a 3D view. The selection should be marked in red
2. Click on the *Face Group* button in the graphics context toolbar
3. Press `Esc` key to clear the selection

![Tesl Valve 10 Face group](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_10_Face_group.png)

## 9. Creating Face Groups (II)

Next, rotate the view in such a way that you will be able to see the second end of the geometry.

1. Select the outlet face by holding `CTRL` button and clicking on the geometry face
2. Click on the *Face Group* button in the graphics context toolbar

![Tesl Valve 11 Face group2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_11_Face_group2.png)

## 10. Rename Face Groups

In the *Geometry Panel*, we can find three *Face Groups* under the *tesla_valve* geometry. The first group, named default, contains all non-selected surfaces. These surfaces will constitute the walls of the valve. The two additional groups represent the inlet and outlet of the fluid domain. We will rename those groups to make the resulting boundary names more readable.

1. Select *tesla_valve* geometry
2. Expand *Geometry Faces*
3. Change face group names accordingly
   *group_1* \(\rightarrow\) `left`
   *group_2* \(\rightarrow\) `right`

![Tesl Valve 12 Group rename](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_12_Group_rename.png)

## 11. Meshing Parameters - Tesla Valve

In order to create the mesh, we need to specify geometry features used during the meshing process.

1. Go to *Hex Meshing* panel
2. Select the *tesla_valve* component
3. Enable *Mesh Geometry*
4. Enable *Create Boundary Layer Mesh*
5. Set *No. of Layers* to `2`
6. Set *First Layer Thickness* to `0.5`
   (by default, the first cell size value is the relative size. In this case, the program will generate a boundary layer with a height equal to half of the original near-wall cell)
7. Select all *Face Groups* for *Boundary Layer Mesh*

![Tesl Valve 13 Hex Meshing](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_13_Hex_Meshing.png)

## 12. Base Mesh - Domain

We are going to create a mesh for a 2D fluid flow problem. The *Plate* base mesh is best suited for this purpose. This base mesh type will automatically take care of preparing appropriate boundaries for the Z-direction.

1. Go to *Base* tab
2. Select the *Plate* as a *Base Mesh Type*
3. Click on **Autosize**
4. Define the number of divisions
   *Division*`400``80`

![Tesl Valve 14 Base mesh](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_14_Base_mesh.png)

## 13. Material Point

Material Point tells the meshing algorithm on which side of the geometry the mesh is to be retained. Since we are considering flow inside the valve, we need to place the material point inside the geometry.

1. Go to *Point* tab
2. Specify location inside *tesla_valve* geometry
   *Material Point*`0.03``0``0`

You can specify the point location from the 3D view. Hold the `CTRL` key and drag the arrows to the destination.

![Tesl Valve 15 Material point](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_15_Material_point.png)

## 14. Start Meshing

Everything is now set up for meshing.

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

![Tesl Valve 16 Meshing](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_16_Meshing.png)

## 15. Check Mesh

After the meshing process is finished, the mesh should appear in the graphics window.

1. Set the XY orientation **View XY**
2. Click **Fit View**

![Tesl Valve 17 Mesh](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_17_Mesh.png)

## 16. Boundary Coupling (I)

In this tutorial, we are simulating a valve consisting of an infinite number of segments, where the mesh represents only one segment. In this situation, fluid flow can be driven only by body forces or pressure difference between inlet and outlet (the same across all segments). We can assume that the velocity field in each segment is the same along the whole valve. Therefore, the outlet from one segment will be an inlet to the next one, and the velocity profile from one boundary should be mapped onto the next one. This kind of constraint is usually called *periodic boundary condition* or *periodic coupling* . We can distinguish two main types of periodic coupling:

- *cyclic* - all faces on one boundary match exactly the faces on the second boundary
- *cyclic AMI* - couples a pair of boundaries, where communication between boundaries is performed using arbitrary mesh interface (AMI) interpolation. Boundaries have to be conforming only in the sense of shape

During the meshing process, we have not enforced conformity of meshes on the *left* and *right* boundaries. Therefore, we cannot assume that faces on the left boundary are exactly matching the faces on the right boundary. Therefore, in this case, we should use the cyclic AMI boundary coupling.

## 17. Boundary Coupling (II)

Now we will create AMI coupling between the left and the right side of the valve segment.

1. Hold `CTRL` key and select both *tesla_valve_left* and *tesla_valve_right* boundaries
2. Click the *Cyclic AMI*

![Tesl Valve 19 Boundary Coupling](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_19_Boundary_Coupling.png)

## 18. AMI Properties

1. Click on coupled boundary to display properties
2. Select *Translational* transform
3. Set the vector between left and right boundaries
   *Separation Vector*`0.15``0``0`

![Tesl Valve 20 Boundary Coupling2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_20_Boundary_Coupling2.png)

## 19. Simulation Type

We want to analyze turbulent flow inside the Tesla valve. For this purpose, we will use a single-phase, steady-state simulation of incompressible turbulent flow.

![Simulation Panel](https://help.sim-flow.com/assets/images/go-to-simulation-panel@2x.png)

![Step 1](https://help.sim-flow.com/assets/images/solvers-selection/simpleFoam/01_single_phase@2x.png)

![Step 2](https://help.sim-flow.com/assets/images/solvers-selection/simpleFoam/02_low_speed@2x.png)

![Step 3](https://help.sim-flow.com/assets/images/solvers-selection/simpleFoam/03_steady-state@2x.png)

![Step 4](https://help.sim-flow.com/assets/images/solvers-selection/simpleFoam/04_apply@2x.png)

## 20. Turbulence

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

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

![Tesl Valve 22 Turbulence](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_22_Turbulence.png)

## 21. Transport Properties - Water

As a fluid material, we will use water.

1. Go to *Transport Properties* panel
2. Open **Material Database**
3. Pick up *water* from the list
4. Click **Apply**

Selecting material from the **Material Database** will fill all inputs in the *Transport Properties* panel. At any time we will still be able to overwrite these values.

![Tesl Valve 23 Transport properties](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_23_Transport_properties.png)

## 22. Solution - SIMPLE

We will also modify the solver configuration which will increase the stability of the computational process.

1. Go to *Solution* panel
2. Switch to the *SIMPLE* tab
3. Increase the *Non-Orthogonal Correctors* to `5`

This option usually improves stability and convergence, but at an additional computational cost due to solving pressure equations multiple times.

![Tesl Valve 24 Solu Simple](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_24_Solu_Simple.png)

## 23. Solution - Residuals

We will decrease residual levels for pressure. We do not need to decrease the residual level for other variables because the pressure equation is usually the one converging last.

1. Switch to the *Residuals* tab
2. Change the pressure residual to
   *p*`1e-05`

![Tesl Valve 25 Solu Residuals](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_25_Solu_Residuals.png)

## 24. Solution - Limits

*Velocity Damping* can prevent the solver from diverging even if nonphysical velocity would appear during the iterations.

1. Switch to the *Limits* tab
2. Check the *Velocity Damping*

![Tesl Valve 26 Solu Limits](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_26_Solu_Limits.png)

## 25. Boundary Conditions

We are simulating one segment of a periodic geometry, where values at the inlet and outlet of the domain are bounded by the cyclic constraint. In this case, we cannot force fluid flow by using a standard approach, but we will use a pressure jump instead. This boundary condition will force a constant pressure difference between coupled boundaries.

1. Go to *Boundary Conditions* panel
2. Select *tesla_valve_left* boundary
3. Set the pressure type and jump value accordingly
   *p Type*`Fixed Jump AMI`
   *p Jump \({\sf [m^2 / s^2]}\)*`-100`

If, after changing the boundary condition type to *Fixed Jump AMI*, you do not see the *Jump* input field, then move to the *tesla_valve_right* boundary, where this input will appear. In this case, you will have to apply the pressure difference with an opposite sign. The Jump value input appears only on the *master* boundary, which is the first boundary in the coupling.

![Tesl Valve 27 Boundary Conditions](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_27_Boundary_Conditions.png)

## 26. Monitors - Sampling (I)

During calculation, we can observe intermediate results on a section plane. To add sampling data on a plane, we need to define plane properties and also select fields that will be sampled. Note that runtime postprocessing can only be defined before starting calculations and cannot be changed later on.

1. Go to *Monitors* panel
2. Switch to *Sampling* tab
3. Select *Create Slice*
4. Set slice plane location
   *Point \({\sf [m]}\)*`0.1``0``5e-04`

![Tesl Valve 28 Sampling Slice1](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_28_Sampling_Slice1.png)

## 27. Monitors - Sampling (II)

In addition to specifying section plane geometry, we need to choose which results should be sampled on the surface.

1. Expand *Fields* list
2. Select pressure *p* , velocity *U* and turbulence kinetic energy *k*

![Tesl Valve 29 Sampling Slice2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_29_Sampling_Slice2.png)

## 28. Run - Time Control

Finally, we can start our computation.

1. Go to *RUN* panel
2. Set the maximum *Number of Iteration* to `10000`

![Tesl Valve 30 RUN 1 1](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_30_RUN_1_1.png)

## 29. 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](https://license.sim-flow.com/trial)

Estimated computation time for serial mode: 5 minutes

1. Switch to *CPU* tab
2. Click **Run Simulation** button

![run cpu serial](https://help.sim-flow.com/tutorials/images/run-cpu-serial.png)

## 30. Discretization - Convection

After preliminary calculation, we will continue with a more accurate algorithm. Change velocity discretization to the *Linear Upwind* scheme to minimize numerical diffusion affecting the results of the simulation.

1. Go to the *Discretization* panel
2. Switch to *Convection* tab
3. Click on *Upwind* to extend the list
4. Change scheme to *Linear Upwind*

![Tesl Valve 31 Discretization LU 1](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_31_Discretization_LU_1.png)

## 31. Run - Continue Simulation

Move back to *Run* panel and continue calculation. Note that we did not remove the previous results, but we use them as a starting point for computation with a higher-order scheme.

1. Go to *RUN* panel
2. Click **Continue Simulation** button

![Tesl Valve 32 RUN 1 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_32_RUN_1_2.png)

## 32. Residuals

When the calculation is finished, we should see a similar residual plot. Note that we can see how residual values go up when we have changed the convection scheme. This is due to the fact that a different numerical scheme results in slightly different discrete equations which do not match results from previous calculations.

![Tesl Valve 33 Residuals 1](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_33_Residuals_1.png)

## 33. Slice - Velocity Field

The *Slices* tab appears next to the *Residuals* tab. Under this tab, we can preview results on the defined section plane.

1. Change tab to *Slices*
2. Select the velocity *U*
3. Click *Adjust range to data*

![Tesl Valve 34 Slice 1](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_34_Slice_1.png)

## 34. Calculate - Mass Flow Rate

Finally, we will calculate what the mass flow rate is in the flow blocking direction.

1. Go to *Calculate* panel
2. Switch to *Boundary* tab
3. Select *tesla_valve_left* boundary
4. Choose the *\(\varphi\)* variable
5. Click the **Calculate** button
6. Read the *phi* value from the console

Results will be displayed in the console. The \(\phi\) variable is the flux through mesh faces. In the case of incompressible solvers, the flux is volumetric instead of mass flux. To obtain the mass flow rate, we have to multiply results by reference density.

![Tesl Valve 35 Calculate Mass 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_35_Calculate_Mass_2.png)

## 35. Reset Result

In the next simulation, we will invert the flow direction and once again compute the flow rate forced by the same pressure gradient.

1. Go back to *RUN* panel
2. Click **Reset Calculation** button. This will remove the current results and allow you to change settings for the second simulation

![Tesl Valve 36 Reset](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_36_Reset.png)

## 36. Reset Discretization Setup

We need to change the higher-order *Linear Upwind* scheme back to *Upwind* . This scheme will be again used for initial calculation since it is less accurate but more stable.

1. Go to *Discretization* panel
2. Switch to *Convection* tab
3. Expand the scheme list for *U*
4. Change scheme to *Upwind*

![Tesl Valve 37 Discretization U 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_37_Discretization_U_2.png)

## 37. Boundary Conditions - Inverse Pressure Gradient

In the second run, we will investigate the results with fluid moving in the opposite direction.

1. Go to *Boundary Conditions* panel
2. Select the *tesla_valve_left* boundary
3. Set the *Jump* value to `100`

![Tesl Valve 38 Boundary Condition 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_38_Boundary_Condition_2.png)

## 38. Run - Second Simulation

We leave the rest of the configuration unchanged. Now we can start the new calculation.

1. Go to *RUN* panel
2. Click **Run Simulation** button

![Tesl Valve 39 RUN 2 1](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_39_RUN_2_1.png)

## 39. Discretization - Convection (2nd Case)

Again, after preliminary calculation, we will continue with a more accurate algorithm.

1. Go to *Discretization* panel
2. Switch to *Convection* tab
3. Expand the scheme list for *U*
4. Change scheme to *Linear Upwind*

![Tesl Valve 40 Discretization LU 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_40_Discretization_LU_2.png)

## 40. Run - Continue Calculation (2nd Case)

Move back to *Run* panel and continue calculation.

1. Go to *RUN* panel
2. Click **Continue Simulation** button

![Tesl Valve 41 RUN 2 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_41_RUN_2_2.png)

## 41. Residuals (2nd Case)

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

1. Switch to *Residuals* tab

![Tesl Valve 42 Residuals 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_42_Residuals_2.png)

## 42. Slice - Velocity Field (2nd Case)

As previously, change the tab to Slices and display the velocity field. Compare results with the previous velocity field. We can see that the velocity level is much higher under the same pressure gradient, which indicates that this configuration results in much smaller resistance.

1. Change tab to *Slices*
2. Select the velocity *U*
3. Click *Adjust range to data*
4. Display the latest results by clicking *End* button

![Tesl Valve 43 Slice 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_43_Slice_2.png)

## 43. Calculate - Mass Flow Rate (2nd Case)

Finally, we will calculate the mass flow rate for the second simulation and compare the results.

1. Go to *Calculate* panel
2. Switch to *Boundary* tab
3. Select *tesla_valve_left* boundary
4. Choose the *\(\varphi\)* variable
5. Click the **Calculate** button
6. Read the *phi* value from the console

The sign of the mass flow rate defines the direction of the flow. This time the value is positive because fluid flows outside the domain. We are interested only in absolute values. Check the ratio of mass flow rates between the two simulations:

*\(Ratio = \frac{0.000115}{1.606e-005} \approx 7.2\)*

As we can see, 7.2 times more fluid flows through the valve when we apply a pressure difference in the forward direction. Note that this simulation is in 2D, which means that the valve is infinitely wide and does not account for the resistance from the side walls.

![Tesl Valve 44 Calculate Mass 2](https://help.sim-flow.com/tutorials/images/tesla-valve/Tesl_Valve_44_Calculate_Mass_2.png)

## 44. Advanced Postprocessing with ParaView

This concludes the tutorial, covering all the aspects we intended to showcase. To create a finely tuned presentation of the results, you may take advantage of the seamless integration with ParaView. You can easily open simulation results in ParaView with a single click from SimFlow.

In ParaView, you can perform typical and advanced postprocessing tasks such as displaying streamlines, contour plots, vector fields, line or time plots, and calculating volume or surface integrals.

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 postprocessing techniques.

[Paraview CFD Tutorial - Advanced Postprocessing in ParaView](https://www.youtube.com/watch?v=5M6VgXyHB60&list=PLy7xPqn9xXckoD2gZgPpv8mrxillJ9PWU&index=21)
