#################################################### # File: solar_plasmonic_normal_qe.lsf # # Description: This file will calculate quantum # efficiency of plasmonic solar cell and # bare solar cell # # Copyright 2015 Lumerical Solutions #################################################### save("solar_plasmonic_normal.fsp"); #################################################### # REFERENCE SIMULATION WITH BARE SURFACE: save("solar_cell_bare.fsp"); switchtolayout; select("solar_cell"); set("add_particles",0); #disable particles #To speed up simulation, disable monitors that are not required setnamed("profile_Si","enabled",0); setnamed("reflection","enabled",0); setnamed("pabs_adv","enabled",0); run; # absorbed power within Si substrate absp_bare=-transmission("monitor_surface")-(-transmission("monitor_bottom")); f=getdata("monitor_surface","f"); # frequency nf=length(f); #################################################### # SIMULATIONS WITH NANO-SPHERES: switchtolayout; select("solar_cell"); set("add_particles",1); save("solar_cell.fsp"); runsweep; Ts=getsweepdata("sweep_material","Ts"); Tb=getsweepdata("sweep_material","Tb"); absp_metal=-Ts+Tb; # absorbed power within Si #################################################### # CALCULATE g(lambda) ENHANCEMENT FACTOR: g_silver100=pinch(absp_metal(1:nf,1,1))/absp_bare(1:nf); # for silver sphere g_silver200=pinch(absp_metal(1:nf,2,1))/absp_bare(1:nf); g_gold100=pinch(absp_metal(1:nf,1,2))/absp_bare(1:nf); # for gold sphere g_gold200=pinch(absp_metal(1:nf,2,2))/absp_bare(1:nf); plot(c/f*1e6,g_silver100,g_silver200,"Wavelength (um)","g","silver"); legend("D=100nm","D=200nm"); plot(c/f*1e6,g_gold100,g_gold200,"Wavelength (um)","g","gold"); legend("D=100nm","D=200nm"); #################################################### # CALCULATE G ENHANCEMENT FACTOR: #get solar spectrum data: wl_ssp0 = solar(0); # wavelength vector in meters ssp0 = solar(1); # solar spectrum in Watts/meter^2/meter nmin=find(wl_ssp0,0.4e-6); nmax=find(wl_ssp0,1.1e-6); wl1 = wl_ssp0(nmin:nmax); ssp1 = ssp0(nmin:nmax); #calculate IQE for bare cell: wl_qe0 = flip(c/f,1); qe0=flip(absp_bare,1); qe1_bare=spline(qe0,wl_qe0,wl1); ## interpolate QE for bare cell to solar spectrum grid prod_bare = wl1*qe1_bare*ssp1; IQE_bare = integrate(prod_bare,1,wl1); #calculate IQE for cell with nano-spheres: qe0_silver100=flip(pinch(absp_metal(1:nf,1,1)),1); # for silver sphere qe0_silver200=flip(pinch(absp_metal(1:nf,2,1)),1); qe0_gold100=flip(pinch(absp_metal(1:nf,1,2)),1); # for gold sphere qe0_gold200=flip(pinch(absp_metal(1:nf,2,2)),1); IQE_silver100 = integrate(wl1*spline(qe0_silver100,wl_qe0,wl1)*ssp1,1,wl1); # for silver sphere IQE_silver200 = integrate(wl1*spline(qe0_silver200,wl_qe0,wl1)*ssp1,1,wl1); IQE_gold100 = integrate(wl1*spline(qe0_gold100,wl_qe0,wl1)*ssp1,1,wl1); # for gold sphere IQE_gold200 = integrate(wl1*spline(qe0_gold200,wl_qe0,wl1)*ssp1,1,wl1); G_silver100 = IQE_silver100/IQE_bare; G_silver200 = IQE_silver200/IQE_bare; G_gold100 = IQE_gold100/IQE_bare; G_gold200 = IQE_gold200/IQE_bare; #save results in text file: G_filename = "G_values.txt"; if (fileexists(G_filename)){ del(G_filename); } write(G_filename,"G_silver100 = "+num2str(G_silver100)); write(G_filename,"G_silver200 = "+num2str(G_silver200)); write(G_filename,"G_gold100 = "+num2str(G_gold100)); write(G_filename,"G_gold200 = "+num2str(G_gold200));