from math import pi import numpy as np rop = 2650.0 # density of particle in kg/m3 rof = 1000.0 # density of fluid in kg/m3 visc = 1.002*1E-3 #8.9*1E-4 # dynamic viscosity in Pa*s (N*s/m^2) C1 = 18 # constant in Ferguson-Church equation C2 = 1 # constant in Ferguson-Church equation, valid for natural sand grains def v_stokes(rop,rof,d,visc,C1): R = (rop-rof)/rof # submerged specific gravity w = R*9.81*(d**2)/(C1*visc/rof) return w def v_turbulent(rop,rof,d,visc,C2): R = (rop-rof)/rof w = (4*R*9.81*d/(3*C2))**0.5 return w def v_ferg(rop,rof,d,visc,C1,C2): R = (rop-rof)/rof w = (R*9.81*d**2)/(C1*visc/rof+(0.75*C2*R*9.81*d**3)**0.5) return w d = np.arange(0,0.0005,0.000001) ws = v_stokes(rop,rof,d,visc,C1) wt = v_turbulent(rop,rof,d,visc,C2) wf = v_ferg(rop,rof,d,visc,C1,C2) figure(figsize=(10,8)) plot(d*1000,ws,label='Stokes',linewidth=3) plot(d*1000,wt,'g',label='Turbulent',linewidth=3) plot(d*1000,wf,'r',label='Ferguson-Church',linewidth=3) plot([0.25, 0.25],[0, 0.15],'k--') plot([0.25/2, 0.25/2],[0, 0.15],'k--') plot([0.25/4, 0.25/4],[0, 0.15],'k--') text(0.36, 0.11, 'medium sand', fontsize=13) text(0.16, 0.11, 'fine sand', fontsize=13) text(0.075, 0.11, 'v. fine', fontsize=13) text(0.08, 0.105, 'sand', fontsize=13) text(0.01, 0.11, 'silt and', fontsize=13) text(0.019, 0.105, 'clay', fontsize=13) legend(loc=2) xlabel('grain diameter (mm)',fontsize=15) ylabel('settling velocity (m/s)',fontsize=15) axis([0,0.5,0,0.15]); D = [0.068, 0.081, 0.096, 0.115, 0.136, 0.273, 0.386, 0.55, 0.77, 1.09, 2.18, 4.36] w = [0.00425, 0.0060, 0.0075, 0.0110, 0.0139, 0.0388, 0.0551, 0.0729, 0.0930, 0.141, 0.209, 0.307] err = [0.00009, 0.0001, 0.0001, 0.0002, 0.0001, 0.0002, 0.0005, 0.0010, 0.0016, 0.002, 0.002, 0.003] plot(D,w,'o',markerfacecolor=[0.6, 0.6, 0.6], markersize=8); d = np.arange(0,0.01,0.00001) ws = v_stokes(rop,rof,d,visc,C1) wt = v_turbulent(rop,rof,d,visc,C2) wf = v_ferg(rop,rof,d,visc,C1,C2) figure(figsize=(10,8)) plot(d*1000,ws,label='Stokes',linewidth=3) plot(d*1000,wt,'g',label='Turbulent',linewidth=3) plot(d*1000,wf,'r',label='Ferguson-Church',linewidth=3) plot([0.25, 0.25],[0, 2],'k--') plot([0.5, 0.5],[0, 2],'k--') text(0.33, 1.0, 'medium sand', fontsize=13, rotation='vertical') text(0.09, 1.15, 'fine sand, silt and clay', fontsize=13, rotation='vertical') plot([1, 1],[0, 2],'k--') text(0.7, 1.0, 'coarse sand', fontsize=13, rotation='vertical') plot([2, 2],[0, 2],'k--') text(1.5, 1.0, 'very coarse sand', fontsize=13, rotation='vertical') plot([4, 4],[0, 2],'k--') text(3, 1.0, 'granules', fontsize=13, rotation='vertical') text(4.5, 1.0, 'pebbles', fontsize=13, rotation='vertical') legend(loc=2) xlabel('grain diameter (mm)',fontsize=15) ylabel('settling velocity (m/s)',fontsize=15) axis([0,5,0,2]); d = np.arange(0,0.01,0.00001) ws = v_stokes(rop,rof,d,visc,C1) wt = v_turbulent(rop,rof,d,visc,C2) wf = v_ferg(rop,rof,d,visc,C1,C2) figure(figsize=(10,8)) loglog(d*1000,ws,label='Stokes',linewidth=3) loglog(d*1000,wt,'g',label='Turbulent',linewidth=3) loglog(d*1000,wf,'r',label='Ferguson-Church',linewidth=3) plot([1.0/64, 1.0/64],[0.00001, 10],'k--') text(0.012, 0.0007, 'fine silt', fontsize=13, rotation='vertical') plot([1.0/32, 1.0/32],[0.00001, 10],'k--') text(0.17/8, 0.0007, 'medium silt', fontsize=13, rotation='vertical') plot([1.0/16, 1.0/16],[0.00001, 10],'k--') text(0.17/4, 0.0007, 'coarse silt', fontsize=13, rotation='vertical') plot([1.0/8, 1.0/8],[0.00001, 10],'k--') text(0.17/2, 0.001, 'very fine sand', fontsize=13, rotation='vertical') plot([0.25, 0.25],[0.00001, 10],'k--') text(0.17, 0.001, 'fine sand', fontsize=13, rotation='vertical') plot([0.5, 0.5],[0.00001, 10],'k--') text(0.33, 0.001, 'medium sand', fontsize=13, rotation='vertical') plot([1, 1],[0.00001, 10],'k--') text(0.7, 0.001, 'coarse sand', fontsize=13, rotation='vertical') plot([2, 2],[0.00001, 10],'k--') text(1.3, 0.001, 'very coarse sand', fontsize=13, rotation='vertical') plot([4, 4],[0.00001, 10],'k--') text(2.7, 0.001, 'granules', fontsize=13, rotation='vertical') text(6, 0.001, 'pebbles', fontsize=13, rotation='vertical') legend(loc=2) xlabel('grain diameter (mm)', fontsize=15) ylabel('settling velocity (m/s)', fontsize=15) axis([0,10,0,10]); plot(D,w,'o',markerfacecolor=[0.6, 0.6, 0.6], markersize=8); d = np.arange(0.000001,0.3,0.00001) C2 = 0.4 # this constant is 0.4 for spheres, 1 for natural grains ws = v_stokes(rop,rof,d,visc,C1) wt = v_turbulent(rop,rof,d,visc,C2) wf = v_ferg(rop,rof,d,visc,C1,C2) Fd = (rop-rof)*4/3*pi*((d/2)**3)*9.81 # drag force Cds = Fd/(rof*ws**2*pi*(d**2)/8) # drag coefficient Cdt = Fd/(rof*wt**2*pi*(d**2)/8) Cdf = Fd/(rof*wf**2*pi*(d**2)/8) Res = rof*ws*d/visc # particle Reynolds number Ret = rof*wt*d/visc Ref = rof*wf*d/visc figure(figsize=(10,8)) loglog(Res,Cds,linewidth=3, label='Stokes') loglog(Ret,Cdt,linewidth=3, label='Turbulent') loglog(Ref,Cdf,linewidth=3, label='Ferguson-Church') # data digitized from Southard textbook, figure 2-2: Re_exp = [0.04857,0.10055,0.12383,0.15332,0.25681,0.3343,0.62599,0.77049,0.94788,1.05956, 1.62605,2.13654,2.55138,3.18268,4.46959,4.92143,8.02479,12.28672,14.97393,21.33792, 28.3517,34.55246,57.57204,78.3929,96.88149,159.92596,227.64082,287.31738,375.98547, 516.14355,607.03827,695.8316,861.51953,1147.26099,1194.43213,1513.70166,1939.70557, 2511.91235,2461.13232,3106.32397,3845.99561,4974.59424,6471.96875,8135.45166,8910.81543, 11949.91309,17118.62109,21620.08203,28407.60352,36064.10156,46949.58594,62746.32422, 80926.54688,97655.00781,122041.875,157301.8125,206817.7188,266273,346423.5938,302216.5938, 335862.5313,346202,391121.5938,460256.375,575194.4375,729407.625] Cd_exp = [479.30811,247.18175,199.24072,170.60068,112.62481,80.21341,45.37168,39.89885,34.56996, 28.01445,18.88166,13.80322,12.9089,11.41266,8.35254,7.08445,5.59686,3.92277,3.53845, 2.75253,2.48307,1.99905,1.49187,1.27743,1.1592,0.89056,0.7368,0.75983,0.64756,0.56107, 0.61246,0.5939,0.49308,0.39722,0.48327,0.46639,0.42725,0.37951,0.43157,0.43157,0.40364, 0.3854,0.40577,0.41649,0.46173,0.41013,0.42295,0.43854,0.44086,0.4714,0.45225,0.47362, 0.45682,0.49104,0.46639,0.42725,0.42725,0.40171,0.31214,0.32189,0.20053,0.16249,0.10658, 0.09175,0.09417,0.10601] loglog(Re_exp, Cd_exp, 'o', markerfacecolor = [0.6, 0.6, 0.6], markersize=8) # Reynolds number for golf ball: rof_air = 1.2041 # density of air at 20 degrees C u = 50 # velocity of golf ball (m/s) d = 0.043 # diameter of golf ball (m) visc_air = 1.983e-5 # dynamic viscosity of air at 20 degrees C Re = rof_air*u*d/visc_air loglog([Re, Re], [0.4, 2], 'k--') text(3e4,2.5,'$Re$ for golf ball',fontsize=13) legend(loc=1) axis([1e-2,1e6,1e-2,1e4]) xlabel('particle Reynolds number ($Re$)', fontsize=15) ylabel('drag coefficient ($C_d$)', fontsize=15);