FLOW OVER BICYCLE USING PYTHON
Objective:To write a python program to calculate the drag force which act on cyclist.
Problem statement:Every bicyclist has to overcome wind resistance and drag force so it is important for a bicyclist to know that how he can experiences least drag force.It is necessary to analyse the drag force acting on bicyclist at different velocities and at different body positions.As calculating the drag force and representing graphs at different drag coefficients is time consuming.To make it easier and to save the time it should be programmed in such a way that we can get the desired output and graphs within no time.
Solution Procedure:
Drag Force:
Drag is a frictional force caused by the turbulence of displacing air that is pushed out of the way as you pass through it.A drag force is the resistance force caused by the motion of a body through a fluid, such as water or air. A drag force acts opposite to the direction of the oncoming flow velocity. This is the relative velocity between the body and the fluid.Studies show that around one third of drag is caused by the bike, and two thirds by the rider.


![]() |
= | drag |
![]() |
= | density of fluid |
![]() |
= | speed of the object relative to the fluid |
![]() |
= | drag coefficient |
![]() |
= | cross sectional area |
Different positions for experiencing least drag force:

Steps/Procedure:
a)FOR PLOTTING VELOCITY v/s DRAG FORCE
1.Import the required libraries i.e..matplotlib.pyplot and math
2.Define the function by assigning the variables for density,frontal area,velocity and drag coefficient.
3.Then primary for loop is initiated to take the drag coefficient values.
4.Empty array is created for calculating the drag force.
5.Then secondary for loop is initiated to take the velocities.
6.The drag force values are calculated for different velocities and drag coefficients.
7.The values of drag forces are appended in an empty array created previously.
8.Graphs are plotted between velocity and drag coefficient.
9.At last the function is called or the values for different parameters are defined.
Frontal Area(A)=0.2(m^2)
Density(rho)=1.2(kg/m^3)
Bicycle velocities(v)=[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37](m/s)
Drag coefficients(c_d)=[0.38,0.42,0.47,0.50,0.59,0.80,1.05,1.17,1.16,1.20,1.38,1.42,1.55,1.60,1.98,2.0,2.05,2.20,2.30]
b)FOR PLOTTING DRAG FORCE v/s DRAG COEFFICIENT
1.Matplotlib.pyplot library is imported.
2.Values are assigned for the different parameters like density,frontal area,bicycle velocity and drag coefficient.
3.For loop is initiated to calculate drag forces.
4.Drag force values are appended and stored in an empty array.
5.Graphs are plotted between drag force and drag coefficient.
Frontal area(A)=0.2(m^2)
Density(rho)=1.2(kg/m^3)
Bicycle velocity(v)=25(m/s)
drag coefficients(c_d)=[0.38,0.42,0.47,0.50,0.59,0.80,1.05,1.17,1.16,1.20,1.38,1.42,1.55,1.60,1.98,2.0,2.05,2.20,2.30]
Program:
#importing the required libraries
import matplotlib.pyplot as plt
import math
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
pp = PdfPages('multipage.pdf')
#function defination
def test(rho,v,A,c_d): #rho=density,v=velocity,A=area,c_d=drag coefficient
for i in c_d:
print(i)
f_d = [] #f_d=drag force
for j in v:
f_d.append(0.5*rho*A*i*j*j)
print(f_d)
#plotting the graphs
plt.figure(1,dpi=120)
ax=plt.axes()
ax.set_facecolor('lightgrey')
plt.plot(v,f_d,color='red',linestyle='-')
#labelling the x axis and y axis
plt.xlabel('velocity',color='green',fontsize='large',fontweight='bold')
plt.ylabel('drag_force',color='purple',fontsize='large',fontweight='bold')
#giving title to the graph
plt.title("the drag coefficient is {}".format(i),color='black',fontsize='x-large',fontweight='bold')
#making the grids visible
plt.grid(True,color='black',linestyle='dotted')
#saving the image of graph
plt.savefig(pp,format='pdf')
pp.savefig()
#showing the graphs
plt.show()
v = 25
f_d = []
for p in c_d:
f_d.append(0.5*rho*A*p*v*v)
print(f_d)
#plotting the graphs between drag coefficient and drag force
plt.figure(1,dpi=120)
ax=plt.axes()
ax.set_facecolor('lightgrey')
plt.plot(c_d,f_d,color='red')
#labelling the x axis and y axis
plt.xlabel('drag_coefficient',color='green',fontsize='large',fontweight='bold')
plt.ylabel('drag_force',color='purple',fontsize='large',fontweight='bold')
#making the grids visible
plt.grid(True,color='black',linestyle='dotted')
plt.savefig(pp,format='pdf')
pp.savefig()
plt.show()
#function call
test(1.2,[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37],0.2,[0.38,0.42,0.47,0.50,0.59,0.80,1.05,1.17,1.16,1.20,1.38,1.42,1.55,1.60,1.98,2.0,2.05,2.20,2.30])
Output:
a)
0.38
[0.0456, 0.4104, 1.1400000000000001, 2.2344000000000004, 3.6936, 5.517600000000001, 7.7064, 10.260000000000002, 13.1784, 16.4616, 20.1096, 24.1224, 28.500000000000004, 33.2424, 38.3496, 43.8216, 49.65840000000001, 55.86, 62.4264]
0.42
[0.05039999999999999, 0.4535999999999999, 1.2599999999999998, 2.4696, 4.0824, 6.098399999999999, 8.517599999999998, 11.339999999999998, 14.565599999999998, 18.194399999999998, 22.226399999999995, 26.661599999999996, 31.499999999999993, 36.74159999999999, 42.386399999999995, 48.4344, 54.8856, 61.739999999999995, 68.99759999999999]
0.47
[0.05639999999999999, 0.5075999999999998, 1.41, 2.7635999999999994, 4.5684, 6.8244, 9.531599999999997, 12.689999999999998, 16.299599999999998, 20.3604, 24.8724, 29.8356, 35.24999999999999, 41.11559999999999, 47.432399999999994, 54.200399999999995, 61.41959999999999, 69.08999999999999, 77.21159999999999]
0.5
[0.06, 0.54, 1.5, 2.94, 4.86, 7.259999999999999, 10.14, 13.499999999999998, 17.34, 21.659999999999997, 26.46, 31.74, 37.5, 43.739999999999995, 50.46, 57.66, 65.34, 73.5, 82.13999999999999]
0.59
[0.07079999999999999, 0.6372, 1.7699999999999996, 3.4691999999999994, 5.734799999999999, 8.566799999999999, 11.9652, 15.929999999999998, 20.461199999999998, 25.558799999999994, 31.222799999999992, 37.45319999999999, 44.24999999999999, 51.61319999999999, 59.542799999999986, 68.03879999999998, 77.10119999999999, 86.72999999999999, 96.92519999999999]
0.8
[0.096, 0.8640000000000001, 2.4, 4.704000000000001, 7.776, 11.616, 16.224, 21.599999999999998, 27.744000000000003, 34.656, 42.336, 50.784000000000006, 60.0, 69.98400000000001, 80.736, 92.256, 104.54400000000001, 117.6, 131.424]
1.05
[0.126, 1.134, 3.15, 6.174, 10.206, 15.246000000000002, 21.293999999999997, 28.35, 36.414, 45.486000000000004, 55.565999999999995, 66.654, 78.75, 91.854, 105.966, 121.086, 137.214, 154.35, 172.494]
1.17
[0.1404, 1.2636, 3.51, 6.8796, 11.3724, 16.9884, 23.7276, 31.589999999999996, 40.5756, 50.6844, 61.916399999999996, 74.2716, 87.75, 102.3516, 118.0764, 134.92440000000002, 152.89559999999997, 171.98999999999998, 192.20759999999999]
1.16
[0.1392, 1.2528, 3.4799999999999995, 6.820799999999999, 11.2752, 16.8432, 23.5248, 31.32, 40.22879999999999, 50.2512, 61.38719999999999, 73.6368, 86.99999999999999, 101.4768, 117.06719999999999, 133.7712, 151.5888, 170.51999999999998, 190.5648]
1.2
[0.144, 1.2959999999999998, 3.5999999999999996, 7.056, 11.663999999999998, 17.424, 24.336, 32.4, 41.616, 51.983999999999995, 63.50399999999999, 76.176, 89.99999999999999, 104.976, 121.10399999999998, 138.384, 156.816, 176.4, 197.13599999999997]
1.38
[0.16559999999999997, 1.4903999999999997, 4.139999999999999, 8.114399999999998, 13.413599999999997, 20.037599999999998, 27.986399999999996, 37.25999999999999, 47.85839999999999, 59.78159999999999, 73.02959999999999, 87.60239999999999, 103.49999999999997, 120.7224, 139.26959999999997, 159.14159999999998, 180.33839999999995, 202.85999999999999, 226.70639999999995]
1.42
[0.1704, 1.5335999999999999, 4.26, 8.3496, 13.802399999999999, 20.6184, 28.7976, 38.34, 49.245599999999996, 61.5144, 75.1464, 90.1416, 106.5, 124.2216, 143.3064, 163.7544, 185.5656, 208.73999999999998, 233.2776]
1.55
[0.186, 1.6740000000000002, 4.6499999999999995, 9.114, 15.065999999999999, 22.505999999999997, 31.434, 41.85, 53.754, 67.146, 82.026, 98.39399999999999, 116.25000000000001, 135.594, 156.42600000000002, 178.746, 202.554, 227.85, 254.634]
1.6
[0.192, 1.7280000000000002, 4.8, 9.408000000000001, 15.552, 23.232, 32.448, 43.199999999999996, 55.48800000000001, 69.312, 84.672, 101.56800000000001, 120.0, 139.96800000000002, 161.472, 184.512, 209.08800000000002, 235.2, 262.848]
1.98
[0.23759999999999998, 2.1384, 5.9399999999999995, 11.642399999999999, 19.2456, 28.7496, 40.154399999999995, 53.459999999999994, 68.66639999999998, 85.77359999999999, 104.78159999999998, 125.69039999999998, 148.5, 173.2104, 199.8216, 228.3336, 258.74639999999994, 291.05999999999995, 325.2744]
2.0
[0.24, 2.16, 6.0, 11.76, 19.44, 29.039999999999996, 40.56, 53.99999999999999, 69.36, 86.63999999999999, 105.84, 126.96, 150.0, 174.95999999999998, 201.84, 230.64, 261.36, 294.0, 328.55999999999995]
2.05
[0.24599999999999997, 2.2139999999999995, 6.149999999999999, 12.053999999999998, 19.925999999999995, 29.765999999999995, 41.57399999999999, 55.349999999999994, 71.094, 88.80599999999998, 108.48599999999999, 130.134, 153.75, 179.33399999999997, 206.886, 236.40599999999998, 267.89399999999995, 301.34999999999997, 336.77399999999994]
2.2
[0.264, 2.3760000000000003, 6.6000000000000005, 12.936, 21.384000000000004, 31.944, 44.61600000000001, 59.4, 76.296, 95.304, 116.424, 139.656, 165.0, 192.45600000000002, 222.02400000000003, 253.70400000000004, 287.496, 323.40000000000003, 361.41600000000005]
2.3
[0.27599999999999997, 2.4839999999999995, 6.8999999999999995, 13.523999999999997, 22.355999999999995, 33.395999999999994, 46.644, 62.099999999999994, 79.76399999999998, 99.636, 121.71599999999998, 146.00399999999996, 172.5, 201.20399999999998, 232.11599999999999, 265.236, 300.56399999999996, 338.09999999999997, 377.84399999999994]
b)
[28.500000000000004, 31.499999999999993, 35.24999999999999, 37.5, 44.24999999999999, 60.0, 78.75, 87.75, 86.99999999999999, 89.99999999999999, 103.49999999999997, 106.5, 116.25000000000001, 120.0, 148.5, 150.0, 153.75, 165.0, 172.5]
[Finished in 36.9s]
Graphs:




















Result/Conclusion:
The graph plots have been obtained using python program




