Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
601 views
unlisted
ubuntu2404
1
#!/usr/bin/env python
2
# coding: utf-8
3
4
# ![logo](JFM-notebooks-logo.jpg)
5
6
# ### $\mathit{Import \ useful \ modules}$
7
8
# In[1]:
9
10
11
get_ipython().run_line_magic('matplotlib', 'inline')
12
import numpy as np
13
from pylab import *
14
import numpy as np
15
import matplotlib.pyplot as plt
16
import sympy as sym
17
18
19
# ### $\mathit{Plot \ format}$
20
21
# In[2]:
22
23
24
SMALL_SIZE = 10
25
MEDIUM_SIZE = 20
26
BIGGER_SIZE = 24
27
plt.rc('font', size=BIGGER_SIZE) # controls default text sizes
28
plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title
29
plt.rc('axes', labelsize=BIGGER_SIZE) # fontsize of the x and y labels
30
plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels
31
plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels
32
plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize
33
plt.rc('axes', labelpad=30) # rotation
34
plt.rc('text', usetex=True)
35
mpl.rcParams['figure.dpi'] = 300
36
37
38
# ### $\mathit{Load \ the \ reference \ for \ validation: \ Dabade \ et \ al., \ JFM, \ 2016}$
39
40
# In[3]:
41
42
43
###Particle inertia
44
#prolate: Figure 2.b, \xi_0 = 1.01
45
rod_pine = np.loadtxt('Rod_particle_ine_drift.txt')
46
#oblate: Figure 3, \xi_0 = 1.0001
47
disk_pine = np.loadtxt('Disk_particle_ine_drift.txt')
48
###Fluid inertia
49
#prolate: Figure 5.b, \xi_0 = 1.0001
50
rod_fine = np.loadtxt('Rod_fluid_ine_drift.txt')
51
#oblate: Figure 6.b, \xi_0 = 1.0001
52
disk_fine = np.loadtxt('Disk_fluid_ine_drift.txt')
53
54
55
# ### $\mathit{Define \ the \ symbols:}$
56
57
# In[4]:
58
59
60
###kappa
61
k = sym.symbols('\kappa')
62
###\xi_0
63
xi = sym.symbols('xi', positive=True)
64
###\overline{\xi_0}
65
xib= sym.symbols("\overline{xi}", positive=True)
66
###orbit constant C
67
C = sym.symbols('C')
68
69
70
# ### $\mathit{Define \ the \ inverse \ hyperbolic \ cotangent \ function}$
71
72
# In[5]:
73
74
75
###inverse hyperbolic cotangent function
76
def invcoth(val):
77
return 0.5 * sym.log((val+1)/(val-1))
78
79
80
# ### $\mathit{Define \ the \ aspect \ ratio \ depending \ functions \ F_i^p \ , G_i^p \ for \ particle \ inertia: \ equations \ 5.7 - 5.12}$
81
82
# In[6]:
83
84
85
F1p_def = (4*xi**4-7*xi**2+3)*(xi**2*invcoth(xi)+invcoth(xi)-xi)/(160*xi*(1-2*xi**2)**2)
86
F2p_def = xib**4*(invcoth(xi)+xi*(xi*invcoth(xi)-1))/(40*xi*(1-2*xi**2)**2)
87
F3p_def = - xib**2*(xi**2*invcoth(xi)+invcoth(xi)-xi)/(160*xi*(1-2*xi**2)**2)
88
F4p_def = F3p_def
89
F5p_def = -F3p_def / 2
90
F6p_def = F5p_def
91
###
92
G1p_def = -(3*xi**4-5*xi**2+2)*((xi**2+1)*invcoth(xi)-xi) / (40*xi*(1-2*xi**2)**2)
93
G2p_def = (xi*(-xi**3+xi+(xi**4-1)*invcoth(xi))) / (40*(1-2*xi**2)**2)
94
G3p_def = G2p_def / xi**2
95
G4p_def = - G2p_def / xi**2
96
97
98
# ### $\mathit{Define \ the \ aspect \ ratio \ depending \ functions \ F_i^f, \ G_i^f \ for \ fluid \ inertia: \ equations \ 6.1 - 6.8}$
99
100
# In[7]:
101
102
103
F1f_def = (xi**(2)*(-648*xi**(12)+1350*xi**(10)-5571*xi**(8)+11841*xi**(6)-9269*xi**(4)+2263*xi**(2)+6) \
104
-27*xi**(2)*(24*xi**(8)-14*xi**(6)-19*xi**(4)+16*xi**(2)-3)*xib**(8)*invcoth(xi)**(4)+9*xi \
105
*(288*xi**(12)-564*xi**(10)-20*xi**(8)+799*xi**(6)-743*xi**(4)+261*xi**(2)-29)*xib**(4) \
106
* invcoth(xi)**(3)+xi*(2592*xi**(14)-7020*xi**(12)+13932*xi**(10)-21123*xi**(8)+14255*xi**(6) \
107
-577*xi**(4)-2711*xi**(2)+652)*invcoth(xi)-3*(1296*xi**(16)-4320*xi**(14)+5346*xi**(12) \
108
-1477*xi**(10)-4260*xi**(8)+6116*xi**(6)-3492*xi**(4)+849*xi**(2)-58)*invcoth(xi)**(2)) \
109
*(480*xi**(2)*(-1+2*xi**(2))**(3)*(-3*xi**(2)+3*xib**(2)*xi*invcoth(xi)+2) \
110
*(-3*xi**(3)+5*xi+3*xib**(4)*invcoth(xi))*((3*xi**(2)-1)*invcoth(xi)-3*xi))**(-1)
111
F2f_def = -(xib**(2)*(-9*xi**(9)+30*xi**(7)-115*xi**(5)+90*xi**(3)-12*xi \
112
+9*xib**(8)*(xi**(2)+1)*xi**(2)*invcoth(xi)**(3)-3*xib**(4)*(9*xi**(6)-10*xi**(4)-17*xi**(2)+14)*xi*invcoth(xi)**(2) \
113
+(27*xi**(10)-87*xi**(8)+133*xi**(6)-33*xi**(4)-52*xi**(2)+12)*invcoth(xi))) \
114
*(40*(xi-2*xi**(3))**(2)*(-3*xi**(2)+3*xib**(2)*xi*invcoth(xi)+2) \
115
*(-3*xi**(3)+5*xi+3*xib**(4)*invcoth(xi)))**(-1)
116
F3f_def = -(xi**(2)*(378*xi**(10)+801*xi**(8)-4731*xi**(6)+5551*xi**(4)-2369*xi**(2)+342) \
117
-27*xi**(2)*(6*xi**(6)+xi**(4)-4*xi**(2)+1)*xib**(8)*invcoth(xi)**(4)+9*xi*(12*xi**(10)+28*xi**(8)-201*xi**(6) \
118
+273*xi**(4)-147*xi**(2)+27)*xib**(4)*invcoth(xi)**(3)+(-972*xi**(13)-324*xi**(11)+7365*xi**(9) \
119
-10409*xi**(7)+5143*xi**(5)-847*xi**(3)+44*xi)*invcoth(xi)+3*(216*xi**(14)-378*xi**(12) \
120
+109*xi**(10)-412*xi**(8)+1204*xi**(6)-1028*xi**(4)+311*xi**(2)-22)*invcoth(xi)**(2)) \
121
*(480*xi**(2)*(-1+2*xi**(2))**(3)*(-3*xi**(2)+3*xib**(2)*xi*invcoth(xi)+2)*(-3*xi**(3)+5*xi \
122
+3*xib**(4)*invcoth(xi))*((3*xi**(2)-1)*invcoth(xi)-3*xi))**(-1)
123
F4f_def = F3f_def
124
F5f_def = - F3f_def / 2.0
125
F6f_def = - F3f_def / 2.0
126
###
127
G1f_def = (xi**(2)*(81*xi**(10)-414*xi**(8)+1074*xi**(6)-1162*xi**(4)+479*xi**(2)-54) \
128
+9*xi**(2)*(9*xi**(6)-7*xi**(2)+2)*xib**(8)*invcoth(xi)**(4)-3*xi*(108*xi**(10)-246*xi**(8)+69*xi**(6) \
129
+167*xi**(4)-129*xi**(2)+23)*xib**(4)*invcoth(xi)**(3)+(-324*xi**(13)+1566*xi**(11)-3309*xi**(9) \
130
+3133*xi**(7)-1023*xi**(5)-79*xi**(3)+36*xi)*invcoth(xi) \
131
+(486*xi**(14)-2214*xi**(12)+3819*xi**(10)-2568*xi**(8)-222*xi**(6)+1036*xi**(4)-355*xi**(2)+18) \
132
*invcoth(xi)**(2))*(40*(xi-2*xi**(3))**(2)*(-3*xi**(2)+3*xib**(2)*xi*invcoth(xi)+2) \
133
*(-3*xi**(3)+5*xi+3*xib**(4)*invcoth(xi))*((3*xi**(2)-1)*invcoth(xi)-3*xi))**(-1)
134
G2f_def = (-xi**(2)*(27*xi**(10)-180*xi**(8)+204*xi**(6)+68*xi**(4)-133*xi**(2)+18) \
135
-9*xi**(4)*(3*xi**(4)+2*xi**(2)-1)*xib**(8)*invcoth(xi)**(4)+3*xi \
136
*(36*xi**(10)-78*xi**(8)+73*xi**(6)-69*xi**(4)+35*xi**(2)-5)*xib**(4)*invcoth(xi)**(3) \
137
+xi*(108*xi**(12)-630*xi**(10)+1041*xi**(8)-617*xi**(6)+115*xi**(4)-29*xi**(2)+12) \
138
*invcoth(xi)+(-162*xi**(14)+810*xi**(12)-1551*xi**(10)+1600*xi**(8) \
139
-1054*xi**(6)+448*xi**(4)-97*xi**(2)+6)*invcoth(xi)**(2)) \
140
*(40*(xi-2*xi**(3))**(2)*(-3*xi**(2)+3*xib**(2)*xi*invcoth(xi)+2) \
141
*(-3*xi**(3)+5*xi+3*xib**(4)*invcoth(xi))*((3*xi**(2)-1)*invcoth(xi)-3*xi))**(-1)
142
G3f_def = (xi**(2)*(378*xi**(10)+801*xi**(8)-4731*xi**(6)+5551*xi**(4)-2369*xi**(2)+342) \
143
-27*xi**(2)*(6*xi**(6)+xi**(4)-4*xi**(2)+1)*xib**(8)*invcoth(xi)**(4) \
144
+9*xi*(12*xi**(10)+28*xi**(8)-201*xi**(6)+273*xi**(4)-147*xi**(2)+27)*xib**(4)*invcoth(xi)**(3) \
145
+(-972*xi**(13)-324*xi**(11)+7365*xi**(9)-10409*xi**(7)+5143*xi**(5)-847*xi**(3)+44*xi) \
146
*invcoth(xi)+3*(216*xi**(14)-378*xi**(12)+109*xi**(10)-412*xi**(8)+1204*xi**(6)-1028*xi**(4) \
147
+311*xi**(2)-22)*invcoth(xi)**(2))*(120*xi**(2)*(2*xi**(2)-1)**(3)*(-3*xi**(2)+3*xib**(2)*xi*invcoth(xi)+2) \
148
*(-3*xi**(3)+5*xi+3*xib**(4)*invcoth(xi))*((3*xi**(2)-1)*invcoth(xi)-3*xi))**(-1)
149
G4f_def = - G3f_def
150
151
152
# ### $\mathit{Define \ the \ particles}$
153
154
# In[8]:
155
156
157
###dictionary with the suggested values of \xi_0 to match the reference figures for validation
158
ee = {'pro_pine' : 1.01,
159
'obl_pine' : 1.0001,
160
'pro_fine' : 1.1,
161
'obl_fine' : 1.0001}
162
###definition of particle aspect ratio according to prolate/oblate particle shape
163
rr = {'prolate' : lambda xi0 : xi0/(xi0**2-1)**0.5,
164
'oblate' : lambda xi0 : (xi0**2-1)**0.5/xi0}
165
166
167
# ### $\mathit{Function \ that \ evaluates \ the \ shape \ dependent \ coefficients \ for \ both \ particle \ and \ fluid \ inertia: the \ prolate - oblate \ transformation \ is \ automatically \ applied.}$
168
169
# In[9]:
170
171
172
def shape_coeffs(key,ee):
173
if(key == 'prolate'):#prolates
174
###Particle inertia
175
e0 = ee['pro_pine']
176
F1p_eff = F1p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
177
F2p_eff = F2p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
178
F3p_eff = F3p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
179
F4p_eff = F4p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
180
F5p_eff = F5p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
181
F6p_eff = F6p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
182
G1p_eff = G1p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
183
G2p_eff = G2p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
184
G3p_eff = G3p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
185
G4p_eff = G4p_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
186
###Fluid inertia
187
e0 = ee['pro_fine']
188
F1f_eff = F1f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
189
F2f_eff = F2f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
190
F3f_eff = F3f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
191
F4f_eff = F4f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
192
F5f_eff = F5f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
193
F6f_eff = F6f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
194
G1f_eff = G1f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
195
G2f_eff = G2f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
196
G3f_eff = G3f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
197
G4f_eff = G4f_def.subs({xib:(xi**2-1)**0.5,xi:e0}).evalf()
198
else:#oblates
199
###Particle Inertia
200
e0 = ee['obl_pine']
201
F1p_tmp = ((F1p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
202
F1p_eff = -sym.re(F1p_tmp.subs({xi:e0}).evalf())
203
F2p_tmp = ((F2p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
204
F2p_eff = -sym.re(F2p_tmp.subs({xi:e0}).evalf())
205
F3p_tmp = ((F3p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
206
F3p_eff = -sym.re(F3p_tmp.subs({xi:e0}).evalf())
207
F4p_tmp = ((F4p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
208
F4p_eff = -sym.re(F4p_tmp.subs({xi:e0}).evalf())
209
F5p_tmp = ((F5p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
210
F5p_eff = -sym.re(F5p_tmp.subs({xi:e0}).evalf())
211
F6p_tmp = ((F6p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
212
F6p_eff = -sym.re(F6p_tmp.subs({xi:e0}).evalf())
213
G1p_tmp = ((G1p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
214
G1p_eff = -sym.re(G1p_tmp.subs({xi:e0}).evalf())
215
G2p_tmp = ((G2p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
216
G2p_eff = -sym.re(G2p_tmp.subs({xi:e0}).evalf())
217
G3p_tmp = ((G3p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
218
G3p_eff = -sym.re(G3p_tmp.subs({xi:e0}).evalf())
219
G4p_tmp = ((G4p_def*xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
220
G4p_eff = -sym.re(G4p_tmp.subs({xi:e0}).evalf())
221
###Fluid inertia
222
e0 = ee['obl_fine']
223
F1f_tmp = ((F1f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
224
F1f_eff = -sym.re(F1f_tmp.subs({xi:e0}).evalf())
225
F2f_tmp = ((F2f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
226
F2f_eff = -sym.re(F2f_tmp.subs({xi:e0}).evalf())
227
F3f_tmp = ((F3f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
228
F3f_eff = -sym.re(F3f_tmp.subs({xi:e0}).evalf())
229
F4f_tmp = ((F4f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
230
F4f_eff = -sym.re(F4f_tmp.subs({xi:e0}).evalf())
231
F5f_tmp = ((F5f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
232
F5f_eff = -sym.re(F5f_tmp.subs({xi:e0}).evalf())
233
F6f_tmp = ((F6f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
234
F6f_eff = -sym.re(F6f_tmp.subs({xi:e0}).evalf())
235
G1f_tmp = ((G1f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
236
G1f_eff = -sym.re(G1f_tmp.subs({xi:e0}).evalf())
237
G2f_tmp = ((G2f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
238
G2f_eff = -sym.re(G2f_tmp.subs({xi:e0}).evalf())
239
G3f_tmp = ((G3f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
240
G3f_eff = -sym.re(G3f_tmp.subs({xi:e0}).evalf())
241
G4f_tmp = ((G4f_def * xi**2).subs({xib:(xi**2-1)**0.5,xi:sym.I*(xi**2-1)**0.5}))/(xi**2)
242
G4f_eff = -sym.re(G4f_tmp.subs({xi:e0}).evalf())
243
return (F1p_eff,F2p_eff,F3p_eff,F4p_eff,F5p_eff,F6p_eff,G1p_eff,G2p_eff,G3p_eff,G4p_eff,
244
F1f_eff,F2f_eff,F3f_eff,F4f_eff,F5f_eff,F6f_eff,G1f_eff,G2f_eff,G3f_eff,G4f_eff)
245
246
247
# ### $\mathit{Define \ the \ trigonometric \ integrals \ I_i \ and \ J_i \ introduced \ in \ Appendix C}$
248
249
# In[10]:
250
251
252
###I1
253
I1=2*sym.pi
254
###I2
255
I2=2*sym.pi*(k-1)*(k+1)**(-1)
256
###I3
257
I3=2*sym.pi*(2*((C**(2)+1)*(C**(2)*k**(2)+1))**(-1/2)-1)
258
###I4
259
I4=2*sym.pi*(k-1)**(2)*(k+1)**(-2)
260
###I5+I6
261
I5I6 = -(4*sym.pi*(2*k**(2)*(3*sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1))-8*C**(2)-6) \
262
+4*k*sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1)) \
263
+sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1))+4*(4*C**(2)+1)*k**(3)*sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1)) \
264
+k**(4)*(sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1))-16*(C**(4)+C**(2))-2)-2)) \
265
*((k**(2)-1)**(2)*sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1)))**(-1)
266
###J1
267
J1=sym.pi*(k**(2)-1)*(k+1)**(-2)
268
###J2
269
J2 = -sym.pi*(-4*((C**2+1)*(C**2*k**2+1))**0.5+C**2*(k+1)**2+4)*C**(-2)*(k**2-1)**(-1)
270
###J3
271
J3=sym.pi*(k-1)**(2)*(k+1)**(-2)
272
###J4
273
J4 = -sym.pi*(k**(2)-1)*(8*C**(4)*k**(3)+C**(2)*((k+1)**(4)-8*k**(2)*sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1))) \
274
-4*(k**(2)+1)*(sym.sqrt((C**(2)+1)*(C**(2)*k**(2)+1))-1))*C**(-2)*(k**(2)-1)**(-3)
275
276
277
# ### $\mathit{Evaluate \ the \ shape \ dependent \ coefficients \ for \ a \ prolate \ particle}$
278
279
# In[11]:
280
281
282
F1p,F2p,F3p,F4p,F5p,F6p,G1p,G2p,G3p,G4p,F1f,F2f,F3f,F4f,F5f,F6f,G1f,G2f,G3f,G4f = shape_coeffs('prolate',ee)
283
284
285
# ### $\mathit{Evaluate \ the \ irreversible \ drift \ of \ a \ prolate \ particle \ due \ to \ particle \ inertia \ \Delta C_p ,\ as \ in \ eq. \ 5.19}$
286
287
# In[12]:
288
289
290
r = rr['prolate'](ee['pro_pine']) #select the correct aspect ratio to macth figure 2
291
PINE_pro = (C*(2*xi**2-1)/(xi*xib)*((I1*F1p+I2*F2p+I3*F3p+I4*F4p+(I5I6)*F5p) \
292
+(J1*G1p+J2*G2p+J3*G3p+J4*G4p))).subs({xib:(xi**2-1)**0.5,xi:ee['pro_pine'],k:r}).evalf()
293
294
295
# ### $\mathit{Evaluate \ the \ irreversible \ drift \ of \ a \ prolate \ particle \ due \ to \ fluid \ inertia \ \Delta C_f, \ as \ in \ eq. 5.19}$
296
297
# In[13]:
298
299
300
r = rr['prolate'](ee['pro_fine']) #select the correct aspect ratio to match figure 5.b
301
FINE_pro = (C*(2*xi**2-1)/(xi*xib)*((I1*F1f+I2*F2f+I3*F3f+I4*F4f+(I5I6)*F5f) \
302
+(J1*G1f+J2*G2f+J3*G3f+J4*G4f))).subs({xib:(xi**2-1)**0.5,xi:ee['pro_fine'],k:r}).evalf()
303
304
305
# ### $\mathit{Evaluate \ the \ shape \ dependent \ coefficients \ for \ an \ oblate \ particle}$
306
307
# In[14]:
308
309
310
F1p,F2p,F3p,F4p,F5p,F6p,G1p,G2p,G3p,G4p,F1f,F2f,F3f,F4f,F5f,F6f,G1f,G2f,G3f,G4f = shape_coeffs('oblate',ee)
311
312
313
# ### $\mathit{Evaluate \ the \ irreversible \ drift \ of \ an \ oblate \ particle \ due \ to \ particle \ inertia \ \Delta C_p ,\ as \ in \ eq. \ 5.19}$
314
315
# In[15]:
316
317
318
r = rr['oblate'](ee['obl_pine']) #select the correct aspect ratio to macth figure 3
319
PINE_obl = (C*(2*xi**2-1)/(xi*xib)*((I1*F1p+I2*F2p+I3*F3p+I4*F4p+(I5I6)*F5p) \
320
+(J1*G1p+J2*G2p+J3*G3p+J4*G4p))).subs({xib:(xi**2-1)**0.5,xi:ee['obl_pine'],k:r}).evalf()
321
322
323
# ### $\mathit{Evaluate \ the \ irreversible \ drift \ of \ an \ oblate \ particle \ due \ to \ fluid \ inertia \ \Delta C_f, \ as \ in \ eq. 5.19}$
324
325
# In[16]:
326
327
328
r = rr['oblate'](ee['obl_fine']) #select the correct aspect ratio to match figure 6.b
329
FINE_obl= (C*(2*xi**2-1)/(xi*xib)*((I1*F1f+I2*F2f+I3*F3f+I4*F4f+(I5I6)*F5f) \
330
+(J1*G1f+J2*G2f+J3*G3f+J4*G4f))).subs({xib:(xi**2-1)**0.5,xi:ee['obl_fine'],k:r}).evalf()
331
332
333
# ### $\mathit{Define \ a \ custom \ range \ of \ orbit \ constants \ C}$
334
335
# In[17]:
336
337
338
Crange = np.concatenate((np.linspace(0.00001,0.9,100),np.linspace(1,4,100)))
339
Crange = np.concatenate((Crange,np.linspace(4,100,100)))
340
341
342
# ### $\mathit{Calculate \ the \ drift \ over \ the \ C \ range}$
343
344
# In[18]:
345
346
347
CDC_pro_pine = [] #empty list to store the result for particle inertia on prolate
348
CDC_pro_fine = [] #empty list to store the result for fluid inertia on prolate
349
CDC_obl_pine = [] #empty list to store the result for particle inertia on oblate
350
CDC_obl_fine = [] #empty list to store the result for fluid inertia on oblate
351
for j in range(len(Crange)): #loop on the C range
352
CVAL = Crange[j] #set the orbit constant value
353
###prolate, particle inertia
354
data = PINE_pro.subs({C:CVAL}) #substitute the numerical values in the symbolic equation
355
CDC_pro_pine.append([CVAL,data]) #store the result in the list
356
###prolate, fluid inertia
357
data = FINE_pro.subs({C:CVAL}) #substitute the numerical values in the symbolic equation
358
CDC_pro_fine.append([CVAL,data]) #store the result in the list
359
###oblate, particle inertia
360
data = PINE_obl.subs({C:CVAL}) #substitute the numerical values in the symbolic equation
361
CDC_obl_pine.append([CVAL,data]) #store the result in the list
362
###oblate, fluid inertia
363
data = FINE_obl.subs({C:CVAL}) #substitute the numerical values in the symbolic equation
364
CDC_obl_fine.append([CVAL,data]) #store the result in the list
365
#convert to numpy arrays
366
CDC_pro_pine = np.array(CDC_pro_pine)
367
CDC_pro_fine = np.array(CDC_pro_fine)
368
CDC_obl_pine = np.array(CDC_obl_pine)
369
CDC_obl_fine = np.array(CDC_obl_fine)
370
371
372
# ### $\mathit{Validate \ the \ method: \ fig. 2,b \ for \ the \ prolate \ particle \ inertia \ and \ fig. \ 3 \ for \ the \ oblate \ particle \ inertia}$
373
374
# In[19]:
375
376
377
###Create the figure with 4 sub-plots
378
fig, axs = plt.subplots(2,2,constrained_layout=True,sharex=True,figsize=(7,4))
379
###Figure 2.b of Dabade et al., 2016
380
ftr = -1/((ee['pro_pine']-1)**(3/2)*np.log(ee['pro_pine']-1))
381
axs[0,0].scatter(CDC_pro_pine[:,0]/(1+CDC_pro_pine[:,0]),CDC_pro_pine[:,1]/(1+CDC_pro_pine[:,0]**2)*ftr,label=r'$\mathit{\xi_0 = 1.01}$')
382
axs[0,0].plot(rod_pine[:,0],rod_pine[:,1],c='k',label=r'$\mathit{Dabade \ et \ al., \ 2016}$',ls='--')
383
axs[0,0].set_ylim(-0.01,0.4)
384
axs[0,0].set_xlim(0.0,1.0)
385
axs[0,0].legend(fontsize=8,loc='lower center')
386
axs[0,0].title.set_text(r'$\mathit{Prolate, \ particle \ inertia}$')
387
axs[0,0].set_ylabel(r'$\mathit{ \frac{ {St}^{-1} \left( \Delta C_p / (C^2+1) \right) }{ \left( (\xi_0^2-1)^{3/2} \log(\xi_0-1) \right)} }$',fontsize=7,labelpad=5)
388
###Figure 5.b of Dabade et al., 2016
389
ftr = -((ee['pro_fine']-1)**(0.5)*np.log(ee['pro_fine']-1))
390
axs[0,1].scatter(CDC_pro_fine[:,0]/(1+CDC_pro_fine[:,0]),CDC_pro_fine[:,1]/(1+CDC_pro_fine[:,0]**2)*ftr,label=r'$\mathit{\xi_0 = 1.1}$')
391
axs[0,1].plot(rod_fine[:,0],rod_fine[:,1],c='k',label=r'$\mathit{Dabade \ et \ al., \ 2016}$',ls='--')
392
axs[0,1].title.set_text(r'$\mathit{Prolate, \ fluid \ inertia}$')
393
axs[0,1].set_ylim(-0.01,0.2)
394
axs[0,1].set_ylabel(r'$\mathit{\frac{{Re_p}^{-1} \left( \Delta C_p / (C^2+1) \right) }{ \left( (\xi_0-1)^{0.5} \log (\xi_0-1) \right)^{-1}} }$',fontsize=7,labelpad=5)
395
axs[0,1].legend(fontsize=8,loc='upper center')
396
###Figure 3 of Dabade et al., 2016
397
ftr = ee['obl_pine']**2
398
axs[1,0].scatter(CDC_obl_pine[:,0]/(1+CDC_obl_pine[:,0]),CDC_obl_pine[:,1]/(1+CDC_obl_pine[:,0]**2)*ftr,label=r'$\mathit{\xi_0 = 1.0001}$')
399
axs[1,0].plot(disk_pine[:,0],disk_pine[:,1],c='k',label=r'$\mathit{Dabade \ et \ al., \ 2016}$',ls='--')
400
axs[1,0].title.set_text(r'$\mathit{Oblate, \ particle \ inertia}$')
401
axs[1,0].legend(fontsize=8,loc='upper center')
402
axs[1,0].set_ylim(-0.11,0.01)
403
axs[1,0].set_ylabel(r'$\mathit{{St}^{-1} \left( \Delta C_p / (C^2+1) \right) \xi_0^2 }$',fontsize=7,labelpad=5)
404
###Figure 6.b of Dabade et al., 2016
405
ftr = (ee['obl_fine']-1)**0.5
406
axs[1,1].scatter(CDC_obl_fine[:,0]/(1+CDC_obl_fine[:,0]),CDC_obl_fine[:,1]/(1+CDC_obl_fine[:,0]**2)*ftr,label=r'$\mathit{\xi_0 = 1.0001}$')
407
axs[1,1].plot(disk_fine[:,0],disk_fine[:,1],c='k',label=r'$\mathit{Dabade \ et \ al., \ 2016}$',ls='--')
408
axs[1,1].title.set_text(r'$\mathit{Oblate, \ fluid \ inertia}$')
409
axs[1,1].legend(fontsize=8,loc='upper center')
410
axs[1,1].set_ylim(-0.16,0.02)
411
axs[1,1].set_ylabel(r'$\mathit{{Re_p}^{-1} \left( \Delta C_f / (C^2+1) \right) (\xi_0-1)^{0.5} }$',fontsize=6.5,labelpad=5)
412
###Format
413
for j in range(2):
414
axs[1,j].set_xlabel(r'$\mathit{C/(C+1)}$',labelpad=5,fontsize=13)
415
416
417
# In[ ]:
418
419
420
421
422
423