simudo.example.fourlayer package

Submodules

simudo.example.fourlayer.fourlayer module

Set up four layer FSF-p-IB-n calculations Adapted from marti20002_customizable_nonradiative.py

The most important functions are:

  • multiplex_setup() creates submit.yaml files corresponding to a combinatorial array of input parameters

  • run() runs simudo with specified submit.yaml

run() receives a yaml submitfile with a dict P of parameters and executes the Simudo run according to those parameters. It is designed to treat a 1D layered device (though all Simudo runs are technically 2D). Physically, this device has four layers with contacts at left and right. Light is incident from the right. Layer thicknesses are controlled by keys FSF_thickness, p_thickness, IB_thickness, n_thickness, in um.

Uniform properties

There is a uniform band gap throughout the device. Band edges in eV are in VB_E, CB_E and IB_E. VB and CB have effective DOS of NV, NC in cm^-3

Cell temperature is T and there is a uniform relative permittivity epsilon_r.

Electron and hole mobilities are uniform, set by mu_n, mu_p in \mathrm{cm^2/Vs}.

BC’s

Majority carriers have Ohmic BC’s at the contacts and minority carriers have 0 SRV at the contacts.

FSF

Zero optical absorption and doping NFSF in cm^-3.

p- and n- regions

alpha_cv sets absorption coefficient in 1/cm. Constant for all E>Eg. The associated radiative recombination is the only recombination in those layers. Uniform doping is set by NA, ND in cm^-3

IB region

IB has a sharp energy IB_E with NI states in cm^-3

Optical absorption and Shockley-Read trapping processes, set by sigma_opt_ci, sigma_opt_iv, sigma_th_ci, sigma_th_iv in cm^2.

The thermal (SR) processes also depend on vth_CB and vth_VB, in cm/s.

There are two models for IB mobility. simple_mobility_model=True uses j_I = mu_I n_I \nabla (\mathrm{qfl}_I) with constant mu_I.

simple_mobility_model=False changes mu_I with filling fraction f in the IB, so mobility is mu_I when f=0 and 0 when f=1.

For details, see IntermediateBand in simudo/physics/poisson_drift_diffusion1.py1

Optical absorption

Black body radiation with solar temperature Ts (K) with X suns concentration in incident from the left.

Absorptions are nonoverlapping, so each photon can only be absorbed by highest-energy transition (CV, CI, IV) consistent with conservation of energy.

IB absorption processes depend on IB filling, so optical problem is solved self-consistently.

Numerical parameters

Meshes geometrically expand away from interfaces with initial mesh size mesh_start (um) and expansion factor mesh_factor. The maximum mesh spacing is mesh_max (um)

Results are output in the dark (I=0) and at whatever specified X (I=1) at the set of applied voltages V_exts (V)

simudo.example.fourlayer.fourlayer.multiplex_setup(params, output_prefix='out', return_values=False)[source]
simudo.example.fourlayer.fourlayer.run(submitfile)[source]

simudo.example.fourlayer.fourlayer_example module

Construct a FSF-p-IB-n layered structure as described in fourlayer.py

Functions:

simudo_multiplexer():

Given params dict, set up yaml files suitable for calling fourlayer.run() Run all of the requested simulations

Results will be stored in the folder experiment_folder. If multiplexing is requested with multiplex_keys, results of each run are in experiment_folder/n for n=0,1,.. If optimizing over parameter optimize_key, scipy.fminbound() is used to optimize efficiency

Produces short circuit band diagram and JV curve if sc_band_diagrams or jv_curve are True.

If multiprocess=True, the various runs from the multiplexing will be sent to different processors

optimizer(): Called by simudo_multiplexer to optimize efficiency over one parameter efficiency_analysis(): Find efficiency shortcircuitbanddiagram():Make band diagram at short circuit and save as png jv_curve(): Make JV curve and save as png

Parameters described in source below and in fourlayer.py

simudo.example.fourlayer.fourlayer_example.efficiency_analysis(submitfile)[source]
simudo.example.fourlayer.fourlayer_example.jv_curve(submitfile)[source]
simudo.example.fourlayer.fourlayer_example.optimizer(submitfile)[source]
simudo.example.fourlayer.fourlayer_example.shortcircuitbanddiagram(submitfile)[source]
simudo.example.fourlayer.fourlayer_example.simudo_multiplexer(params)[source]

simudo.example.fourlayer.sweep_extraction module

simudo.example.fourlayer.sweep_extraction.IB_band_diagram(spatial, IB_mask)[source]
simudo.example.fourlayer.sweep_extraction.IB_generation_diagram(spatial, IB_mask)[source]
class simudo.example.fourlayer.sweep_extraction.SweepData(folder, parameter_name='pd_V')[source]

Bases: object

Extracts data from fourlayer simudo runs

Parameters
  • folder (str) – Location of plot_meta files.

  • parameter_name (str, optional) – Sweep parameter name, usually pd_V for a voltage sweep (but was a parameter at some point in history). (default: "pd_V")

Notes

The most important properties are:

jv: Extract j, v, p as pandas dataframe

mpp_row: Determine which file contains data closest to max power point

voc_row: Determine which file contains data closest to open circuit

v_row: Determine which file contains data closest to specified voltage

get_spatial_data: Read in spatial data for plotting from specified file

IB_mask: Mask suitable for plotting properties only in IB region

The output of the SweepData.jv() can be given to IV_Analysis.IV_params() to find the max power point and efficiency

Example

data = SweepData(filename)
spatial = data.get_spatial_data(data.mpp_row)
IB_mask = data.IB_mask(spatial)
IB_band_diagram(spatial,IB_mask)
IB_mask(spatial_data)[source]
get_spatial_data(row)[source]
jv

Create a dataframe with j, v, p and names of files that contain those data

mpp_row
params
v_row(V)[source]
voc_row
simudo.example.fourlayer.sweep_extraction.jv_plot(df)[source]
simudo.example.fourlayer.sweep_extraction.subgap_generation_mismatch_diagram(spatial, IB_mask)[source]
simudo.example.fourlayer.sweep_extraction.subgap_mismatch(spatial, IB_mask)[source]

simudo.example.fourlayer.IV_Analysis module

class simudo.example.fourlayer.IV_Analysis.IV_params(i, v, powersign=1.0)[source]

Bases: object

Takes arrays of current and voltage, and interpolates Voc, Isc, and Pmax.

voc and isc are linearly interpolated, pmax is found with a spline fit.

If v and i are in V and A respectively, then pmax is in W.

If the the power quadrant has negative I (as for Simudo), use optional argument powersign=-1.0.

Example

p = iv_params(current_array, voltage_array)
print(p.voc, p.isc, p.pmax, p.ff, p.mppv, p.mppi)