def test_BL_correction(): wl = np.linspace(800, 950, 4) * 1e-9 GaAs = material("GaAs")() thick_cell = SolarCell([Layer(material=GaAs, width=si("20um"))]) opts = State() opts.position = None prepare_solar_cell(thick_cell, opts) position = np.arange(0, thick_cell.width, 1e-9) opts.position = position opts.recalculate_absorption = True opts.no_back_reflexion = False opts.BL_correction = False opts.wavelength = wl solve_tmm(thick_cell, opts) no_corr = thick_cell.absorbed opts.BL_correction = True solve_tmm(thick_cell, opts) with_corr = thick_cell.absorbed assert with_corr == approx( np.array([6.71457872e-01, 6.75496354e-01, 2.09738887e-01, 0])) assert no_corr == approx( np.array([6.71457872e-01, 6.75496071e-01, 2.82306407e-01, 0]))
def da_options(): from solcore.state import State options = State() wl = np.linspace(290, 700, 150) * 1e-9 options.T = np.random.uniform(250, 350) options.wavelength = wl options.light_source = da_light_source() options.position = None options.internal_voltages = np.linspace(-6, 4, 20) return options
default_options.T_ambient = 298 default_options.T = 298 # Illumination spectrum default_options.wavelength = np.linspace(300, 1800, 251) * 1e-9 default_options.light_source = LightSource(source_type='standard', version='AM1.5g', x=default_options.wavelength, output_units='photon_flux_per_m') # IV control default_options.voltages = np.linspace(0, 1.2, 100) default_options.mpp = False default_options.light_iv = False default_options.internal_voltages = np.linspace(-6, 4, 1000) default_options.position = None default_options.radiative_coupling = False # Optics control default_options.optics_method = 'BL' default_options.recalculate_absorption = False default_options = merge_dicts(default_options, ASC.db_options, PDD.pdd_options, rcwa_options) def solar_cell_solver(solar_cell, task, user_options=None): """ Solves the properties of a solar cell object, either calculating its optical properties (R, A and T), its quantum efficiency or its current voltage characteristics in the dark or under illumination. The general options for the solvers are passed as dicionaries. :param solar_cell: A solar_cell object :param task: Task to perform. It has to be "optics", "iv", "qe", "equilibrium" or "short_circuit". The last two only work for PDD junctions
# General default_options.T_ambient = 298 default_options.T = 298 # Illumination spectrum default_options.wavelength = np.linspace(300, 1800, 251) * 1e-9 default_options.light_source = LightSource(source_type='standard', version='AM1.5g', x=default_options.wavelength, output_units='photon_flux_per_m') # IV control default_options.voltages = np.linspace(0, 1.2, 100) default_options.mpp = False default_options.light_iv = False default_options.internal_voltages = np.linspace(-6, 4, 1000) default_options.position = np.linspace(0, 4660, 4661) default_options.radiative_coupling = False # Optics control default_options.optics_method = 'BL' default_options = merge_dicts(default_options, ASC.db_options, PDD.pdd_options, rcwa_options) def solar_cell_solver(solar_cell, task, user_options=None): """ Solves the properties of a solar cell object, either calculating its optical properties (R, A and T), its quantum efficiency or its current voltage characteristics in the dark or under illumination. The general options for the solvers are passed as dicionaries. :param solar_cell: A solar_cell object :param task: Task to perform. It has to be "optics", "iv", "qe", "equilibrium" or "short_circuit". The last two only work for PDD junctions :param user_options: A dictionary containing the options for the solver, which will overwrite the default options. :return: None
LanczosSmoothing=True, SubpixelSmoothing=True, ConserveMemory=False, WeismannFormulation=True) light_source = LightSource(source_type='standard', version='AM0') options = State() options['rcwa_options'] = ropt options.optics_method = 'RCWA' options.wavelength = wavelengths options.light_source = light_source options.pol = 's' options.mpp = True options.light_iv = True options.position = 1e-10 options.voltages = np.linspace(-1.5, 1.5, 100) options.size = size options.orders = 20 options.parallel = True window_material = InGaP(In=0.485, Na=si(5e18, 'cm-3')) # window_material.n_data = np.stack([wavelengths, InGaP_nk.n(wavelengths)]) # window_material.k_data = np.stack([wavelengths, InGaP_nk.k(wavelengths)]) # window_material.n_path = '/home/phoebe/Documents/rayflare/examples/data/InGaP_n.txt' # window_material.k_path = '/home/phoebe/Documents/rayflare/examples/data/InGaP_k.txt' to_save_for_WVASE = np.stack([ wavelengths * 1e9, window_material.n(wavelengths), window_material.k(wavelengths)