Drag coefficients for two Ahmed models at different vehicle spacing

This is an interesting academic exercise proposed in the book by Tu et al. [1] to analyse the aerodynamic drag and lift of two drafting bodies.

For that, a model simulation of two two-dimensional Ahmed models was developed. Each model had its own mesh continuum, the leading model being placed in static mesh with the dimensions of the fluid volume, and the trailing model placed in a smaller movable overset mesh. Total mesh size is ~150k cells.

Are CL and CD for the wing the same as those for the airfoil? The answer is a resounding NO! Not even close! Surprised? How can this be? —John D. Anderson [2].

Although a 2D solution will yield very different results to that of a 3D model, it allows for quick calculations as well as to detect certain trends. Experimental data by Watkins and Vino [3] is also shown so trends can be compared.


Boundary conditions

At the inlet, the velocity is set so that a Reynolds number of 2.3×106 is obtained. The flow turbulent instensity is assumed to be 1.8%. The floor travels at the same speed as the air.


Spacing was varied from 0.1 x/L to 4 x/L in steps of 0.1 to analyse the influence of drafting on the pressure distribution of each Ahmed model. Drag and lift coefficients for the 2D case is calculated per unit width.


We can appreciate that the presence of a trailing model has a beneficial effect on the leading model due to subsonic upstream disturbances. In other words. The trailing model fills up the space in between with a higher pressure than that of a single model.

This effect can be exploited in several circumstances. For instance, cycling teams can devise optimum cyclist positioning strategies in time trials as is shown by Blocken et al. [4]; although in this case cyclists are bluff bodies, and effects on drag for the Ahmed model can not be directly extrapolated. Truth be told, the Ahmed model is not the most aerodynamic model I’ve ever seen.

*Values at 2.9, 3.9 and 4.0 can be considered as outliers for reasons unknown. If looking at the pressure contours and velocity profiles later on, we can appreciate that there is no smooth transition from 2.8 to 3.0 through 2.9.


Lift on the model is generate due to the acceleration of the flow on its upper surface. In the 2D case we almost appreciate no variation in lift for the leading model. This can be due to important 3D effects taking place in the full scale model.


The closer the trailing model, the more it reduces the value of underpressure at the back of the leading model, leading to a drag reduction of the leading model.  In addition, the presence of the leading model reduces the value of the underpressure at the back of the trailing model as can be seen by comparing the video with Figure 1 below. When the spacing is close, the benefit is mutual as the presence of the leading model also reduces the underpressure at the back of the leading model.

I wonder what’s the effect on Hamilton’s and Rosberg’s cars when they battle hand to hand. Although that case we’d have to take into consideration the DRS.

Figure 1. 2D pressure distribution for a single model.

Figure 1. 2D pressure distribution for a single model.


If we look at the velocity profile in 2D, we can appreciate the evolution of the trailing recirculation vortex as the gap increases. Also, the shape of the recirculation vortex of the trailing model is different from that of the model alone.

Figure 2. 2D velocity field for a single model.

Figure 2. 2D velocity field for a single model.

Further considerations

Additional simulations can be carried out with different turbulence models to verify if the presence of outlying values is due to the model, or at different mesh setting to discard discretization effects.

This also shows us that the presence of a wheel can have significant effects on the drag and downforce generated by the front wing of a F1 race car.


[1] Tu, J., Yeoh, G. and Liu, C. (2008). Computational fluid dynamics. 2nd ed. Amsterdam: Butterworth-Heinemann.
[2] Anderson, J. (2007). Fundamentals of aerodynamics. 4th ed. New York: McGraw-Hill, p.392.
[3] Watkins, S. and Vino, G. (2008). The effect of vehicle spacing on the aerodynamics of a representative car shape. Journal of wind engineering and industrial aerodynamics, 96(6), pp.1232–1239.
[4] Blocken, B., Defraeye, T., Koninckx, E., Carmeliet, J. and Hespel, P. (2013). CFD simulations of the aerodynamic drag of two drafting cyclists. Computers & Fluids, 71, pp.435–445.


* Design of Experiment
* Requirement: MacroUtils v3, available at macrohut.cd-adapco.com
* @author Pablo Fernandez (pfernandez@theansweris27.com)
import java.io.*;
import macroutils.*;
import star.base.neo.*;
import star.base.report.Report;
import star.common.*;
public class drafting extends MacroUtils {
public void execute() {
public void runExperiment() {
// Data file for further postprocessing
File file = new File(simPath + "_doe.csv");
PrintWriter out = null;
createFile(file, out);
// Get boundaries
Region rg = sim.getRegionManager().getRegion("Overset 2D");
Units units = sim.getUnitsManager().getPreferredUnits(new IntVector(new int[] {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}));
// Loop
for (Integer i=1; i<=40; i+=1) {
float xL = i/10.0;
// Set boundary values for velocity
sim.getRepresentationManager().translateMesh(new NeoObjectVector(new Object[] {rg}), new DoubleVector(new double[] {0.1045, 0.0, 0.0}), new NeoObjectVector(new Object[] {units, units, units}), lab0);
runCase(2); // run case
report(file,out,String.format("%.1f;%s", xL, getDataStr()));
String picture = String.format("\\Imagenes Doe\\%s_%02d",simTitle,i);
hardCopyPictures(1280, 720, picture);
void createFile(File file, PrintWriter out) {
try {
FileWriter fstream = new FileWriter(file, false); // true tells to append data.
out = new PrintWriter(fstream);
out.println("Spacing (x/L);Drag Lead (-);Lift Lead (-);Drag Trail (-);Lift Trail (-)");
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
} finally {
if(out != null) {
public void report(File file, PrintWriter out, String s) {
try {
FileWriter fstream = new FileWriter(file, true);
out = new PrintWriter(fstream);
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
String getDataStr() {
Report rDrag = getReport("Drag Coefficient");
Report rLift = getReport("Lift Coefficient");
Report rDragTrail = getReport("Drag Coefficient Trail");
Report rLiftTrail = getReport("Lift Coefficient Trail");
String str = String.format("%f;%f;%f;%f",
return str;

view raw


hosted with ❤ by GitHub