Back to all tutorials

Mixing Tank - CFD Simulation SimFlow Tutorial

1. Introduction

In this tutorial, we will demonstrate how to use Dynamic Mesh to model rotating components. We will simulate the rotation of an impeller in a cylindrical tank partially filled with water. The impeller is located within the inner cylinder mesh zone and rotates inside the tank’s larger domain. At the sliding mesh interface, which links the rotating and stationary mesh sections, data interpolation occurs. This tutorial uses a 2-phase Volume of Fluid (VoF) simulation to indicate a free surface vertex resulting from the rotation of the impeller.

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 mixing_tank

  1. Go to New panel
  2. Provide name mixing_tank
  3. Click Create Case
mt 1 create case

4. Import Geometry

After creating case Download GeometryImpeller

  1. Click Import Geometry
  2. Select geometry file impeller.stl.gz
  3. Click Open
mt 2 import geometry

5. Imported Geometry Units

In a next step we need to select the unit in which the model was exported. The STL format does not contain the unit information which are defined during the geometry export. The Geometry size displays the overall size of the model what allows to select the suitable unit. In this case, the default unit meter is correct.

  1. To confirm default unit meter, press OK
mt 2 unit

6. Geometry - Impeller

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

  1. Click Fit View to zoom the geometry
mt 3 geometry

7. Create Geometry - Shaft

The original impeller geometry consists of only blades. To make the impeller complete we will add a shaft using a primitive geometry.

  1. Click Create Cylinder
  2. Rename cylinder_1 to shaft
    (double click on the geometry name to start rename)
  3. 4 Define cylinder origin, length, and radius
    Origin \({\sf [m]}\)00-0.045
    Length \({\sf [m]}\)0.5
    Radius \({\sf [m]}\)0.04
mt 4 crete geometry shaft

8. Create Geometry - Rotating Zone

We want our impeller to be rotating. We will create a cylindrical zone that will be used to divide the mesh into rotating and stationary part.

  1. Click Create Cylinder
  2. Rename cylinder_1 to rotating_zone
  3. 4 Define cylinder origin, length, and radius
    Origin \({\sf [m]}\)00-0.105
    Length \({\sf [m]}\)0.6
    Radius \({\sf [m]}\)0.3
mt 5 create geometry rotating zone

9. Show Impeller

All parts of the geometry are displayed in the graphics window now. Note that rotating_zone encloses the impeller and shaft. In order to see all geometries, we will decrease the opacity of the rotating_zone.

  1. Press Esc to exit edit mode then select rotating_zone if it is not selected
  2. Click Display Properties
  3. Adjust Opacity to 50%
mt 6 show impeller

10. Meshing Properties - Impeller

We will enable meshing for impeller geometry.

  1. Go to Hex Meshing panel
  2. Select impeller
  3. Check Mesh Geometry
  4. Set Refinement to Min 1 Max 2
mt 7 meshing properties impeller

11. Meshing Properties - Rotating Zone

Since our domain will consist of a stationary and a rotating part we need to create a mesh interface between the parts. To do this we will create a baffle using the rotating_zone geometry.

  1. Select rotating_zone
  2. Check Mesh Geometry
  3. Check Create Cell Zone
  4. Change Refinement Max level to 1
  5. Check Create Baffle
mt 8 meshing properties rotating zone

12. Meshing Properties - Shaft

We need to also mesh the shaft geometry.

  1. Select shaft
  2. Check Mesh Geometry
mt 9 meshing properties shaft

13. Base Mesh - Geometry

Now we will define the outer bounds of the computational domain.

  1. Go to Base tab
  2. Select Cylinder as the base mesh type
  3. Define cylinder axis, origin, length, and radius
    Origin \({\sf [m]}\)-0.18
    Length \({\sf [m]}\)0.9
    Radius \({\sf [m]}\)0.6
mt 10 base mesh geometry

14. Base Mesh - Mesh

To have an appropriate mesh density we will use the following divisions and grading of the base mesh.

  1. 2 Define radial division, radial grading, axial division, and central division
    Radial Division15
    Radial Grading1.02
    Axial Division30
    Central Division15
mt 11 base mesh mesh

15. Base Mesh - View

We can preview the Base Mesh in the graphics window.

mt 12 base mesh view

16. Base Mesh - Boundaries

Now we need to assign individual names to each side of the base mesh. Since we are modeling a closed tank all our boundaries will be defined as walls.

  1. Type boundary names accordingly
    First Disk walls
    Second Disk walls
    Cylinder walls
  2. Change type of all boundaries to wall
    First Disk wall
    Second Disk wall
    Cylinder wall
mt 13 base mesh boundaries

17. Material Point

Material Point tells the meshing algorithm on which side of the geometry the mesh is to be retained. Since we are modelling flow inside the tank we need to place the material point between the tank walls and the propeller.

  1. Go to Point tab
  2. Specify location inside the mesh
    Material Point0-0.3-0.1
mt 14 material point

18. Meshing

Everything is now set up for meshing.

  1. Go to Mesh tab
  2. Click Mesh button to start meshing process
mt 15 meshing

19. Mesh

After the meshing process is finished the mesh will appear in the 3D graphics window. The mesh used in this tutorial is created for demonstration purposes only, and its resolution should be considerably finer in real case scenario.

  1. Click Fit View to zoom the geometry
mt 16 mesh view

20. Merge Boundaries - Impeller and Shaft (I)

In order to simplify the definition of boundary conditions, we will merge the shaft and propeller boundaries into a single boundary.

  1. Hold CTRL key and select impeller and shaft boundaries
  2. On the impeller boundary select Options
  3. Choose Merge operation from the dropdown menu
mt 17 merge boundaries impeller and shaft 1

21. Merge Boundaries - Impeller and Shaft (II)

  1. Make sure you have selected impeller and shaft boundaries
  2. Click Merge Boundaries to confirm the operation
mt 18 merge boundaries impeller and shaft 2

22. Merge Boundaries - Impeller and Shaft (III)

  1. Rename newly created boundary from impeller_merged to impeller
  2. Change impeller’s boundary type to wall
mt 18 merge boundaries impeller and shaft 3

23. Split Baffles

Even though we requested the creation of baffles for the rotating_zone, two sides of the baffle can still share some common nodes. In order to make sure that each side has its own nodes, we need to perform the Split Baffles operation on the mesh. This is a very important step when using dynamic mesh model.

  1. Expand Options of the default region
  2. Select Split Baffles from the drop-down list
mt 19 split baffles

24. Create Mesh Interface

In the mesh setup, we requested creating baffles for rotating_zone, so that it can be a slip surface for the dynamic mesh. Now we will create the interface between the baffles.

  1. Hold CTRL key and select rotating_zone and rotating_zone_slave
  2. Click Create Arbitrary Interface
mt 20 create mesh interface 1

25. Setup Solver - Inter

We will use the Inter (interFoam) solver. This solver is able to model two-phase flow with free surface and supports dynamic mesh capabilities.

  1. Go to Setup panel
  2. Select Transient filter
  3. Select Dynamic Mesh model filter
  4. Pick Inter (interFoam) solver
  5. Select solver
mt 23 setup solver

26. Dynamic Mesh

We will apply a rotational speed of 2 revolutions per second to the zone with the impeller. Due to the orientation of our geometry, our rotation axis will be the -Z-axis of the global coordinate system.

  1. Go to Dynamic mesh panel
  2. Select Rigid type
  3. Check Move selected zone
  4. Make sure rotating_zone is selected as Cell Zone
  5. Expand Motion options
  6. Set Axis \({\sf [-]}\)00-1
  7. Set rotational speed Omega \({\sf [rad/s]}\)12.56
mt 24 dynamic mesh

27. Turbulence

For turbulence modeling we will use \(Realizable \; k{-} \varepsilon\) model.

  1. Go to Turbulence panel
  2. Select RANS turbulence formulation
  3. Select \(Realizable \; k{-} \varepsilon\) model
mt 25 turbulence

28. Operating Conditions

Incompressible solver like an Inter, operates on relative pressure (more here). In the incompressible Navier-Stokes equation, pressure is only related to the gradient and has no specific bounds. The pressure distribution can be determined by solving the N-S equation, but the exact value of pressure is irrelevant as long as the pressure difference between two points is the same.

To define precise value, it is necessary to define the pressure at a specific point. While the pressure at inlet or outlet boundaries is usually defined, if the domain is enclosed, a reference point must be established within the domain.

  1. Go to Operating Conditions panel
  2. Change the Location to Point
  3. Set Point0.400.5
mt 26 operating conditions

29. Boundary Conditions - Impeller (Flow)

We need to make sure that impeller velocity is taken from the properties of the rotating zone. For this purpose, we need to apply the Moving Wall Velocity boundary condition.

  1. Go to Boundary Conditions setup
  2. Select impeller boundary
  3. Change velocity type to Moving Wall Velocity
mt 26 bc impeller flow

30. Geometry - Initial Conditions Patch

As an initial state, we want the mixing tank to be partly filled with water. For this purpose, we need to create geometry to indicate the initial water location.

  1. Go to Geometry panel
  2. Click Create Cylinder
  3. Rename cylinder_1 to water_patch
  4. 5 Define cylinder origin, length, and radius
    Origin \({\sf [m]}\)00-0.18
    Length \({\sf [m]}\)0.45
    Radius \({\sf [m]}\)0.6
mt 27 geometry initial conditions patch

31. Initial Conditions - Patch

For initial conditions, we will leave all the default values, except inside the water patch, where the water phase fraction will be different.

  1. Go to Initial Conditions panel
  2. Switch to Patch tab
  3. Select water_patch geometry
  4. Enable initialization on water_patch
  5. Expand Fields list
  6. Select \(\alpha_{phase1}\) fraction for initialization
  7. Set \(\alpha_{phase1}\) to 1
mt 28 initial conditions patch

32. Run - Time Control

We will now adjust the time controls in order to capture the motion of the moving mesh in the output files. We will also enable automatic time step control for the simulation with reduced Courant number for better convergence.

  1. Go to Run panel
  2. Set Simulation Time [s] to 1
  3. Change Time Stepping to Automatic
  4. Set initial time step, time step limit and Courant number accordingly
    Initial \(\Delta t\) \({\sf [s]}\)5e-03
    Max \(\Delta t\) \({\sf [s]}\)1e-02
    Max Co \({\sf [-]}\)0.5
mt 29 run time controls

33. Run - Output

Now we just have to specify the frequency of writing results to the disk and start the simulation.

  1. Switch to Output panel
  2. Set Write Control Interval [s] to 1e-02
mt 30 run output

34. Run - CPU

To speed up the calculation process increase the number of CPUs basing on your PC capability. The free version allows you to use only 2 processors in parallel mode. To get the full version, you can use the contact form to Request 30-day Trial

Estimated computation time for 2 processors: 30 minutes

  1. Switch to CPU tab
  2. Use parallel mode
  3. Increase the Number of processors
  4. Click Run Simulation button
mt 30 run cpu

35. Residuals

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

mt 30 residuals

36. Calculate Additional Fields

When the simulation is finished we want to calculate additional flow variables to use later for postprocessing.

  1. Go to Calculate panel
  2. Select Full Time Range
  3. Select Vorticity field
  4. Click Calculate
mt 28 calculate

37. Start Postprocessing - ParaView

Start ParaView when the simulation is finished. Optionally you can start ParaView when the simulation is still in progress to observe the intermediate results.

  1. Go to Postprocessing panel
  2. Start ParaView
mt 29 start postprocessing paraview

38. ParaView - Load Results

After opening ParaView, we have to load the results of the simulation.

  1. Select your case mixing_tank.foam
  2. Click Apply
  3. Click Last Frame
  4. Click Rescale to Data Range
  5. After rescale the contour will be shown in the 3D window.
mt paraview 1

39. ParaView - Coloring (I)

We can change the coloring scheme in ParaView to have nicer colors.

  1. Click Edit Color Map from the menu placed on the left side, if the panel is not already shown.
  2. Select Choose Preset from the Color Map Editor placed by default on the right side of the ParaView
mt paraview 2

40. ParaView - Coloring (II)

We can now select a new Color Preset.

  1. Expand Advanced Options
  2. Choose Blue to Red Rainbow preset
  3. Apply changes
  4. Close Choose Preset window
mt paraview 3

41. ParaView - Coloring (III)

To use the same color preset for all variables, we will save the current choice.

  1. Click Save current color map settings values as default for all arrays
mt paraview 3 1

42. ParaView - Display Water Surface (I)

We will now plot the water surface colored by the water height.

  1. Create Contour
  2. Select phase fraction alpha.phase1 field as a contour variable
  3. Define water surface threshold at 0.01
  4. Click Apply
mt paraview 4 1

43. ParaView - Display Water Surface (II)

  1. Select contour coloring variable p_rgh

After change the coloring variable and opacity the contour will be shown in the 3D window. Note that the pressure on the water surface is constant.

mt paraview 6

44. ParaView - Calculator (I)

  1. Select mixing_tank.foam
  2. Clcik Calculator
mt paraview 7

45. ParaView - Calculator (II)

  1. Change name to magVorticity
  2. Write the formula mag(vorticity)
  3. Click Apply
mt paraview 8

46. ParaView - Create Contour (I)

  1. Select Calculator 1
  2. Create Contour
mt paraview 9

47. ParaView - Create Contour (II)

  1. Select magVorticity as a contour variable
  2. Set contour value to 30
  3. Click Apply
mt paraview 10

48. ParaView - Create Contour (III)

  1. Select contour coloring variable p_rgh
mt paraview 11

49. ParaView - Load geometry (I)

  1. Select mixing_tank.foam
  2. Click Open
mt paraview 12

50. ParaView - Load geometry (II)

  1. Click mixing_tank
  2. Select mixing_tank.foam from file selection dialog
  3. Click OK
mt paraview 13

51. ParaView - Load geometry (III)

  1. Select impeller and walls zones to plot
  2. Click Apply
mt paraview 14

52. ParaView - Load geometry (IV)

  1. Set Coloring to Solid Color
  2. Set the opacity to 0.3
mt paraview 15

53. ParaView - Results

The results are displayed in the graphics window

mt paraview 16

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