SCAPS Manual Most Recent
SCAPS Manual Most Recent
Marc Burgelman
Koen Decock, Alex Niemegeers, Johan Verschraegen, Stefaan Degrave
University of Gent
Department of Electronics and Information Systems (ELIS)
Campus Ardoyen, Technologiepark 914, Grote Steenweg Noord
9052 Gent-Zwijnaarde
‘Belgium’
Version: 8-4-2021
Table of contents
SCAPS is a one dimensional solar cell simulation program developed at the department of Electronics and
Information Systems (ELIS) of the University of Gent, Belgium. Several researchers have contributed to it's
development: Alex Niemegeers, Marc Burgelman, Koen Decock, Johan Verschraegen, Stefaan Degrave. A
description of the program, and the algorithms it uses, is found in the literature [1-6].
The program is freely available to the PV research community (universities and research institutes). It runs
on PC under Windows 95, 98, NT, 2000, XP, Vista, Windows 7, and occupies about 50 MB of disk space.
The program can be freely downloaded (but...: don't sell, don't distribute further, refer when you publish
results obtained with SCAPS). Please report to Marc Burgelman ([email protected]) when you
have downloaded a SCAPS version (your name and your institution name and address, and the promotor's
name for doctorate's students).
Up to now, there was no consistent manual for the program but there was (and is) a collection of add-on
manuals describing the novelties in every new version. This manual is based on those previous documents.
Also, there are two short and recommendable documents: a text Getting Started 2011.pdf, and a presentation
SCAPS introduction.pdf. These documents are doing exactly what they promise.
SCAPS is originally developed for cell structures of the CuInSe2 and the CdTe family. Several extensions
however have improved its capabilities so that it is also applicable to crystalline solar cells (Si and GaAs
family) and amorphous cells (a-Si and micromorphous Si). An overview of its main features is given below:
up to 7 semiconductor layers
almost all parameters can be graded (i.e. dependent on the ocal composition or on the depth in the cell):
Eg, χ, ε, NC, NV, vthn, vthp, µn, µp, NA, ND, all traps (defects) Nt
recombination mechanisms: band-to-band (direct), Auger, SRH-type
defect levels: in bulk or at interface; their charge state and recombination is accounted for
defect levels, charge type: no charge (idealisation), monovalent (single donor, acceptor), divalent (double
donor, double acceptor, amphoteric), multivalent (user defined)
defect levels, energetic distributions: single level, uniform, Gauss, tail, or combinations
defect levels, optical property: direct excitation with light possible (impurity photovoltaic effect, IPV)
defect levels, metastable transitions between defects
contacts: work function or flat-band; optical property (reflection of transmission filter) filter
tunneling: intra-band tunneling (within a conduction band or within a valence band); tunneling to and
from interface states
generation: either from internal calculation or from user supplied g(x) file
illumination: a variety of standard and other spectra included (AM0, AM1.5D, AM1.5G,
AM1.5Gedition2, monochromatic, white,...)
2 Chapter 1: About scaps
illumination: from either the p-side or the n-side; spectrum cut-off and attenuation
working point for calculations: voltage, frequency, temperature
the program calculates energy bands, concentrations and currents at a given working point, J-V
characteristics, ac characteristics (C and G as function of V and/or f ), spectral response (also with bias
light or voltage)
batch calculations possible; presentation of results and settings as a function of batch parameters
loading and saving of all settings; start-up of SCAPS in a personalised configuration; a script language
including a free user function
very intuitive user interface
a script language facility to run SCAPS from a ‘script file’; all internal variables can be accessed and
plotted via the script.
a built-in curve fitting facility
a panel for the interpretation of admittance measurements
Chapter 2: Getting started
3.
4.
2.
5. 6.
Figure 2.1 The SCAPS start-up panel: the Action panel or main panel. The meaning of the blocks numbered 1 to 6 is
explained in the text.
4. Indicate what you will calculate, i.e. which measurement you will simulate.
5. Start the calculation(s)
6. Display the simulated curves, ... (see section 6)
This is further explained below.
Click the button calculate: single shot in the action panel. The Energy Bands Panel opens,
and the calculations start. At the bottom of the Panel, you
see a status line, e.g. “iv from 0.000 to 0.800 Volt: V =
0.550 Volt”, showing you how the simulation proceeds.
Meanwhile, SCAPS stands you a free movie how the
conduction and valence bands, the Fermi levels and the
whole caboodle are evolving. When you see the hated
divergence message, you’re entitled to get into a bad
mood, but don’t exaggerate. Anyway, you did not loose
the I-V points already calculated.
Hint: when you are doing many simulations, be friendly and helpful to yourself, and write some comments in
the comment box before printing the Panel: you’ll be glad to have done so when the time of writing (an
article, your doctorate) comes…
You can change the range and scaling of the axes with the Scale button. If you press the CTRL-button and
select a rectangular area in a graph, the graph will zoom-in to the selected area. Pressing the CTRL-button and
clicking the right mouse button results in zooming out.
The recommended way to introduce your solar cell structure into SCAPS is to use the graphical user interface.
This way you can interactively set all parameters while SCAPS watches over you, so that you don’t define
impossible or unrealistic situations. This chapter explains which situations can be modelled and how to
introduce them in SCAPS.
three options of Figure 3.2 right are enabled. (As of 2-1-2014, this More Numerical Settings Panel is not yet
available to the user; the option “allow change of … references” is always enabled).
Figure 3.2 Setting user reference conventions for voltage and current. Left: checkbox in the More Numerical
Settings Panel. Right: new facilities in the Solar Cell Definition Panel.
pn
V to left contact
referred as
consumer
pn
V to right contact
referred as
consumer
pn
V to right contact
referred as
generator
pn
V to left contact
referred as
generator
Figure 3.3 Possible references of V and J for pn structures. The calculations are for the problem file simple pn.def,
and the illumination is always from the right.
8 Chapter 3: Solar cell definition
np
V to left contact
referred as consumer
np
V to right contact
referred as
consumer
np
V to right contact
referred as
generator
np
V to left contact
referred as
generator
Figure 3.4 Possible references of V and J for np structures. The calculations are for the problem file simple pn.def,
and the structure is inverted with the button ‘Invert the structure’; the illumination is always from the right.
Internally in SCAPS, only the default reference is used (voltage applied at the left contact, current reference
arrow from left to right, resulting in a reference as a consumer. In all output (graphs, show/save tables), the
result is shown consistent with the user’s choice of reference. Note that the electric field in the SCAPS output
is not subject to the user-set V and J references: it is always referred to the positive x-axis, thus from left to
right.
3.3 Contacts
The contact properties can be set by either clicking the front or back contact button on the cell definition
panel, which opens the ‘contact properties panel’, Figure 3.5.
3.3 Contacts 9
The metal work function Φm (for majority carriers) can be input by the user. However, the user can also
choose the option “flat bands”. In this case, SCAPS calculates for every temperature the metal work function
m in such a way that flat-band conditions prevail. In SCAPS versions before 1-1-2014, a simplified algorithm
described below was used. When the layer adjacent to the contact is n-type Eq.(1) is used, when it is p-type
Eq.(2) is used, when it can be considered to be intrinsic Eq.(3) is used.
NC
m k BT ln (1)
ND N A
NC
m E g k BT ln (2)
N A ND
N
m k BT ln C (3)
ni
As can be seen, only the shallow doping density is taken into account in order to calculate the flat band metal
work function. When there is a considerable amount of charge in defects present near the contact however, it
is thus possible that the flat band option will not lead to flat bands .
In recent SCAPS versions (after 1-1-2014), also charge in deep defects is considered; an algorithm
involving the solution of a non-linear algebraic equation (expressing that total charge = zero) then replaces
the simple equations (1) to (3).
When the layer next to the contact is either n- or p-type (NOT INTRINSIC) a recalculation of the barrier
height with respect to the Fermi level and conductance/valence band are calculated and displayed in the
contact properties panel. These values however only serve as an indication to the user, they are not used in
the simulation.
At the contacts a (wavelength dependent) reflection/transmission R() or T() can be set, see §4.2.1.
These can be set either as a constant value (wavelength independent) or as a filter file. These filter-files are
standard ASCII-files with the extension ‘*.ftr’. Several files are provided with the SCAPS installation,
however, the user can easily make more files. If a line in this file can be interpreted as starting with at least
10 Chapter 3: Solar cell definition
two numeric values, the first value is interpreted as the wavelength (in nm) and the second as the reflection
(in %). All other lines are ignored and treated as comment. Often a SCAPS simulation will need R() and T()
at a wavelength outside the range specified in the filter file: this is e.g. the case if an R() file was specified
between = 300 nm and = 1100 nm, and a simulation was asked under illumination with the default
spectrum AM1_5G 1 sun.spe that is specified between 305 nm and 4045 nm. Then extrapolation will be
used for the spectrum wavelengths 1100 nm < < 4045 nm. For the SCAPS extrapolation rules, see Section
3.5.5.3.
Figure 3.6 Display of layer thickness, when d = 0.00245 m was input: once with m as display unit (in black, left),
and once with nm as display unit (coloured, right).
3.5.1 Adding, duplicating, splitting, removing layers from the cell structure
By right-clicking a layer button in the ‘Solar cell definition panel’, a panel opens where you can remove this
layer, or duplicate it, or split it, see Figure 3.7.
3.5 (Graded) semiconductor layers 11
With ‘duplicate’ an identical layer is inserted after (= to the right of) the layer you right-clicked; in
particular, the inserted layer has the same thickness as the original layer. The split option is there from SCAPS
3.3.01, 4-3-2015 on. With split, the thickness and the grading properties (see below) of the original layer are
changed. The original layer is called the ‘left split layer’, and the inserted layer is called the ‘right split
layer’. The splitting action conserves the thickness of the original layer. Upon clicking ‘split’ in the panel of
Figure 3.7, the Split Layer Panel of Figure 3.8 opens. There, you can set the thickness of the left split layer or
of the right split layer, as absolute thickness in m or nm, or as relative thickness (a fraction of the original
thickness). The name of the layer and its duplicate are changed, e.g. in the example of Figure 3.8 with
original layer name ‘p-layer’, the left split layer will be named ‘p-layer left’ and the right split layer ‘p-layer
right’.
Figure 3.8 The Split Layer Panel allows to split a layer whilst conserving the total thickness and the grading
properties of the original layer.
Also, the grading properties of the split layers are adapted so that the overall grading of all properties is
conserved (advancing to the terminology explained in 3.5.3). This works perfect for most grading types. For
‘exponential grading’, a set of transcendental equations has to be solved, we hope that this will work fine for
all values you would try, but there is no guarantee. For ‘Beta-function grading’, it is mathematically not
possible to find Beta-function solutions for the grading in both split layers. SCAPS will set the Beta-function a
and b of the split layers in a very rough approximation, that will be unsatisfactory in many cases, especially
when a > 1 and b > 1. It is up to the user to check the results, and judge if they are acceptable or not.
For ‘grading from file’, two new grading files are created for the split layers, and their names are the
original grading filename preceded by ‘leftsplit_’ or ‘rightsplit_’. Exception: (SCAPS 3.3.03, february 2016)
When the grading file has the range: shared over adjacent layers keyword, the grading file is used without
modification in the two split layers; no two files with different names are created.
12 Chapter 3: Solar cell definition
When there is no space to duplicate or split a layer, i.e. when the maximum number of layers is already in
use (actually 7), the duplicate and split buttons are disabled (and have an appropriate label). Also, you cannot
remove a unique layer from a cell structure; when you try, the remove button will be disabled and have an
appropriate label.
Table 3.1 Available basic grading laws. SCAPS takes care of possible numerical problem, that could occur for very
small or very large arguments; hence these laws are not always strictly followed but are more complicated under
specific circumstances.
Name P y remarks
Uniform PA PB
3.5 (Graded) semiconductor layers 13
Linear PA yB y PB y y A
yB y A
Parabolic PA y B y PB y y A y y y y A b: bowing factor
b B
yB y A yB y A 2
Parabolic2 2 There are two parabolas,
y y0
y y0 : P0 PA P0
one to each side of the point
y A y0 [y0,P0] which can be given
in the user interface.
2
y y0
y y0 : P0 PB P0
For extrapolation a fourth
y B y0
order equation is used
Logarithmic yB y y yA
yB y A yB y A
PA PB
Exponential y y y yA P0: background value
sinh B sinh LA,B: characteristic lengths
P0 PA P0 LA P P LB
B 0
yB y A y yA
sinh sinh B
LA LB
Beta function y yA βa,b(x) is the incomplete
PA PA PB a ,b beta-function (Ix(a,b) in [7]
yB y A on p.226)
Power law m m: power
1/ m yB y y yA
PA PB1/ m
yB y A yB y A
Effective P P P P Not available for
medium yB y A y yA B 0 , thus: composition.
PA 2 P PB 2 P
It is the Bruggeman
equation.
b b2 8PAPB
P with
4
( y y A ) 2 PB PA ( y B y ) 2 PA PB
b
yB y A
Two diffusion-type grading laws were implemented in SCAPS 3.3.06, december 2017. They are only
available for graded densities, dependent on position x (thus not: dependent on composition y), thus
for shallow doping densities ND(x), NA(x) and for defect densities Nt(x). In both laws, the input
parameter xdiff represents a diffusion depth, and is given by xdiff 2 D Tdiff tdiff .
xx
Diffusion: 2 For dopants or impurities
exp
N tot
N x
Gauß law proj diffusing in a layer from a
xdiff 2 limited source, that contains
xdiff a total amount of impurities
2 Ntot (cm-2). The parameter
xproj is the ‘projected range’.
It describes the penetration
of the (maximum position
of) the ion beam in an ion
implantation process. For
the diffusion depth xdiff,
there is a sign convention:
if diffusion is from the
14 Chapter 3: Solar cell definition
Figure 3.9 The Grading panel, in this example an exponential composition grading is set.
Figure 3.10 Setting the composition grading y(x). Select a grading law for the composition (in this example
exponential). The values yleft=0.2 and yright=0.5 are just indications here. You can only set them on the grading panel
which appears when selecting a grading law.
Figure 3.11 Here, the shallow donor density is given a grading as a function of composition y: ND (y). The two values
displayed are the values of the pure A material (1014 cm-3) and the pure B material (1016 cm-3). The shallow acceptor
density NA(x) is given a grading as a function of position x: NA(x). The two values displayed are the values at the left
side (1015 cm-3) and at the right side (1014 cm-3). Notice the use of the colour code (red for position, blue for
composition grading).
o the same grading file (exactly the same name, thus the same file) must be set in all layers of
the group
o this grading from file must be set for the same property: all y(x), or all NA(x), …
The rules for extrapolation, should it be necessary, are described in the next paragraph. They apply to all
interpolation of file input data in SCAPS, in particular also to absorption () files.
2 1.E+03
P(y) or P(y) or
1.5 P(x) 1.E+02 P(x)
1 1.E+01
0.5
1.E+00
0 y or x or x/d
-0.5 0 0.5 1 1.5 1.E-01 y or x or x/d
-0.5 -0.5 0 0.5 1 1.5
Figure 3.12 Conventions for extrapolation of file input data in SCAPS. The definition interval is between the two
vertical thick lines. The data specified in the file are shown with open symbols; the SCAPS extrapolation with solid lines
of the same colour. Left: ‘Linear interpolation’. Extrapolation is also linear, and notice that the extrapolated values can
be negative. Right: ‘Logarithmic interpolation’. Extrapolation is also logarithmic, but with the restriction that P cannot
rise. For the lowest curve, P = 0 at the edges y = 0 and y = 1 of the specified abscissa range, and the extrapolation yields
P = 0 outside the specified abscissa range; these values are shown here as P = 0.1, just to make them appear in the
figure, but internally they are set rigourously to P = 0.
o these warnings are by default given to the screen, and the user should acknowledge the
warning (thus, press OK) to proceed. The warnings can also be directed to a log file, without
interruption for the user (this is the default setting while running a script). See Figure 7.5.
o if you are annoyed with these range-warnings, there is only one good solution: edit the filter
file, and add extra points, so that extrapolation in whatever range you will consider will
not shoot out of [0, 100 %].
o and there is a worse, but faster solution: you can silence all inter/extrapolation warnings in
the Numerical Panel (Figure 3.13). This setting is saved in the .scaps files (but not in the .def
files!), and will be loaded from these. Older .def files will not have this setting saved, and
the default setting will be used: ‘do give warnings’.
Figure 3.13 SCAPS 3.3.07, december 2019: new option at the bottom left of the Numerical Panel. The default setting is
shown. The other setting is “Do not warn and proceed”.
3.5.6.2 The optical absorption constant α: traditional model (SCAPS 3.3.06, december 2016)
The optical absorption constant can be set from either from a model or from a file, see Figure 3.14. When it
is set from a model, α(λ) is given by (6).
20 Chapter 3: Solar cell definition
Figure 3.14 Setting the absorption constant from file (left) or from model (right). The grading can be shown or set by
clicking the ‘Show/set alpha’-button.
B
A h Eg (6)
h
Here Eg is the actual band gap of the material, and A (in cm-1eV-1/2) and B (in cm-1eV+1/2) are the model
parameters.
3.5.6.3 The optical absorption constant α: new models (SCAPS 3.3.07, january 2018)
The new SCAPS models for optical absorption constant are discussed and illustrated in detail in a dedicated
application note: SCAPS Application Note Absorption Models.pdf, downloadable from our
site. Here we give a brief description, refer to the application note for more information.
Components of the new SCAPS model for optical absorption
SCAPS 3.3.07 offers 6 sub-model for optical absorption that each can be present or not. These sub-models
are described by:
h bg back ground constant
c u h E g E g -step c if h E g , 0 if h E g
E g h
0 0 1 E g -sqrt and 0 if h E g
h E g
n1
E g1 h
1 1 1 power1 and 0 if h E g1 (7)
h E g1
n2
E g 2 h
2 2 1
power2 and 0 if h E g 2
h E g 2
E g h
exp - sub-bandgap "glued to other mechanisms"
E0
Here (+) means that the sub-model can be omitted or can be added by the user to the total (h) in the SCAPS
user interface. The names ‘back ground’, ‘E g-step’… are the sub-model names that are used by SCAPS. A few
remarks should be made:
There should always be at least one absorption sub-model active. When the user tries to unclick all sub-
models in the SCAPS user interface (see below), the back ground model will be forced to be present.
The model ‘Eg-step’ is there mainly to please theoreticians. It delivers a constant absorption constant c
‘above the band gap’, thus h > Eg or < g, and zero ‘below the band gap’. The band gap is always
3.5 (Graded) semiconductor layers 21
the band gap Eg that was input as one of the electronic properties of the material/layer. Hence it will also
be varied when Eg is varied as a batch parameter, or in the script.
The ‘Eg-sqrt’ model is the only model that was implemented in traditional SCAPS 3.3.06. In the new
SCAPS 3.3.07, this model can be active or not, as the user decides. The user interface shows the model
parameters 0 and 0 also in their traditional form A and B. The band gap is always the band gap Eg that
was input as one of the electronic properties of the material/layer. Hence it will also be varied when Eg is
varied as a batch parameter, or in the script.
The two power models ‘power1’ and ‘power2’ allow much versatility in modelling the (h) or ()
behaviour of a layer/material. There are 4 parameters per ‘power model’: 1, 1, Eg1 and n1 (and alike for
power 2,with index 2). In the user interface panel, g1 is given as an alternative parameter for Eg1: change
one of the two, and the other will be adapted in the user interface.
Important note on the meaning of the band gap parameters Eg1 and Eg2:
When Eg1 (or Eg2) are positive, they should be understood as a fixed parameter: they are not
related to the actual band gap Eg of the layer/material. In particular, this means that also
when Eg is varied (batch or script), the parameter Eg1 (or Eg2) keeps its fixed value.
When Eg1 (or Eg2) are input as a negative number, they should be understood as a ‘relative
band gap’, or a multiple of the actual Eg: their value is substituted internally with |Eg1|Eg.
When Eg is varied then (batch or script), the internal parameters Eg1 (or Eg2) are varied with
it.
Example: take a layer/material with band gap Eg = 1.2 eV. When setting Eg1 = 1.5, the
internal Eg1 parameter will always be 1.5 eV, regardless of the changes made to Eg. But when
the input was Eg1 = -1.5, the internal Eg1 value is set to 1.51.2 eV = 1.8 eV; and when one
would vary Eg in a batch calculation from 1 eV to 2 eV, the internal Eg1 would vary from 1.5
eV to 3.0 eV.
The sub-bandgap tail mechanism is (of course) only available when the user has checked at least one of
the 4 ‘band gap mechanisms’ Eg-step, Eg-sqrt, power1 and power2.
The proportionality constant in the last term of Eq. (7) is chosen in such a way that the sub-band gap tail
is ‘smoothly glued’ to the (h) or () curve of all other mechanisms.
The Eg-sqrt mechanism of the new SCAPS works with the model parameters 0 and 0, not with A and B.
However, traditional SCAPS definition files will be read and the (A, B) (0, 0) conversion will be
done automatically.
When the Eg-sqrt model is the only ‘band gap model’ present, the new SCAPS 3.3.07 will also output
the (A, B) parameters, and the new definition files will be read and treated correctly by traditional SCAPS
versions.
Also when other band gap models (than the Eg-sqrt model) are present, the new SCAPS versions will
output some ‘best’ (A, B) values. Traditional SCAPS versions will run with these new definition files, but
of course will not give exactly the same result as the new SCAPS versions, since they do not have the Eg-
step, power1 or power2 models.
The SCAPS user interface for absorption models
The optical absorption block
The optical absorption block in the Layer Properties Panel has been changed in the new SCAPS
3.3.07, see Figure 3.15. When the optical absorption of a material/layer is set to ‘from model’, the
‘set absorption model’ button is active; upon clicking, the Absorption Model Panel opens (Figure
3.16). This panel is operating much like the grading panel and the (spectrum or generation) model
panel, that are perhaps familiar to the SCAPS user.
22 Chapter 3: Solar cell definition
Figure 3.15 The optical absorption block in the Layer Properties Panel in the new SCAPS versions ( 3.3.07). For the
‘pure A material’, absorption ‘from model’ is set, and a summary of the absorption models present is shown. For the
pure B material’, absorption ‘from file’ is set, and the full path of the absorption file is shown.
Upon changing a parameter value (or value of an alternative parameter), a new () or (h) curve is
calculated and added to the graph. When it starts to look too messy, you can clear all graphs or all but the
last calculated one.
You can select two abscissa (horizontal axis) variables (wavelength or photon energy h) and two
ordinate (vertical axis) values (just , either in 1/cm or in 1/m). When change the abscissa or ordinate
selection, all graphs but the last graph are lost.
You can also show the () or (h) data contained in a SCAPS absorption file; once a file selected, you
can show or hide the file data with a toggle button. Remark: showing file data does not change the
absorption mode from ‘from model’ to ‘from file’! This mode remains ‘from model’, but at least you can
compare your model try-outs with real data.
Tip: this is also a great way to look to an absorption file when setting up a SCAPS model: immediately
you see what it is like!
The number of mesh points ( values or h values) in the top right part of the panel of Figure 3.16, is
only relevant for this panel. In calculations, SCAPS decides the -values at which to evaluate (), the
generation G(x, ),… based on the calculation settings ordered by the user: e.g. values in the spectrum
file, values at which QE() are ordered,…
Of course all other familiar SCAPS facilities are there: linear/logarithmic view with only one click, saving
the graph in some graphical format (great for presentations and reports – usually the graphical quality is
not good enough for decent publications), showing the data (and copy/paste them e.g. in Excel).
A
gA 0 0 A g (8)
g 0
A second estimation is found by evaluation αB at a wavelength λB found in a way similar to Eq. (8). Then
take a weighted logarithmic average between the two estimations:
log 1 y log A A y log B B (9)
Figure 3.17 The optical absorption constant (, y) of a compound material with composition y, thus A1-yBy,
calculated by SCAPS with a dedicated interpolation algorithm. Here, the pure A material is CuInSe2, and the pure B
material CuInS2. The data can be obtained in tabular form by clicking Show Alpha Data (the green button)
Figure 3.18 The View Grading Panel allows a quick overview of all parameters that can be graded. Parameters that
one would possibly like to view in one graph are grouped together.
When using the green save button (not the show-button) you also get the values of all α(λ,x)-values, where
the λ-values are the wavelengths present in the spectrum you used to perform the simulation and the x-values
the mesh-points. Combining this facility with a uniform y-graded layer allows you to construct personalized
absorption files as well .
If you want to have a graphical view of the graded data, the best way to go is (was?) to use the recorder
function which is introduced in Chapter 8. Then you have access to more variables and saving and showing
options as well.
Saving a material using the pure A/B option only saves the parameter values of the A/B-material of the
layer. All parameter grading is set to uniform.
Saving a material using the both materials option saves both parameters of the A/B-material of the layer
together with the appropriate parameter grading parameters.
When saving a material using the pure Y option you should give a fraction y which defines the material to
be saved as A1-yBy. The appropriate parameter values for this material are then calculated according to the
values for the A/B-material of the layer and saved as a uniform material (similar to pure A/B). The
absorption for this material is also calculated as an interpolation of the absorption for A and B and is saved in
an absorption file. This file is automatically added to your absorption folder and gets the same name as your
material-file extended with ‘.abs’.
electron energy
EC right = 5eV
Eg left = 1 eV
EV Eg right = 1 eV
EC
EF
EV
Figure 3.21 Developing ‘intuition’ about grading. Grading schemes of electron affinity (x) and of band gap Eg(x):
(x) is graded, but Eg is not. What is suggested by the naïve sketch (top) and what really happens in a pn junction
(SCAPS calculation, bottom).
electron energy
electron energy
left = 4 eV vacuum level
left = 4 eV vacuum level
right = 4eV
EC EC right = 5eV
Eg left = 1 eV
EV Eg right = 2 eV Eg left = 2 eV
EEgg right = 11 eV
right = eV
EV
no grading,Eg grading: will this yield
constant EC and sloped EV(x) ? andEg opposite (will this yield constant EV
and sloped EC(x)?)
EC
EC
EF
EV EF
EV
Figure 3.22 [more…] Developing ‘intuition’ about grading. Grading schemes of electron affinity (x) and of band
gap Eg(x): [left] no grading but an Eg(x) grading and [right] both (x) and Eg(x) are graded, but their sum (x) + Eg(x)
= 6 eV = constant. What is suggested by the naïve sketch (top) and what really happens in a pn junction (SCAPS
calculation, bottom).
user MUST specify recombination somewhere, at least at one place (in a layer, at a contact or at an
interface). If (s)he does not do so, a convergence failure will result in non-equilibrium conditions (non zero
voltage, and/or illumination).
In the bulk of a semiconductor layer, three different kinds of recombination processes can be introduced:
through defects, radiative and Auger.
defects (charge states 0, +1 and -1), special facilities for them are provided in SCAPS. The charge states
connected to a defect can be set by the ‘defect type button’
If the defect is not multivalent (donor-acceptor-neutral), all defect parameters can be set on the defect
density panel, otherwise clicking the defect type button will result in opening the ‘Multiple level defects
properties panel’, Figure 3.25.
The algorithms used by SCAPS to calculate the recombination through defects are explained in [2].
The charge type and the energy of a level can immediately be accessed on the multiple level defects
properties panel. The charge types MUST be introduced in an ascending way (level 1 the most positive
charge), or all levels must be neutral. In most cases the most positive level will be situated the closest to the
conduction band, a warning is given with the option for the user to define the defect differently, but the user
is not obliged to comply with the warning.
The other defect properties of a level can be edited by double-clicking on the text-box belonging to each
level. This opens a panel similar to the defect density panel, however the properties which are not level
specific but general to the entire defect are dimmed and can’t be edited. The only properties which can be
edited are the capture cross sections (for electrons and holes), the energy level and the IPV-properties
(§3.6.4).
Several features of the energetic distribution can also be accessed on the multiple level defects properties
panel. The energetic distribution, the reference for defect energy levels and the characteristic energy are the
same for all levels of one defect. More info about these properties can be found in§3.6.3. If the checkbox Use
Correlation Energy is checked, the energy difference between level 2 and level 1 is displayed in the window
next to the checkbox. When the user edits this correlation energy the energy level of level 2 will be changed
accordingly with respect to level 1.
The degeneracy factors (see [2]) take as a default value Eq. (10), with H the total number of charge states.
H!
g s CH
s
(10)
s ! H s !
However, their values can be set to one as well by clicking the appropriate checkbox.
When the user has finished editing the properties of the levels the multiple level defects properties panel
can be quitted by the return to the defect definition panel-button. Then the defect properties panel is again
displayed, but the level specific properties are no longer visible. It is a kind of survey of the defect. Now the
changed to the defect can be saved using the add/accept-button or ignored using the cancel-button.
Table 3.2 Overview of the energetic distributions of defects available. Et is the energy level (‘trap level’), Ec is the
characteristic energy (not the conduction band edge energy here!). The defect density Nt(E) is given in cm-3/eV (except
for single, where it is given in cm-3). Npeak is the energetic density at the peak of the distribution, in cm-3/eV. Ntot is the
total density, integrated over all energies in (cm-3). The parameters Et, EC, and Ntot or Npeak, and the shape of the
energetic distribution (‘single’, or ‘uniform’…) are set in the Defect Properties Panel for each defect. The width
parameters wG and wt are set for all defects together in the Numerical Panel.
Range N t E ...
N tot N peak remarks
Ec Ec
N tot EC N peak
Et 2 ; Et 2
Uniform N peak
E E 2
wG wG
Gauss Et 2 Ec ; Et 2 Ec N peak exp t
N tot EC N peak (1)
Ec
E Et
CB tail Et wt Ec ; Et N peak exp N tot EC N peak (2)
Ec
32 Chapter 3: Solar cell definition
E Et
VB tail Et ; Et wt Ec N peak exp N tot EC N peak (3)
Ec
Remarks:
(1) wG can be defined in the numerical panel; default value: wG = 6.0; see Figure 3.26; G stands for Gauß.
(2) wt can be defined on the numerical panel; default value: wt = 7.0; see Figure 3.26; t stands for tail.
Whenever the defect energy distribution is not single, this distribution is discretized as being a specified
number of single defect levels. This number can be set on the numerical panel, its default value is 7.
Figure 3.26 Defect settings on the numerical panel with their default values. Top: the number of discretization levels,
bottom: wt and wG.
The energy level has to be defined with respect to a reference energy level. This can be set on the defect
density panel or on the multiple level defects properties panel. The available choices are: above EV (above
the valence band level); below EC (below the conduction band level) and above Ei (above the intrinsic level
Eg k BT NV
Ei EV ln ).
2 2 NC
Next to the charge type, the defect density (and its spatial and energetic distribution) also an overview of
the carrier lifetime and diffusion length is given. These are calculated (Eqs. (11) and (12)) only at the left and
right side of the layer for every energy level. Only its maximum and minimum value are listed.
1
(11)
vth N t
3.7 Metastable defect transitions 33
L D (12)
IT SHOULD BE STRONGLY EMPHASIZED THAT THESE VALUES ARE ONLY CALCULATED TO GIVE THE USER
A ROUGH IDEA ABOUT THE RECOMBINATION OF THIS DEFECT, NONE OF THESE VALUES ARE USED IN THE
ACTUAL SIMULATIONS! MORE ADVANCED ALGORITHMS ARE USED THERE, see e.g. [2].
U radiative K np ni2 (13)
The parameters K, cnA and cpA can be set on the layer panel. SCAPS does not give a hint for a plausible K
value ; for Si you can take KSi = 1.810-15 cm-3s-1, for GaAs KGaAs = 7.210-10 cm-3s-1. In CIGS the
recombination is most probably dominated by defects, you can take K = 0, unless you want to simulate
electroluminescence. In Si appropriate values for the Auger constants are: cnA c pA 3 1031 cm-6s-1 .
Figure 3.28 Band to band recombination parameters. From top to bottom: K, cnA and cpA.
The contributions of the different recombination processes to the current can be assessed on the IV-panel
(see §6.4.3) and in the recorder facility (see Chapter 8). When you are sure that all direct band-to-band
recombination is radiative, and that all emitted photons can get out of the cell to your measurement set-up,
you can interpret Jradiative as the electroluminescence signal. However it is not labeled as such in SCAPS.
3.7.1 Principles
Metastable effects take place on a long timescale (which can vary a lot, depending on the actual conditions).
SCAPS does not solve transient problems. Hence, the following philosophy has been followed.
A metastable defect is considered to exist of two different configurations, a donor and an acceptor
configuration, which are separated by energy barriers associated with lattice relaxations. Each separate
configuration behaves as a conventional defect, which can have a multivalent character. The transition
between the different configurations requires a simultaneous capture or emission of two free carriers together
with the thermal activation of an energy barrier. Hence, at lower temperatures, this transition will not occur.
Similarly the transition will not be observed in an admittance measurement when the change of the quasi-
Fermi levels occurs at higher frequencies.
34 Chapter 3: Solar cell definition
In a typical experiment, the studied sample is brought to a well defined metastable state, i.e. a distribution
over the donor and acceptor configuration, by applying certain initial voltage/illumination condition at
elevated temperatures for a sufficiently long time. Afterwards the sample is cooled down in order to inhibit
further changes in the metastable state of the sample and measurements are performed.
In order to simulate this, first the distribution over the acceptor and donor configuration of the defect is
calculated under initial voltage/illumination conditions, see §4.4. This distribution, together with the total
defect density is used to calculate the defect density belonging to the different configurations of the
metastable defect. These defect densities are kept constant and are used to perform further simulations under
measurement voltage/illumination conditions.
3.7.3 Help, the buttons to introduce/edit metastable properties are not available!
One of the aims of SCAPS is to keep the user interface very intuitive and easy to learn. Since the first release,
a multitude of extra facilities have been added to the program. These extensions increase the number of
situations which can be simulated, but also complicate the learning process of a user making his/her first
simulations.
The simulation of metastable defects is considered to be ‘advanced’ and should not be one of the worries
of a rookie in the bright world of numerical simulations with SCAPS. As a result, most of the buttons
governing metastabilities are only accessible/visible when the user really expresses her/his intention to use
them:
36 Chapter 3: Solar cell definition
The ‘Metastable Defect Definition Panel’ can only be accessed if at least two defects are present in the
layer AND at least one of the charge states of one defect can be transformed into one of the charge states
of a second defect through a double capture process.
The ‘Initial State Workingpoint Panel’ can only be accessed if at least one metastable defect is present in
the definition file which is currently loaded.
When the calculation is numerically unstable it can be stabilized by using a clamping factor. This process
is described in [11]. This factor should be chosen between 0 and 1, 1 corresponds to no clamping. The
smaller this factor the more stable, but also the slower the calculation gets. Values below 0.001 are usually
very slow.
3.8 Interfaces
Between any two semiconductor layers an interface can be defined. The main algorithms used in SCAPS are
discussed in [12].
The model which is implemented for interface transport in SCAPS is thermionic emission. The thermal
velocity of the interface transport equals the smallest thermal velocity of the two neighboring layers. The use
of this model implies that there will always be a (small) step in the quasi-Fermi level energy values at an
interface, even when there are no band offsets.
Just as in a bulk layer recombination centers can be present at an interface. The definition of interface
defects is very similar to bulk defects. However, there are only three possible defects and there charge type
cannot be multivalent. Recombination in interface states is modeled by the Pauwels-Vanhoutte theory [13],
which is an extension of the Shockley-Read-Hall theory.
Two tunneling processes are implemented which involve interfaces: intraband tunneling and tunneling to
interface defects, see §3.9.
3.9 Tunnelling
SCAPS treats (some) tunnelling mechanisms in a semi-classical way: band to band tunnelling, intraband
tunnelling, tunnelling to interface defects and tunnelling to contacts. The main algorithms are discussed in
[4], a more elaborate version is available in [14] (in Dutch, on request). PAY ATTENTION: Tunnelling is only
taken into account in the solution of the dc-problem, not in the ac-problem. Hence only indirect tunnel
influences on the admittance (through the setting of the dc-state of the sample) are simulated!
Band-to-band tunnelling is the tunnelling between conduction and valence band states, see Figure 3.32.
Intraband tunnelling is the tunnelling between states both in the same (conduction/valence) band, see Figure
3.33. The valence and conduction band consists in (almost) every structure out of bulk layers and interfaces.
3.9 Tunnelling 37
Band-to-band tunnelling and intraband tunnelling can be allowed/forbidden for every layer/interface
separately by checking the appropriate checkbox on the layer/interface panel.
Next to band-to-band and intraband tunnelling, also tunnelling between the bands and an interface defect,
or the bands and a metal contact is possible, see Figure 3.34. These processes can be set for each interface
defect separately on the interface defect properties panel and for each contact on the contact definition panel.
Whether or not these tunnelling processes are allowed does not depend on the layer/interface settings. E.g. if
tunnelling to the left contact is allowed on the contact properties panel, tunnelling between this contact and
all layer/interfaces will be allowed even if the ‘allow tunnelling’-checkbox is unchecked in one or more
layers/interfaces.
EC
EC
EFp
EV EV EFn
EFp
EFn
EC
EF
EV
EC
EC
EV
EF
EV
Figure 3.33 Intra-band tunneling in the conduction and in the valence band. At the bottom, the check box and meff*
values to be enabled in the Interface Panel are shown.
3.9 Tunnelling 39
EC
EC
EF EF
Figure 3.34 Contact tunneling and tunneling to interface states: implemented in SCAPS. At the bottom, the check box
and meff* values to be enabled in the Contact Properties Panel and the Interface Defect Properties Panel are shown.
Table 3.3 Main file-types with their default extension and directory
SCAPS filetypes default extension default directory
problem definition .def scaps\def
material properties .materials scaps\materials
action list .act scaps\def
initial workingpoint .wp2 SCAPS\def
batch settings .sbf scaps\bdf
recorder settings .srf scaps\bdf
scaling .scl scaps\scaling
SCAPS scripts .script scaps\script
all SCAPS settings in one .scaps scaps\def
Other files can not be edited within SCAPS but are needed as input files. These files are text files (ASCII
files) that you can construct and edit with a simple text processor, e.g. Notepad, see Table 3.4. Each file has a
header that can be used to explain what the data represent and where they are coming from. The files
distributed with SCAPS can serve as an example to construct ones own input files. Take in mind that SCAPS
expects meter-based SI units in input files, except for position x (m) and for wavelength (nm).
When definition files are exchanged between users (or between your lab computer and your home
computer), it can happen that a .def file contains an input file name (.abs, .ftr, .opt, .grd, …) that is not
present on the computer. When leaving the solar cell definition panel with the OK button, SCAPS checks if all
files are found, and if not brings you to a panel where you can either browse for an existing filename, or set
the property to the default internal model instead of ‘from file input’.
Figure 3.36 SCAPS checks if all necessary files can be found: after loading an action list or loading all SCAPS settings,
and after leaving the Solar Cell Definition Panel with ‘OK’ (see arrows in screen shots at the left side). Then, a panel
opens that displays a list of all files not found in the problem definition (see screen shot at the right side). You can either
browse for an existing file, or set the property ‘to model’.
Please note that such check is not carried out when the problem has been input or changed by the SCAPS
the batch set-up: you still have the possibility to cause a program crash by inputting non-existing files. Also,
when SCAPS is in non-interactive mode (see 7.4 and Figure 7.5), the Check Files Panel is not opened, but
everywhere a file is not found, the corresponding property is set ‘to model’ (this is equivalent with clicking
all the ‘Set to model’ buttons, at the right side of Figure 3.36); a message of what was unfound and has been
set to model is written to the SCAPSErrorLogFile.log file.
You can leave the Check files Panel without fixing all unfound files (that is, either browsing for an
existing file, or setting the property to model). The calculate button is then disabled, and you see a red
warning at the bottom, right of the action panel (Figure 3.37).
Figure 3.37 When not all unfound files are fixed, a red warning is displayed at the bottom/right of the action panel.
Chapter 4: Working point definition
The workingpoint specifies the parameters which are not varied in a measurement simulation, and which are
relevant to that measurement.
4.1 General
These parameters are (immediately) available on the action panel (Figure 4.1).
Figure 4.1 Setting the working point conditions, available on the action panel.
The temperature T: relevant for all measurements. Note: in SCAPS, only NC(T), NV(T), the thermal
velocities, the thermal voltage kBT and all their derivatives are the only variables which have an explicit
temperature dependence; you must input for each T the corresponding materials parameters yourself.
The voltage V: is discarded in I-V and C-V simulation. It is the dc-bias voltage in C-f simulation and in
QE(λ) simulation. SCAPS always starts at 0 V, and proceeds to the working point voltage in a number of
steps that you also should specify, see §5.1.2.
The frequency f: is discarded in I-V, QE(λ) and C-f simulation. It is the frequency at which the C-V
measurement is simulated.
The work point voltage V and illumination intensity (e.g. in sun) are approached from the equilibrium
state in Number of points = n steps: the voltage from 0 to V linearly in n steps, and the illumination
intensity Pin logarithmically from 10-10Pin to 1Pin.
The illumination: is used for all measurements and is discussed below in §4.2.
The advised way to create a g(x) file is as follows: set up a problem in SCAPS; perform a calculation with
the internally calculated g(x). Save the results in the EB-panel (energy bands panel), or, alternatively, press
show in the action panel and copy/paste the desired data in a user file (e.g. Origin or Excel). Then you have
the x-coordinates of the nodes used by SCAPS. Make a generation file with the g(x) data from your own
model, calculation or measurement… Mind that SCAPS input files want data in SI units (only position x is
wanted in m, not m). As a consequence, a SCAPS generetion file expects the g(x) data in two columns, first
column x in m, second column g in m-3s-1. For an example of a valid format, see the examples coming with
SCAPS (file extension.gen).
You can always save the generation g(x) that was set by the internal SCAPS illumination model in a valid
SCAPS generation input file using the script command save results.SCAPSgenerationfile, see
section 10.4.3. And then you can replace the g data in the second column by your own data.
To use your own generation file, click ‘Generation of eh pairs determined from file’ in the action panel,
and select your file. When the g(x) data in your file do not use the x values used by SCAPS, the program will
have to interpolate between your x values, and this might cause inaccuracy. To judge the interpolation, you
can visualize the g(x) data in the Generation-Recombination profiles panel, see §6.4.2. The g(x) profile you
will see then is, however, only updated after a calculation has been performed with the calculated or user
specified g(x) .
Additionally you can still use an attenuation filter, which would mimic the effect of a neutral density filter.
Again, setting an attenuation > 100 % corresponds to a measurement under concentrated light. The ideal
light current in the file (Figure 4.3) is the total number of eh pairs in the generation file, thus integral of all g
values over the cell thickness, and divided through the elementary charge q. The idelal light current in the
cell is the ideal light current in the file, multiplied with the transmission of the attenuation filter.
A generation file is a table of x, g values (x in m, g in m-3s-1). It contains information about the number of
eh pairs generated, but not about the energy of the photons that created the eh pairs. As a consequence, no
solar cell efficiency can be calculated. However, a ‘collection efficiency’, that is the ratio of the short circuit
current to the ideal light current in the file, can be calculated, and is displayed in the IV panel. Also, a
relevant spectral response QE cannot be calculated, since the generation file does not contain any
information on wavelength.
contacts, and absorption in the semiconductor layers. Thus: no interference, no scattering, no intermediate
reflectors… For a single layer of thickness d, with uniform optical absorption constant () (uniform here
means that does not depend on position within the layer, thus (, x) = ()), and for light incident from
the left with photon flux Nphot0(), the photon flux Nphot(, x) at each position in the layer is given by
1 Rback exp 2 d x
N phot , x N phot0 Tfront exp x (15)
1 Rback Rint exp 2d
where
Tfront() is the (possibly wavelength dependent) transmission of the front contact; the front contact is
where the light is incident, here the left contact. Tfront is in SCAPS a property of the contact, and thus is input
in the Contact Properties Panel of the front contact.
Rback() is the (possibly wavelength dependent) reflection at the back contact; the back contact is at
the opposite side from where the light is incident, here the right contact. Rback is in SCAPS a property of the
contact, and thus is input in the Contact Properties Panel of the back contact.
Rint is a (not wavelength dependent!) internal reflection at the front contact. In SCAPS, the value
of Rint or its complement Tint = 1 - Rint, should be input in the Solar Cell Definition Panel, see Figure 4.4.
or
Figure 4.4 Input fields for the internal reflection Rint, or its complement the internal transmission Tint = 1 - Rint, in the
Solar Cell Definition Panel. The position of the input fields depend on the side where the light is incident. These input
fields are only visible if a reflection at the back contact Rback is set.
Eq. (15) is simple to interpret: If there is no reflection at the back contact (Rback = 0), there is only one pass
of light through the cell, and the light is extinguished with the familiar exponential function exp(-x). If Rback
0, but the internal reflection at the front contact is zero, Rint = 0, there is a second pass of the light reflected
at the back contact, and an additional extinguishing function exp(+x) appears in (15) for the reflected light.
If there is internal reflection Rint 0, there is an infinite number of passes of the light, that are summed up in
(15) yielding the denominator.
In SCAPS, this model is extended to more than one layer, to layers with non-uniform (= position
dependent) absorption (, x), and to the possibility of light to be incident on the other contact. But there is
no more physics than that already described in Eq. (15).
From the photon flux Nphot(, x) at each position and for each wavelength, the generation of eh pairs is
then calculated as
G , x , x N phot , x (16)
This is then integrated over all wavelengths of the incoming photon flux:
max max
G x G , x d a , x N phot , x d (17)
min min
where min and max are the short and long wavelength limits of the incoming photon spectrum Nphot0(), as
it is specified in the spectrum input file.
4.3 Generation and spectrum models (scaps 3.3.05) 47
Users that are not satisfied with the optical model of SCAPS, can directly specify the eh generation G(x) ate
each position. The optical model of Eqs. (15)-(17) is then not used. Since the impurity photovoltaic effect
(IPV) relies on this internal optical model (with extensions), assigning IPV properties to defects is
incompatible with a user specified generation G(x). Precautions in SCAPS prevent the user to define both in
one problem.
4.3.2 Analytical models for the generation and for the spectrum: motivation
Direct specification of G(x) through an input file with extension .gen is intended for users who want to use
SCAPS for the electrical calculations, but prefer to do the optical calculations themselves. A number of users
have applied SCAPS with a file input for G(x) to simulate electron beam induced current (EBIC)
measurements. Typically, they would define intense generation in a small sheet of the cell, and calculate the
current response when the central position of the beam (the position of the ‘intense generation’) is swept or
scanned over the cell thickness. For each position of the e-beam, a separate generation file should be made,
and this proves to be a rather complicated and time consuming procedure. There was a little improvement for
those brave users with SCAPS 3.3.02 of july 2015, where script commands where introduced that called one
file from a list of file names, but still it was labour intensive work.
Another problem is the mesh, thus the set of x values. SCAPS has an internal mesh generator that defines
the positions x where the semiconductor equations are solved. But a user often has his own mesh generator
for his own optical model. When the two meshes do not coincide, interpolation is used by SCAPS, but that can
be a cause of numerical inaccuracy. For example, a narrow EBIC profile G(x) specified by a user could fall
completely between two adjacent SCAPS mesh points in the middle of a thick layer, so that SCAPS wouldn’t
even ‘see’ the e-beam…
That is why we introduced in SCAPS 3.3.05 of December 2016 the possibility of defining G(x) from an
analytical model, where all parameters of the model (e.g. ‘central beam position’) can be manipulated in the
SCAPS batch, recorder and script facilities. And in the same move, analytical models for the spectrum were
implemented.
Figure 4.5 Using the internal optical model of SCAPS: define a spectrum, let SCAPS calculate G(x) with Eqs. (15) -
(17). The selection switch marked on top of this figure is only active when the light is switched on.
The default setting is shown in Figure 4.5: a spectrum is specified from a file, and the internal optical
model of SCAPS is used. External optical filters can be applied: two spectrum-cut-off filters and a neutral
density filter. When the model/file switch in the spectrum part of Figure 4.5 is set to ‘Analytical model for
spectrum’ (instead of ‘Spectrum from file’), the new facilities to calculate a spectrum from a (simple) model
are enabled, see Figure 4.5 The available spectrum models are discussed below.
When in Figure 4.5 the option ‘Directly specify G(x)’ is set, one can set the generation G(x) from an input
file or from analytical model, see Figure 4.7. The available generation models are discussed below.
48 Chapter 4: Working point definition
Figure 4.6 Setting an analytical model for the spectrum, here a black body spectrum is selected.
Figure 4.7 Directly specifying the generation G(x). Left: take G(x) from an input file with extension .gen (as in
previous SCAPS versions). Right: calculate G(x) from an analytical model (new in SCAPS 3.3.05). The selection switch
marked in red is only active when the light is switched on.
As of now, the user can select one from seven models as shown in Figure 4.8. When selecting one of
them, e.g. here a Gaussian generation profile G(x), the new SCAPS Model Panel opens, see Figure 4.9. The
panel is operated in much the same way as the SCAPS Grading Panel, that is maybe familiar to many users.
4.3 Generation and spectrum models (scaps 3.3.05) 49
Figure 4.9 The SCAPS Model Panel, showing a modelled gauss curve G(x), and also the generation profile from an
input file, that can be used for comparison with the G(x) model. The meaning parameters is (should be, I hope) self-
understood.
Figure 4.10 Linear and logarithmic view of the generation model ‘rectangular with Gaussian tails’, with parameters:
central position 1 m, total width of rectangle 0.5 m, standard deviation of Gaussian tails 0.3 m. Ideal light current:
10 mA/cm2.
the x-mesh of the SCAPS calculations, and usually contains much less points. One can or cannot include the
G(x) mesh points into the SCAPS mesh by clicking this option in the Numerical Panel, see Figure 4.11.
Figure 4.11 In the Numerical Panel, one can ask (or not) to include the mesh points of G(x) into the SCAPS mesh.
Also in the right part of the Model Panel of Figure 4.9, one can select the abscissa (x-axis) and the ordinate
(y-axis) of the plot, see Figure 4.12.
Figure 4.12 Possible choices for the abscissa (x-axis) and ordinate (y-axis) to be displayed in the Model Panel for
generation models.
The x-axis options are trivial (micrometer or nanometer units), but the y-axis options are more interesting.
The definitions are:
x x
Gcumul, L R x G x dx and J ideal, L R x q G x dx
0 0
(18)
d d
Gcumul, R L x G x dx and J ideal, R L x q G x dx
x x
These integrals are calculated numerically. The total generation, expressed as a light current, thus
d
J ideal J ideal, LR d J ideal, R L 0 q Gtot q G x dx (19)
0
is displayed in the Action Panel, see Figure 4.7 right (the value 9.9997 mA/cm2 indeed slightly deviates
from the parameter value 10.0 mA/cm2 that was set). If e.g. a substantial fraction of the G(x) profile
modelled would have x < 0 and thus lay outside the cell, the displayed Jideal value would substantially be
lower than the Jideal parameter value set.
The name of the model parameters is self-evident, we hope. For most parameters, you have two alternative
forms of the same parameter; input one and the other is adapted automatically. Examples are: positions in
m or in nm; total (integrated over cell thickness) Gtot values as a photon flux (# photons.s-1cm-2) or as an
ideal current (mAcm -2). And finally, as is customary in SCAPS, there is only one mouse click between you
and your logarithmic thoughts .
You can display also the G(x) data from an input file, but that is only for information: it allows to compare
a modelled G(x) with G(x) data from a file. To actually set G(x) from an input file, proceed as in Figure 4.7
left. (And don’t forget, SCAPS is expecting the input files as a table of x (in µm) Geh (in #/m3.s), separated
by white space (blanc or tab)).
4.3 Generation and spectrum models (scaps 3.3.05) 51
For all G(x) profiles with exponentials or Gauss curves, it might be worth while to look at the logarithmic
graph!
Again the SCAPS Model Panel opens upon selecting a spectrum model. The options for the x-axis and y-
axis for spectra are shown in Figure 4.14.
52 Chapter 4: Working point definition
Figure 4.14 Possible choices for the abscissa (x-axis) and ordinate (y-axis) to be displayed in the Model Panel for
spectrum models.
The abscissa can be switched between wavelength and photon energy. The ordinate can be based on the
photon flux (the number of photons incident at each wavelength) or the photon power (the photon power
incident at each wavelength). Both can be shown as such, or integrated from the short wavelength limit of
the spectrum (‘cumulative spectrum’).
There are two versions of white spectra: one has a constant photon flux over the specified wavelength
range (expressed as a total photon flux or ideal current), the other has a constant photon power over the
wavelength range (expressed as total incoming power, in suns or in mW/cm 2; 1 sun = 100 mW/cm2 = 1000
W/m2). Similarly, there are two versions of monochromatic spectra, one with specified total photon flux, and
one with specified total photon power. The black body spectrum is there to please our colleagues more
oriented towards fundamental theory. Of course, the black body temperature is the main parameter (input
Tblackbody or the wavelength of the maximum, according to Wien’s displacement law). As you will observe
when playing with this model, black body radiation extends very far in the infrared wavelength range. To
avoid spending many -mesh points on not-useful wavelengths, one can limit the range of interest.
Figure 4.15 Accessing the initial workpoint panel: press this button on the action panel.
You can save and load all settings of the initial state workpoint into and from a file. These files have
extension .wp2 (from ‘second work point’), and reside in the \def folder.
Both resistances can be switched on/off and for a shunt conductance you can either define its resistance or
conductance.
These external resistances only affect I-V, C-V and C-f simulations (no QE simulations) The voltage which
you apply to the sample (either the working point voltage or the voltage in the iv or C-V simulation) is
interpreted as the internal voltage over the sample, without external resistance. This voltage gets then
recalculated after simulation in order to get the external applied voltage in I-V and C-V simulations. In small
signal simulations, the value of G and C are also recalculated after simulations.
The values of the external resistances are saved in the definition file of the solar cell structure.
Chapter 5: Single shot calculations
The main functionality of SCAPS is to solve the one-dimensional semiconductor equations. In the bulk of the
layers these equations are given by (21) together with the constitutive equations (22).
def
0 q p n N D N A
x x q
J
n U G n
n (21)
x t
J p p
U p G
x t
n n E Fn
J n q x
(22)
J p p E Fp
p q x
Together with appropriate boundary conditions at the interfaces and contacts, this results in a system of
coupled differential equations in (Ψ, n, p) or (Ψ, EFn, EFp). SCAPS numerically calculates a steady state and a
small signal solution of this system. Hereto, the structure is first discretized (creating a mesh). A steady state
workingpoint situation (see §Chapter 4) is calculated and when required a small signal analysis is performed.
5.1.1 Meshing
The first step in every calculation is to discretize the structure. The meshing algorithm of SCAPS provides:
Coarse meshing in the middle of a layer
Finer meshing near the interfaces and contacts
Two discretization points (with identical spatial coordinate) for each interface
The mesh can be optimized during calculation.
The result of the discretization algorithm is illustrated in Figure 5.1.
56 Chapter 5: Single shot calculations
300
250
meshpoint #
200
150
100
50
0
0 2 4 6 8 10
x(µm)
Figure 5.1 Result (right) of the discretization of the structure on the left. (Red: p-type, blue: n-type, green: intrinsic)
The basic algorithm is designed to provide a lot of points in regions where properties experience large
variations (close to interfaces/contacts) and fewer points where the properties are expected to remain fairly
constant (in the bulk). However, when performing simulations with strong gradings, with multivalent defects
or with the IPV-effect this meshing procedure might be unsufficient. Hence, it is possible to optimize the
mesh at every iteration step. This option can be set on the numerical panel as shown in Figure 5.2.
When recalculate mesh is switched on at each iteration the ratio between the following properties at two
adjacent meshpoints are assessed: exp(qΦ/kT), exp(EFn/kT), exp(EFp/kT) (all dimensionless), the
recombination rate R and the generation rate G (both R and G in /m3). When that ratio is larger than the
maximum ratio fmax set on the numerical panel, extra meshpoints will be inserted to enable a better
simulation. If the ratio is smaller than the minimum ratio fmin set on the numerical panel, the meshpoint is
removed. Precautions are taken not to remove too many meshpoints in a row. The ratio of the recombination
and generation rate are only taken into account if q|R| < Rlimit/L or qG < Glimit/L respectively. Here Rlimit and
Glimit are parameters set on the numerical panel (atypically for SCAPS, these parameters are displayed and
saved in units of A/cm2), and L is the total cell thickness. At room temperature, the default value fmax = 1.60
corresponds to a difference of about 12 mV or 12 meV of , EFn or EFp between two adjacent mesh points,
whereas the default value fmin = 1.05 corresponds to a difference of 1.2 mV or meV.
The recalculate mesh settings are all saved in the definition file.
The effect of the recalculation of the mesh is illustrated in Figure 5.3, where the defect occupation of an
amphoteric defect is calculated.
5.1 Calculation roadmap 57
Figure 5.3 Occupation of an amphoteric defect calculated without (left) and with (right) mesh recalculation
DARK
Short circuit (light; 0V)
Workingpoint Situation
Figure 5.4 Getting to the working point and first calculation point…
Every calculation starts at the startpoint. This is a very simple situation, assuming the quasi-Fermi levels
to be zero throughout the structure and no potential drop to be present over the structure. This is used as an
initial guess to get to the equilibrium situation (no illumination, no voltage applied). When the working point
conditions are under darkness, this equilibrium condition is used as an initial guess to calculate the solution
under working point conditions. When illumination is switched on however, the short circuit situation is
calculated in an intermediate step to serve as the next initial guess.
When the difference between two situations is too large, the iteration procedure will diverge. Therefore,
SCAPS implicitly introduces intermediate situations between the equilibrium/working point; equilibrium/short
circuit and the short circuit/working point situation. Hereby gradually increasing the applied bias voltage or
58 Chapter 5: Single shot calculations
the illumination strength. The number of intermediate steps to be taken can be controlled on the action panel,
see Figure 4.1. When divergence occurs, increasing this number can sometimes lead to convergence,
however, this slows down your calculation.
When the working point situation is calculated SCAPS immediately calculates the first calculation point of
the measurements to be simulated (without any sub-steps). For C-f and QE simulations, this first point is
identical to the working point conditions. For I-V and C-V simulations a voltage range has been given,
independently from the working point voltage. SCAPS will then jump to the edge of this voltage range which
is the closest to the working point voltage. IT IS THUS STRONGLY ADVISED TO CHOOSE THE WORKING POINT
VOLTAGE IDENTICAL TO THE STARTING POINT OF THE VOLTAGE RANGE YOU WANT TO SIMULATE.
When performing batch (or recorder) simulations, every calculation is started at the startpoint again. This
is often unwanted, e.g. when gradually increasing the working point voltage it is more logical to use the
previous batch calculation as an input for the next calculation. Varying, voltage, frequency, series/shunt
resistance in a batch calculation, this latter approach can be taken by checking the appropriate checkbox on
the numerical panel.
Each of the measurement simulations will only be performed when its appropriate checkbox is checked.
A voltage/frequency/wavelength range can be set up.
The number of points (limited to 201) can be set up, or a voltage/wavelength increment or the number of
points per frequency decade can be given.
When a C-V simulation is performed you get the I-V simulation for free (no need to specify separately).
When performing I-V simulations under illuminated conditions, one is often only interested in the voltage
range up to the open circuit voltage. However, before starting the simulation Voc is still unknown. Hence, one
can ask SCAPS to stop the I-V simulation under illumination as soon as the current becomes positive by
checking the ‘stop after Voc’-option.
5.3 Numerical parameters 59
Table 5.1 The numerical parameters in SCAPS, with their units as displayed in the Numerical Panel, and their
default values.
numerical parameter name default value unit
Convergence settings
maximum number of iterations 1000 -
clamping of changes between iterations
of electrostatic potential 0.5 kT/q
of electron Fermi level EFn 0.5 kT
of hole Fermilevel EFp 0.5 kT
stop criterion: stop if all updates < stop criterion
of electrostatic potential 0.001 kT/q
of electron Fermi level EFn 0.001 kT
of hole Fermilevel EFp 0.001 kT
Mesh generator settings, see section 5.1.1
recalculate mesh between iterations yes -
maximum number of mesh adaptions at each voltage 10 -
maximum ratio between neighbouring mesh points (fmax) 1.60 -
maximum ratio between neighbouring mesh points (fmin) 1.05 -
generation limit (Glimit), expressed as current density 1.0 A/cm2
recombination limit (Rlimit), expressed as current density 0.001 A/cm2
Calculation of quantum efficiency QE, see section 6.4.7
calculation mode constant Nphot -
monochromatic photon particle flux Nphot in QE calculation 31018 cm-2s-1
monochromatic photon power flux Pphot in QE calculation 0.1 mW/cm2
Defect settings, see section 3.6.3
number of discretization levels for distributed defects 7 -
width of tail-like energy distribution in multiples of Echar 7.0 Echar
width of Gaussian energy distribution in multiples of Echar 6.0 Echar
Tunnel settings, see section 3.9.2
minimum height of bulk tunnel barrier 2.0 kT
choice of tunnel mass min of -
adjacent
layers
allow band-to-band tunneling no -
allow intra-band tunneling no -
allow tunneling to interface defects no -
allow tunneling to contacts no -
Update of metastable occupation, see 3.7.4 -
use clamping in iteration of occupation fmetastable no -
maximum number of iterations 250 -
maximum relative error 0.001 -
Batch and Recorder calculations, see sections 7.4 and 8.2
to calculate work point, start from previous batch result yes -
maximum V for the recording of solar cell characteristics 2.0 Volt
minimum V for the recording of solar cell characteristics 0.02 Volt
Since SCAPS 3.3.02, version august 2015, the numerical parameters of Table 5.1 can be set back to their
default values by clicking a button in the Numerical Panel. When saving a problem as an all SCAPS file
60 Chapter 5: Single shot calculations
(extension .scaps), or as a .def file from within a script, all numerical parameters are saved. When saving as a
.def file in interactive mode, the numerical parameters are only saved when their value differs from the
default.
SCAPS performs a lot of calculations any time you click the ‘calculate’-button. Your job as a user is to
analyse those results. Fortunately there is a lot of help. The analysis-panels can easily be accesed from the
action panel or any other analysis panel, see Figure 6.1.
Figure 6.1 Navigating to the resuls from the action panel (left) or any other panel (right)
Several options are available on every panel: saving data, showing data, saving graphs and plotting the
panel (sending to a printer). There are options available for scaling and zooming of graphs and to show more
info about the plotted curves. Other options are panel specific.
At the bottom of every panel there are two comment windows. The left window is auto-generated and
gives the definition file used with its last saving and the when the simulation was performed. The right
window can be used to write personal comments.
clicking on the -button (left-clicking leads to plotting the entire panel). A pop-up window is
opened which gives a list of all available curves (with a small legend). (Un)checking items in the list leads to
hiding/showing the curve on the panel.
The panel is displayed during calculations, as such it provides a small movie of how the bands evolve
during simulation. When your computer is too fast, you might want to slow down this movie. This is possible
by checking the ‘pause at each step’-option on the action panel, see Figure 5.5. This way the program will
pause at every calculation step and you can move forward by clicking the continue button (on the EB-panel
or the action panel) or abort by clicking the stop-button (on the action panel).
The scaling of the x-axis on all graphs of the EB-panel is the same. Hence, unless using the zooming
option, all graphs display the same part of the structure you simulated.
The defect level energy of the defects present and the transition energy of metastable defects are indicated
on the band diagram graph. When the defect has an energy distribution (e.g. Gauβ or CB tail), the energy Et
as set in the problem definition is displayed. This energy can of course be graded. The colour legend used for
displaying the defect levels can be chosen either grouped according to the defect type (e.g. single acceptor,
amphoteric,…) or grouped according to the charge state of the defect level (e.g. 0/-, 2+,+,…).
On the occupation probability graph the defect level occupation is displayed. One can choose whether to
display the occupation with electrons (default) or holes. For a metastable defect transition the ‘occupation
with electrons’ represents the fraction of defects in the acceptor configuration and the ‘occupation with
holes’ the fraction of defects in the donor configuration. Just as for the band diagram graph a colour legend
can be selected according to defect type or defect charge states. Additionally, a colour code according to the
charge of the states can be chosen. In this case the fraction of defects in a specific charge state are displayed.
When this option is selected, neutral defects and metastable transitions are not displayed however.
When the defect has an energy distribution (uniform, Gauß, tail) the occupation of several (typically 7)
sublevels in this distribution is shown, and the occupation of outermost levels of the distribution, considered
in the calculation, is drawn in a thicker line. You will observe that this occupation diagram can get quite
complicated and not straightforward to interpret. The use of the Curve Info feature (Section 6.3) is highly
recommended in interpreting the occupation graphs: click on a graph, and Curve Info shows you what this
graph represents.
-button.
e.g. the case if SCAPS would find Voc < 0 or Voc > 10 Volt (we do not believe in supermegagigantic good solar
cells…). So, if some of your solar cells parameters do not show up (e.g. you see Jsc and but not Voc and
FF), just extend your voltage range to include Voc, and do not immediately start to harass us with e-mails
about ‘malfunctions’ in SCAPS1.
As already mentioned, when the generation was ‘from file’, no efficiency can be calculated, but the
collection efficiency is given instead.
Figure 6.3 Some examples of visualization of the solar cell parameters Voc, Jsc, FF and . The three upper lines are
for a simulation of simple pn.def with Vstart = 0 and Vstop = 0.2 V, 0.6 V and 0.8 V. The bottom line is for a
measurement.
The I-V graph is by default directly given as an I(V) graph, but the current density J can also be scaled or
subtracted automatically with the short circuit current by changing the current mode on top of the graph
(Figure 6.4). This enables you e.g to perform analyses as discussed in [16] or to study an illuminated I-V -
curve with a logarithmic scaling (this is also possible by clicking the ‘absolute’ checkboxes next to the V and
I axes).
Figure 6.4 Options to display the I-V curves: full custom scaling; fast buttons for linear/logarithmic and absolute
value/algebraic value; options to scale (with Jsc) or shift (over Jsc) all J-V curves.
1
In the first months of 2019 a real avalanche of such help-cries: “help! Voc and FF do not show up: what is wrong with
SCAPS?” arrived at M.B.’s desk. All of them were by your researchers simulating perovskite solar cells with Voc > 1.0 V,
with the standard voltage range setting Vstart = 0 and Vstop = 0.8 V. All of these help requests could have been avoided by
simple inspection of the IV curve and a little bit of common sense — or by reading this recent addition to the SCAPS
Manual (Marc B., 25-3-2019).
6.4 Measurement specific options 65
Only relative dielectric permittivity values on the left/right side of the layers can be chosen by clicking
any of the select buttons on the panel.
The layer which is chosen here determines automatically the choice of the layer-parameters (density of
states and thermal velocity) that are used to calculate an attempt-to-escape frequency ν0. This frequency is
calculated as (24) when the switch is set to electrons or as (25) when it is set to holes. The capture cross
section is determined by choosing a defect(level).
T2
0 0 n vth,n NC (24)
2
0T 2
0 p vth, p NV (25)
2
The numerical derivative is calculated by fitting either a best straight line or a best parabola through a point
and its neighbours. The number of neighbours which have to be taken into account and the order of the
polynomial (straight/parabola) in the middle and at the edges of the simulation/measurement range can be
chosen.
66 Chapter 6: Result analysis
The terminology and parameters used in this panel are those defined in [17, 18]. You can select several
properties as abscissa and ordinate
The depletion width used in the formulas is immediately determined from the capacitance value at a
specified frequency. The dielectric permittivity used to calculate this depletion width and the parameters
governing the numerical differentiation can be specified by clicking the ‘Analysis method’-button, which
opens the ‘Admittance (capacitance) analysis panel’, see §6.4.5.1. When clicking the ‘Data from cell
definition’-button the attempt-to-escape frequency is calculated from the data set on the ‘Admittance
(capacitance) analysis panel’ as well. Its value can however afterwards be changed again. The built-in
voltage which is needed for the calculation of Nt can be chosen temperature dependent according to (26).
N N
Vbi Eg k BT ln A D (26)
NC NV
6.5 Managing measurement data 67
The fourth option (spectral response SR) is a recent addition (august 2017) to serve users that want to
simulate photodetectors. SR is defined as the short circuit current divided by the total incident light power,
and thus is in A/W (this is also mA/cm2 divided by mW/cm2, should you insist). Note that SR = QE/h when
SR is in A/W, QE dimensionless and h in eV. The four last options are sometimes used to derive a band gap
value from QE measurements or simulations.
The QE is calculated by comparing the current at the workingpoint conditions and the current when
adding an additional amount of monochromatic photons. This number of photons can be set on the numerical
panel, Figure 6.9. When both currents are large compared to their difference, it is possible that your
computer makes a numerical error in the subtraction leading to a non-physical QE which is negative or larger
than 100 %.
Figure 6.9 Setting the number of photons for the QE simulation in the Numerical Panel.
In SCAPS 3.3.02, version august 2015, the defaults values displayed in standard units of the SCAPS panels
(thus: cm, mA, mW-based), and were changed to Pphot = 0.1 mW/cm2, corresponding to 0.001 sun, and to
31018 /cm2s, that is for ( = 620 nm, h = 2 eV) photons, also roughly corresponding to 0.001 sun. These
default values could be representative for actual QE measurements with a monochromator set-up.
loaded by clicking the -button, which redirects to the ‘Manage measurements panel’, Figure
6.10.
68 Chapter 6: Result analysis
The area is used to scale the current, capacitance and conductance values to an area of 1 cm2.
Alternative units for the area are supported. Adding any of the words [“cm2”, “cm^2”, “cm2”]; [“mm2”,
“mm^2”, “mm2”] or [“m2”, “m^2”, “m2”] to the area statement will change the unit of the area read to
cm2; mm2 or m2. If none of these words are found the unit of the area is cm2.
In a similar way as for the area, different units for the incident power are supported: mW/cm2;
mW/cm^2; mW/cm2; W/m2; W/m^2; W/m2; mW/m2; mW/m^2; mW/m2; W/cm2; W/cm^2; W/cm2.
The temperature and bias voltage are only used to calculate admittance spectra
The incident power is used to calculate the efficiency.
When the incident power is zero (or when the code-word dark has been found) the I-V parameters (thus:
, Jsc, Voc and FF) will not be calculated.
measurement #1 #2 #3 #4 #5
I-V V (V) I (mA)*
C-V V (V) C (nF)* G (S)* W (μm) Napparent (cm-3)
C-f f (Hz) C (nF)* G (S)*
QE λ (nm) QE (%)
The properties marked with a * will be scaled with the area, when no area has been read, an area of
1 cm2 is assumed.
The depletion width W and the apparent doping density Napparent can be read from the measurement-file,
but they can also be calculated from C and V by SCAPS. This choice is governed by a switch button on
the capacitance analysis panel.
The default units for the measurement data are given in the table. It is however possible to change them. In
order to do this, a line starting with the code-word “units” has to be added in the header. Next to this code-
word a list of properties with their unit can be specified.
Examples: units: I: A V: mV
Units: C: pF V: V G: mS
A list of property-names which can be changed for every measurement type are given in the Table below:
70 Chapter 6: Result analysis
I-V V: I: J:
C-V V: C: G: W: N:
C-f f: C: G:
QE lambda: QE:
Table 6.3 Overview of the properties which can be saved on the EB panel
property remark
x(μm)
Ec(eV) Conduction band energy
Fn(eV) Quasi-Fermi level for electrons
Fp(eV) Quasi-Fermi level for holes
Ev(eV) Valence band energy
n(/cm3) Free electron density
p(/cm3) Free hole density
rho(defect) (/cm3) Charge density in defects
net doping (/cm3) ND - NA
rho(/cm3) p -n + ND - NA + charge in defects
E(V/cm) Electric field
jn(mA/cm2) Electron current density
jp(mA/cm2) Hole current density
jn_tunnel(mA/cm2) Electron tunnel current density
jp_tunnel(mA/cm2) Hole tunnel current density
jtot(mA/cm2) Total current density
generation(#/cm3.s) Generation rate
recombination(#/cm3.s) Recombination rate
cumulative generation Cumulative generation rate (summation from the side where the
(mA/cm2) light is incident, to the opposite side)
cumulative recombination Cumulative recombination rate (once with summation from left to
(mA/cm2) right, and once summed from right to left). Also interface and
contact recombination taken into account
jn1(mA/cm2) Interface recombination current for electrons (left side of the
interface)
jn2(mA/cm2) Interface recombination current for electrons (right side of the
interface)
jp1(mA/cm2) Interface recombination current for holes (left side of the interface)
jp2(mA/cm2) Interface recombination current for holes (right side of the interface)
jn1[with tunnel](mA/cm2) Same as jn1 but now with tunneling
jn2[with tunnel](mA/cm2) Same as jn2 but now with tunnelling
jp1[with tunnel](mA/cm2) Same as jp1 but now with tunnelling
jp2[with tunnel](mA/cm2) Same as jp2 but now with tunneling
js(mA/cm2) Total surface recombination current density
pi(C/cm2) Surface charge density
The cumulative generation is always calculated starting from the side where the light is incident. Thus:
x
Gcumulative x G x dx illumination from left, thus:
0
Gcumulative 0 0 (27)
Gcumulative d Gtotal
or
d
Gcumulative x G x dx illumination from right, thus:
x
Gcumulative 0 Gtotal (28)
Gcumulative d 0
The cumulative recombination is offered in two directions of summation (integration): from left to right, and
from right to left:
x d
Rcumulative,L R x R x dx Rcumulative,R L x R x dx (29)
0 x
The notation 0- means that the left contact is included, and d+ that the right contact is included. At an
interface, Rcumulative takes a discontinuity (jump) equal to the interface recombination. With these definitions,
Rcumulative,LR 0 Rleft contact Rcumulative,LR d Rtotal
(30)
Rcumulative,R L 0 Rtotal Rcumulative,R L d Rright contact
Table 6.4 Overview of the properties which can be saved on the Generation recombination panel when saving the
generation data. All properties are split up per layer, per defect in this layer and per charge state in this defect. (first
index = layer, second index = mechanism, third index = defectlevel (0 is the most positively charged and hence the
closest to the valence band))
property remark
x (µm)
Total recombination Total recombination rate
(#/cm3.s)
SRH recombination Shockley-Read-Hall recombination rate (at defects)
(#/cm3.s)
Direct band-to-band excitation of electron-hole pairs by light (this
Geh (#/cm3.s) equals zero in dark)
Radiative recombination Radiative recombination rate
(#/cm3.s)
Auger recombination Auger recombination rate
(#/cm3.s)
Gross IPV electron effect: direct optical excitation from defect to
IPV Gn conduction band
Net electron generation: IPV Gn + thermal generation - thermal
net Gn recombination
Thermal electron generation (thermal emission of electron from
Gnth defect to conduction band)
Thermal electron recombination (capture by defect of conduction
Rnth band electron)
72 Chapter 6: Result analysis
Table 6.5 Overview of the properties which can be saved on the IV-panel.
property remark
v(V) voltage
jtot(mA/cm2) Total current density
jbulk(mA/cm2) Bulk recombination current density
jifr(mA/cm2) Interface recombination current density
js_n(mA/cm2) Back contact recombination current density
js_p(mA/cm2) Front contact recombination current density
j_SRH(mA/cm2) Defect recombination current density
j_Radiative(mA/cm2) Radiative recombination current density
j_Auger(mA/cm2) Auger recombination current density
Voc (V) Open circuit voltage (only under illumination)
Jsc (mA/cm2) Short circuit current density (only under illumination)
FF (%) Fill factor (only under illumination)
eta (%) Efficiency (only under illumination)
V_MPP (V) Voltage at the maximum power point (only under illumination)
Current density at the maximum power point (only under
J_MPP (mA/cm2) illumination)
Table 6.6 Overview of the properties which can be saved on the AC-panel.
property remark
x (µm)
jn.re(mA/cm2) Real part of the small signal electron current density
jn.im(mA/cm2) Imaginary part of the small signal electron current density
jp.re(mA/cm2) Real part of the small signal hole current density
jp.im(mA/cm2) Imaginary part of the small signal hole current density
jdispl.re(mA/cm2) Real part of the small signal displacement current density
jdispl.im(mA/cm2) Imaginary part of the small signal displacement current density
j.re (mA/cm2) Real part of the small signal current density
j.im (mA/cm2) Imaginary part of the small signal current density
psi.re(#kT/q) Real part of the small signal potential
psi.im (#kT/q) Imaginary part of the small signal potential
Fn.re (#kT) Real part of the small signal electron quasi-Fermi level
Fn.im (#kT) Imaginary part of the small signal electron quasi-Fermi level
Fp.re (#kT) Real part of the small signal hole quasi-Fermi level
Fp.im (#kT) Imaginary part of the small signal hole quasi-Fermi level
Table 6.7 Overview of the properties which can be saved on the CV-panel.
property remark
6.6 Saving results 73
v(V) voltage
C(nF/cm2) Capacitance
G(S/cm2) Conductance
W(µm) Depletion width
Napp(/cm3) Apparent doping density
jtot(mA/cm2) Total current density
jbulk(mA/cm2) Bulk recombination current density
jifr(mA/cm2) Interface recombination current density
jopp_n(mA/cm2) Back contact recombination current density
jopp_p(mA/cm2) Front contact recombination current density
Table 6.8 Overview of the properties which can be saved on the Cf-panel.
property remark
f(Hz) Frequency
C(nF/cm2) Capacitance
G(S/cm2) Conductance
Z.re(ohm.cm2) Real part of the impedance
Z.im(ohm.cm2) Imaginary part of the impedance
Z.magn(ohm.cm2) Magnitude of the impedance
Z.phase(°) Phase angle of the impedance
Table 6.9 Overview of the properties which can be saved on the AS-panel.
property remark
f(Hz) Frequency
C(nF/cm2) Capacitance
Et(eV) Activation energy
-w*dC/dw(nF/cm²) Scaled derivative (see [18])
Nt(cm^-3/eV) Calculated defect density
Table 6.10 Overview of the properties which can be saved on the QE-panel.
property remark
lambda(nm) Wavelength
QE(%) Quantum efficiency
photon energy (eV) Photon energy
Chapter 7: Batch calculations
When you want to explore the influence of one or a few parameters to the solar cell characteristics, you
can take profit of the batch option. When you click ‘Batch set-up’, a panel opens where you can choose
which parameter to vary, over which range, and in which mode (Lin, Log or custom). You can also define
more than one parameter, and vary all of them (in a nested way or ‘simultaneous’). Now, up to nine batch
parameters can be defined, but be modest to start. A batch calculation is launched when ‘calculate: batch’ is
clicked. After a batch simulation all parameters on the panels are reset as they were before the calculation.
Figure 7.1 The batch set-up panel, illustrating most of the options
All (most of the) parameters present in the currently defined structure can be varied. Also working point
conditions can be varied.
When checking ‘simultaneous’, this parameter will be varied together with the parameter above (and
thus in the same number of steps). If ‘simultaneous’ is not checked, the parameters are varied in a nested
way.
Parameters can be varied in a linear, a logarithmic or a custom defined way.
Parameters which are files can be varied by entering a list of file names: generation files, spectrum files,
filter files, grading files, optical capture corss-section files, initial state workpoint files.
Some parameters can only take two values (on/off), e.g. illumination.
When changing any of the illumination parameters (ND filter, spectrum file…) as a batch parameter, the
illumination is automatically switched on.
When changing one of the effective mass parameters, the accompanying tunnelling mechanism is
automatically switched on.
76 Chapter 7: Batch calculations
It is possible to save/load the parameters on the batch panel in a ‘*.sbf’-file which is a standard ASCII-
file.
It is possible to print the batch panel in order to remember your settings.
[SCAPS 3.3.04, october 2016] It is possible to suppress (or not) the updating of the screen (drawing of all
curves in the Energy Bands panel) during batch execution: check the appropriate box in the Batch Set-up
Panel. This is speeding up the batch execution somewhat, though less than we hoped for . This option
can also be set in a script, with a set batch_display_mode command (see Section 10.4.6).
Parameters can be typed or copy/pasted in the right list interactively. Afterwards you should press
‘Update’ to allow SCAPS to interpret your typing work. Data which can not be interpreted as a number
will be ignored.
The values in the left list are the values SCAPS will use. These can be sorted.
Parameter value lists can be saved and loaded. The resulting files are standard ASCII files with extension
‘*.bdf’. This allows you to make custom lists with any other program (MS Excel, Origin, Matlab…) and
load them in SCAPS. The layout of this file is rather tolerant. You just add the parameter values one
below the other. All lines which can not be interpreted as only one number are ignored as being
7.2 Varying entire definition files 77
comment. We strongly recommend the user to add some comments to the file, so that she/he remembers
what data are present in the file, even after not using it for a while.
Some parameters are files rather than numbers, e.g. a spectrum file. Then you have no choice but varying
the parameter in a custom way. Clicking the Set-button will open a panel where you can set a list of files.
Files can be added/removed/replaced. The order of the file-list can be changed. The list of files can be
saved/loaded as well. This is again a standard ASCII files with extension ‘*.bdf’. In the bdf-file you then
have to list the filenames of these files preceded by “file:”. All lines in the bdf-file which are not preceded by
this will be treated as comment. The listed files should be placed in the appropriate SCAPS folder: For
example, the spectra and the generationfiles which you list should be placed in the “spectrum” and
“generation”-file of your SCAPS-folder respectively.
Figure 7.3 Selecting all parameters of the initial state workpoint as a batch parameters; al list of .wp2 files has to be
specified, where each .wp2 file was made by saving the initial state workpoint in a file.
Figure 7.4 Selecting a single parameter of the initial workingpoint as a batch parameter.
You might want to launch a big batch calculation overnight, but when you return next morning, you see
that the calculation stopped at step 3 due to a convergence error which gives a pop-up window that should
be acknowledged. Inventive users have used pieces of wood to keep the ENTER-button pressed (which
solved the problem ), but there exists a better way out. On the numerical panel you can ask SCAPS to write
error messages to a log-file rather than to inform on the screen.
The batch facility is a powerful tool, but it also enables you to let things go wrong. Be aware that you are
more able to set irrealistic parameter values. For example you can set a layer width equal to zero (which will
abort SCAPS ). When varying files, take care that all files exist in the correct folders.
Every new calculation in a batch starts a the starting point, as explained in §5.1.2, this can however be
changed to speed up the calculations. Do take care however to add the voltage/frequency/resistance as the
last (bottom-most) parameter in the batch then.
Chapter 8: Recorder calculations
In a regular single shot or batch calculation, the detailed panels are only available for the last measurement
point. To be able to see them as a function of the batch parameters you can launch a record calculation. You
should first select the properties which you want to keep track of by clicking ‘Record set-up’. By clicking
‘calculate: recorder’, a recorder calculation is launched. Cell parameters are varied according to the Batch
set-up, and all simulations (and only those) are performed which are needed to determine the asked
properties. This means the selected measurements on the action panel are ignored!
If this option is used with a little bit of imagination, you can device all kind of measurement simulations
with SCAPS.
Pleas note carefully that it is also possible to record the cell definition properties! This allows you to see
how SCAPS interpreted the parameters you set (in the cell definition or in the batch). This might be very
helpful when dealing with graded variables. However, in recent SCAPS versions, this is easier done with the
80 Chapter 8: Recorder calculations
green Graph View button in the Cell Definition Panel, once at least one calculation has been done; an
equilibrium calculation, that is at V and in dark, is sufficient, see Section 3.5.7.
You are able to record properties which are not available in the simulations, e.g. the occupation of defect 3
when there is only one defect. Of course SCAPS can not record what is not available. However, this will not
lead to an interruption of the calculations.
Recorder settings can be loaded and saved in a similar way as batch settings, only the extension of the files
are now ‘*.srf’.
The purpose of curve fitting is to vary one or more parameters in the cell definition to obtain a fit between
one or more measured curves and the simulation. The numerical algorithms are taken from [7]. If there is
only one parameter to fit: the golden section search ([7], p. 401). When there are 2 to 9 parameters to fit: the
downhill simplex method, or Nelder-Mead method ([7], p. 408).
Figure 9.1 Curve fitting parameters taken over from the batch set-up; setting the start value to the central value in the
range, or to the actual value in the cell definition.
Addition SCAPS 3.3.03, february 2016. The ‘simultaneous’ option in the batch settings is now also used by
the curvefitter. The first parameter of a group of ‘simultaneous’ parameters is treated as a master curvefit
84 Chapter 9: Curve fitting
parameter, and is varied independently by the curvefitter. The other simultaneous parameters are treated as
slaves of that master; each time the master is given a next value in the curvefitting process, the slave values
follow automatically. Thus, a group of one master + several slaves is treated as only one curvefit variable.
When a parameter was defined as a table list in the batch set-up, you did not have the option to set its
linear or logarithmic character (the batch calculation does not need it, it just takes the values from the list).
But the curvefitter needs to know the linear or logarithmic character. Therefore, you have the possibility to
set the lin or log property of a parameter in the curvefit set-up,when this parameter was defined as a table list
in the batch set-up; even when this curvefit parameter was a slave parameter, you can set its lin/log property
then.
The slave parameter values, that must always follow the master values, are found from interpolation. As
usuall in SCAPS, the lin/log property of a variable affects the interpolation.
To assist you with the curvefit set-up, groups of curvefit variables (thus one master and one or more
slaves) are set in an own color, see Figure 9.2. The first curvefit variable is a group of two thicknesses d1 (the
master) and d2 (the slave); the second variable is a group of 3 variables: NA3 (the master) and n3 and p3 (the
slaves). With these settings, d1 + d2 = d = 1 m for all values of master d1. This is thus a way to vary the
thickness of two layers, while the total thickness remains constant. In the second group, doping-depend
mobilities n(NA) and p(NA) are set. The values of n(NA) and p(NA) are for each value of master NA
interpolated between the table values set in the batch set-up; note that we have set here the lin/log property of
NA to ‘logarithmic’.
Figure 9.2 Example of a batch and curvefit parameter set-up. There are two independent curvefit variables: one is a
group with two thicknesses; and the other is a group with one doping density NA and two mobilities n and p.
Then the measurements should be set, see Figure 9.3. If ‘show’ is clicked, the measurement is shown in
the simulation panel (I-V, C-V, C-f or QE).
Figure 9.3 Measurement set-up in the curve fitter: the measurement type and illumination, the linear/logarithmic
character, and a possible fixed parameter; the (relative) weight of a measurement is available from SCAPS3.3.02 on.
The correspondence between a simulation and a measurement is expressed by the 2 sum (‘Chi square’),
that we define here as:
i i
9.2 Setting up the curve fitter 85
where ycalc is the simulated property and ymeas the measured property (thus: I, C or QE), and only the points i
are considered from the overlap in the simulation and measurement range of x (thus: V, f or ). In these
expressions, the simulations are linearly or logarithmically interpolated at the xmeas values. Our normalisation
of 2 ensures that the 2 of all measurements are dimensionless and are scaled to 1: a fit is good if 2 1. It
also allows that the 2 values of the individual measurements/simulations can be compared and summed.
Please note that the definition Eq. (31) of 2 deviates somewhat from the more standard definition as e.g.
given in the Recipes:
We use tot
2
as the figure of merit of the whole curve fitting action:
wi i2 1
tot
2
i i2 if all wi 1 (or no weights set, SCAPS 3.3.01) (33)
wi n i
i
where i2 are the 2 values of the individual measurements, n is the number of measurements, and wi the
relative weight that the user attributed to each measurement in the Curvefit Set-up Panel (Figure 9.3). In
SCAPS versions 3.3.01, no weight could be set, and Eq. (33) then reduces to its most right-hand member. A
user can interpret the weight wi of measurement i as a parameter for the standard deviation, if all
measurement point in a measurement had the same standard deviation (then w ymeas
2
2 ).
Some numerical parameters should also be set in the curve fitting set-up, see Figure 9.4.
The step size of a parameter variation is relative to the range of this parameter (taking into account the
linear or logarithmic nature of this parameter). Do not expect a perfect curve fitting after 25 steps only: 100
steps or so is more realistic, … but takes more time. The curve fitter walks around though the parameter
space, and stops when any of the stop criteria is met (maximum number of iterations exceeded, or step size
small enough, or total tot 2
low enough). The parameter set then obtained is only written in the cell
definition when the button at the bottom right is clicked. When you visualise the results of the curve fitting
(§9.4), you will be able to judge the quality of the curve fitting, and you will get another chance to write the
‘fitted’ parameters in the cell definition. The curve fitting settings can be saved and loaded, and are also
included in the ‘save/load all SCAPS settings’ actions.
86 Chapter 9: Curve fitting
Figure 9.5 Example of a batch set-up. The settings of d1 and d2 in parameters 2and 3 is such that always d1+ d2 = d =
2 m. Parameters 5, 6 and 7 contain lists that define a relationship n(NA) and p(NA). In this batch set-up panel, there is
no possibility to set the linear or logarithmic character of these variables NA, n, p, as this is not relevant for the batch
calculation. When passing to the curve fitting set-up, you will have to set the lin/log character of these variables.
Parameter 8 is of the on/off type, and thus will not be used as a curve fitting parameter.
The ‘simultaneous’ option in the batch settings is now also used by the curve fitter. A group of
simultaneous batch parameters can also form a group of simultaneous curve fitting parameters (remember
that not all possible batch parameters are allowed as curve fitting parameters: parameters of the on/off type
(e.g. illumination on/off), and parameters that are a list of files (e.g. spectrum files) are discarded by the
curve fitter. Figure 9.5 is an example of a batch set-up, with detailed comments in the figure caption.
The first parameter of a group of ‘simultaneous’ parameters is treated as a master curve fit parameter, and
is varied independently by the curve fitter. The other simultaneous parameters are treated as slaves of that
master; each time the master is given a next value in the curve fitting process, the slave values follow
automatically. Thus, a group of one master + several slaves is treated as only one curve fit variable.
So finally there are two types of curve fitting variables: independent ones, consisting of one variable only;
and groups of dependent ones, consisting of one master and one or more slave parameters. To assist you with
the curve fit set-up, independent variables are set in black as before, but groups of dependent curve fit
variables are set each in an own colour, see Figure 9.6.
Figure 9.6 Curve fitting parameters derived from the batch set-up of Figure 9.5. There are two groups of dependent
variables, the blue group and the pink group. Two parameters (temperature T and ND filter transmission) are
independent ones. The illumination left/right parameter is not in the curve fitting parameter list. You can set the lin/log
character of the variables that were derived from a list in the batch set-up, thus NA, n and p of layer 1.
The slave parameter values, that must always follow the master values, are found from interpolation. As
usual in SCAPS, the lin/log property of a variable affects the interpolation. When a parameter was defined as a
table list in the batch set-up, you did not have the option to set its linear or logarithmic character (the batch
calculation does not need it, it just takes the values from the list). But the curve fitter needs to know the
linear or logarithmic character. Therefore, you have the possibility to set the lin. or log. property of a
9.4 Analysing the curve fitting results 87
parameter in the curve fit set-up, when this parameter was defined as a table list in the batch set-up; even
when this curve fit parameter was a slave parameter, you can set its lin/log property then, see Figure 9.5
When the curve fitter varies d1, it simultaneously varies d2; and when it varies NA, it simultaneously varies
n(NA) and p(NA); here we have given NA a logarithmic character, and n and p a linear character, meaning
that the (NA) data are first ‘plotted’ in a vs. log(NA) plot, and then linearly interpolated. Our example thus
illustrates a way to warrant a constant total thickness over two layers, and a way to take the proper
dependencies of some materials parameters into account.
Figure 9.7 Choices of abscissa (x-axis, top) and ordinate (y-axis, bottom) to visualise the curve fitting results.
The examples shown in Figure 9.8 to Figure 9.11 illustrate the Numos exercise 1 example. The file Numos
CIGS baseline.def first has been simplified to simplified Numos CIGS baseline.def, by taking a single
energy defect level wherever a band of defects was presents: this is speeding up the calculations
substantially. All settings, including the batch settings and the curve fitting settings, are saved in ‘simplified
Numos curvefitting.scaps’. This calculation took 24 minutes on my computer… The iteration was stopped
after 73 steps because the required accuracy ( tot
2
< 10-7) was met. Please note:
do not expect a decent curve fit after e.g. 10 iteration steps only! In the example here, 50 – 60 steps seem
to be necessary (Figure 9.8, Figure 9.9).
do not expect such a very nice fit in a real situation! Here, the measurements were ‘constructed’, that is,
calculated with SCAPS. Thus, an exact fit is possible. With real measurements, it can very well be that 2
never gets below 10-2 or 10-3, meaning that your measurements can not be fitted very well with the
present cell definition.
88 Chapter 9: Curve fitting
it is also clear that you should not exaggerate with the number of parameters and the number of
measurements. Though 9 is (now) the allowed maximum for both, I would recommend to use much
more modest numbers, e.g. 3, certainly to start with.
The recipes state that it is a good idea to start a curve fitting over again starting with the parameters
obtained from a previous curve fitting calculation. You can do so by saving the fitted parameter values in
the cell definition, and running the curve fitting calculation again starting from the ‘actual values’,
possibly with a smaller initial step, and/or with a narrower range for the parameters.
Figure 9.8 Some examples of curve fitting results: Numos exercise 1, with a simplified problem file. The evolution
of all χ2 values with iteration index. When you are satisfied with the results, you can insert the fitted parameter values in
the cell definition by clicking the grey button.
Figure 9.9 Some examples of curve fitting results: Numos exercise 1, with a simplified problem file. The evolution
of the parameters dCdS and NA, CIGS with the iteration index
9.5 Curve fitting résumé 89
Figure 9.10 Some examples of curve fitting results: Numos exercise 1, with a simplified problem file. Walking in the
parameter space to find optimum values for NA, CIGS and Nt, CIGS.
Figure 9.11 Some examples of curve fitting results: Numos exercise 1, with a simplified problem file. The
measurements (dots), the initial calculation (simplified Numos CIGS baseline.def) and the calculation after 73 curve
fitting iterations: I-V (left), C-V (middle) and QE (right).
SCAPS is and has been designed to be a user-interactive program. The most important computer should be
based on neurons instead of on transistors. It is important that the user understands what is physically
happening rather than performing more simulations than (s)he ever could analyse. Nevertheless, SCAPS also
provides the possibility to write a script and run it.
There are several levels of sophistication for the SCAPS script. One can use it to create a personalized
version of SCAPS, to automate actions within the user interface, to use SCAPS in symbiosis with another
program, to run SCAPS without mouse-clicks…
An overview of the SCAPS script language is given in §10.4, its use is explained in the preceding sections.
drawing of all curves in the Energy Bands panel) can be suppressed with a set
script_display_mode… script command.
When no script file was found in the command line, SCAPS remains the same interactive program as it has
always been. A few SCAPS scripts are distributed with SCAPS to serve as an example.
There are several levels of sophistication to use scripts.
Figure 10.1 Running a script from within the SCAPS user interface.
When placing the cursor in an existing line of a script (as shown in Figure 10.2), the components of this
command line (thus: the command, the arguments and the value) are shown in the six blocks at the
bottom of the panel. When typing a new line in a script, the parts of the command line available so far
are proposed in these blocks, and can be selected and placed in the editor box of the script, either by
double-clicking on the desired argument or by pressing F3.
Existing script files can be saved and loaded.
A tip:
When developing a script, frequently insert a show scriptvariable statement. The execution of a
script stops at such statement, and you can inspect the script variables to see if all is going as you intended.
When everything is checked and OK, you can remove or out comment these show statements.
10.4.1 General
The SCAPS-directory, this is where the scaps.exe file resides, is noted as ‘SCAPS\’.
A comment line in a script is a line that cannot be interpreted as a command line. E.g. any line starting with a
punctuation character is treated as comment. You can also add comment at the end of a command line. The
Script Editor will recognize such in-line comment when it starts with a double punctuation, except ‘]]’ (thus
e.g. ‘//’ or ‘!!’ or ‘>>’ are OK …).
All command lines in a script consist of up to three parts:
command argument value
where command and argument are reserved words, and value is free with some restrictions, depending
on the command line. The three components of the command line are separated by whitespace (spaces,
tabs,..), but should be on one line. They are not case-sensitive (upper case or lower case letters do not
matter). The possible commands are given in Table 10.1.
94 Chapter 10: Scripting
plot runsystem
Whilst processing a script, SCAPS internally maintains a few variables, as specified in Table 10.2. The user
can use these variables in set and get commands, and some are used internally in a loop. Also, these
variables are passed to an external dll function, that can be made by the user.
In this list (and in this entire manual) the notation {m} should be replaced by x, y, z, u, v, w, in order to
get script variables like xvector, wvector, uvalue, ny , nv, zname, uindex…SCAPS 3.3.09, december
2020: {m} can be any letter of the Latin alphabet (without accents), thus any letter from (a, b, c, d, e, f, g, h,
i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z). Hence, also variables like na, nm, kindex, pvalue,
qvector, bname… are accepted.
The last argument (load singleshotbatch) is slightly deviating from the others as it does not take a
value. The purpose of this command is to work together with the command get recorder. When load
singleshotbatch is called the batch settings file singleshotbatch.sbf is loaded. This file sets a batch
calculation with one calculation at the working point temperature. So it enables you to perform a recording
of a singleshot calculation. This option is very useful as a lot of properties can only be accessed in the script
through performing a record calculation and taking the value via get recorder. In this way you can
access e.g. the electrical field distribution in the structure and do calculations with it. The temperature in this
batch is set to the working point value when the command load singleshotbatch is called. Hence
when you vary the temperature afterwards you should repeat the command again.
With SCAPS 3.3.10, March 2021, a few more load commands are introduced. They are used to load the
temporary definition and generation files that were generated by the new command math
split_tandem, without having to know the exact names of these files (see next Chapter)
command argument value default-directory
load definitionfile.temporary.tandem_cell a filename scaps\def
load definitionfile.temporary.top_cell a filename scaps\def
load definitionfile.temporary.bottom_cell a filename scaps\def
load generationfile.temporary.tandem_cell a filename scaps\generation
load generationfile.temporary.top_cell a filename scaps\generation
load generationfile.temporary.bottom_cell a filename scaps\generation
action spectrum_defined.frommodel
action spectrum_defined.fromfile
action generationmodel.exponentialfromL
action generationmodel.exponentialfromR
action generationmodel.rectangular
action generationmodel.gaussian
100 Chapter 10: Scripting
action generationmodel.rect_exponentialtails
action generationmodel.rect_gaussiantails
action generationmodel.constantG.generation
action generationmodel.exponentialfromL.generation
action generationmodel.exponentialfromL.decaylength
action generationmodel.exponentialfromR.generation
action generationmodel.exponentialfromR.decaylength
action generationmodel.rectangular.generation
action generationmodel.rectangular.central_position
action generationmodel.rectangular.full_width
action generationmodel.gaussian.generation
action generationmodel.gaussian.central_position
action generationmodel.gaussian.standard_deviation
action generationmodel.rect_exponentialtails.generation
action generationmodel.rect_exponentialtails.central_position
action generationmodel.rect_exponentialtails.rectangle_full_width
action generationmodel.rect_exponentialtails.decaylength
action generationmodel.rect_gaussiantails.generation
action generationmodel.rect_gaussiantails.central_position
action generationmodel.rect_gaussiantails.rectangle_full_width
action generationmodel.rect_gaussiantails.standard_deviation
action spectrummodel.white_constant_flux
action spectrummodel.white_constant_power
action spectrummodel.blackbody
action spectrummodel.monochromatic_constant_flux
action spectrummodel.monochromatic_constant_power
action spectrummodel.white_constant_flux.total_flux
action spectrummodel.white_constant_flux.short_wavelength
action spectrummodel.white_constant_flux.long_wavelength
action spectrummodel.white_constant_power.total_power
action spectrummodel.white_constant_power.short_wavelength
action spectrummodel.white_constant_power.long_wavelength
action spectrummodel.blackbody.total_power
action spectrummodel.blackbody.temperature
action spectrummodel.blackbody.short_wavelength
action spectrummodel.blackbody.long_wavelength
action spectrummodel.monochromatic_constant_flux.total_flux
10.4 The scaps script language 101
action spectrummodel.monochromatic_constant_flux.central_wavelength
action spectrummodel.monochromatic_constant_flux.full_bandwidth
action spectrummodel.monochromatic_constant_power.total_power
action spectrummodel.monochromatic_constant_power.central_wavelength
action spectrummodel.monochromatic_constant_power.full_bandwidth
action generationmodel.nx
action spectrummodel.nwavelengths
SCAPS 3.3.05, december 2016: the spectrum and generation model commands above also work for the ‘initial workpoint’
(metastable defects), e.g. action initialwp.generationmodel.gaussian.central_position
action initialwp.temperature Kelvin
action initialwp.kT Volt or eV
action initialwp.voltage Volt
action initialwp.numberofpoints 2
action initialwp.dark none overrides light
action initialwp.light none overrides dark
action initialwp.generationfrominternalmodel none overrides generationfromfile
action initialwp.spectrumfile filename scaps\spectrum
action initialwp.generationfromfile.attenuation %
action iv.startV Volt
action iv.stopV Volt
action iv.points 2
action iv.increment Volt
action iv.doiv none equivalent to action iv.checkaction 1
action iv.checkaction 0 or 1 1 is the default
action iv.stopafterVoc none
action iv.continueafterVoc none
action cv.startV Volt
action cv.stopV Volt
action cv.points 2
102 Chapter 10: Scripting
scapsgenerationf
ile AB filename),
setting the generation
conditions as should
and loading the
generation file just
created: but now all this
with one command.
set illumination.fromleft no value
set illumination.fromright no value
set qe.photonflux a scalar value #.cm-2s-1
set qe.photonpower a scalar value Wcm-2
set qe.constant_photonflux no value QE calculation mode
set qe.constant_photonpower no value QE calculation mode
numerical set commands (see Numerical Panel, and CV-analysis panel) (new in SCAPS 3.3.02 version 2-10-2015)
set numerical.CV-analysis.layer first layer = 1
set numerical.CV-analysis.side -1=LEFT; +1=RIGHT
set numerical.CV-analysis.points # points in local
neighbourhood
set numerical.CV-analysis.order_middle polynomial order within local
neighbourhood
set numerical.CV-analysis.order_edge polynomial order at edges of
local neighbourhood
set numerical.include_G_mesh_in_SCAPS_mesh 0 = NO; 1 =YES;
set numerical.recalculate_mesh 0 = NO; 1 =YES;
set numerical.recalculate_mesh.points maximum # of mesh points
introduced/deleted per
iteration cycle
set numerical.recalculate_mesh.min_ratio see Numerical Panel
set numerical.recalculate_mesh.max_ratio see Numerical Panel
set numerical.recalculate_mesh.generation_limit see Numerical Panel
set numerical.recalculate_mesh. see Numerical Panel
recombination_limit
set contact.opticalfilter 0 or 1
set contact.workfunction V or eV
set contact.flatband.off no value
set contact.flatband.once no value
set contact.flatband.always no value
layer set commands: replace layer with layer1, layer2, … layer7
set layer.remove S
set layer.duplicate
set layer.split.leftthickness m
set layer.split.rightthickness m
set layer.split.leftfraction -
set layer.split.rightfraction -
set layer.add_default a layer with default
properties is added to
the right of the cell
structure; the
layernumber in the set
layer1… command is
ignored
set layer.name character string
set layer.thickness m
set layer.Eg eV
set layer.chi V or eV
set layer.epsilon -
set layer.NC cm-3
set layer.NV cm-3
set layer.vthn cm.s-1
set layer.vthp cm.s-1
set layer.mun cm2V-1s-1
set layer.mup cm2V-1s-1
set layer.NA cm-3
set layer.ND cm-3
set layer.radiative cm3s-1
set layer.Augern cm6s-1
set layer.Augerp cm6s-1
set layer.absorption.file a filename scaps\absorption
set layer.absorption.A eV-1/2cm-1
set layer.absorption.B eV+1/2cm-1
108 Chapter 10: Scripting
From SCAPS 3.3.07, january 2018: absorption model script commands. Replace layer with layer1,
layer2,… and absorptionA with absorptionB as necessary
set layer.absorptionAfile a filename
set layer.absorptionBfile a filename
set layer.absorptionmodelA.background equivalent with
…background.on
(and alike for the next
5 commands)
set layer.absorptionmodelA.Egstep
set layer.absorptionmodelA.Egsqrt
set layer.absorptionmodelA.power1
set layer.absorptionmodelA.power2
set layer.absorptionmodelA.subbandgap
set layer.absorptionmodelA.background.on -
set layer.absorptionmodelA.background.off -
set layer.absorptionmodelA.background.alpha_background cm-1
set layer.absorptionmodelA.Egstep.on -
set layer.absorptionmodelA.Egstep.off -
set layer.absorptionmodelA.Egstep.alpha_constant cm-1
set layer.absorptionmodelA.Egsqrt.on -
set layer.absorptionmodelA.Egsqrt.off -
set layer.absorptionmodelA.Egsqrt.alpha0 cm-1
set layer.absorptionmodelA.Egsqrt.beta0 cm-1
set layer.absorptionmodelA.power1.on -
set layer.absorptionmodelA.power1.off -
set layer.absorptionmodelA.power1.alpha1 cm-1
set layer.absorptionmodelA.power1.beta1 cm-1
set layer.absorptionmodelA.power1.Eg1 eV or -multiple
set layer.absorptionmodelA.power1.exponent1 -
set layer.absorptionmodelA.power2.on -
set layer.absorptionmodelA.power2.off -
set layer.absorptionmodelA.power2.alpha2 cm-1
set layer.absorptionmodelA.power2.beta2 cm-1
set layer.absorptionmodelA.power2.Eg2 eV or -multiple
set layer.absorptionmodelA.power2.exponent2 -
set layer.absorptionmodelA.subbandgap.on -
set layer.absorptionmodelA.subbandgap.off -
set layer.absorptionmodelA.subbandgap.Ee0 eV
10.4 The scaps script language 109
In the layer defect commands below, give layer and defect their appropriate number, e.g.:
set layer3.defect2.Et 0.6
Note: as of now(7-11-2018) a defect level is not implemented in the SCAPS script: the property you set
will be applied to all levels… not as it should be for multivalent defects …
set layer.defect.remove
set layer.defect.duplicate inserts a defect after
the defect with the
given number, and with
identical properties as
this defect
set layer.defect.add_default adds a defect with
default properties after
the last defect in this
layer; the defect number
in the command is
ignored
set layer.defect.singlelevel no value
set layer.defect.uniform no value
set layer.defect.gauss no value
set layer.defect.CBtail no value
set layer.defect.VBtail no value
set layer.defect.neutral no value
set layer.defect.singledonor no value
set layer.defect.doubledonor no value
set layer.defect.singleacceptor no value
set layer.defect.doubleacceptor no value
set layer.defect.amphoteric no value
set layer.defect.aboveEV no value
set layer.defect.belowEC no value
set layer.defect.aboveEi no value
set layer.defect.Et eV
set layer.defect.Echar eV
set layer.defect.capture_cross_section.electrons cm2
set layer.defect.capture_cross_section.holes cm2
set layer.defect.Ntotal cm-3
set layer.defect.Npeak cm-3eV-1
Metastable defect set commands: replace layer with layer1, …,
set layer.metadefect.E_HE eV
set layer.metadefect.E_EE eV
set layer.metadefect.E_EC eV
set layer.metadefect.E_HC eV
110 Chapter 10: Scripting
set layer.metadefect.E_TR eV
set layer.metadefect.aboveEV no value
set layer.metadefect.belowEC no value
set layer.metadefect.aboveEi no value
set layer.metadefect.allowmeta 0 or 1
set layer.metadefect.Ntotal cm-3
interface set commands: replace interface with interface1, interface2, …
interface6
set interface.name character string
set interface.IBtunneling.off no value
set interface.IBtunneling.on no value
set interface.IBtunneling.me --
set interface.IBtunneling.mh --
interface defect set commands: replace interface with interface1,… and IFdefect with
IFdefect1, IFdefect2, IFdefect3
set interface.IFdefect.remove
set interface.IFdefect.duplicate as for bulk defects
set interface.IFdefect.add_default as for bulk defects
set interface.IFdefect.singlelevel no value
set interface.IFdefect.uniform no value
set interface.IFdefect.gauss no value
set interface.IFdefect.CBtail no value
set interface.IFdefect.VBtail no value
set interface.IFdefect.neutral no value
set interface.IFdefect.singledonor no value
set interface.IFdefect.singleacceptor no value
set interface.IFdefect.abovehighestEV no value
set interface.IFdefect.aboveEVleft no value
set interface.IFdefect.belowlowestEC no value
set interface.IFdefect.aboveEileft no value
set interface.IFdefect.aboveEiright no value
set interface.IFdefect.aboveEiGap no value
set interface.IFdefect.Et eV
set interface.IFdefect.Echar eV
set interface.IFdefect.Ntotal cm-2
set interface.IFdefect.Npeak cm-2eV-1
10.4 The scaps script language 111
get incidentlightflux.all_internalwavelengths.just_inside_cell
get incidentlightflux.all_userwavelengths.just_outside_cell
get incidentlightflux.all_userwavelengths.just_inside_cell
get SCAPSinputfile.generation
get SCAPSinputfile.filter
get SCAPSinputfile.absorption
get SCAPSinputfile.grading
get SCAPSinputfile.optcapt_n
get SCAPSinputfile.optcapt_p
get measurement.iv In the same way, you can now
get measurement.cv also get a measurement. It
places the last calculated I-V,
get measurement.gv C-V,… measurement in the
get measurement.cf vectors specified (if none
114 Chapter 10: Scripting
From SCAPS 3.0.02 on (may 2011), the scalar cell parameters that are available in set are made available
in get. When your cell has graded properties, the parameters that you can set or get relate to the ‘pureA’
material (when grading is a function of composition) or to the left side of a layer (when grading is a function
of position) (see the SCAPS2.8 add-on manual on grading). The units and remarks are as for the
corresponding set commands.
get contact.opticalfilter.value
SCAPS 3.3.10, March 2021: you can also get the optical contact filter property T() or R() and place it
directly into scriptvectors ( in nm in the first scriptvector, T or R in % in the second). This can be at all
internal values (the values where the spectrum was specified), or at a specified user list of values (then
interpolation between the internal values at each user is used). Examples:
get layer.mup
defect get commands: replace layer with layer1, …, and defect with defect1, defect2 or
defect3
returns an integer that encodes for single, uniform,
get layer.defect.energydistribution
Gauß, …
returns an integer that encodes for neutral, single
get layer.defect.chargetype
donor, ….
returns an integer that encodes for above EV, below
get layer.defect.referencelevel
EC, above Ei
get layer.defect.Et
get layer.defect.Echar
get layer.defect.capture_cross_section.electrons
10.4 The scaps script language 117
get layer.defect.capture_cross_section.holes
get layer.defect.Ntotal
get layer.defect.Npeak
get layer.metadefect.E_EE
get layer.metadefect.E_EC
get layer.metadefect.E_HC
get layer.metadefect.E_TR
get layer.metadefect.Ntotal
get layer.metadefect.allowmeta
About the Script and grading: The SCAPS script does not fully support grading, as of now (1-9-2013,version 3.2.01). The
properties that you set or get are either the property of the ‘pure A material’ (composition y = 0) if the property is not
graded, or graded as a function of composition y, or the property at the left side of the layer, if the property is graded as a
function of position x. You cannot access or set any other grading property (thus e.g. the value of the pure B material,
bowing parameters, characteristic exponential decay lengths…). However, from SCAPS 3.2.01 (2-9-2013) on you can set
a grading file for all the properties above that can be graded. The grading profile for this property is then automatically
set to ‘graded from file’. To do so, use e.g.
set layer1.Eg.file mypersonal_Eg_gradingfile.grd
or: set layer3.composition.file myfavourite_composition_gradingfile.grd.
The extension .grd is necessary, and the program assumes that the file resides in the …/grading subdirectory, unless you
specify a full file path. (And make sure that the file exists and can be found and read correctly: do a single shot
calculation before you launch complicated scripts ).
interface defect get commands: replace interface with interface1,… and IFdefect with
IFdefect1, IFdefect2, IFdefect3
returns an integer that encodes for single,
get interface.IFdefect.energydistribution
uniform, …
returns an integer that encodes for neutral, single
get interface.IFdefect.chargetype
donor, …
returns an integer that encodes for above EV left,
get interface.IFdefect.referencelevel
above highest EV, below lowest EC, …
get interface.IFdefect.Et
118 Chapter 10: Scripting
get interface.IFdefect.Echar
get interface.IFdefect.Ntotal
get interface.IFdefect.Npeak
get interface.IFdefect.capture_cross_section.electrons
get interface.IFdefect.capture_cross_section_holes
get interface.IFdefect.tunneling.on
get interface.IFdefect.tunneling.off
get interface.IFdefect.tunneling.me
get interface.IFdefect.tunneling.mh
Some action commands and some other set commands now also have their corresponding get command
get action.Pin.from_lamp
get action.Pin.after_cutoff
get action.Pin.after_cutoff_and_ND
get action.Jideal.in_genfile
get action.Jideal.after_attenuation
get action.initialwp.generationfromfile.attenuation
10.4 The scaps script language 119
get external.Rs
get external.Rsh
get external.Gsh
get internal.reflection
get internal.transmission
get numerical.qe.photonflux
get numerical.qe.photonpower
The command get recorder gets the data from the record results, and hence allows to access almost
any property in script mode. The recorded property is selected by the value of the script variable mode (the
first property in the record setting list is accessed when mode = 0, the next when mode = 1…). If the
recorded property is a scalar value as a function of the batch calculation (e.g. the open circuit voltage) the
abscissa consists of the numbers of the batch calculations. If the recorded property is a vector (e.g. the
conduction band profile) the abscissa value is the mesh. In this case only the recorded vector of the last batch
calculation is copied to the script variable. In this view, performing a batch with only one calculation using
load singleshotbatch is very recommended, see §10.4.2.
dC B
math differentiate ABC A B . Vector operation
dB
math interpolate aAbB When A is considered as a function of
B, thus Ai = A(Bi), it returns by
interpolation a = A(b)
SCAPS 3.3.03, february 2016. Four more interpolation functions: interpolate. linlin,. linlog, .loglin and. loglog
math interpolate.linlin aAbB Identical with math interpolate
math interpolate.linlog aAbB First “plot” data in a A vs. log(B) plot.
Then apply math interpolate
math interpolate.loglin aAbB First “plot” data as log(A) vs. B
Then apply math interpolate
math interpolate.loglog aAbB First “plot” data as log(A) vs. log(B)
Then apply math interpolate
math closestindex iaA Returns the index i for which the
element Ai is closest to a
math extract ABcd c and d are indices. The elements c up
to and including d of vector B are
copied into vector A, that now gets
dimension d-c+1; the previous
contents and dimension of A is lost.
The operation can be ‘in place’: A=B is
allowed. This function is useful to pick
out the information of one layer from
the full x-dependence, when the
indices c and d are obtained with get
layer.leftindex and get layer.rightindex
.
math increment i The index i is incremented with one.
When i is one letter from {x, y, …,
w}, the index is interpreted as xindex,
yindex,…, or windex. But you can also
use loopcounter, maxiteration, status,
mode, or one of the words xindex…
written in full.
math decrement i The index i is incremented with one. i
is a SCAPS script index, see the above
statement for the valid format.
10.4 The scaps script language 123
math sum aA
a Ai
i
n A 1
1
math average aA a
nA
Ai
i 0
math median aA a A i n A 2
math product aA a Ai
i
1
a Ai
nA
math geometricaverage aA
i
math chi_square aBC where B contains Xmeasured and C
DE contains Ymeasured; and D contains
Xcalculated and D contains Ycalculated. Then
chi_square is calculated as:
ymeas ycalc
2
2 i The sum
ymeas
2
i
is taken at the measurement points
xmeas,i that fall within the range of the
calculated xcalc points. ycalc is linearly
interpolated between two calculated
points xcalc,j and xcalc,j+1 around the
measured point xmaes,i. Yhe 2 sum is
normalised: dimensionless, and should
ever become small compared to 1.
math chi_square_log The same as chi_square but first the
logarithm of (the absolute value of) all
ymaes and ycalc is taken.
math push ABC A = [B , C] A is a concatenation of B
and C. B is placed on top of C
math constant ABc A = c; Watch out: c is a scalar, A
gets the same length as B. B is only
used to set the length of A. AAc is
allowed as well.
math linear AB A = [1, 2 ,3…]; A gets the same length
as B. B is only used to set the length of
A. AA is allowed as well.
124 Chapter 10: Scripting
math rangeLin A The first point A[0] and the last point
A[nA-1] of the vector A are
conserved. The points in between are
scaled in a linear way between those
end points.
math rangeLog A The first point A[0] and the last point
A[nA-1] of the vector A are
conserved. The points in between are
scaled in a logarithmic way between
those end points.
math characteristics.eta aBC Vector B contains the voltage data,
vector C the current density data of a
math characteristics.Voc
calculated IV curve. Scalar a will then
math characteristics.Jsc contain or Voc or Jsc or FF or Vmpp or
Jmpp (V and J at the maximum power
math characteristics.FF
point). If you acquired the IV curve
math characteristics.Vmpp with get iv, then you can better use
get characteristics.eta…
math characteristics.Jmpp
(the scalar that should receive e.g. in
get.characterisctics can have the
general SCAPS script format, like
xvalue, yvector[0],
zvector[loopcounter]…).
Here, with math.characteristics, the
result can only be stored in the scalars
xvalue, yvalue,…. However, this
function is useful if the IV curve was
processed in the script (from series or
parallel connection, all kinds of
corrections made to IV curves, …)
math characteristics.all ABC Works the same as the previous
commands, but the results are all
stored in vector A. The order is fixed:
A[0] = Voc, A[1] = Jsc, and then FF, ,
Vmpp and Jmpp.
The five math commands below are special: they require a composed value. The first part of the fill… commands is
a vector: a letter from {x, y, z, u, v, w} (noted here as A), that stands for the corresponding script variable xvector,
yvector,…. The next parts of the value must be separated by whitespace (space of tab) from the first part and from
each other. They can be a number, or a SCAPS script variable. The first part of the force_in_range command is a
scalar: : a letter from {x, y, z, u, v, w} (noted here as a), that stands for the corresponding script variable xvalue,
yvalue, … The format of the series and parallel commands are explained below.
math fillConstant A constant n n is the number of
points
math fillLinear A startvalue stopvalue n n is the number of
points
fillinear.FixedNumberOfPoints
Examples:
math fillinear x 1 3 5 results in xvector = [1.0,1.5, 2.0, 2.5, 3.0]
math fillinear.fixednumbeofpoints y 2 8 4 reults in yvector = [2, 4, 6, 8]
math fillinear.fixedincrement z 1 5 2.0 results in zvector = [1, 3, 5]
math fillinear.fixedincrement z 1 6 2.0 results in zvector = [1, 3, 5, 6]. Note that the last
increment is not the ‘fixed’ one (=2), but that the stop value (=6) is respected instead.
math filllogarithmic u 10 1000 5 results in uvector [10, 31.6, 100, 316, 1000]
math fillogarithmic.perdecade v 10 2000 2 results in vvector [10, 31.6, 100, 316, 1000,
2000]
126 Chapter 10: Scripting
math split_tandem_cell.adapt_contact_filters n1 n2
math split_tandem_cell.adapt_generation n1 n2
math split_tandem_cell.with_electronically_inactive_parts n1 n2
The summary of their working is:
o the actual cell problem is saved as temporary tandem cell definition file.def
o this “tandem cell” is split between layers n1 and n2 into a top cell and a bottom cell (n1 +1 =
n2 is required)
o some strategy for this is applied (e.g. ‘adapt generation’).
o these single cells are saved as temporary top cell definition file.def and temporary bottom
cell definition file.def.
o when applicable, other relevant files (filter files, generation files) are saved with an
appropriate ‘temporary’ name.
default = 25.
loop maxerror min=1E-8; max=1E25;
default=1E-5
Figure 10.3 The script variables panel. When the panel is displayed after a show scriptvariables
command, the script is interrupted and can now be aborted or continued. SCAPS 3.3.09, december 2020: a few changes
since up to 26 index, value and vector variables could need to be shown: only the variables that were addressed in the
script (either as input or output) are shown, the others are hidden; there are left and right arrows to let you scroll if there
were more than 6 variables of a type (index, value or vector) that were addressed.
128 Chapter 10: Scripting
plot drawversusindex A Plot the index i on the abscissa and Ai on the ordinate
plot clear Clear the plots drawn by the script. Identical to clear
plot
Whenever a plot draw command was met, a graph is added to the ‘script plot panel’, see Figure 10.4.
This option allows you to make personalized graph of any data in SCAPS . This panel is shown immediately
after the script calculation is finished and can also be accessed from the action panel.
Traditionally (SCAPS 3.3.08), only one user dll is recognized in SCAPS, named SCAPSUserFunction.dll.
With SCAPS 3.3.09, a second user dll is recognised, named SCAPSUserFunction26.dll.
The format of these commands allows possible later addition of more dll’s).
This dll is the method that SCAPS is using to implement two-way communication with the user. When you
do not (want to) know how to write an own program and make a dll (dynamic link library) of it, you are
restricted to use only the SCAPSUserFunction.dll and/or SCAPSUserFunction26.dll as delivered with
SCAPS, or not to use loops in a SCAPS script. The following information is for SCAPS users with programming
skills. By writing their own SCAPSUserFunction.dll, they now can realize the following (in the formulation
of an external SCAPS user):
“I would need the possibility to do a simulation, evaluate the result with an external program and let it
adjust the problem definition for the next simulation, do a simulation, and so on...”
… well, this external program should be named SCAPSUserFunction, and be present as a dll file in the
scaps/lib directory. When implemented in C or C ++, this function must comply with the function definition:
int DLLIMPORT SCAPSUserFunction (int mode, double *xvalue, double
*yvalue, double *svector[6], int sn[6], double *looperror, char
*filename);
and:
int DLLIMPORT SCAPSUserFunction26 (int mode, int sindex[26], double svalue[26], double
*svector[6], int sn[26], double *looperror, char *filename);
130 Chapter 10: Scripting
The keyword DLLIMPORT might be dependent on the development environment; here it is for LW/CVI
of National Instruments.
The meaning of the other items is:
SCAPSUserFunction: the name of the traditional dll. The user must provide a SCAPSUserFunction.dll
and SCAPSUserFunction.lib with this name, in the scaps/lib directory. This function only accepts and
possibly changes the SCAPS script variables xvalue, yvalue, xvector, yvector, zvector, uvector, vvector
and wvector; and also mode, looperror and filename… but no indices are passed (such as xindex,
yindex), and no other values of vectors. SCAPS 3.3.09: this function still works, and is implemented as
explained below, even if there are now more variables defined
SCAPSUserFunction26: the name of the new dll. It passes all scriptvariables: index, value and vector
with letter a-z. At the moment (17-12-2020), this function is empty, it returns without having done
anything.
int SCAPSUserFunction(): the function should return an integer value, indicating the success of the
function evaluation. SCAPS interprets 0 as ‘success’ and a negative value as a failure. This value is
stored in the script-variable status, and shown in the error output (to screen or in the SCAPS error
logfile).
int mode: an integer that can be used to implement several strategies in one dll function. In the example
delivered with SCAPS, mode = 1 or 2 means ‘find a root’ (e.g. find some NA such that Voc = 0.50 V), and
mode 3 or 4 means ‘find an extremum’ (e.g. find some Nt such that is maximal).
double *xvalue, double *yvalue: (pointers to) two scalar values, passed to the function by reference, such
that a new value of them can be returned by the function. Note with SCAPS 3.0.02: though there are now
6 scalar values xvalue, …, wvalue, only xvalue and yvalue are passed to the SCAPS dll. Also, the new
integer variables xindex, …, windex, are not passed to the dll: thus, this dll remains compatible with
earlier SCAPS versions.
double *svector[6]: array of (pointers to) one dimensional arrays, with dimensions specified in sn[].
These vectors correspond to the vectors xvector (=0), yvector (=1), zvector (=2), uvector (=3),
vvector (=4), wvector (=5). These arrays can get new values in the function that is returned to SCAPS.
int sn[6]: the dimension of the above vectors. These are passed by value, not by reference: their value
cannot be updated and returned by the function.
double *looperror: a pointer to a scalar variable, that can be updated and returned by the function. In the
SCAPS script processor, ot is treated as the internal looperror variable. Returning its value by
SCAPSUserFunction.dll is the only way to change looperror in a loop. Since the script processor only
checks if |looperror| < maxerror, so you can also return a negative value here.
char *filename: a pointer to a string variable of max. 256 characters. The SCAPS script processor will
treat it as a filename, that can be used to set e.g. a spectrum file, a generation file, a filter file,… with the
set command.
To set up your own dll, you can use other variable names; however, the type, size and order of the
variables must be exactly as specified here. Those not using C or C ++ should use variable types of the same
size (in bits) as the C types int, double, char, pointer.
The users who want to develop their own dll, or to modify the existing dll (that is easier to start with
), should ask us for the source code: SCAPSdll.c and SCAPSdll.h.
where systemcommand is something that is recognized by MS-Windows as a valid command. These can
be .exe files, .bat files or WINDOWS commands. Here you can run any of your own programs (extension
.exe; the arguments on the command line can be included), or any of your batch files (extension .bat).
Examples are:
runsystem myownopticalprogram.exe inputfile1 inputfile2 outputfile
runsystem myownwindowsbatchprogram.bat
runsystem print ivresults.iv
(in the last command, it is likely that Windows will need to know the full path and not only the filename…).
11.1 Introduction
The SCAPS application discussed in this document makes use of:
SCAPS version 3.3.10 of March 2021, or more recent.
The following files:
Definition files that must be present in the folder [your SCAPS]\def:
any tandem cell (thus, a pnpn sequence, or an npnp sequence. Examples of these, delivered
with SCAPS are:
test tandem cell scripts illum from left.def
test tandem cell scripts illum from right.def
o Script files that must be present in folder [your SCAPS]\script:
test tandem split generation.script
test 2 adapt filters varying Rb.script
test tandem split fake top and bottom.script
11.3 Basic strategy: calculate top and bottom cell separately, place them in series afterwards
For the time being (and perhaps a little bit longer), those wanting to study tandem cells should remedy
themselves with tricks: you can calculate the top and bottom cell separately, and series connect them yourself
in an external program or with a SCAPS script. Of course, this is by far not as user friendly as a direct
calculation within SCAPS...
11.4 Splitting the tandem cell into top and bottom cells 133
In the study of the partial cells (thus, top and bottom) the user should take care that these partial cells are
studied under the illumination conditions they have in a tandem cell configuration. There is now script
support for:
splitting a tandem cell configuration into a top and bottom cell
three strategies to study these partial cells under “tandem-light conditions”
making the electrical series connection of these partial cells to obtain the IV characteristics of a 2-
terminal tandem cell.
11.4 Splitting the tandem cell into top and bottom cells
Splitting a tandem cell configuration manually into a top cell and a bottom cell is easy but a little bit
laborious, and maybe boring should you have to do it regularly. Therefore, this action is now automated with
the script command:
math split_tandem_cell.only_split n1 n2
This script command first saves the actual cell problem in a file named temporary tandem cell definition
file.def. Then, this “tandem cell” is split between layers n1 and n2 into a top cell and a bottom cell (with the
requirement n1 +1 = n2). SCAPS takes account of the side where the light is incident. Thus, when light is
incident from left, the top cell will contain the original layers 1 to n1, and the bottom cell the original layers
n2(=n1+1) to Nlayers. And similarly for light incident from the right. It might be redundant to ask the user to
specify two values n1 and n2, but it forces her/him to think well about the tandem cell configuration. When
the parameters n1 and n2 are omitted (or when only one is specified), SCAPS will make an own guess of where
to split the tandem, and notify you about this with a warning. The tandem split strategy of SCAPS is simple: it
starts looking to the doping type of the leftmost layer, and goes on to the right. When a second type change
(np or pn) is met, the split position is placed there. This algorithm will be fooled when truly intrinsic
layers are present (thus, where the shallow ND = NA, exactly), or when the doping is modelled by charged,
not-too-deep defects instead of by ideally shallow donors/acceptor. Therefore, it is better that you express
your ideas on the split position (between layers n1 and n2), than to leave it to SCAPS.
The command … .only_split just does the splitting, and nothing more. The other tandem split
commands (see below) also implement a strategy about the illumination/generation in the partial cells. In all
cases, the partial cell definitions are saved in your [SCAPS]\def directory, with names temporary top cell
definition file.def and temporary bottom cell definition file.def. You can use these def files to express your
own ideas/strategies on the illumination/generation conditions. To load these files, you can use e.g.
load definitionfile temporary top cell definition file.def
but then you will have to remember (or copy) the exact filename of the partial cells. Instead, you can use:
load definitionfile.temporary.tandem_cell
load definitionfile.temporary.top_cell
Since the script editor is proposing the correct form of these commands, the risk of mistyping is minimised.
the value parameters of the math split_tandem script command), and when light is incident from the
left, then
Gtop x Gtandem x 0 x xt
(34)
Gbottom x Gtandem x xt 0 x d tandem xt
where dtandem is the total thickness of the tandem cell. These generation profiles are saved as files temporary
top cell G(x).gen and temporary top cell G(x).gen in the [SCAPS]\gen directory. These generation files are
however not stored in the definition files for the top and bottom cells, as SCAPS definition files do not store
information on illumination conditions.
To use the definition and generation files of a partial cell (top or bottom), one thus should load the definition
file and the generation file of that partial cell, and set the illumination condition to ‘Directly specify G(x)’ in
the SCAPS action panel. In a script, this is automated as shown in the example below, for the top cell:
load definitionfile test tandem cell scripts illum from left.def
// we want the generation calculations to be done based on an incident spectrum
action lightflux_specified
math split_tandem_cell.adapt_generation 2 3 // the tandem split is between layers 2 and 3
action light
// to use the generation profiles constructed by split_tandem, the generation should be directly
specified from file
action generation_specified
load definitionfile.temporary.top_cell
load generationfile.temporary.top_cell
(note that there is a script command to load a generation file for tandem, top or bottom cell, as there was such
a script command for loading def files).
The generation conditions for the partial cells will be exact within the SCAPS optical model. They are only
valid for the spectrum and intensity that was set in the Action Panel, and for the optical properties of the
contacts (R() or T() filters), and for the internal reflection at the front side, and for the optical absorption
(x, ) and thickness that was set in each layer. However, this advantage of exactness has its price: should
the user, while studying or optimising a partial cell, change any of the optical relevant parameters (a
thickness or band gap of a layer is enough), the generation profile is no longer exact, and the above
procedure should be repeated: start from the tandem, set the generations Gtandem(x), Gtop(x) and Gbottom(x), and
split the tandem.
Some users have developed much more elaborated optical models for the calculation of G(x) profiles then
the SCAPS optical model, that is rather coarse. Their optical calculation goes through own or dedicated
programs, and a generation profile file calculated in this way can be passed to a SCAPS script manually or
automated e.g. via MatLab. This is definitely a much more sophisticated and (optically) exact way to do
tandem simulations – but it is more laborious…
The internal optical model of SCAPS was discussed in Section 4.3.1 and resulted in Eq. (15), that we repeat
here in Eq. (35) for reading comfort.
1 Rback exp 2 d x
N phot , x N phot0 Tfront exp x (35)
1 Rback Rint exp 2d
This equation is for a light flux Nphot0() incident from the left, on a cell with a uniform, but wavelength
dependent optical absorption constant (x, ) = (). Tfront() is the wavelength dependent transmission at
the front contact (here: left), and Rback() is the wavelength dependent reflection at the back contact (here:
right). Rint is the internal reflection at the front contact (here: left); no wavelength dependence for Rint is
implemented in SCAPS. Of course, SCAPS takes account of different () functions in the different layers (set
by an absorption file or an absorption model), and correctly treats grading, thus the possibility that within a
layer, is also position dependent: (x, ). This extension is rather trivial: simple exponential forms are
replaced with a form with an integral in the exponent:
x
exp x exp x, dx
0
(36)
d
exp d x exp x, dx
x
In this discussion, we will go on with the simple formulation of Eq. (35), in order not to obscure the
argumentation by complicated equations. The treatment below will only be exact when there is no internal
reflection in the cell, thus Rint = 0. Then Eq. (35) reduces to Eq. (37) below
N phot , x N phot0 Tfront exp x 1 Rback exp 2 d x (37)
This Eq. (37) holds for all x in the tandem cell, thus 0 x d. Assume that the tandem split is at position xt,
thus that the top cell is ranged in 0 x xt, and the bottom cell is ranged in xt x d, see Figure 11.1.
The light flux in the top cell can now be written as (with d = xt + d’, d’ is the thickness of the bottom cell):
N phot , x N phot0 Tfront exp x 1 Rback exp 2d exp 2 xt x
exp 2 xt x
N phot , x N phot0 Tfront exp x 1 Rback (38)
Thus, we can treat the top cell on its own (thus without bottom cell attached to it), when we keep Tfront as is,
and replace Rback() with R’back() as given in the third equation (38).
In the same way, we can write the light flux in the bottom cell (with x’= x - xt ) as:
xt x d or 0 x d
N phot , x N phot0 Tfront exp x exp xt 1 Rback exp 2 d x
(39)
exp x 1 Rback exp 2 d x
N phot , x N phot0 Tfront
Tfront exp xt
Tfront
Thus, we can treat the bottom cell on its own (thus without top cell attached to it), when we keep Rback as is,
and replace Tfront with T’front as given in the fourth equation (39).
Note that this strategy fails when Rint 0. And of course, SCAPS will not use the simple exponential forms
of Eqs. (38) and (39),but the more elaborate forms of Eq. (36). The new back contact reflection R’back() of
136 Chapter 11: Script support for simulating multi-junction (tandem) cells
the top cell alone is saved in [SCAPS]\filter as file temporary top cell back reflection.ftr and included in
temporary top cell definition file.def; and similarly for the new front transmission T’front of the bottom cell.
Tfront()
Rback() tandem cell
0 xt d x
Tfront()
R’back() top cell
0 d - xt x’
T ’front()
Rback() bottom cell
Figure 11.1 Splitting a tandem cell into a top cell and a bottom cell. The top cell has the original Tfront(), but an
adapted R’back(). The bottom cell has an adapted T ’front(), but the original Rback().
These optical conditions for the partial cells (thus the filters T’front and R’back()) will be exact within the
SCAPS optical model. They will remain valid when the settings of the spectrum and intensity in the Action
Panel are changed (new spectrum model parameters, new spectrum file, new settings for neutral density filter
and spectrum cut-off filters), and this is an advantage over the previous strategy (‘adapt generation’). It could
be a good idea to set the spectrum to a simple, smooth model (e.g. monochromatic with constant photon flux
at all wavelengths) when running the script command split_tandem.adapt_contact_filters
(then you get rid of the peaks and dips that are present in realistic spectrum files – due to our good old sun,
and especially to our good old earth atmosphere). Afterwards, set the spectrum conditions to whatever you
want to study. However the calculated filters T’front and R’back() will have to recalculated when the user is
changing optical properties of the contacts (R() or T() filters), or the optical absorption (x, ) and
thickness that was set in each layer. Also, the method cannot be applied when Rint > 0; however, when the
layers reasonably absorb the light (optical and thickness sufficiently high), the influence of Rint will be
negligible anyway.
11.7 Strategy 3: ‘replace parts of the cell with electronically inactive layers’
This is the strategy that was proposed in a SCAPS FAQ or application note “Assembling a tandem cell from
two single cells in SCAPS”, february 2016. It is now automatised and implemented in the script command
math split_tandem_cell. with_electronically_inactive_parts n1 n2
Now SCAPS does not really ‘split’ the tandem cell, but is setting up a top cell and a bottom cell that both
consist of all layers of the tandem cell.
11.7 Strategy 3: ‘replace parts of the cell with electronically inactive layers’ 137
In setting up the top cell, the layers that belong to the top cell are taken as they are defined. However, the
electronic properties of the bottom cell layers are changed so that they remain optically active, but are made
‘electronically inactive’. Assume that light is incident from the left, so that the top cell is the left part, and the
bottom cell the right part of the tandem. Also assume that the rightmost layer of the top cell (thus the layer
adjacent to the bottom cell) has an effective n-type doping. To render the bottom cell ‘electronically
inactive’, some properties are changed, of all layers of the bottom cell:
1. the layers are made (relatively) heavily doped n-type: the script sets ND = 1019 cm-3 and NA = 101 cm-3.
2. discontinuities in the conduction band edge EC are removed, by setting the electron affinity of all
bottom cell layers equal to the value of the rightmost edge of the rightmost layer of the top cell.
3. the contact velocities Sn and Sp of the right contact are set to Sn = Sp = 107 cm/s; and the flat-band feature
of this contact is clicked on.
4. the layers are given a very high recombination:
all defects are removed
a new defect 1 is set up, with very high efficiency for recombination
this is a neutral defect, single level at mid gap
with n = p = 10-12 cm2, and Nt = 1017 cm-3.
Action (1) ensures that the ‘electronically inactive’ bottom cell does not add an extra pn junction to the top
cell being set-up. Together with actions (2) and (3), it ensures that convergence will (almost) always be
reached: the bottom cell acts more or less as a thick ohmic contact to the top cell. At the same time, nothing
has changed to the optical behaviour of the bottom all: all layers have their (x, ) as set in the tandem
definition, and also Rback() at the back contact remains unchanged. Action (4) ensures that (almost) no
electrons or holes of the eh pair generation in the bottom cell will contribute to the current: they all will
recombine before reaching the top cell or the right contact. Of course this strategy is adapted if the right most
layer of the top cell is p-type, and/or if light is incident from the right side. The partial cells are saved
automatically as temporary top cell definition file.def and temporary bottom
cell definition file.def, as before.
[in our application note of 2016, we called this strategy ‘top cell with fake bottom cell’, ‘bottom cell with
fake top cell’; since the word ‘fake’ has got an utmost unscientific connotation since that time, we now use
the terminology: ‘top cell with optically unchanged but electronically inactive bottom layer’, …].
This strategy is illustrated in Figure 11.2 where the energy band diagrams of the complete tandem cell, the
top-cell-with-electronically-inactive-bottom-cell, and the bottom-cell-with-electronically-inactive-top-cell
are shown, all in equilibrium, this is in dark and at V = 0.
It is clear that this strategy is not an exact treatment of the tandem cell, but it can be a good and very
convenient approximation. The advantages are clear: the top and bottom cell can be studied in arbitrary light
conditions (‘from illumination’ and ‘from generation’; all settings of intensity and spectrum cut-off). Even
more, one can study a sub-cell (top or bottom) with variation of optically important parameters (thickness d,
band gap Eg, optical absorption () of a layer; contact filters Tfront and Rback()) without having to set-up the
top and bottom cells each time again (by invoking math split_tandem_cell…). The drawback is that
it is not so easy to assess the validity of the basic approximation (‘electronically inactive counterparts’). One
will have to check that the result (the calculated IV and efficiency parameters) of the tandem cell are not very
sensitive to the assumptions in this script command (the precise value of the high ND and low NA values in
the above example, the value of the contact Sn and Sp that were used, and especially the assumptions on the
high recombination effectiveness of the ‘inactive counter parts’, especially the value of Nt).
It might make sense to do the vast amount of the exploring work with this strategy of inactive
counterparts, and now and then (and also finally) check with the more rigorous, but less versatile strategies
of adapt generation or adapt filters.
138 Chapter 11: Script support for simulating multi-junction (tandem) cells
Figure 11.2 Top: Equilibrium energy band diagram of a tandem cell, illuminated from the left; the top cell (left part)
is a wide band gap np junction, and the bottom cell is a narrow band gap np junction. Bottom Left: band diagram of the
top-cell-with-electronically-inactive-bottom-cell; the bottom cell behaves electronically as one single p+ layer, but
remains optically active as it was in the tandem. Bottom Right: band diagram of the bottom-cell-with-electronically-
inactive-top-cell; the top cell behaves electronically as one single n+ layer, but remains optically active as it was in the
tandem.
11.8 Connecting the top and bottom cells in series to a 2-terminal tandem cell
We illustrate the script for the tandem cell configuration test tandem cell scripts illum
from left.def, and we work with the strategy ‘adapt filters’. The script could start with:
load definitionfile test tandem cell scripts illum from left.def
// set the illumination conditions, and the parameters of the IV simulation
// (Vstart and Vstop, # points, possibly ‘stop after Voc’…)
// split the tandem, set-up the top and bottom cell
math split_tandem_cell.adapt_contact_filters 2 3
action light // if not already done
// calculate IV of the top cell; store V in vvector and I in tvector (t of “top”)
load definitionfile.temporary.top_cell
calculate singleshot
get iv vt
plot draw vt // IV of the top cell
// calculate IV of the bottom cell; store V in uvector and I in bvector (b of “bottom”)
load definitionfile.temporary.top_cell
calculate singleshot
get iv ub
plot draw ub // IV of the bottom cell
// do the series (tandem) connection
// the first IV curve (top cell) is in (vvector, tvector); the second (bottom cell) in (uvector, bvector)
// the tandem IV result will be placed in wvector (the voltage) and ivector (the current density)
11.9 Accessing the internal optical properties of a cell 139
And the total generation Gtot(x), that is the generation G(,x) integrated over all wavelengths, is a function of
x alone.
All -dependencies are evaluated internally in SCAPS at the wavelengths where the spectrum is defined (from
a file, or from a model). This also applies to the optical absorption () of a layer, and to the contact filter
properties T() or R() when these are taken from an input file: internally, SCAPS does not calculate at the -
values of for example an () file, but first interpolates these values at the -values of the spectrum. Thus,
the internal values meant here are those of the spectrum, but not those of the () … input files. All x-
dependencies are evaluated internally at the mesh points.
Since SCAPS 3.3.10, march 2021, there is script support to get all these properties in script vectors, for
displaying, plotting, manipulation…
One can list these properties as a function of wavelength , either by using all internal wavelengths, or at
all wavelengths listed in a script vector (in nm) (then interpolation is used). When these properties are also a
function of x, one should specify a single x value, either by specifying the mesh index, or by specifying the x-
value directly, in m. Tip: the position or index of the edges of a layer can be accessed by get commands like
get layer3.leftindex aindex or get layer2.rightx bvalue…
One can also list these properties as a function of position x, only by using all internal mesh values of x.
When these properties are also a function of , one should specify a single value in nm.
Examples of such get commands are thus:
get incidentlightflux.all_internalwavelengths.just_outside_cell lo // the
result is in lvector () and ovector (Nphot, just_outside)
get lightflux.all_internalwavelengths.at_position la 2.50 // the internal are set
in lvector, the flux Nphot in avector; this flux is at x = 2.5 m
get contactright.opticalfilter.all_userwavelengths lt // the user should have filled
lvector with the desired wavelengths ; the filter value T() or R() is set in tvector (this depends on the filter
mode, that could have been set (definition file, user interface or script) to transmission or reflection)
get absorption.at_wavelength.all_mesh_positions xa lvalue // the mesh x-values
are set in xvector, the (x) values in avector; these are at the wavelength set in lvalue (in nm)
With these new get commands, the user has more insight and control over the optical conditions in a cell.
11.10.1 Introduction
We present here a few application examples to illustrate the new SCAPS facilities described in the above
sections. The problem we treat is defined in test tandem cell scripts illum from
left.def. It consists of a (relatively) wide band np cell with Eg = 1.8 eV and cell thickness 2.5 m, and a
(relatively) narrow band np cell with Eg =1.1eV and cell thickness 3.5 m. Some cell properties are
summarised in Table 11.1. All layers have the optical absorption model ‘power law’ with exponent n = 1.0,
with 1 = 105/cm, 1 = 0 and with the band gap value Eg of the layer, and no sub-bandgap absorption.
In most cases of multi-junction cells, and also with the .def file under study here, any non-equilibrium
calculation (this is, V 0, or illumination, or both) will lead to convergence failure. Nevertheless, the light
conditions in the cell, Nphot(x, ) and G(x, ) have been calculated correctly, and can be used, before the non-
convergence message pops up. In a script, you can direct these annoying error messages to an error log file
(script command set errorhandling.appendtofile or .overwritefile). You can also
avoid these convergence failures at all by first simplifying the electronic properties of the whole tandem cell
as discussed in section 11.7 above (the optical results remain unaffected, but of course any electrical result is
useless).
11.10 Application examples 141
Table 11.1 Some parameters of test tandem cell scripts illum from left.def.
Figure 11.3 Left: light flux Nphot(x; ) (in #/cm2s) and Right: generation G(x, ) (in #/cm3s) as a function of x (in m),
and for 18 -values from 300 nm (blue curve bottom left) to 1150 nm (green curve on top in the Nphot graph left, but
absent in the G graph right), step 50 nm. The tandem split (this is, between the top cell and the bottom cell) is at x = 2.5
m. The light of the curves 300 nm 600 nm is absorbed almost completely in the top cell (0 x 2.5 m) and
quickly dies out in the bottom cell (2.5 m x 6.0 m). The curves 650 nm 1100 nm shows that light passes
without any absorption through the top cell, and is absorbed in the bottom cell, however less and less complete at longer
wavelengths. The curve for 1150 nm shows that the light passes without absorption through the complete tandem cell,
and does not cause any eh generation at all.
Figure 11.4 Left: light flux Nphot(x; ) (in #/cm2s) and Right: generation G(x, ) (in #/cm3 s) as a function of (in nm),
and for 13 x-values from 0 (red curve top left) to 6.0 m (grey curve bottom right), step 0.5 m. The tandem split at 2.5
m is the yellow curve. The wavy shape of the top curves originates from the sinusoidal shape of the front transmission
filter R() at the front contact (left); this has no realistic or physical relevance at all, we just used this R() to clearly see
the influence of this filter… and we do see it .
Figure 11.5 Problem file test tandem cell scripts illum from left.def. The back reflection Rback
is varied from Rback = 0 to Rback = 1.0, step Rback = 0.1.Left: the eh generation rate G(x) in #/cm3s integrated over all
wavelengths of the incoming spectrum; the top cell has 0 x 2.5 m, and the bottom cell has 2.5 m x 6 m.
Right: the adapted back reflection Rback’() of the top cell calculated by Eq. (38) and the adapted front transmission
Tfront’() of the bottom cell calculated by Eq. (39). The bundle Tfront(; Rback) is seen as one curve (red); the sinusoidal
shape of the front transmission filter used in this problem is followed for > 690 nm, but is efficiently damped for <
690 nm due to strong absorption in the top cell. The bundle Rback(; Rback) is seen as a bundle of 11 curves in the long
wavelength range: Rback’() = Rback for light not absorbed at all ( > 1130 nm), and the effect of Rback is quickly dying
out for shorter wavelengths due to absorption of reflected light in the bottom cell. As a consequence, the generation
G(x) in the top cell does not depend on Rback at all, and G(x) in the bottom cell has some weak dependence on Rback in
the immediate vicinity of the back contact at x = 6 m.
11.10 Application examples 143
The IV and QE curves of the top and bottom cell, calculated with
math split_tandem_cell.adapt_contact_filters 2 3
and the IV curves of the tandem connection, calculated with (for example)
math series WIVTUB 100
are shown in Figure 11.6. The conclusions are consistent with Figure 11.5: the top cell is not sensible to
Rback, the bottom cell only slightly.
Figure 11.6 Left: the IV curves of the top cell (curves for all 11 Rback values almost coinciding, with Voc ~ 1.3 V), the
top cell (a bundle of slightly differing curves with Voc ~0.6 V) and the series connection (curves coinciding with Voc
~1.8 V). Right: the QE curves of the top cell (all curves coinciding; only > 0 for < 690 nm) and of the bottom cell
(only > 0 for 690 nm < <1130 nm; the Rback bundle is only noticeable at long wavelengths, say > 1030 nm or so)
The conclusion would be different if the optical absorption of the layers would be much lower (lower
absorption constant or thickness d). We changed constant 1 of the optical absorption model of all layers
from 1 = 105 /cm to 1 = 103 /cm, and redid the calculations that lead to Figure 11.5 and Figure 11.6: the
result is in Figure 11.7 and Figure 11.8.
Figure 11.7 As in Figure 11.5, but for very low optical absorption (in all layers, 1 was set to 103 /cm). The total
generation Gtot(x) now strongly depends on Rback in the bottom cell, and slightly but clearly visible in the top cell. The
adapted Tfront’() does not depend on Rback (in agreement with Eq. (39) ), but the adapted Rback’() does (in agreement
with Eq. (38), and much stronger with this low value for 1: the influence is visible at all wavelengths, also for < 690
nm, that is almost completely absorbed in the top cell when 1 = 105 /cm.
144 Chapter 11: Script support for simulating multi-junction (tandem) cells
Figure 11.8 As in Figure 11.6, but for very low optical absorption (in all layers, 1 was set to 103 /cm). Note that now
the top cell and the resulting tandem cell have some noticeable dependence on Rback, and the bottom cell has a strong
Rback-dependence.
Figure 11.9 The IV curves of the top cell (blueish curves with Voc ~ 1.25 V), the bottom cell (pinkish curves with Voc
~ 0.6 V) and the tandem cell (greenish curves with Voc ~ 1.8 V), for one value Rback = 1, and for the three script
strategies. The IV curves for “adapt filters” and “adapt generation” almost coincide, but the IV curves of the top cell
(and hence also the tandem cell) with strategy “electronically inactive parts” deviate somewhat (and have a Voc about
0.04 V lower than calculated with the two other strategies).
To explore why the strategy “electronically inactive parts…” is not performing too well, we check the
assumptions and algorithm that we used to make the bottom cell electronically inactive when studying the
top cell, and the other way around. These assumptions were discussed in Section 11.7 page 136. We limit us
11.10 Application examples 145
here to the “top cell with electronically inactive bottom cell”, and to the doping and defect settings in the
electronically active bottom cell (that we once called fake bottom cell in an Application Note – not very
scientific, but shorter to type, and maybe clearer). The top cell in our example is np type (n-layer left, p-layer
right), thus the fake bottom cell was set to p-type everywhere, with NA = 1019 cm-3, and was given one mid-
gap defect with density Nt = 1017 cm-3. These settings are internal in SCAPS when running the script command
math split_tandem_cell. with_electronically_inactive_parts n1 n2
and cannot be varied by the user. One can however load the definition file for the top cell with fake bottom
cell set-up by the script (with load definitionfile.temporary.top_cell) and then, outside of
the script, vary NA or Nt of all fake bottom cell layers simultaneously in the batch settings. We did so once for
our tandem cell example test tandem cell scripts illum from left.def as is, and then
again for this same tandem cell with a modification: the top cell was given a Back Surface Field layer (BSF):
the base layer (p-layer) of the top cell has NA = 1015 cm-3 over 1.5 m, but NA = 1017 cm-3 over a 0.5 m
distance from the bottom cell to the right.
That leads to the results of Figure 11.10. The efficiency parameter most affected by the variation of NA and
Nt is Voc; the influence on Jsc and FF is very minor.
Figure 11.10 Dependence of the open circuit voltage Voc of the top cell of a tandem cell with an “electronically inactive
bottom cell”, as constructed by the script command math split_tandem_cell.
with_electronically_inactive_parts… Left: dependence on the acceptor density NA set in the two layers
of the electronically inactive bottom cell. Right: dependence on the defect density Nt set in the two layers of the
electronically inactive bottom cell. The values of NA = 1019 cm-3 and Nt = 1017 cm-3 that are set in the script are indicated
by the magenta vertical line. Red curves: starting from test tandem cell scripts illum from
left.def as is, thus without back surface field layer (no BSF). Blue curves: the top cell of this tandem structure was
given a BSF layer (see text).
It is clear that “a mild variation of Nt around the set value Nt = 1017 cm-3” does not influence the results at all
(Figure 11.10 right). “At all” is somewhat exaggerated: when examining e.g. the detailed Voc(Nt) dependence
for the top cell with BSF, one sees some influence, but very, very minor, indeed negligible for all practical
purposes (Figure 11.11). In contrast, a variation of NA around its internal setting NA= 1019 cm-3 does influence
the IV results, see Figure 11.10 left: this influence is small and maybe negligible for the cell with BSF (blue
curve), but is substantial for the cell without BSF (red curve).
These examples show that:
The strategy “partial cells with electronically inactive counterparts” is the most versatile of the three
strategies: one can change the illumination conditions (spectrum, intensity) and the optically relevant
parameters of the partial cell under study (absorption files or absorption model parameters, band gap,
thickness; one can add layers…) without having to run each time again the math
split_tandem_cell command in a script.
However, the user should check the validity of the approximations used to obtain the “electronically
inactive counterpart”. These assumptions might be more or less valid, or totally not, depending on the
146 Chapter 11: Script support for simulating multi-junction (tandem) cells
cell settings. SCAPS cannot do this analysis automatically for you, and vary the settings (in our
illustration, the parameters NA and Nt) to obtain a better implementation of the “electronically inactive”
counterpart, the user is responsible for this. This illustrates again that a physical simulation program
cannot substitute for physical insight …
And thus, we repeat our conclusion at the end of Section 11.7: “It might make sense to do the vast
amount of the exploring work with the strategy of inactive counterparts, and now and then (and also
finally) check with the more rigorous, but less versatile strategies of adapt generation or adapt filters”.
Figure 11.11 Detail of the blue curve of Figure 11.10 right: the Voc(Nt) dependence for the top cell with BSF. There is a
very slight Voc(Nt) dependence, negligible in practice.
11.11 Conclusion
We can copy here the conclusion of our former Application Note on tandem cells:
SCAPS cannot handle multi-junction structures directly, even not tandem structures.
The way out is to calculate the top and bottom cells separately. This text gives hints and examples of
how these ‘top’ and ‘bottom’ cells should be set-up.
Three strategies, and script support for them, are developed in SCAPS 3.3.10.
The SCAPS script also handles the series connection for you, within the SCAPS environment.
… but it still looks very much as a Plan B… and actually it is one.
References
[1] M. Burgelman, P. Nollet, S. Degrave, Modelling polycrystalline semiconductor solar cells, Thin Solid
Films, 361 (2000) 527-532.
[2] K. Decock, S. Khelifi, M. Burgelman, Modelling multivalent defects in thin film solar cells, Thin Solid
Films, 519 (2011) 7481-7484.
[3] M. Burgelman, J. Marlein, Analysis of graded band gap solar cells with SCAPS, Proceedings of the
23rd European Photovoltaic Solar Energy Conference, Valencia, 2008, pp. 2151-2155.
[4] J. Verschraegen, M. Burgelman, Numerical modeling of intra-band tunneling for heterojunction solar
cells in SCAPS, Thin Solid Films, 515 (2007) 6276-6279.
[5] S. Degrave, M. Burgelman, P. Nollet, Modelling of polycrystalline thin film solar cells : new features
in SCAPS version 2.3, Proceedings of the 3rd World Conference on Photovoltaic Energy Conversion,
Osaka, 2003, pp. 487-490.
[6] A. Niemegeers, M. Burgelman, Numerical modelling of ac-characteristics of CdTe and CIS solar
cells, Proceedings of the 25th IEEE Photovoltaic Specialists Conference, Washington DC, 1996, pp.
901-904.
[7] W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery, Numerical recipes in C, 2nd ed.,
Cambridge University Press, New York, 1992.
[8] J. Verschraegen, S. Khelifi, M. Burgelman, A. Belgachi, 21st European Photovoltaic Solar Energy
Conference, Dresden, Germany, Sept. 2006, 2006.
[9] S. Khelifi, M. Burgelman, J. Verschraegen, A. Belghachi, Impurity photovoltaic effect in GaAs solar
cell with two deep impurity levels, Solar Energy Materials and Solar Cells, 92 (2008) 1559-1565.
[10] S. Khelifi, J. Verschraegen, M. Burgelman, A. Belgachi, Numerical simulation of the impurity
photovoltaic effect in silicon solar cells, Renewable Energy, 33 (2008) 293-298.
[11] K. Decock, P. Zabierowski, M. Burgelman, Modeling metastabilities in chalcopyrite-based thin film
solar cells, Journal of Applied Physics, 111 (2012) 043703.
[11'] M. Burgelman, K. Decock, S. Khelifi and A. Abass, Advanced electrical simulation of thin film solar
cells, Thin Solid Films, 535 (2013) 296-301.
[12] A. Niemegeers, S. Gillis, M. Burgelman, A user program for realistic simulation of polycrystalline
heterojunction solar cells: SCAPS-1D, Proceedings of the 2nd World Conference on Photovoltaic
Energy Conversion, Wien, 1998, pp. 672-675.
[13] H.J. Pauwels, G. Vanhoutte, Influence of interface states and energy barriers on efficiency of
heterojunction solar-cells, J. Phys. D-Appl. Phys., 11 (1978) 649-667.
[14] J. Verschraegen, Karakterisering en modellering met SCAPS van de CISCuT dunne-filmzonnecel,
dissertation Universiteit Gent. Faculteit Ingenieurswetenschappen, 2006.
[15] S. Selberherr, Analysis and Simulation of Semiconductor Devices, Springer Verlag, Wien-New York,
1984.
[16] J. Marlein, M. Burgelman, Proceedings of NUMOS (Int. Workshop on Numerical Modelling of Thin
Film Solar Cells, Gent (B), 28-30 March 2007). p. 227-233 2007, 2007.
[17] T. Walter, R. Herberholz, C. Müller, H.W. Schock, Determination of defect distributions from
admittance measurements and application to Cu(In,Ga)Se 2 based heterojunctions, Journal of Applied
Physics, 80 (1996) 4411-4420.
[18] K. Decock, S. Khelifi, S. Buecheler, F. Pianezzi, A.N. Tiwari, M. Burgelman, Defect distributions in
thin film solar cells deduced from admittance measurements under different bias voltages, Journal of
Applied Physics, 110 (2011) 063722.