#!/usr/bin/env python # coding: utf-8 # In[ ]: import numpy as np import matplotlib.pyplot as plt # In[ ]: from solcore import si, material from solcore.structure import Junction, Layer from solcore.solar_cell import SolarCell from solcore.solar_cell_solver import solar_cell_solver, default_options from solcore.light_source import LightSource from solcore.constants import vacuum_permittivity from solcore.absorption_calculator import RCWASolverError # user options # In[ ]: T = 298 wl = si(np.linspace(400, 900, 80), 'nm') light_source = LightSource(source_type='standard', version='AM1.5g', x=wl, output_units='photon_flux_per_m', concentration=1) opts = default_options opts.wavelength, opts.no_back_reflection, opts.size, opts.light_source, opts.T_ambient = \ wl, False, ((400, 0), (0, 400)), light_source, T opts.recalculate_absorption = True # The size of the unit cell for the RCWA structure is 400 x 400 nm # Defining all the materials we need # In[ ]: Air = material('Air')(T=T) p_GaAs = material('GaAs')(T=T, Na=si('4e18cm-3')) # for the GaAs cell emitter n_GaAs = material('GaAs')(T=T, Nd=si('2e17cm-3')) # for the GaAs cell base AlAs, GaAs = material('AlAs')(T=T), material('GaAs')(T=T) # for the DBR SiO2 = material('SiO2', sopra=True)(T=T) # for the spacer layer TiO2 = material('TiO2', sopra=True)(T=T) # for the nanoparticles # some parameters for the QE solver # In[ ]: for mat in [n_GaAs, p_GaAs]: mat.hole_mobility, mat.electron_mobility, mat.permittivity = 3.4e-3, 5e-2, 9 * vacuum_permittivity n_GaAs.hole_diffusion_length, p_GaAs.electron_diffusion_length = si("500nm"), si("5um") # Define the different parts of the structure we will use. For the GaAs junction, we use the depletion approximation # In[ ]: GaAs_junction = [Junction([Layer(width=si('100nm'), material=p_GaAs, role="emitter"), Layer(width=si('400nm'), material=n_GaAs, role="base")], T=T, kind='DA')] # this creates 10 repetitions of the AlAs and GaAs layers, to make the DBR structure # In[ ]: DBR = 10 * [Layer(width=si("73nm"), material=AlAs), Layer(width=si("60nm"), material=GaAs)] # The layer with nanoparticles # In[ ]: NP_layer = [Layer(si('50nm'), Air, geometry=[{'type': 'circle', 'mat': TiO2, 'center': (200, 200), 'radius': 50}])] # In[ ]: substrate = [Layer(width=si('50um'), material=GaAs)] spacer = [Layer(width=si('25nm'), material=SiO2)] # --------------------------------------------------------------------------
# solar cell with SiO2 coating # In[ ]: solar_cell = SolarCell(spacer + GaAs_junction + substrate) # In[ ]: opts.optics_method = 'TMM' solar_cell_solver(solar_cell, 'qe', opts) TMM_EQE = solar_cell[1].eqe(opts.wavelength) # In[ ]: opts.optics_method = 'BL' solar_cell_solver(solar_cell, 'qe', opts) BL_EQE = solar_cell[1].eqe(opts.wavelength) # --------------------------------------------------------------------------
# as above, with a DBR on the back # In[ ]: solar_cell = SolarCell(spacer + GaAs_junction + DBR + substrate) # In[ ]: opts.optics_method = 'TMM' solar_cell_solver(solar_cell, 'qe', opts) TMM_EQE_DBR = solar_cell[1].eqe(opts.wavelength) # --------------------------------------------------------------------------
# cell with TiO2 nanocylinder array on the front # In[ ]: solar_cell = SolarCell(NP_layer + spacer + GaAs_junction + DBR + substrate) # In[ ]: opts.optics_method = 'TMM' solar_cell_solver(solar_cell, 'qe', opts) TMM_EQE_NP = solar_cell[2].eqe(opts.wavelength) # In[ ]: opts.optics_method = 'BL' solar_cell_solver(solar_cell, 'qe', opts) BL_EQE_NP = solar_cell[2].eqe(opts.wavelength) # In[ ]: try: opts.optics_method = 'RCWA' opts.orders = 49 # number of diffraction orders to keep in the RCWA solver solar_cell_solver(solar_cell, 'qe', opts) RCWA_EQE_NP = solar_cell[2].eqe(opts.wavelength) RCWA_legend = 'RCWA (GaAs SC + NP array + DBR)' except RCWASolverError: RCWA_EQE_NP = np.zeros_like(BL_EQE_NP) RCWA_legend = '(RCWA solver S4 not available)' # In[ ]: plt.figure() plt.plot(wl * 1e9, BL_EQE_NP, wl * 1e9, TMM_EQE, wl * 1e9, TMM_EQE_DBR, wl * 1e9, RCWA_EQE_NP) plt.legend(labels=['Beer-Lambert law (all structures)', 'TMM (GaAs SC)', 'TMM (GaAs SC + DBR)', RCWA_legend]) plt.xlabel("Wavelength (nm)") plt.ylabel("Quantum efficiency") plt.show()