5.2.1 Simulation setup
The more general parameters like the number of layers, contacts, optics and numerical parameters as defined in the \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} simulation\_ setup.txt}}\) file.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} version}}\)
The code verifies that the version number of the parameter file matches that of the program. If not, it exits.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} T}}\)
Temperature in K.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} l1}}\)
Names of parameter files for layer 1 (mandatory).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} l2}}\)
* \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ..}}\)
* \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ..}}\)
* \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} lN}}\)
Names of parameter files for rest of layers, from 2 to \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} N}}\) (optional). Define each layer on a separate line. Layer indices must be consecutive.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} leftElec}}\)
Indicates whether the left electrode is the cathode (-1) or the anode (1). By convention (in semiconductor simulation software), the left electrode is the cathode and this has been the default. However, sometimes one wants to flip the device layout and the cathode is on the right. This also impacts the sign of the current, as it flows in the opposite direction in the device. We take the sign of the current such that injected (e.g. dark) current is positive if the applied voltage is positive, regardless of the choice of cathode and anode.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} W\_ L}}\)
Work function (eV) of the left electrode. Instead of inputting a fixed value, one can also pass the string ’sfb’, which stands for ’semi-flat band’, which will result in a work function equal to the equilibrium Fermi level of the adjacent layer, without considering any ions and/or traps that might also contribute space charge at the contact.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} W\_ R}}\)
Work function (eV) of the right electrode. Instead of inputting a fixed value, one can also pass the string ’sfb’, which stands for ’semi-flat band’, which will result in a work function equal to the equilibrium Fermi level of the adjacent layer, without considering any ions and/or traps that might also contribute space charge at the contact.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} S\_ n\_ L}}\)
Surface recombination velocity (m/s) of electrons at the left electrode. If you would like to use an infinitely large surface recombination velocity, simply use a negative value: in this case, the electron density at the left electrode (\(n_L\)) follows from the difference between the work function and the conduction band. See section 2.2.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} S\_ p\_ L}}\)
Surface recombination velocity (m/s) of holes at the left electrode. If you would like to use an infinitely large surface recombination velocity, simply use a negative value: in this case, the hole density at the left electrode (\(p_L\)) follows from the difference between the work function and the valence band. See section 2.2.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} S\_ n\_ R}}\)
Surface recombination velocity (m/s) of electrons at the right electrode. If you would like to use an infinitely large surface recombination velocity, simply use a negative value: in this case, the electron density at the right electrode (\(n_R\)) follows from the difference between the work function and the conduction band. See section 2.2.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} S\_ p\_ R}}\)
Surface recombination velocity (m/s) of holes at the right electrode. If you would like to use an infinitely large surface recombination velocity, simply use a negative value: in this case, the hole density at the right electrode (\(p_R\)) follows from the difference between the work function and the valence band. See section 2.2.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} R\_ shunt}}\)
This is the shunt resistance of the device (\(\Omega \) m\(^2\)). Use a negative value to indicate an infinitely large shunt resistance (i.e. no shunt). If \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} R\_ shunt}}\) is finite, then the external current density \(J_{\rm ext}\) (the current density that is measured) equals
where \(J_{\rm int}\) is the internal current density—the current in the device flowing between anode and cathode—and \(V_{\rm int}\) is the applied voltage on the electrodes. See section 2.8.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} R\_ series}}\)
This is a resistance that is placed in series with the devices (\(\Omega \) m\(^2\)). Ideally, this is zero and it cannot be negative. If \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} R\_ series}}\) is positive, then the external voltage (\(V_{\rm ext}\)) is modified according to
where \(J_{\rm ext}\) is the external current density and \(V_{\rm int}\) is the applied voltage on the electrodes. See section 2.8.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} G\_ frac}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
In \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\), the actual average generation rate is set as a fraction of \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} G\_ ehp}}\). We do this, as this makes it easier to do global fitting of a set of solar cells as a function of light intensity where one knows the relative intensities (for example, when using neutral density filters to attenuate the light). So, the effective generation rate equals \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} G\_ frac}}\) \(\times \) \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} G\_ ehp}}\).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} genProfile}}\)
This specifies the name of the file that contains the generation profile (see section 3.2 for details). If set to ‘none’, then an uniform generation profile is assumed over the absorbing layers. If set to ‘calc’ a calculated generation profile based on the device structure and transfer matrices is used.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} L\_ TCO}}\)
Thickness (m) of the TCO layer. When set to 0, no TCO layer is used.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} L\_ BE}}\)
Thickness (m) of the back layer/electrode, must be > 0.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} nkSubstrate}}\)
Name of file with n,k values of substrate.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} nkTCO}}\)
Name of file with n,k values of TCO layer. Use none if no TCO layer is defined.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} nkBE}}\)
Name of file with n,k values of the back electrode.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} spectrum}}\)
Name of file that contains the spectrum.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} lambda\_ min}}\)
Minimum wavelength (m), or the lower bound of the spectrum for the calculated generation profile.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} lambda\_ max}}\)
Maximum wavelength (m) or the upper bound of the spectrum for the calculated generation profile.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} NP}}\)
Integer value to specify the number of grid points. Must be at least 5 per layer. The maximum number of grid points (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Max\_ NP}}\)) is set in the unit \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} TypesAndConstants}}\).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolPois}}\)
Absolute tolerance of the Poisson solver (in V): if the largest change \(\delta V\) in a grid point is smaller than this value, then the Poisson solver stops.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxDelV}}\)
Maximum change (in terms of the thermal voltage) of the potential per loop of the Poisson solver. This helps to limit the changes in the potential per iteration and can help with convergence.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxItPois}}\)
Maximum number (integer) of iterations of the Poisson solver. Typically a few 100 iterations is plenty.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxItSS}}\)
Maximum number of iterations of the main loop (so Poisson and continuity equations) in steady-state. Note: \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) is always a steady-state simulation.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxItTrans}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\))
Maximum number of iterations of the main loop (so Poisson and continuity equations) in transient simulations.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} currDiffInt}}\)
This integer value (1 or 2) specifies how the electron and hole currents are calculated. The standard way (1) of doing this is by using Eqs (??) and (??); this means that we obtain the currents from the differentials of the of the potential and the densities. If the integral form (2) is chosen, then the current is calculated by integrating Eq. (??), or its transient cousin (for \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\)) Eqs (??) and (??).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolCurr}}\)
Relative tolerance of current density \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Jint}}\). See section 2.9.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolDens}}\)
Relative tolerance of the density solver. See section 2.9.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} couplePC}}\)
This non-negative floating point number sets the coupling between the Poisson solver and the continuity equations. The Poisson solver changes the carrier densities (\(n\) and \(p\), but also the ionic densities) to reflect any changes to the potential. This helps (quite a lot) in finding a solution. In order to improve the stability of the code, however, it can be helpful to reduce this coupling (smaller \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} couplePC}}\)). Setting \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} couplePC}}\) = 0 means that the densities are not changed by the Poisson solver.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} minAcc}}\)
Minimum acceleration parameter (must be positive, yet smaller than \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxAcc}}\)). To enable successive over- and under relaxation, we use an acceleration parameter for the solver of the charge densities. This acceleration parameter (\(r\)) depends on the number of performed iterations and varies from \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxAcc}}\) initially downto \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} minAcc}}\) in the last iteration loop. So, in loop \(k\) we have
where \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxIt}}\) is either \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxItSS}}\) or \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxItTrans}}\), depending on whether this is a steady-state or transient simulation. The acceleration parameter is then used to dampen (if \(r{\lt}1\)) or accelerate (if \(r{\gt}1\)) the main loop. For example, let \(n_i^k\) be the electron density in grid point \(i\) and loop \(k\) and \(\delta n_i^k\) the calculated change, then
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} maxAcc}}\)
Maximum acceleration parameter (see \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} minAcc}}\) for details and use). Must be smaller than 2 but larger than \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} minAcc}}\).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ignoreNegDens}}\)
Integer value that indicates what to do if the continuity solver finds a negative carrier density (including an ionic density) in a grid point. If not 1 and there is a density on some grid point that is negative, then the program quits. If 1, then we simply ignore this and set that density to some small value. This can be really helpful if the density becomes very small so the difference between zero, small&positive, and small&negative becomes problematic due to the finite number of digits.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} convVar}}\)
This integer value (1 –4) selects which variable(s) are monitored for converge. 1: selects the carrier and ion densities, 2: the current, 3: the densities or the current, and 4: densities and current. See section 2.9 for more details and section 5.3.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} failureMode}}\)
Integer value that specifies what should be done if the main loop does not converge for some voltage/time. 0: a warning message is shown and the program exits, 1: the solution is accepted, so failure is ignored. 2: the current voltage/time is skipped. In \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) there is no real difference between 1 and 2.
In \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\), however, this is very different. If the simulation at some time does not converge, then this time point is simply skipped and we move on to the next point in the \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tVGFile}}\). The time step is thus enlarged as the last time point that converged is used to calculate the time step and displacement current. This is useful as there are, from time to time, points that simply do not converge.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} grad}}\)
This parameter determines that gradient of the grid used. \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} grad}}\) = 0 corresponds to uniform grid spacing, a positive value will make the grid spacing finer near the electrodes and internal interfaces. Setting \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} grad}}\) to values larger than about 4 will yield extremely small—bordering on the ridiculous—spacing near the electrodes.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolVint}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\))
Tolerance (V) that determines how accurately the internal voltage (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vint}}\)) is solved for. In \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\), one specifies the external voltage (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vext}}\)) and the internal voltage need not be known. If not, then \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vint}}\) is solved for via an iterative procedure (bisection).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vdist}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Integer that is either 1 or 2. This specifies the distribution of voltages that will be simulated. If 1, then this distribution is uniform (specified by \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vstep}}\)). If it is 2, then a logarithmic distribution is used (specified by \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vacc}}\) and \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} NJV}}\)). The latter is useful when the results will be plotted on a logarithmic voltage axis. Note: ignored if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} preCond}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Integer value. If 1, then a pre-bias will be applied (pre-conditioning). This can be used if there are ions in the device and we would like to see if pre-biasing affects the current-voltage curve: First, this bias (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vpre}}\)) is applied and the ionic densities are calculated. The exact voltages at which the ion distributions are solved and updated are stored in the \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} logFile}}\). Note, this cannot be used if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) or \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} untilVoc}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vpre}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
The pre-conditioning voltage (V), see \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} preCond}}\).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} fixIons}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Integer (0 or 1). If 1, the ions are fixed at the first applied voltage.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vscan}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Integer (-1 or 1). This indicates whether the voltage should be swept up (1) or down (-1). Note: ignored if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vmin}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Minimum voltage (V) that will be simulated, unless \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1. The maximum (absolute) value that is accepted depends on the size of the floating point type used (type \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} myReal}}\) defined in unit \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} TypesAndConstants}}\)).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vmax}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Minimum voltage (V) that will be simulated, unless \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1. The maximum value that is accepted depends on the size of the floating point type used (type \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} myReal}}\) defined in unit \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} TypesAndConstants}}\)).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vstep}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Voltage step (V) used if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vdistribution}}\) is 1, unless \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vacc}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
If a logarithmic distribution of voltages is used (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vdist}}\) is 2), then this parameter (V) specifies the accumulation point of a row of voltages. The step size (difference between consecutive voltages) becomes zero at \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vacc}}\), so it should lie outside the interval should lie outside [\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vmin}}\), \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vmax}}\)]. Moving \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vacc}}\) closer to either boundary, will result in smaller voltage steps at either boundary. Note: ignored if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} usExpData}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} NJV}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Number (so integer) of voltage points in the logarithmic voltage distribution. Note: ignored if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} untilVoc}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Integer value. If 1, then the simulation will stop if the simulated current is positive (i.e. \(V{\gt}V_{oc}\)) provided there is light (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} G\_ ehp}}\) non-zero). Cannot be used if \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} timeout}}\)
Maximum runtime in seconds. Specifying a negative value implies unlimited runtime.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} pauseAtEnd}}\)
If 1, then the program will wait for the user to press Enter once it is done.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} autoTidy}}\)
Integer value. If 1, then the device parameter file will be tidied up when running \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) or \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\) and the simulation will proceed as usual. This ensures that the parameter file stays neat with all comments nicely aligned.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Integer value. If 1, then the program should read an experimental current-voltage (JV) curve: \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) will simulate the same voltages that occur in the file (overriding any other specification of voltages). Once it is done, \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) will output a comparison between the simulated and experimental JV curves, including an r.m.s. error (see \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} fitMode}}\)). The experimental JV curve should be stored in \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} expJV}}\).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} expJV}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Name of the file with the experimental current-voltage (JV) curve. The program will try to read this file is \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} useExpData}}\) is 1. For a definition of the file format see section 3.4.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} fit\_ mode}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
This indicates how the fit error should be calculated when comparing a simulated with an experimental current-voltage curve. Must be either ‘lin’ or ‘log’. If the fraction of voltages that converged is small than \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} fit\_ threshold}}\) then no fit error is calculated.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} fit\_ threshold}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
See \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} fit\_ mode}}\). If fewer than this fraction of voltages were used in computing the fit error then no fit error is shown.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tVGFile}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\))
This file contains a list of times, voltages and generation rates. See section 3.5.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} JVFile}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) will store the simulated current-voltage characteristics in this file.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tjFile}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\))
Name of the output file with the calculated time, voltages, current density. \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\) outputs every time step (if successful) to this file.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} varFile}}\)
Name of the file where the internal variables (\(x, V,n, p, Jn, Jp,\) etc.) are stored. If no such output is required, then simply put ‘none’ (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\) only).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} limitDigits}}\)
An integer value. If 1, then the number of digits in the output is limited to a sensible value (depends on the number of digits used in the floating point type \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} myReal}}\) (see unit TypesAndConstants). If not 0, then the full length of the floating point type is stored (which, again, depends on the size of \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} myReal}}\)).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} outputRatio}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
Non-negative integer value. If zero, the internal variables (see section 4.3) will not be stored at all. If positive, the internal variables will be stored in \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} varFile}}\) every \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} outputRatio}}\) voltages. Note, that writing many such variables to file—for example, at every voltage—can slow down the simulation simply due to I/O operations.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} outputRatio}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\))
Positive integer value. The internal variables will be stored in \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} varFile}}\) every \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} outputRatio}}\) time-steps, unless \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} varFile}}\) is set to ‘none’. Note, that writing many such variables to file—for example, at every voltage—can slow down the simulation simply due to I/O operations. The same ratio is applied to the screen output so it cannot be zero as that would mean there would be no screen output.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} scParsFile}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\))
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) will try to figure out if the user wants to simulate a device that could be a solar cell—based on the work functions and whether there is light. If so, it will attempt to calculate the main performance characteristics (open-circuit voltage, short-circuit current, fill-factor, maximum power point) and will store these in this file.
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} specialOutput}}\) (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\))
Possible values are none (default), which means that there is no special output in any way, and spv (used for surface photovoltage). In order to replicate specific experiments, it can be helpful to compute a couple of things directly in SIMsalabim, rather than calculate them from the output. The first such case that we have added is surface photovoltage experiments. Setting \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} specialOutput}}\) = spv then results in additional columns in the tjFile that list the voltage drop (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} VL[j]}}\)) over each layer (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} [j]}}\)).
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} logFile}}\)
\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} ZimT}}\) and \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} SimSS}}\) generate some output in a log file (see section 4.5). This parameter sets its name.