|
@@ -0,0 +1,101 @@
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+from scattnlay import fieldnlay
|
|
|
+from scattnlay import scattnlay
|
|
|
+import cmath
|
|
|
+import matplotlib.pyplot as plt
|
|
|
+import numpy as np
|
|
|
+import scattnlay
|
|
|
+import quadpy
|
|
|
+
|
|
|
+
|
|
|
+index_Ag = 4.0
|
|
|
+
|
|
|
+nm = 1.0
|
|
|
+WL_units='nm'
|
|
|
+
|
|
|
+x = np.ones((1), dtype = np.float64)
|
|
|
+m = np.ones((1), dtype = np.complex128)
|
|
|
+
|
|
|
+core_r = 120
|
|
|
+WL = 550
|
|
|
+
|
|
|
+x[0] = 2.0*np.pi*core_r/WL
|
|
|
+m[0] = index_Ag/nm
|
|
|
+
|
|
|
+R = x[0]*3.01
|
|
|
+
|
|
|
+comment='bulk-NP-WL'+str(WL)+WL_units
|
|
|
+
|
|
|
+quad_ord = 19
|
|
|
+
|
|
|
+
|
|
|
+coord = quadpy.sphere.Lebedev(3).points
|
|
|
+
|
|
|
+def force(in_coord):
|
|
|
+ coord = in_coord.T
|
|
|
+ terms, Eall, Hall = fieldnlay(np.array([x]), np.array([m]), coord)
|
|
|
+ E_all = Eall[0, :, :]
|
|
|
+ H_all = Hall[0, :, :]
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ unit_all = coord/ R
|
|
|
+ P = np.array([
|
|
|
+ ( (1/(2.0))
|
|
|
+ *np.real(
|
|
|
+ np.dot(unit,E)*np.conj(E) +
|
|
|
+ np.dot(unit,H)*np.conj(H) +
|
|
|
+ (-1.0/2.0)*(np.dot(E,np.conj(E))
|
|
|
+ +np.dot(H,np.conj(H))
|
|
|
+ )*unit
|
|
|
+ )
|
|
|
+ )
|
|
|
+ for unit,E,H in zip(unit_all,E_all, H_all)
|
|
|
+ ])
|
|
|
+ return P.T
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+val = quadpy.sphere.integrate(
|
|
|
+ force,
|
|
|
+ [0.0, 0.0, 0.0], R,
|
|
|
+ quadpy.sphere.Lebedev(quad_ord)
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+print(val)
|