|
@@ -1,37 +1,61 @@
|
|
#!/usr/bin/env python3
|
|
#!/usr/bin/env python3
|
|
# -*- coding: UTF-8 -*-
|
|
# -*- coding: UTF-8 -*-
|
|
-from cProfile import label
|
|
|
|
-from matplotlib import markers, pyplot as plt
|
|
|
|
|
|
+from matplotlib import pyplot as plt
|
|
|
|
+import cmath
|
|
|
|
+from scattnlay import mesomie, mie
|
|
import numpy as np
|
|
import numpy as np
|
|
-from scipy import interpolate
|
|
|
|
-
|
|
|
|
-arr2D = np.loadtxt('rs4-im-d_perp.csv', delimiter=',')
|
|
|
|
-im_d = arr2D[arr2D[:, 0].argsort()]
|
|
|
|
-arr2D = np.loadtxt('rs4-re-d_perp.csv', delimiter=',')
|
|
|
|
-re_d = arr2D[arr2D[:, 0].argsort()]
|
|
|
|
-
|
|
|
|
-xmin_im = np.min(im_d[:, 0])
|
|
|
|
-xmin_re = np.min(re_d[:, 0])
|
|
|
|
-xmax_im = np.max(im_d[:, 0])
|
|
|
|
-xmax_re = np.max(re_d[:, 0])
|
|
|
|
-x = np.linspace(np.max([xmin_im, xmin_re]), np.min([xmax_im, xmax_re]), 100)
|
|
|
|
-im_d_y = interpolate.interp1d(im_d[:, 0], im_d[:, 1])
|
|
|
|
-re_d_y = interpolate.interp1d(re_d[:, 0], re_d[:, 1])
|
|
|
|
-
|
|
|
|
-data = np.array([x.T, re_d_y(x).T, im_d_y(x).T])
|
|
|
|
-np.savetxt('rs4-d_perp.txt', data)
|
|
|
|
-
|
|
|
|
-# print(data)
|
|
|
|
-# plt.plot(im_d[:, 0], im_d[:, 1], marker='o', ls='')
|
|
|
|
-# plt.plot(x, im_d_y(x))
|
|
|
|
-# plt.plot(re_d[:, 0], re_d[:, 1], marker='o', ls='')
|
|
|
|
-# plt.plot(x, re_d_y(x))
|
|
|
|
-# plt.xlim((0, 1))
|
|
|
|
-# plt.ylim((-4, 5))
|
|
|
|
-# plt.show()
|
|
|
|
|
|
|
|
from_disk = np.loadtxt('rs4-d_perp.txt')
|
|
from_disk = np.loadtxt('rs4-d_perp.txt')
|
|
-plt.plot(from_disk[0, :], from_disk[1, :], label='re d')
|
|
|
|
-plt.plot(from_disk[0, :], from_disk[2, :], label='im d')
|
|
|
|
|
|
+min_lim = 0.4
|
|
|
|
+max_lim = 0.8
|
|
|
|
+omega_ratio = from_disk[0, :]
|
|
|
|
+d_perp = from_disk[1, :] + 1j*from_disk[2, :]
|
|
|
|
+
|
|
|
|
+c = 299792458 # m/s
|
|
|
|
+h_reduced = 6.5821e-16 # eV s
|
|
|
|
+omega_p = 5.9 # eV
|
|
|
|
+gamma = 0.1 # eV
|
|
|
|
+eps_d = 1
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def eps_m(omega):
|
|
|
|
+ return 1 - omega_p * omega_p / (omega*omega + 1j*omega*gamma)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Rs = [2.5, 5, 10, 25]
|
|
|
|
+R = 5
|
|
|
|
+
|
|
|
|
+Qext = []
|
|
|
|
+Qext_mie = []
|
|
|
|
+om_rat_plot = []
|
|
|
|
+# for om_rat in omega_ratio:
|
|
|
|
+for i in range(len(omega_ratio)):
|
|
|
|
+ om_rat = omega_ratio[i]
|
|
|
|
+ if om_rat < min_lim or om_rat > max_lim:
|
|
|
|
+ continue
|
|
|
|
+ omega = om_rat*omega_p
|
|
|
|
+ m = cmath.sqrt(eps_m(omega))
|
|
|
|
+ x = (omega/c) * R * 1e-9/h_reduced
|
|
|
|
+ mesomie.calc_ab(R*10, # R in angstrem
|
|
|
|
+ x, # xd
|
|
|
|
+ x * m, # xm
|
|
|
|
+ 1, # eps_d
|
|
|
|
+ m * m, # eps_m
|
|
|
|
+ 0, # d_parallel
|
|
|
|
+ d_perp[i]) # d_perp
|
|
|
|
+ mesomie.calc_Q()
|
|
|
|
+ mie.SetLayersSize(x)
|
|
|
|
+ mie.SetLayersIndex(m)
|
|
|
|
+ mie.RunMieCalculation()
|
|
|
|
+ Qext.append(mesomie.GetQext())
|
|
|
|
+ Qext_mie.append(mie.GetQext())
|
|
|
|
+ # print(x, m, Qext[-1] - mie.GetQext())
|
|
|
|
+
|
|
|
|
+ om_rat_plot.append(om_rat)
|
|
|
|
+# print(Qext)
|
|
|
|
+plt.plot(om_rat_plot, Qext_mie, label='classic', color='gray', lw=4)
|
|
|
|
+plt.plot(om_rat_plot, Qext, label='non-classic', color='red', lw=4)
|
|
plt.legend()
|
|
plt.legend()
|
|
|
|
+plt.yscale('log')
|
|
|
|
+plt.xlim((0.4, 0.8))
|
|
plt.show()
|
|
plt.show()
|