You can’t be a true petrolhead until you’ve owned an Alfa Romeo
—Jeremy Clarkson.
And what best Alfa Romeo than an evolution of the first model to win the inaugural Automobile World Championship in 1925?
In this simulations I will compare different configurations:
 Without and with driver. At the moment I’m having convergence issues with the latter.
 Static wheels and rotating wall on the tires. Might try to implement an MRF simulation around to account for the effect of the wheel spokes.
The mesh is rather coarse: ~11M cells. I faced some problems with finer meshes; so this will have to do.
I’ll start with some plots and add more postprocessing results during the following days.
Geometry
The 3D model of this italian race car is available in GrabCAD. For the CFD simulations I also wanted to add a driver. For this I took a mannequin from GrabCAD, designed by Emmanuel Mahay.
You may have cleanup the geometry before you upload it to SimScale. There are multiple choices, so use the CAD software you are most comfortable with. In this case I had to combine the car and the mannequin into a single file, which required scaling and positioning the figure.
Once the file is ready, you can upload your geometry to SimScale.
It’s time to double check the dimensions of your geometry. Remember, OpenFOAM works with meters.
If your output is a STL file, make sure you split it. If you do this with your CAD software it will make it easier to apply different boundary conditions on the object. e.g., rotating wall for the tires. Besides, you will need at least two faces for the boundary layer algorithm to work.
Mesh Operation
You can now create a new mesh from your geometry. By choosing Hexdominant parametric you have greater control over the end result.
The number of cells in the _BaseMeshBox can be chosen after setting the dimensions of the box. The size of the box can be based on different assumptions. In this case I defined the virtual wind tunnel to be about 10 times the length of the car and 5 times the width and height of the model with the car position towards the inlet and the floor intersecting the tires in order to simulate a contact patch.
Once defined the dimensions of the bounding box, you can go back to the Operation and define the number of cells. I have created this Google Sheet to get an estimation of the cell size and number of cells per refinement level. This will help us make informed decisions later on.
Specify the material point to be within the fluid domain.
Mesh refinements
There are different kinds of refinements we can apply to our model in snappyHexMesh. Take a look at this tour by Engys for a comprehensive description of many of its features.
Features
The feature refinement identifies sharp edges on the geometry. In SimScale define the level to 0 because I just want to identify them so the meshing algorithm can take them into account. The cell size around the edges will be that of the surfaces close to it.
Wake
In order to capture the wake we define a region with finer mesh around and behind the vehicle. For that we create a geometry primitive to define the volume we want to refine.
The refinement level was taken based on the spreadsheet calculations shared above.
Surfaces
The surface refinement for this geometry was split into three areas:

Wheels: with a refinement level up to 7 (~2.6 mm) in order to capture the wheelspokes.

Surface: general surface refinement up to level 6 (~5.2 mm) to capture most of the details of the vehicle.

Surface coarse: with a refinement level up to 5 (~10.4 mm) for the large pannels of the bodywork.
Layers
In this simulation I left the default settings for layer addition on the faces of the vehicle and the tunnel floor.
The result is a mesh of ~11 million cells.
Simulation Designer
Add a new simulation for incompressible steadystate fluid dynamics.
Choose an appropriate turbulence model; in this case I opted for komega SST.
Select the mesh.
Model
Materials
Pick air from the material library.
Initial conditions

Pressure: Leave the reference pressure as 0 m2/s2.

Velocity: 40 m/s (144 km/h) in the x direction.

Turbulence properties: use cfdonline’s calculator to define the parameters for k and omega:
Boundary conditions
I used six different types of boundary conditions for this simulation:

inlet: velocity inlet of 40 m/s in the x direction.

outlet: pressure outlet with a reference kinematic pressure of 0 m2/s2.

tunnel walls: slip wall boundary condition.

tunnel floor: moving wall boundary condition of 40 m/s in the x direction.

alfa romeo: noslip wall boundary condition.

wheels: rotating wall boundary condition.
 use the CAD software to determine the axis of rotation of each wheel.
 use the wheel radius to determine the angular speed (52.359 rad/s) of the wheel.
Numerics
I modified the residuals control and set the absolute tolerance to:
 0.001 for pressure.
 0.0001 for velocity, turbulent kinetic energy, and omega.
Change also the pressure solver to GAMG and the divergence schemes to use bounded Gauss upwind.
Simulation control
I set the end time to 3000 iterations which should be enough to reach an asymptotic value in terms of drag.
I also initialized the flow with a potential flow solution.
Result control
Here you can tell SimScale to calculate the force and moment coefficients, amongst other results. To obtain the drag and lift coefficients we have to define the drag and lift directions, the freestream velocity, and the reference area.
Run
The simulation is now ready to run.
Feel free to make any suggestion, provide feedback, or ask any question.