def test_process_junction_pn(): from solcore.analytic_solar_cells.depletion_approximation import identify_layers, identify_parameters from solcore import material from solcore.structure import Layer, Junction from solcore.state import State Na = np.power(10, np.random.uniform(22, 25)) Nd = np.power(10, np.random.uniform(23, 26)) options = State() options.T = np.random.uniform(250, 350) Lp = np.power(10, np.random.uniform(-9, -6)) # Diffusion length Ln = np.power(10, np.random.uniform(-9, -6)) # Diffusion length GaAs_n = material("GaAs")(Nd=Nd, hole_diffusion_length=Ln) GaAs_p = material("GaAs")(Na=Na, electron_diffusion_length=Lp) p_width = np.random.uniform(500, 1000)*1e-9 n_width = np.random.uniform(3000, 5000)*1e-9 test_junc = Junction([Layer(p_width, GaAs_p, role="emitter"), Layer(n_width, GaAs_n, role="base")]) id_top, id_bottom, pRegion, nRegion, iRegion, pn_or_np = identify_layers(test_junc) xn, xp, xi, sn, sp, ln, lp, dn, dp, Nd_c, Na_c, ni, es = identify_parameters(test_junc, options.T, pRegion, nRegion, iRegion) ni_expect = GaAs_n.ni assert [id_top, id_bottom] == approx([0, 1]) assert pn_or_np == 'pn' assert [xn, xp, xi, sn, sp, ln, lp, dn, dp, Nd_c, Na_c, ni, es] == approx([n_width, p_width, 0, 0, 0, Lp, Ln, GaAs_n.hole_mobility * kb * options.T / q, GaAs_p.electron_mobility * kb * options.T / q, Nd, Na, ni_expect, GaAs_n.permittivity])
def test_process_junction_set_in_junction(): from solcore.analytic_solar_cells.depletion_approximation import identify_layers, identify_parameters from solcore import material from solcore.structure import Layer, Junction from solcore.state import State options = State() options.T = np.random.uniform(250, 350) Lp = np.power(10, np.random.uniform(-9, -6)) # Diffusion length Ln = np.power(10, np.random.uniform(-9, -6)) # Diffusion length sn = np.power(10, np.random.uniform(0, 3)) sp = np.power(10, np.random.uniform(0, 3)) se = np.random.uniform(1, 20) * vacuum_permittivity GaAs_n = material("GaAs")() GaAs_p = material("GaAs")() GaAs_i = material("GaAs")() p_width = np.random.uniform(500, 1000) n_width = np.random.uniform(3000, 5000) i_width = np.random.uniform(100, 300) * 1e-9 mun = np.power(10, np.random.uniform(-5, 0)) mup = np.power(10, np.random.uniform(-5, 0)) Vbi = np.random.uniform(0, 3) test_junc = Junction([ Layer(p_width, GaAs_p, role="emitter"), Layer(i_width, GaAs_i, role="intrinsic"), Layer(n_width, GaAs_n, role="base") ], sn=sn, sp=sp, permittivity=se, ln=Ln, lp=Lp, mup=mup, mun=mun, Vbi=Vbi) id_top, id_bottom, pRegion, nRegion, iRegion, pn_or_np = identify_layers( test_junc) xn, xp, xi, sn_c, sp_c, ln, lp, dn, dp, Nd_c, Na_c, ni, es = identify_parameters( test_junc, options.T, pRegion, nRegion, iRegion) ni_expect = GaAs_n.ni assert [id_top, id_bottom] == approx([0, 2]) assert pn_or_np == 'pn' assert [xn, xp, xi, sn_c, sp_c, ln, lp, dn, dp, Nd_c, Na_c, ni, es] == approx([ n_width, p_width, i_width, sn, sp, Ln, Lp, mun * kb * options.T / q, mup * kb * options.T / q, 1, 1, ni_expect, se ])
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
def merge_dicts(*dict_args): """ Given any number of dicts, shallow copy and merge into a new dict, precedence goes to key value pairs in latter dicts. """ result = State() for dictionary in dict_args: result.update(dictionary) return result # 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 = None default_options.radiative_coupling = False