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 What is OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Why OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 About this book/manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 What is the history of OghmaNano? . . . . . . . . . . . . . . . . . . . . . . . .
1.5 What is the roadmap for OghmaNano? . . . . . . . . . . . . . . . . . . . . . . .
1.6 Using OghmaNano in industrial/academic work . . . . . . . . . . . . . . . . . .
1.7 Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Installing OghmaNano
2.1 Windows (if you have admin rights) . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Windows (No admin rights) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Getting started
3.1 Simulating a JV curve of a simple solar cell . . . . . . . . . . . . . . . . . . . . .
3.1.1 Making your first simulation . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2 The output from your first simulation . . . . . . . . . . . . . . . . . . . .
3.1.3 Editing device layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.4 How do solar cells absorb light? . . . . . . . . . . . . . . . . . . . . . . .
3.1.5 Light inside solar cells . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6 Parasitic elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.7 Solar cells in the dark . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.8 The contact editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.9 Electrical parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 Scanning probe microscopy editor . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 Electrical equilibrium editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9 Steady state photoluminencense editor . . . . . . . . . . . . . . . . . . . . . . .
4.10 Charge extraction editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.10.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11 Capacitance voltage editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 2D Simulations - OFETs
5.0.1 The anatomy of a 2D simulation . . . . . . . . . . . . . . . . . . . . . . .
5.0.2 Electrical parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.0.3 Running a 2D simulation . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.0.4 Meshing in 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.0.5 Solving the drift diffusion equations over the entire device . . . . . . . .
6 2D simulation of bulk-heterojunctions
7 Meshing
7.1 What is meshing? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Different meshes for different problems . . . . . . . . . . . . . . . . . . . . . . .
7.3 The three meshes of OghmaNano . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1 Electrical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.2 Optical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.3 Thermal mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 The electrical mesh in detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5 When do I need to worry about meshing in OghamNano? . . . . . . . . . . . . .
7.5.1 Electrical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.2 Optical mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.3 Thermal mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6 Meshing tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6.1 Should I be simulating in 1D, 2D or 3D? . . . . . . . . . . . . . . . . . .
7.6.2 Speed v.s. accuracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Optical models
9.1 Light sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.1 Local ground view factor . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Transfer matrix model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.1 The user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.2 Output files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.3 Simulating optically thick layers (incoherent layers) . . . . . . . . . . . .
9.2.4 Theory of the transfer matrix method . . . . . . . . . . . . . . . . . . . .
9.2.5 Refractive index and absorption . . . . . . . . . . . . . . . . . . . . . . .
9.3 Optical mode solve 1D/2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4 Finite Difference Time Domain . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.1 Running an FDTD simulation . . . . . . . . . . . . . . . . . . . . . . . .
9.4.2 Manipulating objects in OghmaNano . . . . . . . . . . . . . . . . . . . .
9.4.3 Manipulating light sources in OghmaNano . . . . . . . . . . . . . . . . .
9.4.4 Theoretical background . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.5 Ray tracing model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14 Databases
14.1 Materials database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.1 Adding new materials - the hard way . . . . . . . . . . . . . . . . . . . .
14.1.2 Adding new materials - the easy way . . . . . . . . . . . . . . . . . . . .
14.1.3 But I have a data in nm/n/k format . . . . . . . . . . . . . . . . . . . .
14.2 Shape database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2.1 The shape file format . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.3 Filters database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS
17 Output files
17.1 Snapshots directory - dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.2 Trap map directory - dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.3 Optical snapshots - dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.4 Cache - dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.5 Equilibrium directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.5.1 Optical simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.6 File formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.6.1 .dat files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.6.2 .csv files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.6.3 Binary .csv files - files which are not human readable . . . . . . . . . . .
18 Troubleshooting
18.1 Windows gives warms me the software is unsigned . . . . . . . . . . . . . . . . .
18.2 Why don’t I get a 3D view of the device . . . . . . . . . . . . . . . . . . . . . .
19 FAQ
19.1 Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.1.1 Should I trust the results of OghmaNano? . . . . . . . . . . . . . . . . .
19.1.2 Can I use the model to simulate my exotic* material system/contacts? .
19.2 Excited states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 Legal
20.1 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20.2 Copyright of the manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20.3 Data privacy statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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.
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.
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
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
Figure 2.1: Running and installing OghmaNano. Double click on the OghmaNano icon to run
the model.
Chapter 3
Getting started
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 [3, 4, 5].
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.
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
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.)
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 14.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 19.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.]
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
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?
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
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.
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
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 8.4.4 for more
information.
Dynamic SRH traps: This is used to turn on and off dynamic SRH traps. See section
8.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 8.4 for more information.
Excitons: This enables the exciton diffusion equation to be solved along with the electrical
equations. See section 12.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?
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 [3] and described in section 15
(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:
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.
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.
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 9.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)
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 17.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
Figure 4.8: Configuring the time domain editor: Left the circuit diagram used by the time
domain window and right simulation options.
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
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
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 8.8 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.
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 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.
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.
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 8.8.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 8.8.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
Meshing
Figure 7.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.
7.3. THE THREE MESHES OF OGHMANANO
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 7.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 7.4: The optical mesh editor showing the number of points in position space and the
number of wavelength points used for the optical simulations.
7.4. THE ELECTRICAL MESH IN DETAIL
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 7.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.
7.6. MESHING TIPS
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 8
8.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φ (8.1)
EHOM O = −χ − Eg − qφ (8.2)
To obtain the internal potential distribution within the device Poisson’s equation is solved,
Ev − Fp
pl = Nv exp (8.5)
kT
or full Fermi-dirac statistics i.e.
Z ∞
nf ree (Ef , T ) = ρ(E)f (E, Ef , T )dE (8.6)
Emin
Z ∞
pf ree (Ef , T ) = ρ(E)f (E, Ef , T )dE (8.7)
Emin
where
1
f (E) = (8.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 = (8.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
∞ (8.10)
Emin
ρ(E)f (E, Ef , T )dE
Figure 8.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 8.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.
∂a
∇Ja = −q . (8.25)
∂t
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.
8.8. CONFIGURING THE ELECTRICAL SOLVER
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.
CHAPTER 8. THEORY OF DRIFT DIFFUSION MODELLING
µ0e nf ree
µe (n) = (8.29)
nf ree + ntrap
and
µ0h pf ree
µh (n) = (8.30)
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
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 probably a better description of recombination/trapping.
I would also add that I have never found a situation in OPV device modeling where SRH
recombination was unable to describe the device in question. Conclusion: SRH is better than
Langevin.
The left hand side of the device is given a reference potential of 0 V. See figure 8.2. We can
then write the energy of the LUMO and HOMO on the left hand side of the device as:
ELU M O = −χ (8.32)
EHOM O = −χ − Eg (8.33)
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 (8.34)
kT
We can then calculate the minority carrier concentration on the left hand side using Fi
Fn − ELU M O
nl = Nc exp (8.35)
kT
CHAPTER 8. THEORY OF DRIFT DIFFUSION MODELLING
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φ (8.36)
EHOM O = −χ − Eg − qφ (8.37)
we can now calculate the potential using
Fn − ELU M O
nr = Nc exp (8.38)
kT
equation 8.36.
The minority concentration on the right hand side can now also be calculated using.
Ev − FHOM O
pr = Nv exp (8.39)
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) = (8.40)
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
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
8.9. CALCULATING THE BUILT IN POTENTIAL
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.
CHAPTER 8. THEORY OF DRIFT DIFFUSION MODELLING
8.10
There are three options for thermal simulation in OghmaNano; 1) A constant temperature
through the device. This is recommended for most simulation and is set at 300K by default;
2) a lattice thermal solver 8.10.1, this solves the heat equation throughout the device taking
into account self heating. This is useful for simulating devices which get hot through their
operation; 3) A hydrodynamic thermal 8.10.2 solver which does not assume the electron, hole
and lattice temperatures are equal. This is useful for simulating heat flow over heterojunctions
or where carriers do not have time to relax to the lattice temperature.
The drift diffusion equations given in 8.20 and 8.24 are only valid in isothermal conditions.
The full transport equations as derived from the BTE [12] are given by
2 2 ∇m∗e
Jn = µe n∇Ec + µe n∇W̄ + W̄ µe ∇n − µe nW̄ (8.41)
3 3 m∗e
2 2 ∇m∗h
Jp = µh p∇Ev − µh p∇W̄ − W̄ µh ∇p + µp pW̄ (8.42)
3 3 m∗h
where W̄ is the average kinetic energy of the free carriers as given by 8.10. If the average
energy is assumed to be 3/2kT, 8.41 and 8.42, 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 8.3. 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 , (8.44)
q q
recombination heating (Hr ) is given by,
Hr = R(Ec − Ev ) (8.45)
Hoptical (8.46)
and heating due to the shunt resistance is given by
Jshunt Vapplied
Hshunt = . (8.47)
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 9.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 9.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 9.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 9.3.
Stop and start wavelengths can also be set in the configure tab.
9.1. LIGHT SOURCES
2 θt 1 − cos(θt )
Fground = sin = (9.1)
2 2
Figure 9.2: Left: Building an optical spectrum; Right modifying the light sources with optical
filters.
CHAPTER 9. OPTICAL MODELS
Figure 9.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”.
9.2. TRANSFER MATRIX MODEL
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 9.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 (9.2)
between layers and and assumes light is transmitted between layers according to the
formula:
n1 − n0
T = 1.0 − (9.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 9.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..
CHAPTER 9. OPTICAL MODELS
Figure 9.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 9.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.
9.2. TRANSFER MATRIX MODEL
After having run an optical simulation an overview of the results can be seen in the optical
simulation window (Figure 9.4) as described above. However more in depth information can
be obtained from the Output tab of the main window as shown in Figure 9.6.
Figure 9.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 9.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 9.4. If you double click on optical snapshots it
will bring up Figure 9.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.
9.2. TRANSFER MATRIX MODEL
Figure 9.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 9.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
9.8. These files contain the following information:
These files are simply plain text, if you open one it will look like 9.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 9.10.
9.2. TRANSFER MATRIX MODEL
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 8.8.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 9.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 9.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
9.2. TRANSFER MATRIX MODEL
value such as 1 m. This works by multiplying the absorption coefficient of the layer by the
ratio:
Lef f ective
αef f ective (λ) = α(λ) (9.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 9.11 then in the
transfer matrix window click the Optical Thickness button (top right of Figure 9.12). Then
the window 9.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 (9.7)
which simplifies to:
∂E
= −jωµH (9.8)
∂z
Applying equation 9.8 to equations 9.5-9.6, we can get the magnetic field on the left of the
interface
− jµωH1y = −jk1 E1+ e−jk1 z + jk1 E1− ejk1 z (9.9)
and on the right of the interface
Tidying up gives,
k + −jk1 z k − jk1 z
H1y = E1 e − E e (9.11)
ωµ ωµ 1
k + −jk2 z k − jk2 z
H2y = E2 e − E e (9.12)
ωµ ωµ 2
Boundary conditions
We now apply the electric and magnetic boundary conditions[14]
n × (E2 − E1 ) = 0 (9.13)
n × (H2 − H1 ) = 0 (9.14)
We let the interface be at z=0, which gives,
and
k1 + k2
(E2 − E2− ) − (E1+ − E1− ) =0 (9.16)
ωµ ωµ
. The wavevector is given by
2ω ωn
k== (9.17)
λ c
. We can therefore write the magnetic boundary condition as
n2 +
2E1+ = E2+ + E2− + (E2 − E2− ) (9.21)
n1
n1 n1 − n2
2E1+ = E2+ + E2− (9.22)
n1 + n2 n1 + n2
n2 +
2E1− = E2+ + E2− − (E − E2− ) (9.25)
n1 2
n1 n1 − n2
2E1− = E2+ + E2− (9.26)
n1 + n2 n1 + n2
Which is the same result as obtained in [15].
These equations become:
and
4πκ
α=− (9.34)
λ0
9.3. OPTICAL MODE SOLVE 1D/2D
Once you have opened the simulation you should get a window which appears figure 9.15.
If you click on the play button the FDTD simulation will run, it will take around 30 seconds
to run.
Figure 9.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 9.16 you will see the FDTD
snapshots folder, this can be seen in figure 9.16. If you double click on this the FDTD snapshots
window will appear which is shown in figure 9.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 9.16: The output tab after having run an FDTD simulation, the key output is the
Snapshots folder where the fields are stored.
CHAPTER 9. OPTICAL MODELS
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 9.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 9.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 9.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 9.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 14.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.
9.4. FINITE DIFFERENCE TIME DOMAIN
Figure 9.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 (9.35)
∂t
Hx Hy Hz
9.4. FINITE DIFFERENCE TIME DOMAIN
∂Ex ∂Hy
σEx + =−
∂t ∂z
∂Ey ∂Hz ∂Hx
σEy + =− + (9.39)
∂t ∂x ∂z
∂Ez ∂Hy
σEz + =
∂t ∂x
for Ex
∂Ex ∂Hy
σEx + =−
∂t ∂z
t+ 12 1 t+ 12
Ext+1 [] + Ext [] Ext+1 [] − Ext [] Hy [2] − Hy [− 21 ]
σ + =−
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 (9.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 (9.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 (9.43)
∂t
Ex Ey Ez
∂Hx 1 ∂Ey
=
∂t µ ∂z
∂Hy 1 ∂Ez ∂Ex
= − (9.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 [] (9.48)
µ ∆x ∆z
t+ 21 1 t+ 12 1
1 Ey [ 2 ] − Ey [− 2 ]
Hzt+1 = − ∆t + Hxz []
µ ∆x
9.4. FINITE DIFFERENCE TIME DOMAIN
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 10.1.).
Figure 10.1: Selecting the Simple circuit simu- Figure 10.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 10.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 10.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 10.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.
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.
CHAPTER 10. SIMPLE CIRCUIT SIMULATIONS
Figure 10.7: The output of circuit simulation window is exactly as it would be for standard
drift diffusion simulations.
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 10.9), the result of which can be seen in Figure 10.10 where
the file real imag.csv has been plotted.
Figure 10.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 [17] 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
11.1). Once you have opened it you should get a window which looks like figure 11.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.
CHAPTER 11. LARGE AREA DEVICE SIMULATION
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 11.3. Here you can zoom in and examine the individual resistors, each line represents a
resistor.
CHAPTER 11. LARGE AREA DEVICE SIMULATION
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 11.2) and the extracting
silver contact (far left yellow strip on the top of figure 11.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 11.5. Other output files are listed below in
table 11.1.
Figure 11.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 11.7
Modelling excitons/geminate
recombination - organics only
∂X
= ∇ · D∇X + Goptical − kdis X − kF RET X − kP L X − αX 2 . (12.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
CHAPTER 12. MODELLING EXCITONS/GEMINATE RECOMBINATION - ORGANICS ONLY
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= (12.3)
τ
Where L is exciton diffusion length and τ is the exciton lifetime.
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 13.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.
13.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 14.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.
CHAPTER 14. DATABASES
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 14.2, a
description of these files can be found in 14.1.
Table 14.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.
14.1. MATERIALS DATABASE
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 14.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 14.8, once done the imported data will appear in the material as
shown on the top left of 14.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.
CHAPTER 14. DATABASES
Figure 14.9: Clockwise from the top left; The imported absorption spectra; The basic material
parameters; The electrical parameters; and the Thermal parameters.
14.1. MATERIALS DATABASE
Figure 14.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.
CHAPTER 14. DATABASES
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 14.12.
Shapes are stored in the shape database, this can be accessed via the database ribbon and
clicking on the Shapes icon, see figure 14.13. By clicking on the shape database icon the shape
database window can be brought up see figure 14.14.
Try opening some of the shapes and have a look at them. You will get a window much like
that shown in figure 14.15. Figure 14.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.
CHAPTER 14. DATABASES
Figure 14.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 14.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 14.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.
14.2. SHAPE DATABASE
Figure 14.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 14.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 14.16. There are options to generate lenses, honeycomb structures and photonic crystals.
CHAPTER 14. DATABASES
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 14.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
14.2. SHAPE DATABASE
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 fitted 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.
If the fit is not working something may be wrong with the physical assumptions you have
made with your device. The model will only fit physically reasonable data so if something
is off by and order of magnitude go back and think again about what you are asking the
model to do.
Different data sets provide different types of information. For example the dark JV curve
of a solar cell provides information about the shunt resistance, the series resistance, and
some information about mobility and recombination/tale states. However, the light JV
curve provides almost no information about the shunt resistance so don’t expect a fit
to the light JV curve to provide accurate estimates of Rshunt . Alway think about what
information is contained within your data before interpreting the numbers extracted from
a fit.
The fitting works process by: 1) Running a simulation; 2) Calculating the difference
between the numerical and experimental results; 3) tweaking the simulation parameters
15.2. THE MAIN FITTING WINDOW
; 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.
Figure 15.1: a) The example fitting simulation can be found in the ”Fitting and parameter
extraction” demo. b) Once opened it will look like the window on the right.
CHAPTER 15. FITTING EXPERIMENTAL DATA
From the file ribbon then click on the ”Fit to experiment icon”. This will bring up the
fitting window (see figure 15.2). The icons in the ribbon of this 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.
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 ??a. 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
like figure ??b. This process should take about 30 seconds, if it takes longer read section 15.1
above.
Figure 15.3: a) The result of clicking the one fit button. b) The error function dropping during
a simulation.
Duplicate variables: This is used to copy one parameter to another. In this example we
are assuming the device is symmetric, so we are only fitting the electron but we are using
the ”Duplicate variables” variables tool to copy the newly fitted electron parameters on
top of the hole parameters. This enables us to vary electron mobility in the fitting process
but let the hole mobility have the same value at each step. (See figure ??).
Fit variables: This defines the variables we will fit. The more variables you fit at the
same time the longer the fit will take. Try to minimize the number of variables you are
fitting. A good tip is to start of fitting with symmetric parameters then only move to
asymmetric parameters, once the fit becomes good. (see figure 15.5).
Fit variables: This is used to force one parameter to be bigger than another.
– Stall steps: If fit error does not improve in this number of steps then the fit is
considered stalled and therefore stopped.
CHAPTER 15. FITTING EXPERIMENTAL DATA
– 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.
Resetting 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.
Figure 15.4: The fit variable window. This window is used to configure the fitting variables.
15.4. HOW THE FITTING PROCESS WORKS
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 15.6) 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.
CHAPTER 15. 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/
15.5. FITTING WITHOUT THE GUI
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 16
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 16.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 16.3.1. 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 16.3.2. 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 13.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.
16.1. THE PARAMETER SCAN WINDOW
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 16.5 1) then click run scan (see figure 16.5 2). OghmaNano
will run one simulation on each core of your computer until all the simulations are finished.
Figure 16.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 16.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 16.6. OghmaNano will automaticity plot all the curves
from each simulation in one graph, see figure 16.7.
16.1. THE PARAMETER SCAN WINDOW
Figure 16.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 16.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
16.2. MULTIPARAMETER DEVICE OPTIMIZER
Figure 16.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 16.11.
If you examine figure 16.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.
CHAPTER 16. AUTOMATION AND SCRIPTING
There are two ways to interact with .oghmafiles via python, using native python commands
or by using the OghmaNanoclass structures, examples of both are given below.
import json
import os
import sys
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.
data['epitaxy']['layer1']['shape_dos']['mue_y']=1.0
Listing 4: Reading in a sim data.dat file using Python’s native json reader.
16.3. PYTHON/MATLAB SCRIPTING OF OGHMANANO
data.epitaxy.layer[1].shape_dos.mue_y=1.0
Listing 5: Reading in a sim data.dat file using Python’s native json reader.
#!/usr/bin/env python3
import json
import os
import sys
data=json_root()
data.load("sim.json")
data.epitaxy.layer[1].shape_dos.mue_y=1.0
data.save()
os.system("coreexename.exe")
#!/usr/bin/env python3
import os
import sys
sys.path.append('c:\Program files x86\ \simname \ modules')
#Use the name of the current script to determine the directory name to make
script_name=os.path.basename(__file__).split(".")[0]
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
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 17.1
[H]
Figure 17.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 17.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.
CHAPTER 17. OUTPUT FILES
The snapshots directory (see figure 17.2) allows the user to plot all internal solver parameters.
For example figure 17.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 17.2: The file viewer showing the snapshots and trap map directory
17.2. TRAP MAP DIRECTORY - DIR
Figure 17.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 17.4
CHAPTER 17. OUTPUT FILES
Figure 17.4: Plotting the position and energy dependence of carriers using the trap map tool
17.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 18
Troubleshooting
If your simulation window looks like figure 18.2 and not like figure 18.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.
FAQ
19.1 Section
19.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.
dNSD κF RET 1 7
= (NDOP − NSD − NT D )Ns + κT T D NT2 D − ( κSSD NSD + κST D NT D )NSD (19.3)
dt NDOP 4 4
Chapter 20
Legal
20.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.
[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.
[13] F. NÉRY and J. Matos. Proceedings of the 14th European Colloquium on Theoretical and
Quantitative Geography, page 23.
[14] T. Zhan, X. Shi, Y. Dai, X. Liu, and J. Zi. Journal of Physics: Condensed Matter, 2013,
25 21 215301.
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..