# Layer thickness: d_a = 226.0e-9; d_b = 220.0e-9; d_PMMA = 100.0e-9; N_per = 5; d_PC = N_per*(d_a+d_b); # source angles: src_theta_TIR = [43.0:0.1:43.9]; src_theta_rest = [44.0:1:48.0]; src_theta_dip = [49:0.1:51]; TIR_len = length(src_theta_TIR); rest_len = length(src_theta_rest); dip_len = length(src_theta_dip); src_theta = matrix(TIR_len+rest_len+dip_len,1); src_theta(1:TIR_len) = src_theta_TIR; src_theta(TIR_len+1:TIR_len+rest_len) = src_theta_rest; src_theta(TIR_len+rest_len+1:TIR_len+rest_len+dip_len) = src_theta_dip; # T/R results to collect: R_num = matrix(length(src_theta)); T_num = matrix(length(src_theta)); n_E2 = 400; xgrid_E2 = linspace(-d_PC,300e-9,n_E2); E2 = matrix(n_E2,length(src_theta)); # ------------ # Simulations: # ------------ # source angle sweep: for(I = 1:length(src_theta)) { switchtolayout; ?msg = "Source angle: " + num2str(src_theta(I)); setnamed("PlaneWaveSrc","angle theta",src_theta(I)); run; R_num(I) = -transmission("BackPwrMonitor"); T_num(I) = transmission("FrontPwrMonitor"); E2(1:n_E2,I) = interp(getelectric("Field_Monitor"),getdata("Field_Monitor","x"),xgrid_E2); } # ================================== # THEORETICAL CALCULATION (STACKRT): # ================================== fsim = getdata("PlaneWaveSrc","f"); #frequency used in simulation ?msg = "Used source f = " + num2str(fsim); graph_name = "C (graphene) - broadband"; graph_thick = 0.1e-9; #Tickness of graphene (for stackrt) add_graphene = true; add_PMMA = true; # Refractive indices: index_a = 1.4468; #SiO2 index_b = 2.7204; #TiO2 index_cladding = 1; #air index_substrate = 1.4468; #SiO2 index_PMMA = 1.481; # Calculate refractive index of graphene: graph_cond =getsurfaceconductivity(graph_name,fsim); ?msg = "Graphene: cond = " + num2str(graph_cond); imag_unit = 0+1i; omega_val = 2*pi*fsim; perm_val = 1 + imag_unit*graph_cond/(eps0*omega_val*graph_thick); index_val = sqrt(perm_val); # Use stackrt: nd = 2*N_per + 2; if (add_PMMA){ ?msg = "Added PMMA layer"; nd = nd +1; } if (add_graphene){ ?msg = "Added graphene layer"; nd = nd +1; } d_layers = matrix(nd,1); nf = length(fsim); index_layers = matrix(nd,nf); d_layers(1) = 0; #Substrate d_layers(nd) = 0; #Cladding index_layers(1) = index_substrate; #Substrate index_layers(nd) = index_cladding; #Cladding if (add_PMMA){ index_layers(nd-1) = index_PMMA; d_layers(nd-1) = 100.0e-9; if (add_graphene){ index_layers(nd-2) = index_val; d_layers(nd-2) = graph_thick; } } else{ if (add_graphene){ index_layers(nd-1) = index_val; d_layers(nd-1) = graph_thick; } } if (N_per>0){ for (I = 1:N_per){ layer_b = 2*I; layer_a = layer_b+1; d_layers(layer_a) = d_a; d_layers(layer_b) = d_b; index_layers(layer_a) = index_a; index_layers(layer_b) = index_b; } } RT = stackrt(index_layers,d_layers,fsim,src_theta); # ====== # PLOTS: # ====== plot(src_theta,R_num,RT.Rs,T_num,RT.Ts,"Source angle (deg)", "Power"); legend("Reflected - Numerical","Reflected - Analytical","Transmitted - Numerical","Transmitted - Analytical"); leg=cell(length(src_theta)); for (I=1:length(src_theta)) { leg{I}=num2str(src_theta(I))+"deg"; } image(xgrid_E2*1e6,src_theta,E2,"x (um)","Source angle (deg)");