Understanding Oghma Nano
Understanding Oghma Nano
Roderick C. I. MacKenzie
Please do not cite this manual. Please see the section 1.6 on how to cite the model in your
work.
1 Introduction 1
1.1 What is OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Why OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 About this book/manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 What is the history of OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 What is the roadmap for OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Using OghmaNano in industrial/academic work . . . . . . . . . . . . . . . . . . 4
1.7 Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Installing OghmaNano 6
2.1 Windows (if you have admin rights) . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Windows (No admin rights) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Getting started 8
3.1 Simulating a JV curve of a simple solar cell . . . . . . . . . . . . . . . . . . . . . 8
3.1.1 Making your first simulation . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.2 The output from your first simulation . . . . . . . . . . . . . . . . . . . . 10
3.1.3 Editing device layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.4 How do solar cells absorb light? . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.5 Light inside solar cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.6 Parasitic elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.7 Solar cells in the dark . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.8 The contact editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.9 Electrical parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.7 Scanning probe microscopy editor . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.8 Electrical equilibrium editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.9 Steady state photoluminencense editor . . . . . . . . . . . . . . . . . . . . . . . 38
4.10 Charge extraction editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.10.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.11 Capacitance voltage editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.11.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.12 Hardware editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.12.1 CPU/GPU configuration tab . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.12.2 Newton cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.12.3 Hardware benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5 2D Simulations - OFETs 45
5.0.1 The anatomy of a 2D simulation . . . . . . . . . . . . . . . . . . . . . . . 46
5.0.2 Electrical parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.0.3 Running a 2D simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.0.4 Meshing in 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.0.5 Solving the drift diffusion equations over the entire device . . . . . . . . 50
6 2D simulation of bulk-heterojunctions 51
8 Meshing 60
8.1 What is meshing? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.2 Different meshes for different problems . . . . . . . . . . . . . . . . . . . . . . . 60
8.3 The three meshes of OghmaNano . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.3.1 Electrical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.3.2 Optical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.3.3 Thermal mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.4 The electrical mesh in detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.5 When do I need to worry about meshing in OghamNano? . . . . . . . . . . . . . 64
8.5.1 Electrical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.5.2 Optical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.5.3 Thermal mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.6 Meshing tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.6.1 Should I be simulating in 1D, 2D or 3D? . . . . . . . . . . . . . . . . . . 65
8.6.2 Speed v.s. accuracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
10 Optical models 85
10.1 Light sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
10.1.1 Local ground view factor . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
10.2 Transfer matrix model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.2.1 The user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.2.2 Output files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.2.3 Simulating optically thick layers (incoherent layers) . . . . . . . . . . . . 95
10.2.4 Theory of the transfer matrix method . . . . . . . . . . . . . . . . . . . . 97
10.2.5 Refractive index and absorption . . . . . . . . . . . . . . . . . . . . . . . 99
10.3 Optical mode solve 1D/2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
10.4 Finite Difference Time Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
10.4.1 Running an FDTD simulation . . . . . . . . . . . . . . . . . . . . . . . . 101
10.4.2 Manipulating objects in OghmaNano . . . . . . . . . . . . . . . . . . . . 103
10.4.3 Manipulating light sources in OghmaNano . . . . . . . . . . . . . . . . . 105
10.4.4 Theoretical background . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10.4.5 Ray tracing model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
15 Databases 126
15.1 Materials database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
15.1.1 Adding new materials - the hard way . . . . . . . . . . . . . . . . . . . . 128
15.1.2 Adding new materials - the easy way . . . . . . . . . . . . . . . . . . . . 129
15.1.3 But I have a data in nm/n/k format . . . . . . . . . . . . . . . . . . . . 132
15.2 Shape database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
15.2.1 The shape file format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
15.3 Filters database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
15.4 Backups of simulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
20 Troubleshooting 181
20.1 Windows gives warms me the software is unsigned . . . . . . . . . . . . . . . . . 181
20.2 Why don’t I get a 3D view of the device . . . . . . . . . . . . . . . . . . . . . . 181
21 FAQ 183
21.1 Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
21.1.1 Should I trust the results of OghmaNano? . . . . . . . . . . . . . . . . . 183
21.1.2 Can I use the model to simulate my exotic* material system/contacts? . 183
21.2 Excited states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
22 Legal 185
22.1 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
22.2 Copyright of the manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
22.3 Data privacy statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Chapter 1
Introduction
Electrical models:
– 1/2D electrical drift-diffusion solver.
– Dynamic SRH traps needed for simulating disordered materials.
– Simple equivalent circuit model.
– Complex 3D circuit model for complex large area devices.
– Arbitrary user defined densities of trap states.
– Thermal model linked to the electrical models.
– Time domain, frequency domain and steady state solvers.
Optical models:
– Transfer matrix model for light
– FDTD models
– Ray tracing model
– 1/2D optical mode solvers for waveguide structures.
– Arbitrary light sources/filters.
1
2 CHAPTER 1. INTRODUCTION
Other/databases:
Figure 1.2: a); Organic/Perovskite solar cell simulation; b) OFET transistor simulation; c)
Microlens simulation; d) Photonic waveguide simulation; e) light escaping structured films;
f) OLED simulation; g) Optical filter simulation; h) large area device modelling (hexogonal
contacts); i) Mapping carrier density in position/energy space; j) Building complex 3D meshes;
and k) resistance maps of large area devices.
4 CHAPTER 1. INTRODUCTION
1. If you use OghmaNano to generate results, then clearly say so in your work. This can be
as simple as one sentences saying: ”we used OghmaNano to perform the simulations”
2. If you publish a book, paper or thesis where OghmaNano has been used you must cite at
least three papers associated with the model. To find out which papers to cite, click on
the area indicated in red in figure 1.3 when using the model. PLEASE do not cite the
manual. I can’t include the manual in paper lists when applying for funding.
I ask you to do this because citations are an easy way to demonstrate that people are using
OghmaNano. Demonstrating use is key to finding money/people to continue the development
of OghmaNano. So by doing this you are guaranteeing the future of OghmaNano and its
continued availability for others. Thank you!
1.7 Bugs
I get quite a lot of feature requests from people wanting features added or for bugs to be fixed.
I really appreciate the feedback! However, I am currently employed at a UK University and
my time is split between teaching, research and admin. My performance in my job is measured
by the number of high impact papers I push out per year. I therefore have to prioritize
feature requests and bug fixes for people who would like to write a paper with me (i.e. my
collaborators).... Therefore if you would like:
1.7. BUGS 5
Figure 1.3: If you click on the area indicated by the red box, the model will tell you which
papers should be cited.
A bit of advice on how to do x or y with the model then please do feel free to shoot me a
mail, and I will do my best to get back to you. If you don’t hear back from me just send
the mail again.. I get loads of e-mails, and things get lost if I don’t answer quickly.
If you want to report a bug, then please do that, and I will do my best to fix it in the
next release. But I can’t promise when it will be fixed.
If you would like a features added or a steady stream of help (i.e. you are asking for my
time) then please consider inviting me to join in your work and collaborate on a joint
paper. I am happy to add whatever feature you want to the model, or fix what ever bug
you may have but in return I would ask for the inclusion of my name on the author list.
By doing this it makes it much easier for me to justify sinking time into your project.
If you don’t need help from me to use OghmaNano then please feel free to do what you
want with the results - no need to contact me, but do cite it correctly.
Chapter 2
Installing OghmaNano
6
2.2. WINDOWS (NO ADMIN RIGHTS) 7
Figure 2.1: Running and installing OghmaNano. Double click on the OghmaNano icon to run
the model.
Chapter 3
Getting started
8
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL 9
Figure 3.2: New simulation window, from Figure 3.3: The organic solar cell sub
here you can select different example sim- menu. There are quite a few examples of
ulations. It is often easier to start from a organic solar cells in this menu. The ma-
base simulation rather than build your own jority of simulations have been used to pro-
from scratch. duce papers [?, ?, ?].
OghmaNano dumps a lot of data to disk, I therefore recommend you save the simulation to
a local disk such as the C:\drive, a network drive or USB stick drive will be far too slow for
the simulation to run. I would also not save the simulation onto OneDrive or Dropbox as they
are also too slow and saving it there will generate a lot of network traffic. If you are a power
user doing a lot of fitting of experimental data I would also recommend (at your own risk(!))
disabling any extra antivirus software you have installed, as quite often the antivirus software
can’t keep up with the read/writes to disk.
Figure 3.4: The main OghmaNano simulation window with the xy, yz and xz buttons visible.
The play button is also visible which is used to run the simulation, the function key F9 can
also be used to run the simulation.
10 CHAPTER 3. GETTING STARTED
Figure 3.5: The Output tab this is just like windows file explorer, you can explore the simulation
directory tree.
Key files the simulation produces are listed in the table below:
Try opening jv.dat. This is a plot of the voltage applied to the solar cell against the current
generated by the device. These curves are also sometimes called the characteristic diode curve,
we can tell a lot about the solar cell’s performance by looking at these curves. Hit the ’g’ key
to bring up a grid.
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL 11
Now try opening up the file sim inf o.dat, this file displays information on the performance
of the solar cell, such as the Open Circuit Voltage (Voc - the maximum Voltage the solar cell can
produce when iluminated), efficiency (η - the efficiency of the cell) , and short circuit current
(Jsc - the maximum current the cell can produce when it is illuminated). Figure 3.6, shows
where you can find these values on the JV curve. The sim inf o.dat file contains a lot of other
parameters, these are described in detail in section 4.1.4.
Question 1: What is the Jsc , Voc and Fill Factor (FF) of this solar cell? How do these
number compare to a typical Silicon solar cell? (Use the internet to find typical values
for a Silicon solar cell.)
12 CHAPTER 3. GETTING STARTED
Layer name: Is the English name describing the layer. You can call your layers what you
want (i.e. ITO, PEDOT, fred or bob) it has no physical meaning.
Optical material: Specifies the n/k data which is used to describe the materials optical
properties. In the simulation the n/k data are taken from experimental values stored in
the optical database 15.1 and have nothing to do with the electrical material properties
such as effective band gap.
Layer type: Specifies to the simulation how the layer is treated when performing a simu-
lation. There are three types of layer
– active: This type of layer is electrically active and the drift diffusion solver will solve
the electrical equations in this layer type. See section 21.2. You can have as many
active layers as you like but they must be contiguous.
– contact: This tells the model that a layer is a contact and a voltage should be
applied, see section 3.1.8 for more details.
– other: Any layer which is not a contact or active.
solver the drift diffusion equations. Other layers which don’t have both species of carriers can
be treated simple parasitic resistances see section 3.1.6. I would only recommend setting other
layers of the device to active (such as the HTL/ETL) if you are trying to investigate effects
such as s-shaped JV curves or devices which clearly need multiple active layers such as OLEDs.
In general, try to minimize the number of active layers and always keep simulations as simple
as possible to explain the physical effects you see.
Task 2: Plot a graph (using excel or any other graphing tool), of device efficiency v.s.
thickness of the active layer. What is the optimum efficiency/thickness of the active
layer? Also plot graph Voc , Jsc and F F as a function of active layer thickness. Jsc is
generally speaking the maximum current a solar cell can generate, try to explain your
graph of J sc v.s. thickness, [Hint, the next section may help you answer this part of
the question.]
14 CHAPTER 3. GETTING STARTED
Double click on the icon called, AM1.5G, this should bring up a spectrum of the sun’s
spectrum. Have a look at where the peak of the spectrum is. Now close this window, and open
the spectrum called led. Where is the peak of this spectrum.
Figure 3.9: a: A plot of the entire solar spectrum. b: The image below shows the solar spectrum
at 392 nm (blue) to 692 nm (red) as observed with the Fourier Transform Spectrograph at Kitt
Peak National Observatory in 1981. R. Kurucz
Question 3: Describe the main differences between the light which comes from the
LED and the sun. Rather than referring to the various regions of the spectrum by
their wavelengths, refer to them using English words, such as inf rared, U ltraV iolet,
Red, and Green etc... you will find which wavelengths match to each color on the
internet. If you were designing a material for a solar cell, what wavelengths would.
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL 15
Question 4: What color of light does the polymer p3ht absorb best? Which material
in the polymers directory do you think will absorb the suns light best?
16 CHAPTER 3. GETTING STARTED
Task 5: In the optical tab you will find a control called Light intensity, this controls
the amount of light which falls on the device in Suns. Set it to zero so that the device
is in the dark. Then run two JV curve simulations, one with a shunt resistance of
1 Ohm m2 and one with a shunt resistance of 1x106 Ohm m2 (Hint you will have to
enter 1e6 in the text box). What happens to the dark JV curve? Now try running
the same same simulations again but in the light.
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL 17
Question 6: What values of series and shunt resistance, would produce the best pos-
sible solar cell? Enter these values into the device simulator and copy and paste the
dark JV curve into your report.
18 CHAPTER 3. GETTING STARTED
Name: The name of the contact, this can be any English word. It has no physical meaning.
Top/Bottom: Sets if the contact is on the top, bottom or in 2D simulation left and right
of the device are also valid.
Applied voltage: Sets the applied voltage on the contact. You first have to select what
type of applied voltage you want:
– Ground: This will set the contact to zero volts i.e. ground. 0V is always taken as
ground.
– Constant bias: This will apply a constant bias to a contact. It can be set to zero,
and would then be equivalent to ground. In OFET simulations the voltage value
can be set to bias one contact to a desired constant voltage.
– Change: If a contact is set to ’Change’ this tells the simulation to apply a changing
voltage to this contact. For example if you are performing a JV sweep, the sweep
voltage will be applied to this contact. Similarly if you are doing an IS simulation
(TPV, TPC, ToF etc..) the voltage will be applied/measured to this contact.
Charge density: This sets the majority charge density on the contacts. The Fermi-offset
is calculated from the charge density. The model does not use Fermi-offset as an input,
it uses charge density.
Majority carrier: This sets the majority carrier density to electrons or holes.
Physical model: This selects if you have ohmic contacts or schottky contacts. I recommend
using ohmic contacts.
Task 7: For a good contact which results in a high efficiency device, the Fermi-offset
will be exactly 0 eV or very small. Firstly set the Fermi-offset to zero for both contacts,
and run a simulation. What efficiency cell do you get? Now set the Fermi-offset to
0.3eV what efficiency cell do you now have? Make a note of the charge densities on
the contacts which these Fermi-offsets produce.
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL 19
Drift diffusion: This enabled drift diffusion within the layer. In most circumstances if a
layer is set to be active there is no reason why you would want to turn this option off.
The one example is in the insulating layer of an OFET.
Auger recombination: This switches on and off Auger recombination. See 9.6 for more
information.
Dynamic SRH traps: This is used to turn on and off dynamic SRH traps. See section
9.4 for more information. This option should be turned on when modeling disordered
semiconductors such as organic materials.
Equilibrium SRH traps: This can be used to introduce a single equilibrium trap level.
See section 9.4 for more information.
Excitons: This enables the exciton diffusion equation to be solved along with the electrical
equations. See section 13.2 for more information.
Task 8: The values of electron mobility dictate how easily charge can move in the
device. You can think of this value as akin to resistance or a sort of microscopic
resistance. Try try increasing the mobilities by two orders of magnitude and look
what happens to the light JV curve of the device and the efficiency, FF, Voc and Jsc
Do you think it is good to have a low or high value of mobility?
20 CHAPTER 3. GETTING STARTED
Task 9: Recombination is described later in detail but for now we can simply think of
it as how many electrons and holes meet each other in a given time. As stated above
there are various types of recombination which can happen in organic semiconductors,
but for now we will just consider the case when a free electron meets a free hole. This
is sometimes called bi-molecular recombination, the equation for this is given by:
Where n(x) is the density of electrons and p(x) is the density of holes, and k is a
rate constant. Before trying to understand this rate, firstly turn off the more complex
SRH recombination by clicking on the Dynamic SRH traps in figure 3.17. You will
notice lots of text boxes disappear. Then try changing the value of k which is set in
the text box called nf ree to pf ree Recombination rate constant, from 1e-15 to 1e-20 in
five steps. Run a simulation each time you change the value and make a graph of the
efficiency of the cell as you change the value.
Use the base simulations provided in OghmaNano, these simulations have either been
calibrated against real experimental devices or use very reasonable electrical parameters.
Look in the literature and try to get an idea of what values are sensible ranges for the
material systems you are looking at.
Find some experimental data and make sure the current voltage curves produced by the
model are within the same ball park as what you would expect experimentally, if they
are totally out then you might need to tweak your electrical paramters.
Fit the model to an experimental data set as was done in [?] and described in section 16
(This is however quite a hard thing to do though and not really recommended).
Chapter 4
OghmaNano uses a modular architecture that enables the core solver to perform a variety of
simulation types using . For example there is a plugin to perform steady state JV simulations,
another plugin to perform frequency domain simulations, and another to calculate the Quantum
Efficiency. They all leverage the same OghmaNano core solver but run it in a slightly different
way with custom inputs and outputs. A list of the plugins and what they do can be found
below:
21
22 CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS
Figure 4.1: Simulation editors use this toolbar to edit the various simulation conditions your
device will experience.
In the simulation editors ribbon (see Figure 4.1) you can see icons that represent each plugin,
these are the simulation editors. By clicking on an icon in this ribbon you will be able to edit
how the plugin performs the various simulations. For example in the JV simulation editor one
can change the start/stop voltages of a voltage sweep. The JV editor can be seen in Figure 4.2.
Within each simulation editor the user can define multiple so called experiments. This can be
seen in below in Figure 4.2 and Figure 4.3, where two JV scans have been defined within the
JV editor, one called JV curve - low voltage and another called JV curve - high voltage. One
has a start voltage of 0.02V and stop voltage of 1.0V, while the other has a start voltage of
1.0V and a stop voltage of 10V. This feature is most useful in more complex experiments such
as in time domain experiments where one may want to simulate multiple different voltage/light
ramps/pulses for one device. There is no limit to how many experiments can be defined for
each plugin.
Figure 4.2: An experiment set up in the JV Figure 4.3: An experiment set up in the JV
window for high voltage simulations. window for low voltage simulations.
Once an experiment has been defined an icon representing it will appear in the simulation
mode ribbon shown in figure 4.4. You can see in the figure an icon for JV curve low voltage and
JV curve high voltage that were defined in Figure 4.2 and 4.3. You can see in Figure 4.4 that
JV curve low voltage is depressed. This means that when the simulation is run this simulation
mode will be executed. If you select another simulation mode, then when the play button (or
F9) is pressed that simulation mode will be run. Only one simulation mode can be run at a
time.
23
Figure 4.4: Selecting a simulation mode, in this case the JV curve low voltage has been selected
so that when the user presses play that simulation mode will be run.
24 CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS
Figure 4.5: Opening the JV editor from the simulation editor ribbon.
4.1.1 Inputs
This window can be used to configure steady state simulations. It does not matter if you are
running a current-voltage sweep on a solar cell or an OFET. This plugin will steadily ramp
the voltage from a start voltage to a stop voltage. The voltage will be applied to the contact
which has been set to Change in the contact editor (see section 3.1.8). You can set the start
voltage, stop voltage and step size. Use JV voltage step multiplayer to make the voltage step
grow each step. The default is 1.0, i.e. no growth. It can be helpful to set the step multiplyer
to a value larger than 1.0 if you want to speed up the simulation but it should not be increased
past about 1.05 or the simulation may strugle to converge.
Figure 4.6: The JV editor editor window, use this to configure steady state simulations.
4.1.2 Outputs
The files produced by the JV simulation mode are given in table 10.1. As well as these files, by
default OghmaNano will also write all internal simulation parameters to disk in the snapshots
4.1. JV EDITOR (STEADY STATE SIMULATION EDITOR) 25
directory. This includes band structure, potential, carrier distributions, generation rates etc..
this equates to about 50 files per voltage step. You can read more about this in the simulation
snapshots section, see 19.1. This can considerably slow down the simulation, the user can
therefore decide how much is written to disk by using the Output verbosity to disk option this
can be set to; Key results, which will result in only key files being written to disk;Nothing,
which will result in no results being written to disk; Write everything to disk which will result
in a all possible information being written to disk and Write everything to disk every nth step,
which will only out comprehensive internal simulation write data every nth step.
The time domain editor can be used to configure time domain simulations, this is shown in
Figure 4.7. You can see, as described in the previous section that one simulation editor can be
used to edit multiple experiments. The panel on the left shows the editor being used to edit
a CELIV simulation while the panel on the right shows the editor being used to edit a TPC
simulation. The new, delete and clone buttons in the top of the window can be used to make
new simulation modes. The table in the bottom of the window can be used to setup the time
domain mesh, apply voltages or light pulses.
Figure 4.7: The time domain editor showing the user editing the duration of light/voltage
pulses.
Figure 4.8 shows different tabs in of the time domain editor. The image on the left shows
the circuit diagram used to model the CELIV experiment. The diode on the left represents the
drift diffusion simulation while the other components represent various parasitic components.
After the diode from the left next comes a capacitor used to model the charge on the plates of
the device, then a shunt resistance and then the series resistance. The final resistor on the right
represents the external resistance of the measuring equipment, this is by default set to zero but
worth checking. The drop down menu on the top left of the image above the circuit diagram
says load type, this can change the load the circuit from what is shown in the picture, to a
perfect diode where no parasitic components are shown to a device at open circuit which would
be used to simulate Transient Photo Voltage measurements. The right hand figure shows the
configuration options of the time domain window. Again notice the Output verbosity to disk
option as described in the previous section, you will see this again and again in OghmaNano.
4.2. TIME DOMAIN EDITOR 29
Figure 4.8: Configuring the time domain editor: Left the circuit diagram used by the time
domain window and right simulation options.
30 CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS
4.3.1 Overview
The frequency plugin allows you to simulate the frequency domain response of the device. Using
this tool one can perform impedance spectroscopy, as well as optically excited measurements
such as Intensity Modulated Photo Spectroscopy (IMPS), Intensity Modulated Voltage Spec-
troscopy (IMVS). The domain editor allows you to configure frequency domain simulations.
This is shown below in Figures 4.9 and 4.10. On the left hand side is the frequency domain
mesh editor this is used to define which frequencies will be simulated. Figure 4.10 shows the
circuit tab of the frequency domain window, this sets the electrical configuration of the simula-
tion. One can either simulate an ideal diode (this is the fastest type of simulation to perform),
a diode with parasitic components or a diode in open circuit. An ideal diode would be used for
IMPS simulations while the open circuit model would be used for IMVS simulations. Pick the
circuit depending on what conditions you want to simulate. If you want examples of frequency
domain simulation look in the new simulation window under Organic Solar cells, some of the
PM6:Y6 devices have examples of frequency domain simulations already set up.
Figure 4.9: The frequency domain editor win- Figure 4.10: A circuit set up for frequency do-
dow main simulations.
There are two ways to simulate frequency domain simulations in a device model, a large signal
approach or a small signal approach. The small signal approach assumes the problem we
are looking at varies linearly around a DC point, this may or may not be true depending on
the conditions one is looking at. This method is however computationally fast. The second
approach is to use a large signal approach and rather than simulating linear variation around
a set point one simulates the time domain response of the device in full for each wavelength of
interest. This method is cope better non-linear systems and one does not need to worry if one
is in the large or small signal regime but is slower. OghmaNano uses the large signal approach.
4.3. FREQUENCY DOMAIN EDITOR 31
4.3.2 Inputs
In Figure 4.11 the Configure tab of the frequency domain window can be seen. This decides
exactly how the simulation will perform. These are described below in table 4.2
4.3.3 Outputs
4.4.1 Outputs
4.5.1 Outputs
4.6.1 Outputs
4.10.1 Outputs
4.11.1 Outputs
If you click on this it will bring up the hardware editor window which can be seen in Figure
4.21
The hardware window is comprised of various tabs which enable the user to edit the con-
figuration and also benchmark your device.
be run; the maximum number of optimization simulations that can be run at the same
time; the maximum number of threads that are used for FDTD simulations; maximum
number of of DoS cache files can generated at the same time; number of frequency domain
points that can be run at the same time.
Maximum number of core instances: This sets the maximum number of oghma core.exe
instances that can be started by the GUI. If one is running a parameter scan then this will
control the maximum number of simultaneous simulations that can be performed at the
same time. If the values of Number of threads used by the backend has been set to 4 and
one is performing an FDTD simulation, then one sets Maximum number of core instances
to 8, then the GUI will spawn 8 instances of oghma core.exe each using 4 threads, thus
32 CPU cores will be needed.
Stall time: Sometimes when running OghmaNano on a supercomputer unattended it can
stop running, possibly because of an IO error or network error. This option can be used
to set the maximum length of a single simulation. By single simulation I mean a single
JV curve, single time domain simulation or single frequency domain simulation, but not a
whole fit which will involve running thousands if individual simulations.). So with a value
of 2000 seconds the solver will exit, if for example a single JV simulation takes longer
than 2000 seconds. In reality any individual simulation should take only a few seconds,
so this option acts as a hard backstop if something has gone very wrong.
Max fit run time: This is the maximum time oghma core.exe can reside in memory. If
any simulation or fit takes longer than this value it will be terminated, again this is a
backstop to prevent simulations running forever. The default value is 4 days.
Steel CPUs: Sometimes when running OghmaNano on a shared PC one will set a sim-
ulation running when another user is using a significant number of cores. After a while
the other user’s simulations will finish running leaving the computer with idling CPUs.
If this option is set to True, then OghmaNano will monitor the number of free CPUs and
if more become available it will use them.
Min CPUs: Used with the option above Steel CPUs to set the minimum number of CPUs
that will be used.
Store DoS on disk: OghmaNano stores lookup tables on disk to speed up simulations, if
this option is set to false these lookup tables will not be stored.
OpenCL GPU acceleration: This enables or disables GPU acceleration, this is used mainly
during the FDTD simulations.
GPU name: Selects the GPU to use.
There is an overhead to using the Newton Cache, so I would only recommend it when solving
the electrical problem is very slow indeed. Technically the Newton cache works by taking the
MD5 sum of the Fermi-levels and the potentials to generate a hash of the electrical problem.
This is then compared to what exists on disk. If a precalculated answer is found, the Fermi-
levels/potentials are updated to the values found on disk. The cache is stored in oghma local
cache, each pre solvedsolution is stored as a new binary file. Each simulation run generates an
index file where all MD5 sums from that simulation are stored. Once the cache becomes full
OghmaNano deletes simulation results in batches based on the index files.
Maximum cache size: Sets the maximum size of the cache in Mb. I would recommend
around 1Gb.
Minimum disk free: Sets the minimum amount of disk space needed to use the cache, this
option is designe dto prevent the cache filling the disk I would set it to around 5Gb.
Number of simulations to keep: This will set the maximum number of simulation runs to
keep, I would set it to between 20 and 100.
Enable cache: This enables or disables the Newton Cache, the default and recommended
option is False.
to bad IO speed, caused by virus killers, storing the simulations on OneDrive, using networked
drives, using slow USB storage etc.
2D Simulations - OFETs
OghmaNano contains a 2D electrical solver that can be used for simulating OFETs and other
2D structures. To perform 2D simulations use the default OFET simulation in OghmaNano as
a starting point. You can do this by double clicking on OFET simulation in the new simulation
window (see figure ??).
Note: The 2D electrical solver is a separate plug in to the 1D solver, if you select the
default OFET simulation OghmaNano as a starting point for your own 2D simulations
OghmaNano will be all set up to do 2D electrical simulations. If you try to convert a
1D simulation such as a solar cell to a 2D simulation (not recommended) please read
section 9.11 on how to select the correct solver.
To make a new OFET simulation, click on the new simulation button. In the new simula-
tion window and select the OFET simulations (see figure 5.1). Double clicking on this will
bring up the OFET sub menu, where other types of OFETs are also stored. There is one
example with a top contacts, one with side contacts and one which is at low temperature. For
this capter we will be looking at the (standard) top contact OFET (Figure ??), double click
on this and save the new simulation to disk.
Figure 5.1: Setlect the OFET submenu to main Figure 5.2: Select the OFET top contact for
a new OFET simulation this example.
45
46 CHAPTER 5. 2D SIMULATIONS - OFETS
The OFET structure shown in Figure 5.3 has three contacts, a gate, source and a drain. The
source and drain are shown on the top of the simulation as gold bars, a semiconductor layer is
shown in blue and an insulating later shown in red. The gate contact is visible at the bottom
of the structure. This layered structure is defined in layer editor, see figure 5.4. The layer
editor has been described in detail in section 3.1.3. It can be seen that the top and bottom
layers have been set to contact and the insulator (PMMA) and semiconducting layer have been
set to active. This means that the electrical model will only consider the semiconductor and
insulator layers and the contacts will be used as boundary conditions. As this structure is not
emitting light the Optical material column has no impact on the simulation results so it has
been arbitrary materials.
The contacts are defined in the contact editor shown in Figure 5.5. The contact editor has
been described in detail in section 3.1.8, however because this is a 2D simulation another two
extra columns have appeared. They are start and width. These define the start position of the
contact on the x-axis and width which describes the width of the contact on the x-axis. The
source starts at 0 m and extends to 5µm, the drain starts at 75 µm and extends to 5µm, while
the gate starts at 0 m and extends to cover the entire width of the device which is 80 µm. If you
are unsure which is the x-axis, the origin marker is visible at the bottom of figure 5.3. Notice
also that under the column Applied Voltage, the source is marked Ground this means that
0V will be applied to the ground, the gate is marked change meaning that our voltage ramp
as defined in the JV editor will be applied to this contact, and the drain is marked constant
bias with a voltage of 15V, this means that a constant voltage of 15V will be applied to this
contact. And thus we are scanning the gate contact while applying a constant voltage between
the source and the drain.
The electrical parameters for both the semiconductor and the insulator can be seen in Figure
5.6, these can be accessed through the Electrical parameter editor. The Electrical parameter
editor is described in detail in section 3.1.9. The left image shows the parameters for the
semiconducting layer while the right figure shows the parameters for PMMA. If you look in the
top left of both windows you will see a button called Enable Drift Diff. which stands for Enable
Drift Diffusion. When this is depressed the drift diffusion equations will be solved within the
layer which take into account charge movement. When this is not depressed only Poisson’s
equation will be solved in the layer and the movement of charge ignored. If you notice this
button is depressed in the Semiconductor layer and not depressed in the PMMA insulator.
This means that the drift-diffusion equations will be solved in the semiconductor and not in
the PMMA. The reason for doing this is that charge does not conduct in the PMMA so there
is no point in solving the drift-diffusion equations in that layer. Another approach would be to
solve the drift-diffusion equations in both layers and just set the mobility in the PMMA to be
very low but this will result in slower computational times and is less numerically stable, there
is more on this approach below.
48 CHAPTER 5. 2D SIMULATIONS - OFETS
Figure 5.6: Electrical parameters for both the semiconductor (left) and the insulator (right)
The simulation will take longer than it’s 1D counterparts simply because there will be
more equations to solve. If you have set a contact at a high starting voltage the solver will
initially ramp the contact voltage in a stepwise way until the desired voltage is achieved before
the desired voltage sweep is applied to the active contact. After the simulation has run the
following files will be produced showing the current density from each contact.
Contacts in OghmaNano are labelled from 0 to N in the order they are defined in the contact
editor (see Figure 5.5), so in this case Contact 0 will be the source, contact 1 will be the gate
and contact 2 will be the drain. You can see the result of running the simulation in Figure 5.8.
49
Figure 5.8: Results from a 2D OFET simulation the JV curves for each contact are shown
along with a view of the the electron current density in the x direction (bottom right).
5.0.4 Meshing in 2D
Computational speed, traps and meshing
You will notice that in this example the SRH trapping/escape equations are solved in the semi-
conductor layer, you can see this as the SRH trap button is depressed. Trapping is often needed
to reproduce experimental results. If you scroll down the parameters list in the Semiconductor
layer you will see that it has 8 trap states. However,it is worth taking a moment to consider
the computational load of introducing trap states. If our 2D device has Nx mesh points in the
x direction and Ny mesh points in the y direction then and we are solving Poisson’s equation,
the electron drift diffusion equation and the hole drift diffusion equation then we will be solving
3 ∗ Nx ∗ Ny equations in total. If we now introduce 8 trap states for electrons and 8 trap states
for holes we will then be solving 3 ∗ Nx ∗ Ny + 8 ∗ 2 ∗ Nx ∗ Ny equations. So if you want a speedy
simulation or are just trying something out it is worth trying to reduce the number of mesh
points, and also reduce the number of trap states and/or turn traps off in the first instance.
of mesh points directly affects the speed of the computation, as a general rule try to minimize
the number of mesh points you use. I would recommend defining one electrical mesh to cover
the Semiconductor layer and one to cover the insulator layer.
5.0.5 Solving the drift diffusion equations over the entire device
Sometimes you may want to solve the drift diffusion equations over the entire device this could
be because you have a poor insulator on the gate contact, it is very uncommon to want to do
this but if you want to follow the steps below. Using doing this is not recommended.
Mobility: Set the mobility of the insulator to a value of 1x10−12 − 1x10−15 m2 /(V s) to
limit current flow into the region. However, the value should not be set too low (see
section 9.11.1) or the solver may become numerically unstable.
Effective density of states: Keep these the same for both layers, just to keep things simple.
Number of trap states: This must the same in both layers, the density of the states and
the Urbach energy can change though.
Eg and Xi: Although it is tempting to simply enter the experimental values for Xi and
Eg for both the insulator and the semiconductor, one has to be careful in doing this as
some insulators (SiO2 ) have very big band gaps which mean the number of carriers get
very small and make the simulation unstable (read section 9.11.1 for an explanation). If
you want to simulate a jump in the band gap into an insulator, my is to make the jump
significantly bigger than 3/2kT = 25meV which is the average kinetic energy of a charge
carrier. If the gap is between 0.5 − 1.0V charge carriers will have problems penetrating
the barrier and there is no need to simulate bigger steps.
Chapter 6
2D simulation of bulk-heterojunctions
51
Chapter 7
7.1 Introduction
Organic Light Emitting Diodes (OLEDs) are a widely used technology with applications in
displays and sensing. The devices operate by charge being injected through the contacts which
results in electro luminescence. The following chapter describes how to simulate these devices
using OghmaNano. There are various OLED examples which can be accessed from the OLED
section of the New simulation window a (Figure 7.1).
52
7.2. OPTICAL OUTCOUPLING 53
as in well defined evaporated OLEDs, while the ray tracing method is used when wishing to
simulate light escaping from rough surfaces or structures with micro-lenses embedded.
Make a new simulation based on the OLED example as described above. Now run a full
simulation by clicking on the Run simulation button in the main window. This will run a full
optical and electrical OLED simulation one after the other. First an optical simulation will
be performed to calculate what the probability of an emitted photon escaping the device will
be at each electrical mesh point. Then a full Drift Diffusion simulation will be performed and
the optical emission at each mesh point calculated form the recombination. The results will be
shown in the Output tab of the main window. The key files written to disk are described in
table 7.1, examples of these files can be seen in Figures 7.5.
Figure 7.4: a) Out coupling calculated using ray the tracing method; b)
Figure 7.5: Example of the output from the OLED simulations of OghamNano
In the snapshots directory you will find detailed electrical output from the model for each
simulation step see Figure 7.6. Also in that directory you will find a file entitled eqe.csv.
This contains the calculated EQE spectrum as a function of voltage. The EQE spectrum will
change as the voltage changes because each point in the cavity of the device will have a different
probability of outcoupling each wavelength of light to the world. As the carrier distribution in
the device changes recombination will happen at different points and thus the overall spectrum
as observed from outside the device will change. Use the slider to see how the spectrum changes
as a function of voltage.
Figure 7.6: The EQE spectrum calculated from the device in OghmaNano as a function of
wavelength. The graph will change as applied voltage changes. To explore this use the slider
in the window scroll over the results for various voltages
56 CHAPTER 7. ORGANIC LIGHT EMITTING DIODES (OLEDS)
Figure 7.7: a) The new simulation window; b) An example of an OLED ray trace simulation
though a rough surface.
is At each electrical mesh point, this will run the ray tracer at each electrical mesh point to
accurately calculate emission probabilities, this can be slower although the decrease in speed
can be mitigated against by increasing the number of threads the ray tracer runs on.
Figure 7.8: a) Using an experimental emission spectra; b) Calculating an emission spectra from
the electrical density of states.
When designing OLED structures it is often important to understand how color of the emitted
light changes as a function of viewing angle. When OghmaNano runs a ray tracing simulation
it emits the files in table 7.2 which describe how the color of light changes as a function of
viewing angle. These files are also visible in 7.9 as the colored colorspace icons.
Table 7.2: Files describing the change of color with viewing angle.
58 CHAPTER 7. ORGANIC LIGHT EMITTING DIODES (OLEDS)
Figure 7.9: The output of a simulation showing the files described in table 7.2. These files are
represented by the color space icons.
7.6. RGB, XYZ, CIE 1931 XYZ COLOUR SPACES 59
Figure 7.10: Examples of color space output from OghamNano as a function of viewing angle;
a) theta x.csv; b) theta y.csv; c) theta z.csv; and thetar gb.csv
Chapter 8
Meshing
Figure 8.1: An example of a continuous problem broken up (or meshed) into a series of discrete
points.
Electrically interesting effects may only happen in the active layer of a solar cell (100 nm
thick), so it is only worth solving the drift diffusion equations in this layer, however light
interacts with all layers in the cell (1 µm thick) so the optical problem should be solved
over the entire device. This means light should be modelled covering the whole device
but electrical effects only in the active layer.
A Quantum Well laser diode used for cutting steel may generate a lot of heat in it’s
Quantum Well (30 nm thick) and waveguide layers (1 µm) thick but heat will escape
from device through a heat sink which may be a 1 cm thick block of copper. This means
electrical effects should be modelled within the device on (1 µm) scale the but thermal
effects should be modelled on the cm scale.
60
8.3. THE THREE MESHES OF OGHMANANO 61
Thus different effects need to be simulated on different length scales. Furthermore, you
electrical device structure may have some very thin layers such as contact layers or interface
layers which are only a few nanometres thick. Optically these layers are far below the wavelength
of light so you don’t need to worry about them from the optical perspective, but electrically
they are very important as they define the current voltage characteristics of the device. Thus
you would want to use a very fine electrical mesh over the layer to make sure they were modelled
accurately from the electrical stand point but you could use a very wide optical mesh that skips
the layers.
In general OghamNano interpolates between the three meshes, so for example if you set up
an thermal profile using a temperature mesh, and the temperature values are needed in the
electrical problem the values are transferred through interpolation. You don’t need to worry
about this as a user. The same is true for the optical simulation values of Generation rate etc.
are interpolated between from the optical mesh to the electrical mesh as needed.
Figure 8.3: The electrical mesh editor showing the mesh for a 2D OFET simulation.
The button called Import from layer editor clears the y-electrical mesh and imports all the
layers from the layer editor giving them four mesh points each. This is useful when setting up
complex structures with many layers such as laser diodes.
Figure 8.4: The optical mesh editor showing the number of points in position space and the
number of wavelength points used for the optical simulations.
8.4. THE ELECTRICAL MESH IN DETAIL 63
This will generally be handled automaticity for you. And you will only need to consider the
thermal mesh when you turn on self heating in the device. Some parameters such as
A picture of the electrical mesh is given below 8.5 note the mesh does not start at zero but half
a mesh point into the device.
You will already know that the layer editor is used to split the device up into layers of different
materials (See section 3.1.3). Some of these layers will have the layer type active. An active
layer is a layer over which the electrical model will be applied. The electrical model needs a
finite difference mesh to to be setup over the active layer for it to work. The length of the mesh
and the length of the active layer must be exactly the same or you will get an error. OghmaNano
will try to do this for you in most cases, so generally speaking for simple problems you will not
have to think about meshing. However if one starts adding multiple active layers you may have
to define your own mesh. Other times when you will need to worry about meshing is when you
are interested in cutting down the number of mesh points used to speed your simulation up
or when you want to make your simulation more accurate by increasing the number of mesh
points.
You will need to play with the optical mesh if you want to change the wavelength range over
which light is simulated in the device. You will also want to change the number of points in
position space in this mesh if you want more accurate (more mesh points) or faster (more mesh
points) optical simulations.
If you want to do simulations with trap states with self heating turned on you will need to
define a thermal mesh, otherwise this will be taken care of for you.
8.6. MESHING TIPS 65
Minimize the number of mesh points to improve computation speed but not go so low
that accuracy is sacrificed.
Realise that more mesh points does not necessarily mean a more accurate simulation.
Especially in the electrical model the equations are discretized as not to lineally interpolate
between mesh points, instead the actual differential equations are solved as boundary
value problems between the mesh points. This means you can sometimes get away with
surprisingly few mesh points (very fast simulations) and still get quite nice results.
Don’t be afraid to really reduce the number of mesh points when testing out fitting or
trying to understand device performance. This will give you a very fast simulation. You
can always go back later and add more mesh points.
Chapter 9
9.1 Outline
OghmaNano’s electrical model is a 1D/2D drift-diffusion model (like many others) however
the special thing about OghmaNano which makes it very good for disordered materials (Think
organics, perovskites and a-Si) is that it goes to the trouble of explicitly solving the Shockley-
Read-Hall equations as a function of energy and position space. This enables one to model
effects such as mobility/recombination rates changing as a function of carrier population and
enables one to correctly model transients as one does not have to assume all the carriers in the
trap states have reached equilibrium. Things such as ToF transients, CELIV transients etc..
can be modelled with ease. Of course can be used for more ordered materials as well, you then
just need to turn the traps off.
ELU M O = −χ − qϕ (9.1)
EHOM O = −χ − Eg − qϕ (9.2)
To obtain the internal potential distribution within the device Poisson’s equation is solved,
66
9.4. CARRIER TRAPPING AND SHOCKLEY-READ-HALL RECOMBINATION 67
Ev − Fp
pl = Nv exp (9.5)
kT
or full Fermi-dirac statistics i.e.
Z ∞
nf ree (Ef , T ) = ρ(E)f (E, Ef , T )dE (9.6)
Emin
Z ∞
pf ree (Ef , T ) = ρ(E)f (E, Ef , T )dE (9.7)
Emin
where
1
f (E) = (9.8)
1+ eE−Ef /kT
When using FD statistics free carriers are assumed to move in a parabolic band:
√ ∗ 3/2
E 2m
ρ(E)3D = (9.9)
4π 2 h̄2
The average energy of the carriers is defined as
R∞
Eρ(E)f (E, Ef , T )dE
W̄ (Ef , T ) = REmin
∞ (9.10)
Emin
ρ(E)f (E, Ef , T )dE
Figure 9.1: Trap filling in both energy and position space as the solar cell is taken from a
negative bias Carrier trapping, de-trapping, and recombination
Table 9.1: Shockley-Read-Hall trap capture and emission rates, where f is the fermi-Dirac
occupation function and Nt is the trap density of a single carrier trap.
this can be turned on using the option called Enable λ power in free to free recombination.
in the configure window of the Electrical parameter editor.
Free to free recombination is equivalent to Langevin recombination. However, most organic
solar cells have a great deal of trap states and an ideality factor greater than 1.0 suggesting
that free-to-free recombination is not the dominant mechanism. See section 9.12 for a general
discussion on the need for trap states and why generally Langevin recombination should not
be used in organic solar device models.
∂a
∇Ja = −q . (9.26)
∂t
Bϕ3/2
eq 2
J = A(n − n )V exp − (9.32)
V
Not yet implemented but could be on request. A is a constant, V is the applied bias, and ϕ
is the barrier height calculated from the band structure, m is the mass of an electron, and d is
the thickness of the barrier. In the model this is implemented as:
√ !
qϕ − B V
J = A(n − neq )T 2 exp − (9.34)
kT
72 CHAPTER 9. THEORY OF DRIFT DIFFUSION MODELLING
The left hand side of the device is given a reference potential of 0 V. See figure 9.2. We can
then write the energy of the LUMO and HOMO on the left hand side of the device as:
ELU M O = −χ (9.36)
EHOM O = −χ − Eg (9.37)
For the left hand side of the device, we can use Maxwell-Boltzmann statistics to calculate
the equilibrium Fermi-level (Fi ).
EHOM O − Fp
pl = Nv exp (9.38)
kT
9.10. CALCULATING THE BUILT IN POTENTIAL 73
We can then calculate the minority carrier concentration on the left hand side using Fi
Fn − ELU M O
nl = Nc exp (9.39)
kT
The Fermi-level must be flat across the entire device because it is in equilibrium. However
we know there is a built in potential, we can therefore write the potential of the conduction
and valance band on the right hand side of the device in terms of phi to take account of the
built in potential.
ELU M O = −χ − qϕ (9.40)
EHOM O = −χ − Eg − qϕ (9.41)
we can now calculate the potential using
Fn − ELU M O
nr = Nc exp (9.42)
kT
equation 9.40.
The minority concentration on the right hand side can now also be calculated using.
Ev − FHOM O
pr = Nv exp (9.43)
kT
The result of this calculation is that we now know the built in potential and minority carrier
concentrations on both sides of the device. Note, infinite recombination velocity on the contacts
is assumed. I have not included finite recombination velocities in the model simply because
they would add four more fitting parameters and in my experience I have never needed to use
them to fit any experimental data I have come across.
Once this calculation has been performed, we can estimate the potential profile between the
left and right hand side of the device, using a linear approximation. From this the charge carrier
densities across the device can be guessed. The guess for potential and carrier densities, is then
used to prime the main Newton solver. Where the real value are calculated. The Newton solver
is described in the next section.
µ0e nf ree
µe (n) = (9.44)
nf ree + ntrap
Thus if all carriers were free, the average mobility would be µ0e and if all carriers were
trapped the average mobility would be 0. It should be noted that only µ0e (µ0h ) are used in the
model for computation and µe (n) is an output parameter.
The value of µ0e (µ0h ) is an input parameter to the model. This can be edited in the electrical
parameter editor. The value of µe (n), and µh (p) are output parameters from the model. The
value of µe (n), and µh (p) change as a function of position, within the device, as the number
of both free and trapped charge carriers change as a function of position. The values of µe (x),
and µh (x) can be found in mu n f t.dat and mu p f t.dat within the snapshots directory. The
74 CHAPTER 9. THEORY OF DRIFT DIFFUSION MODELLING
spatially averaged value of mobility, as a function of time or voltage can be found in the files
dynamic mue.dat or dynamic muh.dat within the dynamic directory.
Were one to try to measure mobility using a technique such as CELIV or ToF, one would
expect to get a value closer to µe (n) or µh (p) rather than closer to µ0e or µ0h . It should be
noted however, that measuring mobility in disordered materials is a difficult thing to do, and
one will get a different experimental value of mobility depending upon which experimental
measurement method one uses, furthermore, mobility will change depending upon the charge
density profile within the device, and thus upon the applied voltage and light intensity. To
better understand this, try for example doing a CELIV simulation, and plotting µe (n) as a
function of time (Voltage). You will see that mobility reduces as the negative voltage ramp
is applied, this is because carriers are being sucked out of the device. Then try extracting
the mobility from the transient using the CELIV equation for extracting mobility. Firstly, the
CELIV equation will give you one value of mobility, which is a simplification of reality as the
value really changes during the application of the voltage ramp. Secondly, the value you get
from the equation will almost certainly not match either µ0e or any value of µe (n). This simply
highlights, the difficult of measuring a value of mobility for a disordered semiconductor and
that really when we quote a value of mobility for a disordered material, it really only makes
sense to quote a value measured under the conditions a material will be used. For example, for
a solar cell, values of µe (n) and µh (n), would be most useful to know under 1 Sun at the Pmax
point on a JV curve.
9.11. CONFIGURING THE ELECTRICAL SOLVER 75
Max Electrical iterations (first step): The maximum number of steps the solver can after
it’s cold started onto a new problem. This is usually at 0V in the dark. The solver usually
takes more steps on it’s first go.
Electrical clamp (first step): This is a number by which the maximum newton step is
clamped to. 0.1 will make the solver very stable but very slow, 4.0 will make the solver
very fast but unstable. A recommended value of 1.0 is suggested for normal problems. If
you are solving for high doping or other unusual conditions it can be worth reducing the
step. Likewise if you want the solver to be fast and you know the problem is easy set the
value to 2.0 or higher. For the first step, I would consider setting this value to be slightly
lower than for the subsequent steps.
Desired solver error (first step): This is the desired error, smaller is more accurate and
slower. I would generally not accept answers above 1x10−5
Max Electrical iterations: Maximum number of electrical iterations on all but the first
step.
Electrical clamp: Electrical clamp (first step): This is a number by which the maximum
newton step is clamped to. 0.1 will make the solver very stable but very slow, 4.0 will
make the solver very fast but unstable. A recommended value of 1.0 is suggested for
normal problems. If you are solving for high doping or other unusual conditions it can
be worth reducing the step. Likewise if you want the solver to be fast and you know the
problem is easy set the value to 2.0 or higher.
Desired solver error: This is the desired error, smaller is more accurate and slower. I
would generally not accept answers above 1x10−5
Newton solver clever exit: If the solver starts bouncing in the noise then assume we can’t
get a better answer and quit.
Newton minimum iterations: Don’t allow the solver to quit before doing this number of
steps. Often the error in the first few steps of the solution can be below ”Desired solver
error”, thus the solver can quit before finding the true answer.
Solve Kirchhoff’s current law in Newton solver: Solve Kirchhoff’s current law in the main
Newton Jacobian.
Matrix solver: This selects the matrix solver to use.
– none: No electrical solver is selected, this is used when only solving optical or thermal
problems.
76 CHAPTER 9. THEORY OF DRIFT DIFFUSION MODELLING
Avoid zeros
Zeros are bad because they cause divide by zero errors. So don’t have zero mobilities, carrier
cross sections, tail slopes or densities of states. It’s fine to have zero recombination constants
though.
9.11. CONFIGURING THE ELECTRICAL SOLVER 77
This section explains why trap states need to be considered when simulating disordered
materials such as polymer/small molecule devices. It also touches on why using full SRH
recombination/trapping model is so important to get physically meaningful results from a
device model.
Traditional inorganic semiconductor such as crystalline Si or GaAs are highly ordered and
are almost completely pure it is not uncommon to get a material that is nine nines pure or,
99.9999999% pure. Organic semiconductors on the other hand are very really quite dirty with
purities often around 99.9% which is six orders of magnitude more dirty than their inorganic
counterparts, thus they have around a million times more impurities than their inorganic coun-
terparts. Added to this inorganic semiconductors are highly ordered with a regular crystalline
structure one can think of them as marbles packed on a solitaire board (see Figure 9.3), while
organic semiconductors are a floppy mess of molecules which one can think of more as spaghetti
bolognese with the spaghetti representing the polymers and the bolognese representing small
molecules (see Figure 9.4).
Figure 9.3: Left) Marbles in an ordered arrangement on a solitaire board [?]; Right) Silicon
atoms ordered within a material[?] Both systems are highly ordered.
9.12. THE NEED FOR TRAP STATES IN DEVICE ORGANIC MODELS 79
Figure 9.4: Left) A plate of spaghetti [?]; Right) A polymer packing like spaghetti. Both
systems are highly disordered.
So on one hand we have an organic material that is messy and highly disordered, and on
the other hand we have a material such as silicon that is highly pure and very ordered. This
physical differences results in a very different energetic landscape for the two materials. In the
ordered material semiconductor electrons/holes can travel freely in the conduction and valance
bands. If an electric field is applied they only experience a small resistive force. Such a band
structure is shown in Figure 9.5a. In the organic material the picture is very different, due to
the disorder and impurities the band structure is full trap states. There are so many trap states
that the carriers no longer move freely but hop between the trap states after being thermally
excited, such a band structure is shown in shown in Figure 9.5b. Thus there are two very
different charge transport mechanisms in these two materials.
Figure 9.5: a) The band structure of an ordered semiconductor such as GaAs; b) The band
structure of an disordered material such as PM6:Y6 or P3HT:PCBM.
seen that the DoS and the distribution/energetic position of charge carriers are is very different
between the two types of semiconductor.
Figure 9.6: a) The band structure of an ordered semiconductor such as GaAs; b) The band
structure of an disordered material such as PM6:Y6 or P3HT:PCBM.
The total charge density at any place in the device can be described by an integration of
the Fermi-Dirac function, and the DoS ρ.
Z ∞
n(Ef , T ) = ρ(E)f (E, Ef )dE (9.45)
Emin
Where Ef is the Fermi level. Clearly ρ will be very different for an ordered and a disordered
semiconductor. Thus the dependence of n(Ef , T ) on Ef and thus applied voltage will very
depending on what ρ is chosen for the device. In practical terms this means that a disordered
device will have a lot more traps closer to the Fermi level and thus for any given voltage it
will contain one or two orders of magnitude more charge than an ordered device, this can be
observed in Charge Extraction experiments. So if one ignores trap states when modelling a
disordered device then the function n(V oltage) will be wrong.
If n(V oltage) is not correct then the recombination rate will be wrong for any given voltage:
µ0e nf ree
µe (n) = (9.47)
nf ree + ntrap
So if your DoS is wrong (i.e. no traps). Then you have no chance of reproducing a JV curve
correctly. Summary: OghmaNano was written specifically to simulate disordered devices where
trap states are play a large role in transport and recombination. Examples of such materials are
PM6:Y6 and P3HT:PCBM. OghmaNano includes traps correctly, make sure what ever model
you are using also includes traps or it will be wrong.
(µe + µh )
Rf ree = qkr np (9.48)
2ϵ0 ϵr
where Rf ree is the recombination rate, kr is the Langevin reduction factor and all other
symbols have their usual meaning. In general Langevin recombination is a bad way to describe
recombination in OPV devices. There were some older papers from the early 2010s using this
mechanisum but the models could not self consistently describe dark and light JV curves. This
is because the mechanism assumes Brownian motion of electrons and holes and that charge
carriers of opposite polarity will recombine when they get close enough to fall into each others
electrostatic field. This picture assumes the charge carriers are free and completely neglects
the influence of trap states. It was often found that the Langevin equation could not reproduce
the experimental results and predicted recombination rates far higher than were experimental
observed. To account for this a Langevin reduction factor kr was often introduced into the
equation, and a lot of effort went into measuring kr . This need for a reduction factor pointed
at some deeper issues with the equation.
If we look at the equation for Langevin recombination we can immediately see some issues
with it. The first thing we notice is that Rf ree can only ever change as the square of the charge
density (n p), but we know from experiment Rf ree can is often a higher order than 2 e.g. (np)1.5 .
Furthermore we can see two mobility terms, however we know from the discussion from above
that mobility is a function of carrier density. So the fact that it has the wrong dependence on
carrier density and needs a reduction factor points at the mechanism on which it is based being
incorrect, and using it will always be like trying to get a square peg in a round hole.
µ0e nf ree
µe (n) = (9.50)
nf ree + ntrap
and
µ0h pf ree
µh (n) = (9.51)
pf ree + ptrap
and if one assumes the density of free charge carriers is much smaller than the density of
trapped charge carriers one can arrive at
involving free electrons (holes) recombining with trapped holes (electrons)). This was a nice
simple approach and it worked quite well in the steady state. However, to make this all work
we have to assume all electrons (holes) at any given position in space had a single quasi-Fermi
level, which meant they were all in equilibrium with each other. For this to be true, all electrons
(holes) would have to be able to exchange energy with all other electrons (holes) at that position
in space and have an infinite charge carrier thermalization velocity. This is an OK assumption
in steady state when electrons (holes) had time to exchange energy, however once we start
thinking about things happening in time domain, it becomes harder to justify because there
are so many trap states in the device it is unlikely that charge carriers will be able to act as
one equilibrated gas with one quasi-Fermi level. On the other hand the SRH mechanism does
not make this assumption, so it is a better description of recombination/trapping.
9.13. THERMAL MODELS 83
2 2 ∇m∗e
Jn = µe n∇Ec + µe n∇W̄ + W̄ µe ∇n − µe nW̄ (9.53)
3 3 m∗e
2 2 ∇m∗h
Jp = µh p∇Ev − µh p∇W̄ − W̄ µh ∇p + µp pW̄ (9.54)
3 3 m∗h
where W̄ is the average kinetic energy of the free carriers as given by 9.10. If the average
energy is assumed to be 3/2kT, 9.53 and 9.54, return to the standard drift diffusion equations.
Note the full form of these equations is required when not using MB statistics.
The thermal model can be configured in the thermal ribbon 9.7. Usually the thermal model
is turned off and a constant temperature (300K) is assumed across the device. If you wish to
adjust this temperature click on the ”Set temperature icon”. The thermal model can be turned
on by clicking on the candle to the on the far left of the thermal ribbon, so that a flame appears.
Various heating sources can be enabled or disabled by depressing the buttons to the right of
the ribbon. Boundary conditions can be set in the ”Boundary Conditions” window, thermal
constants of the material layers can be changed in the ”Thermal parameters window”.
∇Ec ∇Eh
Hj = Jn + Jh , (9.56)
q q
recombination heating (Hr ) is given by,
Hr = R(Ec − Ev ) (9.57)
Hoptical (9.58)
and heating due to the shunt resistance is given by
Jshunt Vapplied
Hshunt = . (9.59)
d
The thickness of the device is given by d. Note shunt heating is only in there to conserve
energy conservation.
Optical models
The light source editor is shown below in Figure 10.2. Each light source consists of of
illumination spectra and optical filters. In this way you can define a light source to emit
AM1.5G but then filter out various components of the spectrum. This enables one to simulate
for example a device under AM1.5G spectra but behind a thick glass contact that takes sunlight
below 300 nm. Light sources can be combined in the Light source tab, so for example one could
combine AM1.5G and light given off by a fluorescent tube. Each spectrum is multiplied by a
multiplier defined in the multiplier column this defines the relative intensity of the light sources.
In the filters tab you can define the optical filters. They can be enabled or disabled using
the Enable switch, you can select the material which will act as a filter, and decide how much
the filter attenuates in dB.
The configure tab of each filter can be used to select where the light comes from, options
are:
1. Top: Light will come form the top of the device. (y0) This is usually used with the
transfer matrix solver. See the bottom left of figure 10.3.
2. Bottom: Light will come from the bottom of the device. (y1) This is usually used with
the transfer matrix solver. See the bottom right of figure 10.3.
3. xyz: The light can come from an xyz position in the simulation space this used for FDTD
simulations or ray tracing simulations. This can be seen in to bottom right of figure 10.3.
Stop and start wavelengths can also be set in the configure tab.
85
86 CHAPTER 10. OPTICAL MODELS
2 θt 1 − cos(θt )
Fground = sin = (10.1)
2 2
Figure 10.2: Left: Building an optical spectrum; Right modifying the light sources with optical
filters.
10.1. LIGHT SOURCES 87
Figure 10.3: Top left: The configure panel of the light source editor; Top right: Illuminate from
set to ”xyz”; bottom left: Illuminate from set to ”top”; bottom right: Illuminate from set to
”bottom”.
88 CHAPTER 10. OPTICAL MODELS
Transfer matrix: This is a full transfer matrix simulation that takes into account multiple
reflections from the interfaces and optical loss within the structure. This is in effect solving
the wave equation in 1D and is an accurate (and recommended) optical model to use. See
section 10.2.4. If you are unsure which model to pick, pick this one.
Exponential profile: This is a very simple optical model that assumes light decays expo-
nentially according to the relation
I = I0 e−αx (10.2)
between layers and and assumes light is transmitted between layers according to the
formula:
n1 − n0
T = 1.0 − (10.3)
n1 + n0
No reflection is accounted for.
Flat profile: The flat profile assumes light is constant within layers and only decreases at
material interfaces according to equation 10.3. One might want to use this model when
trying to understand the charge carrier dynamics in a device but wants to remove the
effects of a non-uniform charge generation generation profile.
From file: This can be used to import generation profiles from a file. It us generally used
to import the results of more complex optical simulations such as those from external
FDTD solvers.
Constant value: If you click on the arrow to the right of the simulation button you will
be able to set the charge carrier generation rate within each layer by hand. Again this is
generally used when trying to understand charge carrier dynamics or device performance
without to consider a complex optical profile. This would allow one to plot graphs of
charge generation rate v.s. Voc etc..
10.2. TRANSFER MATRIX MODEL 89
Figure 10.4: This is the Transfer matrix optical simulation window, here you can view the
photon density and the rate of photon absorption in the device. The play button will run the
simulation, exactly which flavour of transfer matrix simulation is run will depend on which
push button you select from ribbon.
The optical simulation window has various tabs which can be used to explore how light
interacts with the device. These can be seen in figure 10.5. The the top left image shows the
photon density within the device, the image on the right shows the total photon density within
the layers of the device. Notice how the reflection of the light of various layers causes interference
patterns. The image on the bottom left shows the configuration of the optical model. A key
parameter that can be seen in this window is the Photon efficiency, this parameter determines
how many electron-hole pairs each photon that is absorbed within the active layer generates.
In organic devices it accounts for geminate recombination, in other types of devices it should
be set close to 1.0. Bottom right shows the same figure as in the top right of the figure, except
by right clicking and playing with the menu options the figure has been converted into band
diagram. This can be useful for generating band diagram figures for papers.
90 CHAPTER 10. OPTICAL MODELS
After having run an optical simulation an overview of the results can be seen in the optical
simulation window (Figure 10.4) as described above. However more in depth information can
be obtained from the Output tab of the main window as shown in Figure 10.6.
Figure 10.6: The output tab shows the output from the transfer matrix simulation. Usually
the optical output and optical snapshots files are only generated when the optical simulation
is run directly and not as part of another simulation.
In Figure 10.6 you can see two icons one called Optical output and the other called opti-
cal snapshots (in the figure it reads ”ptica output” due to the text being hidden). If you double
click on Optical output it will bring up figure 10.4. If you double click on optical snapshots it
will bring up Figure 10.7. The optical snapshot window allows the user to view photon density,
absorbed photons and electric field of the light. The information is displayed per wavelength
so a detailed overview of device performance can be gained.
92 CHAPTER 10. OPTICAL MODELS
Figure 10.7: The optical snapshots window. This allows the user to view, Electric
The optical snapshots folder was described above and when accessed through the graphical
interface allows the user to access photon density, absorbed photons and electric field of the
light as a function of wavelength. However, it is simply a normal directory and the user can
access it through a file explorer. If you open the directory using a tool such as windows explorer
you will see something comparable to what is shown on the left of Figure 10.8. You can see
folders numbered from 0 to 12 each folder represents a simulated wavelength. If you open a
directory, say number 0, you will be presented with the files shown in the right hand of figure
10.8. These files contain the following information:
These files are simply plain text, if you open one it will look like 10.9. The first line of this
file contains some information about the content of the file to help with plotting. The second
line tells the user what the x and y axis contain then the following lines contain the data.
While the optical snapshots directory allows data to be plotted per simulated wavelength, the
optical output gives 2D maps of wavelength v.s. position for various simulation parameters.
The content of the directory is shown in figure 10.10.
94 CHAPTER 10. OPTICAL MODELS
Problem 1: Simulating different length scales: Computers don’t like doing maths with
numbers that are very big and small very often this results in large computational/round-
ing errors, there is more on this in secton 9.11.1.
Problem 2: The wavelength of light: The wavelength of light is far smaller than 1 cm
thus to get sensible answers out of the simulation one will need a very large number of
mesh points correctly represent the constructive/negative interference of the light within
the layer.
Problem 3: The light will not be coherent: The transfer matrix model assumes light
comes from a single direction at 90 degrees to the interface and there are no defects in
the material. For a thick layer this will not be true.
To get around these issues OghmaNano uses two strategies. The first is to give the user the
option to only consider absorption and neglect phase changes within a layer, to form a so called
incoherent layer (this solves problem 2 and 3). This can be selected from the layer editor in the
main window see Figure 10.11. Notice in the column entitled Solve optical problem, the first
two layers (air and glass) have Yes - k selected, and the other layers have Yes - n/k selected.
This means that in layers with Yes - n/k phase changes of the light will be considered but
in the layers marked Yes - k only attenuation losses will be accounted for and thus it can be
thought of as an incoherent layer.
Figure 10.11: The layer editor showing both coherent layers and incoherent layers
To get around the problem of having to simulate different length scales (problem 1) Ogh-
maNano allows the user to set an effective optical depth for any layer. So one can for example
setup a layer in the layer editor of width 100 nm, but set it’s effective depth to a much larger
96 CHAPTER 10. OPTICAL MODELS
value such as 1 m. This works by multiplying the absorption coefficient of the layer by the
ratio:
Lef f ective
αef f ective (λ) = α(λ) (10.4)
Lsimulation
Where αef f ective is the effective absorption used in the simulation, α is the true value of
absorption for the material, Lef f ective is the effective layer thickness (say 1 m or 1 km), and
Lsimulation is the thickness of the layer in the simulation window. Not only does this approach
reduce numerical issues (problem 1) but it also allows the user to plot meaningful graphs of
the simulation results, without most of the plot taken up by the substrate and the device only
appearing as a tiny slither on the edge of the graph.
If you want to use this feature, then set up a device structure as shown in 10.11 then in the
transfer matrix window click the Optical Thickness button (top right of Figure 10.12). Then
the window 10.13 will appear. In this window you can set the effective optical thickness of any
layer. In this case we have set the glass to be 1 meter thick.
Maxwel’s equations give us the relationship between the electric and magnetic fields for a
plane wave.
∇ × E = −jωµH (10.7)
which simplifies to:
∂E
= −jωµH (10.8)
∂z
Applying equation 10.8 to equations 10.5-10.6, we can get the magnetic field on the left of
the interface
−jµωH1y = −jk1 E1+ e−jk1 z + jk1 E1− ejk1 z (10.9)
and on the right of the interface
Tidying up gives,
k + −jk1 z k − jk1 z
H1y = E1 e − E e (10.11)
ωµ ωµ 1
k + −jk2 z k − jk2 z
H2y = E2 e − E e (10.12)
ωµ ωµ 2
Boundary conditions
We now apply the electric and magnetic boundary conditions[?]
n × (E2 − E1 ) = 0 (10.13)
n × (H2 − H1 ) = 0 (10.14)
We let the interface be at z=0, which gives,
and
k1 + k2
(E2 − E2− ) − (E1+ − E1− ) =0 (10.16)
ωµ ωµ
. The wavevector is given by
2ω ωn
k== (10.17)
λ c
. We can therefore write the magnetic boundary condition as
n2 +
2E1+ = E2+ + E2− + (E2 − E2− ) (10.21)
n1
n1 n1 − n2
2E1+ = E2+ + E2− (10.22)
n1 + n2 n1 + n2
n2 +
2E1− = E2+ + E2− − (E − E2− ) (10.25)
n1 2
n1 n1 − n2
2E1− = E2+ + E2− (10.26)
n1 + n2 n1 + n2
Which is the same result as obtained in [?].
These equations become:
and
4πκ
α=− (10.34)
λ0
100 CHAPTER 10. OPTICAL MODELS
Once you have opened the simulation you should get a window which appears figure 10.15.
If you click on the play button the FDTD simulation will run, it will take around 30 seconds
to run.
Figure 10.15: The initial FDTD simulation window. Use the slider to look at the results in
time domain, and the drop down menu to select which field you are going to look at.
After the simulation has run click on the Output tab and 10.16 you will see the FDTD
snapshots folder, this can be seen in figure 10.16. If you double click on this the FDTD
snapshots window will appear which is shown in figure 10.17. This window will allow you to
step through the simulations. If you click in the files to plot box, you will be able to select
which field you plot. You will be able to select the Ey, Ex or Ez fields. In this case select the
Ey field. Then use the slider bar to step through the field as a function of time.
Figure 10.16: The output tab after having run an FDTD simulation, the key output is the
Snapshots folder where the fields are stored.
10.4. FINITE DIFFERENCE TIME DOMAIN 103
Now close the snapshot viewer and go back to the main simulation window and select the
Device tab. On the left of the window, you will see four buttons xy, yz, xz and for little square
boxes this can be seen in figure 10.18. Try clicking them to see what happens to the view of
the device. After you have had a play select the xz option, so that the screen looks like the left
hand side of 10.19. If you left click on the lenses, you will notice that you will be able to move
them around. Try to move the lenses back in the device so that your device looks more like the
right hand side of figure 10.18. If you hold shift down while dragging an object you can rotate
it on the spot.
If you right click on the lenses and select Edit you will be able to bring up the object Editor.
This shows the user all the object properties, this is visible in figure 10.20. Try changing the
object type from convex lens to concave lens by clicking the edit button and rerunning the
simulation. If you want to add your own shapes to the shape data base see section 15.2. Using
this window you can also change the material which is used in the FDTD simulation, the color
of the object as well as its position or rotational angle.
The shape enabled button enables you to turn off the shape if you don’t want it in the
simulation. If this shape were also electrically active you could also use this window to configure
the electrical parameters.
104 CHAPTER 10. OPTICAL MODELS
Figure 10.20: The object viewer. This window is brought up by right clicking on an object and
selecting Edit.
x̂ ŷ ẑ
∂E ∂ ∂ ∂
σE + ϵ =∇×H = ∂x ∂y ∂z (10.35)
∂t
Hx Hy Hz
106 CHAPTER 10. OPTICAL MODELS
∂Ex ∂Hy
σEx + ϵ =−
∂t ∂z
∂Ey ∂Hz ∂Hx
σEy + ϵ =− + (10.39)
∂t ∂x ∂z
∂Ez ∂Hy
σEz + ϵ =
∂t ∂x
for Ex
∂Ex ∂Hy
σEx + ϵ =−
∂t ∂z
t+ 12 1 t+ 12
E t+1 [] + Ext [] E t+1 [] − Ext [] Hy [2] − Hy [− 21 ]
σ x +ϵ x =−
2 ∆t ∆z
t+ 12 1 t+ 12
E t+1 [] E t+1 [] Hy [2] − Hy [− 12 ] Ext [] E t []
σ x +ϵ x =− −σ +ϵ x
2 ∆t ∆z 2 ∆t
t+ 12 1 t+ 12 (10.40)
E t+1 [] E t+1 [] Hy [2] − Hy [− 12 ] Ext [] E t []
σ x +ϵ x =− −σ +ϵ x
2 ∆t ∆z 2 ∆t
t+ 12 1 t+ 21
σ∆t + 2ϵ t+1 Hy [2] − Hy Ext [] [− 12 ]
E t []
Ex [] = − +ϵ x −σ
2∆t ∆z 2 ∆t
t+ 12 1 t+ 21
Hy [ 2 ] − Hy [− 12 ] E t [] E t [] 2∆t
Ext+1 [] = − −σ x +ϵ x
∆z 2 ∆t σ∆t + 2ϵ
for Ey
for Ez
∂Ez ∂Hy
σEz + ϵ =
∂t ∂x
t+ 12 1 t+ 12
E t+1 [] + Ezt [] E t+1 [] − Ezt [] Hy [2] − Hy [− 12 ]
σ z +ϵ z =
2 ∆t ∆x
t+ 1 t+ 1 (10.42)
E t+1 [] E t+1 [] Hy 2 [ 12 ] − Hy 2 [− 21 ] E t [] E t []
σ z +ϵ z = −σ z +ϵ z
2 ∆t1 ∆x 2 ∆t
t+ 2 1 t+ 21
Hy [ 2 ] − Hy [− 12 ] E t [] E t [] 2∆t
Ezt+1 [] = −σ z +ϵ z
∆x 2 ∆t σ∆t + 2ϵ
x̂ ŷ ẑ
∂H ∂ ∂ ∂
−σm H − µ =∇×E = ∂x ∂y ∂z (10.43)
∂t
Ex Ey Ez
∂Hx 1 ∂Ey
=
∂t µ ∂z
∂Hy 1 ∂Ez ∂Ex
= − (10.47)
∂t µ ∂x ∂z
∂Hz 1 ∂Ey
=−
∂t µ ∂x
t+ 21 1 t+ 12
1 Ey [2] − Ey [− 12 ]
Hxt+1 = ∆t + Hxt []
µ ∆z
t+ 21 1 t+ 12 1 t+ 12 1 t+ 12 1
1 Ez [ 2 ] − Ez [− 2 ] Ex [ 2 ] − Ex [− 2 ]
Hyt+1 = − ∆t + Hyt [] (10.48)
µ ∆x ∆z
t+ 21 1 t+ 12 1
1 Ey [ 2 ] − Ey [− 2 ]
Hzt+1 = − ∆t + Hxz []
µ ∆x
108 CHAPTER 10. OPTICAL MODELS
OghmaNano was primarally designed as a tool to perform detailed device simulations, however
sometimes one does not need a full device simulation to understand what is happening in your
device. On some occasions a simple circuit model comprising of resistors, capacitors, and ideal
diodes will do. For these occasions OghmaNano includes an electrical circuit solver. The circuit
solver is a drop in replacement for the drift diffusion solver in that the voltages applied to it
are defined in exactly defined in exactly the same way, the experimental modes such as time
domain, frequency domain and EQE all work with the circuit solver. Furthermore, the transfer
matrix model which is used to calculate how much light is absorbed in each layer can connected
to the diodes, thus enabling photocurrent to be correctly simulated. There are a few examples
if circuit simulations in the mode, these can be found in the Simple Diode Model folder of the
new simulation folder (see figure 11.1.).
Figure 11.1: Selecting the Simple circuit simu- Figure 11.2: Selecting the example that gener-
lation example ates the JV curve
With in this folder there are a few example circuit simulations (see Figure 11.2).
If one opens the OPV PM6:Y6 JV curve one will get a simulation that looks just like other
simulations in OghmaNano (see Figure 11.2), however this simulation has another tab called
circuit diagram in the main window, if one clicks it one should see a circuit diagram as show
in Figure 11.4. This is the circuit diagram editor. On the left is a toolbar, from the top the
toolbar provides the following functionality:
Resistor: This adds a resistor to the circuit.
Capacitor: This adds a capacitor to the circuit.
qV
Diode: This adds a standard diode to the circuit of form i(t, V ) = I0 (e nkT − 1) − Ilight ,
Ilight is taken from the optical simulations.
109
110 CHAPTER 11. SIMPLE CIRCUIT SIMULATIONS
I0 ∗V m
Non-linear element: This adds a non-linear circuit element of form i(t, V ) = V0 +d
Battery: This applies the voltage to the circuit. The voltage is taken from the contact
marked change in the contact editor.
Component: This can be used to change what component the circuit element represents.
Name: This is an human readable name given to the circuit element, you can call it what
you want.
Layer: This is the layer that the diode represents, the light current will be calculated
from the generation in this layer.
111
Figure 11.7: The output of circuit simulation window is exactly as it would be for standard
drift diffusion simulations.
Figure 11.8: The net list, showing the voltages over components and currents through compo-
nents.
As mentioned above the circuit simulator is compatible all simulation modes in OghmaNano,
by switching the simulation mode to Impedance Spectroscopy one can simulate the frequency
response of the circuit (see Figure 11.9), the result of which can be seen in Figure 11.10 where
the file real imag.csv has been plotted.
Figure 11.10: An impedance spectroscopy simulation performed using the above circuit. To do
this just change the simulation mode to IS.
OghmaNano primarily focuses on drift diffusion modelling of small area device such as solar cells
and OFETs. Drift and diffusion simulations are good at describing the microscopic operation
of devices. They allow you to understand how carriers, potential and recombination interact
on the nanometer scale. However, sometimes one wants to simulate large area devices such
as printed substrates spanning over many square centimetres. For this type of simulation one
needs to use less detailed and more efficient circuit models, this section describes how to do
that.
A common problem is designing large area contacts for solar cells. This paper [?] gives an
overview of such a problem. To start designing large area contacts open the new simulation
window in the file ribbon, and select the Large area hexagonal contact simulation (see figure
12.1). Once you have opened it you should get a window which looks like figure 12.2. This
simulation consists for a hexagonal solver contact printed on top of a PEDOT substrate. We
are going to find out how the resistance of this contact varies as a function of position.
114
12.1. DESIGNING CONTACTS FOR LARGE AREA DEVICES 115
The next step in the simulation is to build a network of resistors which approximates the
shape of the contact. To do this select the Circuit diagram tab and then click the refresh
button. This will build a resistor network of the shape shown in the device structure tab, see
figure 12.3. Here you can zoom in and examine the individual resistors, each line represents a
resistor.
12.1. DESIGNING CONTACTS FOR LARGE AREA DEVICES 117
Once this is built we can run a full simulation and calculate the resistance between the
bottom of the PEDOT:PSS layer (bottom of the green layer in figure 12.2) and the extracting
silver contact (far left yellow strip on the top of figure 12.2). Run the simulation by clicking on
the play button in the file ribbon.
The simulation may take a while to run, once it has finished you can open the output files in
the Output tab, see figure ??. If you open the file called spm R.dat it will show you a resistance
map of the structure which can be seen in figure 12.5. Other output files are listed below in
table 12.1.
Figure 12.6: A 1D resistance plot taken through the centre of the device.
The scanning probe microscopy editor can be found in the Simulation Editors ribbon in the
main window. This can be used to select if one scans the entire device or only section of it.
The editor can be seen in figure 12.7
Modelling excitons/geminate
recombination - organics only
∂X
= ∇ · D∇X + Goptical − kdis X − kF RET X − kP L X − αX 2 . (13.2)
∂t
where X is the exciton density as a function of position, D is the diffusion constant, Goptical
exciton generation rate. This value is taken straight from the optical model. The constant kdis
120
13.3. MODELING EXCITIONS IN A DEVICE 121
is exciton dissociation rate to free charge carriers. When the exciton model is switched on G in
equations equals kdis X. kF RET is the Föster resonance energy transfer, kP L X is the radiative
loss and α is an exciton-exciton annihilation rate constant. The diffusion term is defined as
L2
D= (13.3)
τ
Where L is exciton diffusion length and τ is the exciton lifetime.
122
14.2. QWERKS OF THE OGHMANANO JSON FORMAT 123
Heading Description
sim General simulation information
jv JV curve configuration
dump Defines how much information is written to disk
math Math configuration for the solver
light Optical transfer matrix configuration
light sources Configuration of light sources
epitaxy Defines the structure of the device
thermal Thermal configuration
thermal boundary Thermal boundary config.
exciton Exciton config
exciton boundary Exciton boundary config.
ray Ray tracing config.
suns voc Suns-Voc
suns jsc Suns-Jsc
ce Charge Extraction config.
transfer matrix Light transfer matrix config
pl ss PL in steady state
eqe EQE config.
fdtd FDTD config.
fits Fitting config.
mesh Electrical mesh config.
time domain Time domain config.
fx domain FX-domain config
cv CV config.
parasitic Parasitic components
spm Scanning Probe Microscopy config.
hard limit Setting hard limits for sim params.
perovskite Perovskite solver config.
electrical solver Electrical solver config.
spctral2 SPCTRAL2
lasers fs Lasers
circuit Circuit solver config.
gl OpenGL config
world Defines the world box
Many items in the json file will be given an ID number which is a 16 digit hex code, this
can be used to uniquely reference the item. An ID number can also be seen in figure 14.2.
These ID numbers are generated at random but every ID number must be unique. ID
numbers enable objects for example epitaxy layers to be identified uniquely even if they
have the same name.
14.3 Encoding
The .json files read/written by OghamNano are always stored in UTF-8 format. OghmaNano
can not handle UTF-16 or any other text encoding standards. Nowadays windows notepad
and most other apps default to UTF-8, so if you don’t know what these text storage formats
are it probably does not matter. This will only rear it’s head if you start programmatically
generating .oghma files in a language such as C++ and are using a language such as Chinese
or Russian with non Latin characters in it’s alphabet.
Databases
There are a series of databases used to define material parameters, shapes and solar spectra
etc... These are described within this section. From the graphical user interface they can be
accessed from the database ribbon, see figure 15.1.
There are two copies of these databases, one copy in the install directory of OghmaNano
C:\Program Files\OghmaNano\ and one in your home directory in a folder called oghma local.
When the model starts for the first time it copies the read only materials database from, to the
oghma local folder in your home directory. If you delete the copy of the materials database in
the oghma local folder it will get copied back next time you start the model, this way you can
always revert to the original databases if you damage the copy in oghma local.
The structure of the databases are simple, they are a series of directories with one directory
dedicated to each material or spectra etc.. E.g. there will be one directory called Ag in the
optical database which defines silver, and another directory in the spectra database called
am1.5g which defines the solar spectrum. Within each directory there is a data.json file which
defines basic material properties of the material such as what it is and what icon to use for it.
There may be a couple of .bib files that contain reference information for the object in bibtex
format. The rest of the key information will be stored in human readable .csv files. These files
can be opend in notepad or any text editor. The one exception is that in the shape database
some large files are stored in a binary format.
126
15.1. MATERIALS DATABASE 127
This database primarily contains n/k data and PL emission spectra. However it also con-
tains some electrical information and some thermal information. Each subdirectory within the
materials database identifies the material name. In each sub directory there are two key files
alpha.csv and n.csv, these files are standard text files can be opened with any text editor such
as wordpad. Alpha.csv contains the absorption coefficient of the material while n.csv contains
the the refractive index. The first column of the file contains the wavelength in m (not cm
or nm), and the second column of the file contains the absorption coefficient in m−1 (for al-
pha.csv) and the real part of the refractive index (i.e. n) in au (for n.csv). The data.json
defines the material color and any known electrical or thermal data. If the material is used in
emissive optical simulations the emission spectra of the material will be stored in a file called
emission.csv. An example material directory, in this case Alq3 can be seen in figure 15.2, a
description of these files can be found in 15.1.
Table 15.1: A summary of the files making up each material in the materials database. *The
file emssion.csv is not needed unless the material forms part of an emissive layer of an OLED
or other such light emitting device.
128 CHAPTER 15. DATABASES
Then click add material in the top right of the window, this will bring up a dialogue box
which will ask you to give a name for your new material, this is visible in figure 15.5. In this
case we called the material my new material.
a) Open a file you want to import. The file can only be a text file or a csv file.
b) Once the file has been loaded it will be visible in the text box on the left.
c) Select the units of the x-axis of the original file.
d) Select the units of the y-axis of the original file.
e) The file should appear converted into SI units on the right hand text box.
f) If you have happy with the conversion click import data and the data will be saved.
This process can be seen in 15.8, once done the imported data will appear in the material as
shown on the top left of 15.9. In this example absorption data was imported, for the material
to be used in a simulation the refractive index (real part) will also need to be imported.
15.1. MATERIALS DATABASE 131
Figure 15.9: Clockwise from the top left; The imported absorption spectra; The basic material
parameters; The electrical parameters; and the Thermal parameters.
132 CHAPTER 15. DATABASES
Figure 15.11: An example of a .nk file containing wavelength/n/k data in the materials
database. You can see it is greyed out denoting that the file is not in native OghmaNano
format.
15.2. SHAPE DATABASE 133
All physical objects within a simulation are shapes. For example the following things are all
shapes; a layer of a solar cell; a layer of an OLED; a lens; a complex photonic crystal structure;
contact stripe on an OFET; the complex hexagonal contact on a large area device (see figure
1.2 for more examples). These shapes are defined using triangular meshes for example a box
which is used to define layers of solar cells, and layers of LEDs is defined using 12 triangles,
two for each side. This box structure can be seen in figure 15.12.
Shapes are stored in the shape database, this can be accessed via the database ribbon and
clicking on the Shapes icon, see figure 15.13. By clicking on the shape database icon the shape
database window can be brought up see figure 15.14.
Try opening some of the shapes and have a look at them. You will get a window much like
that shown in figure 15.15. Figure 15.15 shows a honeycomb contact structure of a solar cell.
On the left of the window is the 3D shape, and on the right of the window is the 2D image
which was used to generate it. Overlaid on the 2D image is a zx projection of the 3D mesh.
The process of generating a shape involves first defining a 2D png image which you want to
turn into a shape, in this case the 2D image is a series of hexagons and a bar at the top. This
image is then converted into a triangular mesh using a discretization algorithm.
15.2. SHAPE DATABASE 135
Figure 15.15: An example of a shape generated from a 2D png image. The 3D shape repre-
senting a hexagonal contact from a solar cell is on the left of the figure while the original 2D
image is on the right.
Now try opening the shape morphology/1 and you should see a window such as the one
shown in figure 15.16, in the file ribbon find the icon which says show mesh. Try toggling it
of and on, you will see the 2D mesh become hidden and then visible again. This example is
a simulated bulk heterojunction morphology, but you can turn any 2D image into a shape by
using the load new image button in the file ribbon. Try opening the mesh editor by clicking on
Edit Mesh the file ribbon, you should get a window looking like figure 15.17. This configure
window has three main options x-triangles, y-triangles and method. The values in x-triangles,
y-triangles determine the maximum number of triangles used to discretize the image on the x
and y axis. Try reducing the numbers to 40 then click on Build mesh in the file ribbon.
136 CHAPTER 15. DATABASES
Figure 15.16: Clockwise from the top left; The imported absorption sepctrum; The basic
material parameters; The electrical parameters; and the Thermal parameters.
You will see that the number of triangles used to describe the image reduce. The more
triangles that are used to describe the shape the more accurately the shape can be reproduced,
however the more triangles are used the more memory a shape will take up and the slower
simulations will run. There is always a trade off between number of triangles used to discretize
a shape. Try going back to the Edit Mesh window and set method to no reduce and then click
on Build mesh from the file menu again. You will see that the complex triangular mesh as
been replaced by a periodic triangular mesh, which is more accurate but requires the full 70x70
triangles. The difference between the no reduce and Node reduce options are that no reduce
simply uses a regular mesh to describe and object and Node reduce starts off with a regular
mesh then uses a node reduction algorithm to minimize the number of triangles used in the
mesh.
Figure 15.17: The mesh editor window, accessed via the file ribbon.
As well as loading images from file, the shape editor can generate it’s own images for
standard objects used in science, the 2D image ribbon is visible in the right hand panel of
figure 15.16. There are options to generate lenses, honeycomb structures and photonic crystals.
15.2. SHAPE DATABASE 137
Each button has a drop down menu to the right of it which can be used to configure exactly
what shape is generated.
The final ribbon to be discussed is the Filters ribbon. This is used to change loaded images,
try turning on and off the threshold function. This applies a threshold to an image so that
RGB values above a given value are set to white and those below are set to black. There are
also other functions such as Blur, and Boundary which can be used to blur and image and
apply boundaries to an image.
The png files are of images in various states of modification. The data.json file stores the
configuration of the shape editor and the shape.inp file contains the 3D structure of the object.
An example of a shape.inp file is shown below in 15.19. The file format has been written so that
gnuplot can open it using the splot command without any modification. As such each triangle
is comprised of four z,x,y points (lines 21-24), the first three lines define the triangle, and the
forth line is a repeat of the first line so that gnuplot can plot the triangle nicely. The number
138 CHAPTER 15. DATABASES
of triangles in the file is defined on line 18 using the #y command. The exact magnitudes of
the z,x,y values do not matter because as soon as the shape is loaded all values are normalized
so that the minimum point of the shape sits at 0,0,0 and the maximum point from the origin
sits at 1,1,1. When being inserted into a scene, the shape is then again renormalized to the
desired size of the object in the device.
Fitting the light JV curve of an ultra large area (2.5meter x 1cm) OPV device using OghmaNano
In the same way you can fit the diode equation to a dark curve of a solar cell to extract the
ideality factor, OghmaNano can be fit to experimental data using the fitting function. Fitting
is a good way to extract physical parameters from a device such as mobility, destiny of trap
states etc. The advantage of fitting a complex model such as OghmaNano to data rather than
simplistic analytical equations is that far more detailed information can be extracted and a
better physical picture of the underlying physics obtained. This section gives an overview of
the fitting tools in OghamNano.
141
142 CHAPTER 16. FITTING EXPERIMENTAL DATA
; 4) rerunning the simulation and seeing if the difference between the experiment and
simulation has reduced; 5) If the error has reduced the change of parameter is accepted
and the process repeated with a different parameter. This process continues hundreds or
thousands of times until an acceptable fit has been achieved. Therefore, to do a fit the
model must be run thousands of times, this means that for a fit to arrive at an answer
quickly, the individual simulation when run alone must be fast. So for example if your
simulation has 1000 mesh points, when fitting try reducing this to 10. Or if you have 1000
time steps try reducing this to 100. Every speed up in the base simulation will result in
a speed up in the fitting process.
Writing files to disk is the slowest part of any computational process. Even modern SSDs
are about 30 times slower than main memory for example the maximum write speed to
an SSD is 456 MB/s where as the bandwidth of a PC3-12800 memory module is 12,800
MB/s. When you save your files on USB drives, network storage drives, or even worse
the internet aka OneDrive or Dropbox, read write speeds again drop massively. Therefore
if you want your simulation to run fast save it on a local hard disk which is ideally and
SSD and not a mechanical drive and not being mirrored over the network.
As stated above writing files to disk is slow, therefore try to minimize the number of
files your simulation kicks out. Turn off things such as snapshots, optical output and the
dynamic folder. You can check if your simulation is dumping a lot of files by opening
your simulation directory in windows explorer and counting the files. A simulation set to
write very little to disk should have about 50 files in it. If your simulation directory has
hundreds of files in it then you need to find out why.
Although you can fit with the GUI, it can be slow. I personally tend to set up fits in the
GUI but run them from the command line. There is a section on how to do this below.
Fitting writes quite a lot of files to disk. Virus killers can slow down the fitting significantly
as they scan all the data files before they are written to disk.
An example of how to fit the model to experimental data is included in the demo simulations
provided with OghmaNano. In this example a simple drift diffusion model is fit to some
experimental data. If you click on the New simulation icon in the File ribbon, this will bring
the new simulation window as seen in Figure 16.1a. Double click on the Scripting and fitting
icon, this will display the menu that can be seen in Figure 16.1b. From this menu double
click on the Fitting and parameter extraction example.(see 16.1a). If you open this simulation
you will be presented with the window shown in Figure (see 16.2), this is a simple solar cell
simulation. It should be noted that the fitting engine can be used to fit any simulation to any
data set.
16.2. THE MAIN FITTING WINDOW 143
Figure 16.1: a) The example fitting simulation can be found in the Scripting and fitting folder
b) The fitting example is called Fitting and parameter extraction example.
Figure 16.3: The fitting window can be accessed through the Automation ribbon, using the Fit
to experiment icon.
From the Automation ribbon in the simulation (Figure 16.3), click on the Fit to experiment
icon. This will bring up the fitting window (see figure 16.4). The icons in the ribbon of the
fitting window perform the following tasks:
New experiment: Currently the window is only displaying one set of experimental data
in this case a light JV curve. Using the New experiment button one can add other data
sets such as a dark JV curve to the fit. The more sets of data you fit against the more
accurate your extracted parameters will be but the harder the fit will be to perform and
the slower it will run.
144 CHAPTER 16. FITTING EXPERIMENTAL DATA
Delete experiment: This will remove a data set from the fit.
Clone experiment: This will clone the current data set to a new data set.
Import data: This will import experimental data. The import wizard is explained else-
where.
Configure: This is used to configure the fitting variables, this is explained in detail below.
One iteration data: This will run the fit just once to see how close to the experimental
data it is. It is highly recommended to use this function and change the parameters by
hand to get a closish fit before running the automated fit.
Run fit: This will run the automated fitting algorithm. It will run forever, you have to
press the button again to stop it.
Fit this data set: This enables or disables the fitting of the data set currently being
viewed.
If you click the one fit button, the fit window will update and will look like 16.5a. You
can now see the difference between the experimental and simulated curves. The green line
represents the difference between the two curves, it is called the error function. It represents
the mathematical difference between the simulated and experimental data. If you now click
Run fit to start the fitting process, you should see the curves gradually start to get closer and
the error function decrease in value. Now click on the Fit progress tab, this plots the error
function as a function of fit iterations. Watch as the error drops off. It should start looking
16.3. SETTING THE VARIABLES TO FIT 145
like figure 16.5b. This process should take about 30 seconds, if it takes longer read section 16.1
above.
Figure 16.5: a) The result of clicking the one fit button. b) The error function dropping during
a simulation.
Error function: If the variable strays out of the min-max range, this number will be added
onto the total fitting error. This idea is this scares the algorithm back into the allowed
range.
Log scale: This determines if the variable is fit on a log scale. For parameters which range
over many orders of magnitude it is often useful to make sure the algorithm can explore
the entire range.
Variable (json): This is usually hidden, but represents the full path of the parameter to
be fit in json format, it is this and not the English path that is used by the back end.
The English path is generated for humans and can indeed not be correct as long as the
json path is correct.
146 CHAPTER 16. FITTING EXPERIMENTAL DATA
Figure 16.8: a) Configuring the simplex downhill minimizer b) Configuring the thermal anneal-
ing minimizer.
There are in general two types of fitting algorithms. The first class of algorithms are gradient
decent type, these attempt to effectively roll a ball down a hill to find the best fit. This class of
algorithm can be divided into two sub types, ones which require the gradient to be calculated
and those that do not. Calculating the gradient is computationally expensive and prone to
errors with complex models. Therefore, generally more reliable fitting with methods that do
not require the gradient to be explicitly calculate is usually more robust (in my exprience).
The second class of algorithm are statistical methods, these methods have the advantage that
the user does not only get a fit of the model to the data but a statistical distribution telling
him/her how probable (and unique) the fit is. These methods therefore often require longer
run times than down hill methods.
Stall steps: If fit error does not improve in this number of steps then the fit is considered
stalled and therefore stopped.
Disable reset at level: This will stop the fit restarting if fit error drops to below this level.
Fit define convergence: This is the level of error at which the fit will stop.
Start simplex step multiplication: This defines the size of the first fitting step, a smaller
value will mean the fitting algorithm will only change the initial numbers a bit, while a
large number will change the initial numbers a lot. If you want your fit to explore the
parameter space widely set this value to be greater than 1.0. If you want your fit to more
or less stay around where your initial parameters are set this value to be less than 1.0. A
value of 2.0 is considered big, a value of 0.1 is considered small.
Enable snapshots during fit: By default snapshots are turned off during fitting as they
produce a lot of disk access to allow them the be dumped to disk set this on.
Simplex reset steps: This sets after how many steps the simplex algorithm is reset. Re-
setting the algorithm can push the answer away from the solution, but it can also pop
the solver out of a valley if it has become trapped and allow better convergence.
The advantage of this method is that it effectively looks for an answer by rolling a ball down
hill. It also does not need to take gradients of the problem, which can be beneficial in complex
problem spaces.
16.6.2 Newton
Newton’s method is included for completeness. In my experience it is quite unstable when used
with fitting. This is a gradient method, thus requires derivatives to be calculated. This can
make the fitting process unstable, but the advantage is that it can be faster than Nelder-Mead
in some circumstances for some classes of problem.
Cooling constant: Defines how quickly the problem cools, the cooling takes the form of
e−k(Tstart −Tstop ) , where Tstart is 300K and Tstop is 0K.
Annealing steps: Defines the number of steps taken to get from Tstart to Tstop .
16.7. HOW THE FITTING PROCESS WORKS 149
When you click the ”Run fit” button, OghmaNano makes a new directory inside the simulation
directory called ”sim” this is the directory in which the fitting process takes place. Inside
this directory OghmaNano will make one new directory for each data set you are trying to
fit, it will populate each directory with the sim.json (and sim.oghma) files from your main
simulation directory. At this point the sim.json files in all the directories are identical. Then
using the contents of the fit ”fit patch” (see figure 16.10) the content of each sim.json file will
be updated, this process is called patching the simulation files. This process enables you to
adjust parameters in each simulation directory to match the data set you are trying to fit. For
example you might want one data set to have optical/light/Psun set 1.0 and another to be set
to 0.0 to enable fitting of a 1 sun JV curve and a dark JV curve. After patching each directory,
the fitting process then commences. During this process fitting variables in the sim.json files
in the ”sim” directory are updated. During the fit the algorithm will often produce fits which
are worse than the current best effort, and only sometimes produce fits which are better than
the current best effort. Only when a better fit is obtained will the sim.json file be updated in
the main simulation directory and the curves in the GUI also updated.
150 CHAPTER 16. FITTING EXPERIMENTAL DATA
1. First set up your simulation you want to fit in the usual way using the GUI. Run a single
iteration of the fit to make sure it looks right. Then close the GUI.
2. Next we need to tell Windows where it can find OghmaNano, usually it has been in-
stalled in C:\Program files x86 \OghmaNano . If you open this directory you will see
lots of files. But the two key ones are oghma.exe and oghma core.exe. The file oghma.exe
is the GUI, oghma core.exe is the core solver, these are completely independent pro-
grams. The core solver can be run without the GUI. To tell windows where these files
are we need to add C:\Program files x86 \OghmaNano to the windows path. This can
be done by following these https://docs.microsoft.com/en-us/previous-versions/
16.8. FITTING WITHOUT THE GUI 151
3. Click on the start menu and type ”cmd” and enter to bring up a Windows terminal.
Type:
oghma_core.exe --help
4. Now that windows knows where oghma core.exe lives, we can navigate to our simulation
directory. Use cd to navigate to the directory where your simulation you want to fit is
saved.
5. First run the command oghma core.exe to see if your simulation runs OK. If it does not
then recheck your simulation file.
oghma_core.exe --1fit
Inspect the results in the ”sim” directory, use your favourite plotting program to compare
the results to the experimental data. Note the experimental data is stored in fit data(0-
1).inp.
7. If everything went well with the above step, you can run a real fit by typing:
oghma_core.exe --fit
Again those are double dashes before the fit command. Ctrl+C will terminate the fit.
You can check the progress of convergence by plotting fitlog.csv.
Chapter 17
Often a user will have set up a simulation structure to represent a real world device but will
then ask the question: What happens to my solar cell efficiency as I change the mobility of the
active layer? Or what happens to the wavelength of my laser output as I change the thickness
of the Quantum Well. To answer these type of questions one must change one or more material
parameters over a range of values and then examine the simulation results. Clearly this could
be done by hand but there are better ways to automate this process.
There are three main ways to automate OghamNano simulations:
1. The first method is using the parameter scan window, this is described below in sec-
tion 17.1. The parameter scan window allows a user to vary a parameter (or multiple
paramters) in steps using the graphical user interface. No knowledge of coding is required
for this approach. The parameter scan window is useful if one wants to quickly examine
how a parameter influences the results and the scenario you are examining is not very
complex. The scan window fits most users’s needs most of the time.
2. For more fine grained control over how the parameters are varied the next method is
to use Python scripting, this is described in section 17.4. Python scripting allws the
user ultimate flexibility in adjusting all simulation parameters and running simulations,
Python is widely available which makes this approach very attractive.
3. The third way is through MATLAB scripting, this is described in section 17.4.3. The
advantage of MATLAB scripting is that lots of people can code in MATLAB so makes
automating OghmaNano very accessable. The downside of using MATLAB is that it is
quite expensive and not all people have access to it. An alternative to MATLAB would
be Octave however at the time of writing it does not have a json reader/writer.
Or option 4: All the above methods rely on the same principles: The OghmaNano simulation
save file is systematic edited and the back end of the software oghma core.exe run on the
sim.oghma file to generate new results. Key to understanding how scripting works is to realize
that the sim.oghma is simply a zip file (See 14.1) with a json file (sim.json) inside it, and if one
can edit the json file (using any language you want ActionScript, C, C++, C#, Cold Fusion,
Java, Lisp, Perl, Objective-C, OCAML, PHP, Python, Ruby etc... ) the you can automate
OghmaNano.
152
17.1. THE PARAMETER SCAN WINDOW 153
Electron mobility y: One can define asymmetric mobilities in the z,x and y direction -
this is useful for OFET simulations. However by default the model assumes a symmetric
mobility which is the same in all directions. This value is defined by Electron mobility y.
Next enter the values of mobility which you want to scan over in this case we will be entering
1e-5 1-6 1e-7 1e-8 1e-9 (see figure 17.5 1) then click run scan (see figure 17.5 2). OghmaNano
will run one simulation on each core of your computer until all the simulations are finished.
Figure 17.5: Step 6: Enter the input values of mobility (or other values) you want to scan over
(1). Then run the simulations.
To view the simulation results click on the output tab this will bring up the simulation
outputs, see figure 17.6. You can see that a directory has been created for each variable that
we scanned over so 1e-5, 1e-6, 1e-7, 1e-8 and 1e-9. If you look inside each directory it will be an
exact copy of the base simulation directory. If you double click on the files with multi-colored
JV curves, see the red box in figure 17.6. OghmaNano will automaticity plot all the curves
from each simulation in one graph, see figure 17.7.
17.1. THE PARAMETER SCAN WINDOW 155
Figure 17.6: Step 7: The output tab showing the five simulation directories and the multicolored
plot files.
this update for you. Therefore in the example below we are going to set the width of the active
layer by scanning over:
epitaxy→PM6:Y6→dy of the object
Then we are going to add another line under and under parameter to scan select
mesh→mesh y→segment0→len
and set it to
under the operation dropdown box. You will see the word duplicate appear under values.
If you now run the simulation ”epitaxy→PM6:Y6→dy of the object” will be changed and
”mesh→mesh y→segment0→len” will follow it.
[100 400 1]
Listing 1: The equivalent of loops in OghmaNano, this is often quicker than typing parameters
in by hand.
Very often when optimizing a device an engineer or scientists will be want to know what
the optimum structure of a device is. For example a perovskite solar cell is made up of multiple
layers, but what is the optimum thickness of each layer? If the perovskite layer is made really
thick then lots of light will be absorbed but the down side of this is that it will take longer for
charge carriers to escape the device so recombination will be high. Conversely if the layer is
made really thin very few carriers will have a chance to recombine as they will not spend long
in the device but the downside is that not many photons will be absorbed in the first place as
the layer is thin. If one then also considers that light will reflect multiple times of interfaces
in the device setting up standing wave pattens, this will further complicate the optimization
problem as one will need to optimize not only the thickness of the perovskite layer but also
the thicknesses of all other layers at the same time. To solve this multi-parameter optimization
problem one can use the Fast optimizer within the scan window.
Electrical layer optimizer: This will vary the layer thickness of two active layers of an
organic solar cell simulation and plot the PEC/FF/Voc as a function of these layer thick-
nesses.
Optical layer optimizer (perovskite): This will vary the thickness of two layers in a per-
ovskite solar cell and plot the current generated by each layer within the device.
Optical layer optimizer (OPV): This will vary the thickness of two layers in a perovskite
solar cell and plot the current generated by each layer within the device.
In this text we will be using the Optical layer optimizer (perovskite), if you open this
simulation and navigate to the scan window, you will see a scan already set up called optimizer.
If you open it you will get a window shown in figure 17.10. This scan window looks just like
the scan windows described in the previous section, however the key difference is that the Fast
optimizer button is depressed. When this button is depressed scan results are not written to
disk, instead the key simulation parameters are tabulated and saved to disk at the end of the
simulation. Notice that in this example we are varying the thickness (dy) of the Perovskite
layer between 300nm and 500 nm in steps of 10 nm and the thickness (dy) TiO2 layer from 100
nm to 300 nm also in steps of 10 nm. Try running the simulation, the using windows explorer
17.2. MULTIPARAMETER DEVICE OPTIMIZER 159
Figure 17.10: The scan window with the optimizer button depressed ready to run a device layer
optimization.
navigate to your simulation directory, then open the folder called optimize and in there you
will find a csv file called optimizer output.csv. If you open this with Excel or LibreOffice, it
will look like figure 17.11.
If you examine figure 17.11 carefully you can see the first two columns are labelled epi-
taxy.layer2.dy and epitaxy.layer1.dy . These are the layer thicknesses we decided to change in
the scan window. For every subsequent layer in the device there are two columns, labelled lay-
erX/light frac photon generation and layerX/J. These refer to the fraction of the light absorbed
with in the layer and the maximum current this layer would produce if all the light absorbed
within the layer were turned into current. Clearly if light is absorbed within the active layer
it has a good chance of being turned into current, however if light is absorbed within the back
metallic contact then there is little chance of that light being turned into electrical current.
If you use the sorting tools included within Excel/LibreOffice you can figure out which device
structures produce the most current.
160 CHAPTER 17. AUTOMATION AND SCRIPTING
Scripting offers a more powerful way to interact with gvpdm. Rather than using the graphical
user interface, you can use your favourite programming language to interact with OghmaNano.
This gives you the option to drive simulations in a far more powerful way than can be done
using the graphical interface alone. Below I give examples of using MATLAB and python to
drive OghmaNano, but you can use any language you want which has a json reader/writer.
Pearl and Java are two languages which spring to mind.
Before you begin scripting OghmaNano you need to tell windows where OghmaNano is
installed, the default OghmaNano will be installed to C:\Program files x86 \OghmaNano, in
there you will see in this directory there are two windows executables, one called oghma.exe,
this is the graphical user interface, and a second .exe, called oghma core.exe. You can run
oghma core.exe from the command line without oghma.exe. You simply need to navigate to
a directory containing a sim.oghma folder and call oghma core.exe, this can be done from the
windows command line, matlab, python or any other scripting language. However, before you
can do this on windows, you need to add C:\Program files x86 \OghmaNano to your windows
path so that windows knows where OghmaNano is installed. An example of how to do this
on a modern version of windows is given in the link https://docs.microsoft.com/en-us/
previous-versions/office/developer/sharepoint-2010/ee537574(v=office.14)
Every new version of windows seems to move the configuration options around, so you may
have to find instructions for your version of windows.
There are two ways to interact with .oghmafiles via python, using native python commands
or by using the OghmaNano class structures, examples of both are given below.
As described in section 14.1, .oghmafiles are simply json files zipped up in an archive. If you
extract the sim.json file form the sim.oghmafile you can use Python’s json reading/writing code
to edit the .json config file directly, this is a quick and dirty approach which will work. You
can then use the os.system call to run oghma core to execute OghmaNano.
For example were one to want to change the mobility of the 1st device layer to 1.0 and then
run a simulation you would use the code listed in listing 2.
162 CHAPTER 17. AUTOMATION AND SCRIPTING
import json
import os
import sys
Listing 2: Manipulating a sim.json file with python and running a OghmaNano simulation.
If the simulation in sim.json is setup to run a JV curve, then a file called sim data.dat will
be written to the simulation directory containing paramters such as PCE, fill factor, Jsc and
Voc . This again is a raw json file, to read this file in using python and write out the value of
Vo c to a second file use the code given in listing 3.
f=open('sim_info.dat')
lines=f.readlines()
f.close()
lines="".join(lines)
data = json.loads(lines)
f=open('out.dat',"a")
f.write(str(data["Voc"])+"\n");
f.close()
Listing 3: Reading in a sim data.dat file using Python’s native json reader.
17.4. PYTHON SCRIPTING 163
17.4.2 PyOghma
One can get a long way by manipulating the OghmaNano json files directly with python as
described in 17.4.1. However, using this approach it is not possible (very easy) to run multiple
simulations at the same time. And as most modern CPUs have 8 or more cores it seems a
waste not to be running multiple simulations when generating large data sets. Furthermore,
manipulating json files in Python is not very intuitive and not very python like. For this
reason Cai Williams has written an API called PyOghma which can be used to manipulate
OghmaNano json files and also run simulations. This is a stand alone project to OhgmaNano,
so direct any questions about this to him!
import PyOghma as po
Oghma = po.OghmaNano()
Results = po.Results()
source_simulation = "\exapmle\pm6y6\"
Oghma.set_source_simulation(source_simulation)
experiment_name = 'NewExperiment'
Oghma.set_experiment_name(experiment_name)
mobility = 1e-5
trap_desnsity = 1e-18
trapping_crosssection = 1e-20
recombination_crosssection = 1e-20
urbach_energy = 40e-3
temperature = 300
intensity = 0.5
Oghma.Optical.Light.set_light_Intensity(intensity)
Oghma.Optical.Light.update()
Oghma.Thermal.set_temperature(temperature)
Oghma.Thermal.update()
Oghma.Epitaxy.load_existing()
Oghma.Epitaxy.pm6y6.dos.mobility('both', mobility)
Oghma.Epitaxy.pm6y6.dos.trap_density('both', trap_desnsity)
Oghma.Epitaxy.pm6y6.dos.trapping_rate('both', 'free to trap',..
trapping_crosssection)
Oghma.Epitaxy.pm6y6.dos.trapping_rate('both', 'trap to free',..
recombination_crosssection)
Oghma.Epitaxy.pm6y6.dos.urbach_energy('both', urbach_energy)
Oghma.Epitaxy.update()
Oghma.add_job(experiment_name)
Oghma.run_jobs()
In this example PyOghma is imported as po, and a source OghmaNano json file is manipu-
lated by changing the values of mobility, trap density, trapping rate and Urbach Energy. The
17.4. PYTHON SCRIPTING 165
Oghma.clone('NewExperiment0')
Then at the end of the code the following two lines. The first of which adds the job to the
job list in PyOghma. And the second line tells PyOghma to execute all the jobs. If there were
more than one job PyOghma would execute multiple jobs across all CPUs, until they were all
finished. If for example one wanted to run simulations with different values of mobility, one
would add each simulation to the jobs list, then call run jobs once to run the jobs across all
cores in an efficient way.
Oghma.add_job(experiment_name)
Oghma.run_jobs()
if exist("sim.oghma", 'file')==false
sprintf("No sim.oghma file found"); %Check if we have a sim.oghma file
end
if exist("sim.json", 'file')==false
unzip("sim.oghma") %if we don't have a sim.json file
%try to extract it
end
copyfile(fullfile(origonal_path,"sim.oghma"),\\
fullfile(origonal_path,base_dir,dir_name,"sim.oghma"))
%run oghma - This won't work if you have not added the oghma
%install directory to your windows paths
system("oghma_core.exe")
%Multiply mobility by 10
mobility=mobility*10;
end
Supported Operations
Supported Functions
Machine learning
This chapter overs generating machine learning datasets using OghmaNano. Typically you
would generate these datasets then use external software such as https://www.tensorflow.org
to perform the learning/prediction.
18.1.1 Introduction
One will often want to extract physical device parameters form a set of data using modelling.
For example you may have a set of JV curves and what to extract the charge carrier mobility
and recombination rate for that device. The traditional way of doing this would be to fit a
model such as OghmaNano to the data set (This is described in section 16). The drawback of
this approach is that it can take a significant amount of time to fit one data set, furthermore
when one has multiple data sets the challenge can be significant. The fitting process is complex
and requires someone who is an expert in simulation with a lot of patience to perform it. This
is the reason why fitting of device models to experimental data is only performed by a small
subset of the community.
A more modern approach to this problem is to use machine learning. With this approach
rather than trying to fit a single JV curve, one will set up a simulation representing the device
structure. However, rather than fitting the individual electrical parameters to the data set, one
will generate many thousands copies of that one device but with randomly chosen electrical
parameters. Each one of these devices is referred to as a virtual device. A simulation program
such as OghmaNano will then be used to generate JV curves for each of these virtual devices.
Thus the user will have JV curves and the corresponding electrical parameters for each virtual
device. This data set can then be used to train a machine learning model to predict the electrical
parameters from JV curves. Thus, OghmaNano is acting as a forward transform, transforming
electrical parameters to simulated experimental data, then the machine learning is acting as
the reverse transform that can reverse the simulation process. Once trained this model can
then be used to extract material paramters from real devices.
Advantages of this approach is that once the machine learning algorithm is trained it can
extract material parameters within seconds from a device and the user does not need to be
an expert at simulation to use the trained network. However, for this method to work is key
to generate a large data set on which to train the machine learning models. This process is
described in the following pages.
169
170 CHAPTER 18. MACHINE LEARNING
Figure 18.1: The main simulation window showing the Automation ribbon, within this ribbon
the Machine learning icon can be seen.
Figure 18.3: The simulation patch window, this window is used to change a value in a sub
simulation, in this example we are changing the light intensity.
Figure 18.4: The vectors window, this window defines what data is extracted from the simula-
tion as a machine learning vector.
172 CHAPTER 18. MACHINE LEARNING
Figure 18.5: The random variables that are used for the machine learning.
sets which variable is changed; the third column (Min) sets the minimum allowed value of the
random value; the forth column (Max) sets the maximum allowed value of the random value;
and the final column (Random function) dictates if the random variable should be chosen on
a log or linear scale. Log scales are recommended for variables which span multiple orders
of magnitude while linear scales are recommended if the variable spans around an order of
magnitude. A log distribution will ensure that an evenly distributed span of numbers are
chosen across the range when viewed on a log scale. An example of a linear parameter would
be Urbach energy as it typically would vary from 30 to 150 meV and example of a log variable
would be trap density as it typically can vary from 1 × 1015 m−3 − 1 × 1025 m−3 .
Once the simulation has been set up, is is now time to consider how many virtual devices
with randomized parameters one wishes to generate. If the Settings window is opened, see
Figure 18.6 one can configure how many virtual devices are generated. This is controlled with
two parameters, Simulations per archive (Nsim ) and Number of archives (Narc ). These two
numbers multiplied together gives you the total number of virtual devices generated. The
generated simulation results are saved in zip files called archives, each archive will contain Nsim
simulations. So in the example seen here, we will generate Nsim ∗ Narc 3000 virtual devices
stored across 100 zip files. It is important to note that for our example each virtual device
will contain one dark JV curve simulation and 9 light simulations. Thus the number of files
generated can quickly grow quite large. To prevent this being a problem the simulations are
run in batches, with Nsim simulations being first generated then run by OghmaNano, then
stored in a zip archive until Narc archives are generated. In this way if the generation process is
interrupted and one only looses the content of the archive currently being generated. Breaking
up the data set like this also makes it easier to copy the files and more immune to corruption.
Data generation will run across all CPU cores on your machine while archive generation will
18.1. GENERATING ML DATASETS 173
Figure 18.7: Left: The content of the Example directory; Right inside archive0.zip
Figure 18.8: Left: The content of the Example directory; Right inside archive0.zip
window 18.2, OghamNano will open each virtual simulation and compile the it to a vectors file.
The vectors file can be seen in Figure 18.9.
This vectors file is a json file containing all the data needed for training a machine learning
algorithm. Each virtual device in the data set will have a section in the file. So for example in
this figure we are looking at the section relating to device 2cbd08c0fd7eb406 (line 3), we can
see under the heading params what electrical parameters were randomly chosen for this device.
Followed by the vectors representing the dark JV curve (line 19) and the light JV curve at
0.0001 Suns (line 22). These values in this example are in Am−2 , however they will always be
the same as the file from which they are extracted. So in this case jv.dat contains Volts v.s.
Am−2 therefore the values of the vector are Am−2 . After this key device parameters such as
PCE are dumped. There will be one entry in this file for each virtual device generated. Once
you have this file, you can feed it into the machine learning algorithm of your choice. Some
users report that it is easier to feed this data into tensor flow if it is first converted into a CSV
file, this can be done using the standard Python libraries.
Figure 18.9: The final vectors file in json format. This file can be fed into machine learning
model as a training set.
Chapter 19
Output files
In general writing to disk is slow on even the most modern of computers with an SSD. The
seek speed of mechanical disks has increased little of their history. Thus often writing the
output data to the hard disk is the most time consuming part of any simulation. By default
OghmaNanowrites all output files to disk this is so the new user can get a feel for what output
OghmaNanocan provide. However to speed up simulations you should limit how much data is
written to disk. The simulation editor windows (steady state,time domain etc..) offer options
to decide how much data you want to dump to disk. This is shown in figure 19.1
[H]
Figure 19.1: Selecting which output files are written to disk.
The option ”Output verbosity to disk” can be toggled between ”None” and ”write everything
to disk”. When ”None” is selected nothing is outputted to disk at all - even simulation results
are not written. When ”write everything to disk” is selected the simulation dumps everything
to disk, so JV curves and all internal variables of the solver are written to disk so that the user
can examine how carrier densities, fermi-levels, potentials etc.. change during the course of
the simulation (see section 19.1). The second option below ”Output verbosity to disk” called
”dump trap distribution” will write out the distribution of traps in energy and position space.
176
19.1. SNAPSHOTS DIRECTORY - DIR 177
The snapshots directory (see figure 19.2) allows the user to plot all internal solver parameters.
For example figure 19.3 where the snapshots tool is being used to plot the conduction band,
valance band and quasi Fermi-levels as a function of voltage. The slider can be used to view
different voltages.
Figure 19.2: The file viewer showing the snapshots and trap map directory
178 CHAPTER 19. OUTPUT FILES
Figure 19.3: Using the snapshots tool to view the conduction band, valance band and quasi
Fermi-levels
The trap map directory contains the distribution and density of carriers in the traps as a
function of position and energetic depth. An example is given in figure 19.4
19.3. OPTICAL SNAPSHOTS - DIR 179
Figure 19.4: Plotting the position and energy dependence of carriers using the trap map tool
19.6.3 Binary .csv files - files which are not human readable
In some cases it is not practical to dump text files. Examples are when dealing with 3D
structures. In this case OghmaNanowill dump the same json header as used in the csv file but
then dump a series of C floats representing the data.
Chapter 20
Troubleshooting
If your simulation window looks like figure 20.2 and not like figure 20.1. It means either you do
not have any 3D acceleration hardware on your computer, or you do not have the drivers for it
installed. If you have an ATI/Nvidia/Intel graphics card check that the drivers are installed.
Currently, not having working 3D hardware will not affect your ability to perform simulations.
This is not a OghmaNanobug it’s a driver/hardware issue on your computer.
181
182 CHAPTER 20. TROUBLESHOOTING
FAQ
21.1 Section
21.1.1 Should I trust the results of OghmaNano?
Yes! The model it’s self has been verified against experiment [there are over 20 publications
doing this, in steady state, time domain (us-fs time scales), and fx-domain]. The basic drift-
diffusion solver was cross checked and compared against other drift diffusion models, and the
accuracy compared down to 6-9 dp. While the optical model has been compared to analytical
solutions of Maxwell’s equations. The SRH model has also been compared against analytical
models. If the answers you are getting out of OghmaNano are odd, then I would suggest to
take a look at the input parameters. If your efficienceis are high, try increasing the number
of trap states, the recombination cross sections or reducing the e/h mobilites. Finally, I would
also recommend always running the latest version, and keeping an eye on the twitter stream
for bug announcements.
183
184
Legal
22.1 License
OghmaNanocomprises of three independent components, OghmaNanogui, OghmaNanocore and
OghmaNanodata. In general everything is under the MIT license except the Python GUI which
I have released under GPL v2.0. Details can be found here.
185
186 CHAPTER 22. LEGAL
[1] Z. Liu, Z. Deng, S. J. Davis, C. Giron, and P. Ciais. Nature Reviews Earth & Environment,
Mar 2022.
[2] S. Manabe and R. T. Wetherald. Journal of Atmospheric Sciences, 1967, 24 3 241 – 259.
[4] L. Zhu, M. Zhang, J. Xu, C. Li, J. Yan, G. Zhou, W. Zhong, T. Hao, J. Song, X. Xue,
et al. Nature Materials, 2022, 21 6 656–663.
[9] P. Kaienburg, U. Rau, and T. Kirchartz. Phys. Rev. Applied, Aug 2016, 6 024001.
[12] Photolitherland. From Wikipedia, see html link in bib file for full info.
[13] B. Mills. From Wikipedia, see html link in bib file for full info.
[14] I. Vighetto. From Wikipedia, see html link in bib file for full info.
[17] F. NÉRY and J. Matos. Proceedings of the 14th European Colloquium on Theoretical and
Quantitative Geography, page 23.
[18] T. Zhan, X. Shi, Y. Dai, X. Liu, and J. Zi. Journal of Physics: Condensed Matter, 2013,
25 21 215301.
187
188 BIBLIOGRAPHY
plugins, 21
python, 157
189
190 INDEX
Use the power of device simulation to understand your experimental data from thin film
devices such as Organic Solar cells, sensors, OFET, OLEDs, Perovskite solar cells, and many
more. Unlike may other models OghmaNanois purpose built from the ground up for simulating
thin film devices made from disordered materials. Downloaded more than 25,000 times with over
200 papers published using the model, OghmaNanohas become one of they key device modelling
tools used by the scientific community developing the next generation of opto-electronic devices.
This book written by the author of OghmaNanoexplains will take you from a standing start
to being able to confidently simulate your own devices. Learn how to simulate, Organic solar
cells, Organic Field Effect Transistors, Perovskite solar cells, Organic LEDs, Large area printed
devices and many more..