|
@@ -9,12 +9,15 @@ import scipy.io
|
|
|
c = 299792458.0
|
|
|
eps_0 = 8.854187817e-12 # F/m
|
|
|
pi = np.pi
|
|
|
-verbose = 6
|
|
|
# r of monitor
|
|
|
#r = 146.513e-9
|
|
|
r = 800e-9
|
|
|
-#debug = True
|
|
|
+# debug = True
|
|
|
+# verbose = 7
|
|
|
+
|
|
|
debug = False
|
|
|
+verbose = 6
|
|
|
+
|
|
|
|
|
|
def read_data_mat(fname):
|
|
|
#data = "z, dip.power, Ex, Ey, Ez, Hx, Hy, Hz, n_Au"
|
|
@@ -23,6 +26,7 @@ def read_data_mat(fname):
|
|
|
|
|
|
lambd = np.reshape(mat["lambda"],(-1))
|
|
|
dippower = np.reshape(mat["dippower"],(-1))
|
|
|
+ vacpower = np.reshape(mat["vacpower"],(-1))
|
|
|
z = np.reshape(mat["z"],(-1))
|
|
|
n_Au = np.reshape(mat["n_fdtd"],(-1))
|
|
|
onez = np.ones((len(z)))
|
|
@@ -38,13 +42,13 @@ def read_data_mat(fname):
|
|
|
fdata = np.vstack(( z.astype(np.complex128), dippower[i]*onez.astype(np.complex128)
|
|
|
,E1[:,0,i], E1[:,1,i], E1[:,2,i]
|
|
|
,H1[:,0,i], H1[:,1,i], H1[:,2,i]
|
|
|
- ,n_Au[i]*onez.astype(np.complex128)
|
|
|
+ ,n_Au[i]*onez.astype(np.complex128), dippower[i]*onez.astype(np.complex128)
|
|
|
))
|
|
|
data1[lambd[i]]=fdata
|
|
|
fdata = np.vstack(( z.astype(np.complex128), dippower[i]*onez.astype(np.complex128)
|
|
|
,E2[:,0,i], E2[:,1,i], E2[:,2,i]
|
|
|
,H2[:,0,i], H2[:,1,i], H2[:,2,i]
|
|
|
- ,n_Au[i]*onez.astype(np.complex128)
|
|
|
+ ,n_Au[i]*onez.astype(np.complex128), dippower[i]*onez.astype(np.complex128)
|
|
|
))
|
|
|
data2[lambd[i]]=fdata
|
|
|
if debug: break
|
|
@@ -107,18 +111,24 @@ def get_WLs_idx(WLs, data):
|
|
|
# print("H0 air (%5.4g %+5.4gj)"%(np.real(H1_0), np.imag(H1_0)),
|
|
|
# " from H1 (%5.4g %+5.4gj)"%(np.real(H1[i]), np.imag(H1[i])))
|
|
|
|
|
|
+def cross(a, b):
|
|
|
+ c = [a[1]*b[2] - a[2]*b[1],
|
|
|
+ a[2]*b[0] - a[0]*b[2],
|
|
|
+ a[0]*b[1] - a[1]*b[0]]
|
|
|
+
|
|
|
+ return c
|
|
|
|
|
|
def analyze(data,wl):
|
|
|
# print(data[0,:]) # all z values
|
|
|
- #data = "z, dip.power, Ex, Ey, Ez, Hx, Hy, Hz, n_Au"
|
|
|
- # 0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 "
|
|
|
+ #data = "z, dip.power, Ex, Ey, Ez, Hx, Hy, Hz, n_Au, vac. power"
|
|
|
+ # 0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9"
|
|
|
lambd = wl
|
|
|
omega = 2*pi*c/lambd
|
|
|
-
|
|
|
eps_d = complex(1) # air, z>0
|
|
|
eps_m = data[8,0]**2 # metal, z<0
|
|
|
|
|
|
dip_power = data[1,0]
|
|
|
+ vac_power = data[9,0]
|
|
|
|
|
|
z = data[0,:]
|
|
|
|
|
@@ -135,8 +145,6 @@ def analyze(data,wl):
|
|
|
raise
|
|
|
|
|
|
|
|
|
- Ex = data[2,:]
|
|
|
-
|
|
|
Ex_m = data[2,idx_m][0]
|
|
|
Ey_m = data[3,idx_m][0]
|
|
|
Ez_m = data[4,idx_m][0]
|
|
@@ -145,7 +153,7 @@ def analyze(data,wl):
|
|
|
Hz_m = data[7,idx_m][0]
|
|
|
E_m = np.transpose(np.array([Ex_m,Ey_m,Ez_m]))
|
|
|
H_m = np.transpose(np.array([Hx_m,Hy_m,Hz_m]))
|
|
|
-
|
|
|
+
|
|
|
Ex_d = data[2,idx_d][0]
|
|
|
Ey_d = data[3,idx_d][0]
|
|
|
Ez_d = data[4,idx_d][0]
|
|
@@ -161,13 +169,31 @@ def analyze(data,wl):
|
|
|
chi_d = np.sqrt( eps_d*k_0**2 - k_sp**2 ) # desc. after eq6c, supmat
|
|
|
chi_m = np.sqrt( eps_m*k_0**2 - k_sp**2 ) # desc. after eq6c, supmat
|
|
|
|
|
|
- h_sp_d = np.exp(1j*chi_d*z_d) # eq6a, supmat
|
|
|
- e_sp_x_d = chi_d/(omega*eps_0*eps_d)*np.exp(1j*chi_d*z_d) # eq6b, supmat
|
|
|
- e_sp_z_d = k_sp/(omega*eps_0*eps_d)*np.exp(1j*chi_d*z_d) # eq6c, supmat
|
|
|
+ # # TODO!!! alt
|
|
|
+ # chi_d = np.sqrt( k_sp**2 - eps_d*k_0**2 ) # desc. after eq6c, supmat
|
|
|
+ # chi_m = np.sqrt( k_sp**2 - eps_m*k_0**2 ) # desc. after eq6c, supmat
|
|
|
+
|
|
|
+
|
|
|
+ mul = -1 #TODO!!! minus???
|
|
|
+ h_sp_d = np.exp(mul*1j*chi_d*z_d) # eq6a, supmat
|
|
|
+ e_sp_x_d = chi_d/(omega*eps_0*eps_d)*np.exp(mul*1j*chi_d*z_d) # eq6b, supmat
|
|
|
+ e_sp_z_d = -k_sp/(omega*eps_0*eps_d)*np.exp(mul*1j*chi_d*z_d) # eq6c, supmat
|
|
|
|
|
|
h_sp_m = np.exp(1j*-chi_m*z_m) # eq6a, supmat
|
|
|
e_sp_x_m = -chi_m/(omega*eps_0*eps_m)*np.exp(1j*-chi_m*z_m) # eq6b, supmat
|
|
|
- e_sp_z_m = k_sp/(omega*eps_0*eps_m)*np.exp(1j*-chi_m*z_m) # eq6c, supmat
|
|
|
+ e_sp_z_m = -k_sp/(omega*eps_0*eps_m)*np.exp(1j*-chi_m*z_m) # eq6c, supmat
|
|
|
+
|
|
|
+ if verbose > 8:
|
|
|
+ print("WL =",1e9*wl)
|
|
|
+ # if 1e9*wl > 763 and 1e9*wl < 766:
|
|
|
+ print(1j*1e9/chi_d)
|
|
|
+ print(1j*1e9/chi_m)
|
|
|
+ print("_d")
|
|
|
+ print(1e9*z_d)
|
|
|
+ print(h_sp_d)
|
|
|
+ print("_m")
|
|
|
+ print(1e9*z_m)
|
|
|
+ print(h_sp_m)
|
|
|
|
|
|
zero_m = np.zeros(len(h_sp_m))
|
|
|
zero_d = np.zeros(len(h_sp_d))
|
|
@@ -188,14 +214,22 @@ def analyze(data,wl):
|
|
|
|
|
|
# E_m H_m E_d H_d
|
|
|
|
|
|
- N_sp_0 = (((-1)**0) * (4.0j/(omega*eps_0*k_sp))
|
|
|
+ N_sp_0 = ( ((-1)**0) * (4.0j / (omega*eps_0*k_sp))
|
|
|
* (eps_d**2 - eps_m**2) / ((eps_m*eps_d)**(3/2)) )
|
|
|
|
|
|
tmp_m = np.cross(E_minus_sp_0_m,H_m) - np.cross(E_m, H_minus_sp_0_m)
|
|
|
+ #tmp_m = np.cross(E_minus_sp_0_m,np.conj(H_m)) + np.cross(np.conj(E_m), H_minus_sp_0_m)
|
|
|
radail_pojeciton_m = np.transpose(tmp_m)[0]
|
|
|
integrand_m = (2*pi/N_sp_0)*radail_pojeciton_m*r
|
|
|
+ # a = E_minus_sp_0_m[0]*1e9
|
|
|
+ # print("\n\nE_minus:", a )
|
|
|
+ # b = H_m[0]*1e9
|
|
|
+ # print("H_m:",b)
|
|
|
+ # print("\ncross:",np.cross(E_minus_sp_0_m*1e9,H_m*1e9)[0])
|
|
|
+ # print("cross:",np.array(cross(a,b)))
|
|
|
|
|
|
tmp_d = np.cross(E_minus_sp_0_d,H_d) - np.cross(E_d, H_minus_sp_0_d)
|
|
|
+ #tmp_d = np.cross(E_minus_sp_0_d,np.conj(H_d)) + np.cross(np.conj(E_d), H_minus_sp_0_d)
|
|
|
radail_pojeciton_d = np.transpose(tmp_d)[0]
|
|
|
integrand_d = (2*pi/N_sp_0)*radail_pojeciton_d*r
|
|
|
|
|
@@ -243,13 +277,15 @@ def analyze(data,wl):
|
|
|
file_ext="pdf"
|
|
|
|
|
|
|
|
|
-def main ():
|
|
|
+def main (monitor_index):
|
|
|
#dirname="bigourdan-Au-sub-dipole-W.fsp.1D.monitor_1.results"
|
|
|
- dirname="bigourdan-Au-sub-dipole-W-2mon.fsp.1D.monitor_2.results"
|
|
|
- data = read_data(dirname)
|
|
|
- filename = 'bigourdan-Au-sub-dipole-W-2mon.fsp.1D.mat'
|
|
|
+ #dirname="bigourdan-Au-sub-dipole-W-2mon.fsp.1D.monitor_2.results"
|
|
|
+ #data = read_data(dirname)
|
|
|
+ #filename = 'bigourdan-Au-sub-dipole-W-2mon.fsp.1D.mat'
|
|
|
+ filename="bg-Au-sub-dipole-W.fsp.1D.mat"
|
|
|
+
|
|
|
data2 = read_data_mat(filename)
|
|
|
- r,data = data2[0]
|
|
|
+ r,data = data2[monitor_index]
|
|
|
if verbose > 5:
|
|
|
print("r =",r)
|
|
|
WLs = []
|
|
@@ -257,16 +293,17 @@ def main ():
|
|
|
for wl in data:
|
|
|
WLs.append(wl)
|
|
|
A2.append(analyze(data[wl],wl))
|
|
|
-
|
|
|
- #print(WLs)
|
|
|
WLs1 = np.array(WLs)
|
|
|
A21 = np.array(A2)
|
|
|
+ #return
|
|
|
+
|
|
|
# #dirname="bigourdan-Au-sub-Cyl-dipole-W.fsp.1D.monitor_1.results"
|
|
|
# dirname="bigourdan-Au-sub-Cyl-dipole-W-2mon.fsp.1D.monitor_2.results"
|
|
|
# data = read_data(dirname)
|
|
|
- filename = 'bigourdan-Au-sub-Cyl-dipole-W-2mon.fsp.1D.mat'
|
|
|
+ filename = 'bg-Au-sub-Au-dipole-W.fsp.1D.mat'
|
|
|
+ #filename = 'bg-Au-sub-Si-dipole-W.fsp.1D.mat'
|
|
|
data2 = read_data_mat(filename)
|
|
|
- r,data = data2[0]
|
|
|
+ r,data = data2[monitor_index]
|
|
|
WLs = []
|
|
|
A2 = []
|
|
|
for wl in data:
|
|
@@ -280,15 +317,21 @@ def main ():
|
|
|
# data = np.vstack((WLs,A2))
|
|
|
# print(np.sort(data))
|
|
|
|
|
|
- plt.plot(WLs1*1e9, A21*275, color="black",label="x 275, no ant.")
|
|
|
- plt.plot(WLs2*1e9, A22, color="red", label="with antena")
|
|
|
+ plt.plot(WLs1*1e9, A22/A21, color="black",label="eff.")
|
|
|
+ # plt.plot(WLs1*1e9, A21, color="black",label="x 275, no ant.")
|
|
|
+ # plt.plot(WLs2*1e9, A22, color="red", label="with antena")
|
|
|
plt.legend()
|
|
|
plt.xlabel(r'$\lambda$, nm')
|
|
|
- plt.ylim(0,0.5)
|
|
|
- plt.ylabel(r'$|A_{sp}|^2$',labelpad=-1)
|
|
|
- #plt.title(dirname)
|
|
|
- plt.savefig(dirname+"_A2."+file_ext)
|
|
|
+ # if monitor_index == 0:
|
|
|
+ # plt.ylim(0,2)
|
|
|
+ # else:
|
|
|
+ # plt.ylim(0,0.32)
|
|
|
+ #plt.ylim(0,2)
|
|
|
+ plt.ylabel(r'$^{|A^{ant}_{sp}|^2}/_{|A^0_{sp}|^2}$',labelpad=1,size=14)
|
|
|
+ plt.title("r = %4.1f nm"%(r*1e9))
|
|
|
+ plt.savefig(filename+str(monitor_index)+"_A2."+file_ext)
|
|
|
plt.clf()
|
|
|
plt.close()
|
|
|
|
|
|
-main()
|
|
|
+main(0)
|
|
|
+main(1)
|