0% found this document useful (0 votes)
319 views166 pages

Understanding Oghma Nano

This document provides an introduction and overview of OghmaNano, an open-source software for modeling nanoscale devices. It describes what OghmaNano is, its history and roadmap, how to install it, and how to do basic simulations of solar cells. It also outlines the different simulation modes and editors available in OghmaNano and how to set up 2D simulations of organic field-effect transistors and bulk heterojunctions. Later sections cover meshing, drift-diffusion modeling theory, and other simulation topics.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
319 views166 pages

Understanding Oghma Nano

This document provides an introduction and overview of OghmaNano, an open-source software for modeling nanoscale devices. It describes what OghmaNano is, its history and roadmap, how to install it, and how to do basic simulations of solar cells. It also outlines the different simulation modes and editors available in OghmaNano and how to set up 2D simulations of organic field-effect transistors and bulk heterojunctions. Later sections cover meshing, drift-diffusion modeling theory, and other simulation topics.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 166

Understanding OghmaNano

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.

Front cover: A picture of a thermal power station in Ratcliffe-on-Soar Nottinghamshire


taken on a cold January afternoon in 2017. Most of the emissions you see in the image is water
from the cooling towers however the gasses rising form the tall thin chimney on the left hand
side of the image are the products of burning hydrocarbons which previously buried in the
ground for about 300 million years.
This document is Copyright Roderick C. I. MacKenzie and compiled on May 30, 2023. If
you have questions or comments please contact [email protected].
Contents

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 Simulation modes and simulation editors


4.1 JV editor (Steady state simulation editor) . . . . . . . . . . . . . . . . . . . . .
4.1.1 Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3 sim info.dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.4 Steady state electrical simulation . . . . . . . . . . . . . . . . . . . . . .
4.2 Time domain editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Frequency domain editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Suns-Voc editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5 Suns-Jsc editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Quantum efficiency editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8 Theory of drift diffusion modelling


8.1 Outline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Electrostatic potential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Free charge carrier statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4 Carrier trapping and Shockley-Read-Hall recombination . . . . . . . . . . . . . .
8.4.1 Equilibrium Shockley-Read-Hall recombination . . . . . . . . . . . . . .
8.4.2 Non-equilibrium carrier trapping and recombination using Shockley-Read-
Hall trap states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.3 Free-to-free carrier recombination . . . . . . . . . . . . . . . . . . . . . .
8.4.4 Auger recombination . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5 Charge carrier transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6 Perovskite mobile ion solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7 Semiconductor interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7.1 Tunnelling through heterojunctions . . . . . . . . . . . . . . . . . . . . .
8.7.2 Doping on the interface . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.8 Configuring the electrical solver . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.8.1 Solver stability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS

8.8.2 Simulating disordered devices without traps . . . . . . . . . . . . . . . .


8.9 Calculating the built in potential . . . . . . . . . . . . . . . . . . . . . . . . . .
8.9.1 Average free carrier mobility . . . . . . . . . . . . . . . . . . . . . . . . .
8.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.10.1 Lattice thermal model . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.10.2 Energy balance - hydrodynamic transport model . . . . . . . . . . . . . .

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Simple circuit simulations


10.0.1 JV, IS, CV and other simulation modes . . . . . . . . . . . . . . . . . . .
10.0.2 Using the fitting/scan tools with circuit models . . . . . . . . . . . . . .

11 Large area device simulation


11.1 Designing contacts for large area devices . . . . . . . . . . . . . . . . . . . . . .
11.2 Simulating large area solar cells . . . . . . . . . . . . . . . . . . . . . . . . . . .

12 Modelling excitons/geminate recombination - organics only


12.1 Why you should not model excitons . . . . . . . . . . . . . . . . . . . . . . . . .
12.2 Modelling excitons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3 Modeling excitions in a device . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4 Modeling excitions in a unit cell . . . . . . . . . . . . . . . . . . . . . . . . . . .

13 The oghma file format


13.1 the .oghma simulation file format . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2 Qwerks of the OghmaNano json format . . . . . . . . . . . . . . . . . . . . . . .
13.3 Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.4 Forwards/backwards compatability of the file format . . . . . . . . . . . . . . .

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

14.4 Backups of simulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15 Fitting experimental data


15.1 Key tips and tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.2 The main fitting window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.3 Fit variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.4 How the fitting process works . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.5 Fitting without the GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16 Automation and Scripting


16.1 The parameter scan window . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16.1.1 Changing one material parameter . . . . . . . . . . . . . . . . . . . . . .
16.1.2 Duplicating parameters - changing the thickness of the active layer . . .
16.1.3 Setting constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16.1.4 The equivalent of loops . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16.1.5 Limitations of the scan window . . . . . . . . . . . . . . . . . . . . . . .
16.2 Multiparameter device optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . .
16.2.1 Using the multi parameter optimizer . . . . . . . . . . . . . . . . . . . .
16.3 Python/MATLAB scripting of OghmaNano . . . . . . . . . . . . . . . . . . . .
16.3.1 Python scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16.3.2 MATLAB scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

1.1 What is OghmaNano?


OghmaNano officially stands for Organic and hybrid Material Nano Simulation tool. Oghma
is also the name of the Gaelic God who’s appearance is described as ”sun-faced” or ”shin-
ing/radiant”, he is creditied with developing Ogham, the script in which Irish Gaelic was first
written. The creators of OghmaNano spent a lot of time making sure it can describe the light
and optical radiation correctly thus the name seems like a good fit. How you remember the
name is up to you.
OghmaNano was originally developed to be a general purpose model for simulating photo-
voltaic devices, including organic and perovskite cells. However, since its initial development
the model has expanded to simulate many other classes of optoelectronic devices including, Or-
ganic Light Emitting Diodes (OLEDs), Organic Field Effect Transistors (OFETs), large area
printed devices, optical filters, photonic crystals and many more. In general OghmaNano can
simulate any opto-electronic-device where electrons, photons (and also heat - phonons) interact.
The model has been downloaded by thousands of people across the globe (see figure 1.1) and is
used in many top universities and companies. Figure 1.2 shows some of the classes of devices
OghmaNano can simulate. Key features of OghmaNano are listed below:

ˆ 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.

ˆ Excited states/mobile ion:


– 1/2/3D Exciton solver.
– Excited singlet/triplet state solver.
– Mobile ions, doping and tunneling through interfaces.
CHAPTER 1. INTRODUCTION

ˆ Other/databases:

– Comprehensive materials databases.


– Ability to convert arbitrary shapes to 3D objects.
– Comprehensive 3D shape database.

1.2 Why OghmaNano?


By burning fossil fuels we are releasing ∼ 33.3
gigatonnes of CO2 per year [1] and thus hu-
manity is steadily changing the composition of
Earth’s atmosphere. Since 1960, CO2 in the at-
mosphere has risen by around 30% this in turn
is increasing average global temperatures[2] and
making our home planet Earth, a more difficult
place to live on. We therefore have two choices,
either cut emissions or face an existential crisis.
Thin film devices such as solar cells and OLEDs
offer a viable way to reduce our CO2 emissions,
either by providing low carbon electricity, or
Figure 1.1: A map of locations where Ogh-
providing an efficient way to use the energy once
maNano has been downloaded.
generated.
It is therefore important that technologies based on thin film devices continue to be devel-
oped and succeed. By developing and releasing OghmaNano, I hope, I am enabling scientists
throughout the world to understand these devices a little bit better, which I hope will contribute
in a very small way to solving our climate crisis.
Solar cells and OLEDs happen to come from a class of devices called diodes. This class of
devices has many uses including optical sensors, medical sensors, switches, rectifiers. Thus as
a pleasant side effect of OghmaNano the development of these devices is also being helped.

1.3 About this book/manual


This book is intended to be the definitive guide to simulating devices with OghmaNano. The
idea is that one can read this book and learn in a step-by-step way how to simulate many
modern opto-electronic devices with very limited prior knolage. However, not all aspects of
this book are yet finished. I therefore recommend you also watch the YouTube channel (and
subscribe! ;)) where I describe many of the features in more detail and give demonstrations on
the use of the model. I would suggest you treat the videos as lectures (and take notes) rather
than entertaining videos (well I hope they are entertaining too!). New releases are generally
announced on Twitter, which I also suggest you follow to make sure you are using an up-to
date version. I often release version every week, a version that is 6 months old is considered
very old indeed. Please read papers which were published from this model - do also read the
supplementary information (SI) to the papers, as I often write about the model in there. This
book starts off with explaining how to simulate organic solar cells. This is because organic
solar cells are the easiest class of device to simulate, it then moves onto Perovskite devices,
and OLEDs. More complex classes of devices follow. If you are new to simulation work or in
indeed OghmaNano, I suggest you start with the first chapters and work your way to the more
complex devices.
1.3. ABOUT THIS BOOK/MANUAL

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.4 What is the history of OghmaNano?


I started writing OghmaNano just after finishing my PhD in 2009 while taking a break for
academia and deciding what to do next. At that time it was a simple 1D drift-diffusion diode
model designed to simulate solar cells which did not take account of disorder. Over the next
14 or so years the model has been significantly expanded to model many classes of material
system and classes of devices. Since 2009 thousands of people have downloaded OghmaNano
and hundreds (the list is by definition always out of date) of people have published their own
papers using the model. If you publish with OghmaNano let me know and I will update the
list to include your paper.

1.5 What is the roadmap for OghmaNano?


The aim is to make OghmaNano a completely general opto-electronic model which can be
used by anyone to learn about and explore the world of novel opto-electronic devices. I want
OghmaNano to be an engine which people can use to push their own research forward and for
education. The exact road map on how to get there is not defined. As collaborators contact me
asking for new features I add them, what comes first depends on what people want.. I never
view OghmaNano as finished, and release improvements in small increments, therefore if you
discover and report a bug, check back in a week or so to see if it is fixed in the next version.
The same goes for this book, it evolves weekly as I write it. So if a section is missing, check
back next week it might be finished.

1.6 Using OghmaNano in industrial/academic work


You are free to use OghmaNano in industrial/academic work. In fact, I’m happy if you do so.
However, the following conditions apply:

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

2.1 Windows (if you have admin rights)


Go to the download page for OghmaNano at http://www.Ogham-Nano.com/windows.php and
download the latest version. Simply double click on it and say yes to all questions, it will then
install on your PC and an icon will appear in the start menu. I recommend you install it in
the default directory.
In general I release a new version every couple of weeks and it’s worth keeping your version
up-to-date. On modern versions of windows, windows will ask you if you want to install an
unsigned executable from an unknown author, and warn you that this could damage your
computer. The reason you get this message is because I have not cryptographically signed the
.exe file. I have not signed it because I do not own a private cryptographic key with which to
do this. To get such a key I would have to send my passport off to a key authority to prove
who I am and then pay them 500 pounds/year for the privilege of them validating who I am.
Needless to say, that I am not very excited about paying 500 pounds/year so you will just have
to click away the warnings from windows.

2.2 Windows (No admin rights)


If you don’t have admin rights to your computer it can be hard to install new software, Ogh-
maNano offers the option of running OghmaNano while not properly installed. Download
the zip file containing OghmaNano from https://www.Oghma-Nano.com/download_no_admin.
php. Once you have downloaded the zip archive, open the zip file and extract the folder pub
to c:\. Then rename the folder to be called c:\OghmaNano. Once you have done this run the
executable c:\OghamNano\OghmaNano.exe (see figure 2.1).
2.2. WINDOWS (NO ADMIN RIGHTS)

Figure 2.1: Running and installing OghmaNano. Double click on the OghmaNano icon to run
the model.
Chapter 3

Getting started

3.1 Simulating a JV curve of a simple solar cell


No matter which type of device you want to
simulate, if you are new to OghmaNano my ad-
vice is to start off with this organic solar cell
simulation. Organic solar cells are by far the
most simple class of device you can simulate,
and will let you understand the basics of the
package without having to deal with 2D effects,
perovskite ions of light emission. This chapter
will guide you through your first organic solar
cell and explain the nuts and bolts of running
simulations with OghmaNano. Once installed
OghmaNano appear on the start menu, click on
it to launch it. Once run, a window resembling Figure 3.1: The main OghmaNano simulation
that in figure 3.1 will appear. window.

3.1.1 Making your first simulation


Click on the new simulation button. This will bring up the new simulation window (see figure
3.2). From this window double click on the Organic Solar Cells icon. This will bring up a
sub menu of different types of Organic Solar cells (see figure 3.3). The majority of these device
simulations have been published in papers and calibrated to real organic solar cells. The oldest
is the (non-inverted) P3HT:PCBM device from 2012 [3] and the newest are the PM6:Y6 devices
from 2022 [4, 5]. Double click on the P3HT:PCBM simulation for this example and save the
new simulation to disk.
Once you have saved the simulation, the main OghmaNano simulation window will be
brought up (see figure 3.4). You can look around the structure of the solar cell, by dragging the
picture of the solar cell with your mouse. Try pressing on the buttons beneath the red square,
they will change the orientation to the xy, yz or xz plane. Notice the x,y,z origin marker in the
bottom left of the 3D window. The icon with four squares will give you an orthographic view
of the solar cell.
Click on the button called Run simulation, to run the simulation (hint it looks like a blue
play button and is located in the file one to the right of the ”Simulation type ribbon” ). The
function key F9 will also run the simulation. On slower computers it could take a while. Once
the simulation is done, click on the Output tab (see figure 3.1), there you will see a list of files
the simulation has written to disk.
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL

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].

What’s the best place to save your simulation?

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

3.1.2 The output from your first simulation


After you have clicked on the Run Simulation button (or pressed the function key F9) to run
the simulation, the results from the simulation will have been written to disk. To view these
results click on the Output tab in the main window. There you will see the output from the
simulation, this is visible in figure 3.1

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:

File name Description


jv.dat Current v.s. voltage curve
charge.csv Voltage v.s. charge density curve
device.dat The 3D device model
f it data ∗ .inp Experimental data for this device.
k.csv Voltage v.s. Recombination constant k
ref lect.csv Optical reflection from device
transmit.csv Optical transition through device
snapshots Electrical snapshots see 17.1
optical snapshots Optical snapshots see 17.3
sim inf o.dat Calculated Voc , Jsc etc.. see 4.1.4
cache Cache see 17.4

Table 3.1: Files produced by the JV simulation

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

Figure 3.6: The output tab

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

3.1.3 Editing device layers


Any device in OghmaNano consists of a se-
ries of layers (this is sometimes referred to as
the epitaxy - this is a term which comes from
inorganic semiconductors). The layer editor can
be accessed from the main simulation window,
under the device structure tab. This is visible
towards the top of figure 3.4, and the layer ed-
itor is visible in figure 3.7. Within the win-
dow is a table that describes the structure of
the device. The column thickness describes the
thickness of each layer. The P3HT:PCBM layer
is the layer of material which converts photons
into electrons and holes, this is commonly called
Figure 3.7: The layer editor window. the active layer.
An active layer thickness of 50nm is considered very thin for an organic solar cell, while an
active layer of 400nm is considered very thick (too thick for efficient device operation). Vary
the active layer between 50 nm and 400 nm, for each thickness record the device efficiency (I
suggest you perform the simulation for at least eight active layer widths).

More on the layer editor


The layer editor has the following columns:

ˆ 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.

ˆ Thickness: Is the layer thickness given in meters.

ˆ 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.

Which layers should be active?


A common mistake people make when starting to simulate devices is to try to make all the layers
in their device active because their logic is: Current must be flowing through them so they must
be active right? However, in for example a solar cell only the BHJ or in a perovskite device
the perovskite layer will have both species of carriers (electrons+holes) and complex effects
such as photogeneration, recombination and carrier trapping. So in this layer it makes sense to
3.1. SIMULATING A JV CURVE OF A SIMPLE SOLAR CELL

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

3.1.4 How do solar cells absorb light?


In this section we are going to learn how a solar cells interact with light. Firstly, let’s have
a look at the solar spectrum. Sunlight contains many wavelengths of light, from ultraviolet
light, though to visible light to infrared. The human eye can only see a small fraction of the
light emitted by the sun. OghmaNano stores a copy of the suns spectrum to perform the
simulations. Let’s have a look at this spectrum, to do this go to the Database tab, the choose
Optical database. This should, bring up a window as shown in figure 3.8

Figure 3.8: The optical database viewer

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

3.1.5 Light inside solar cells


As you will have seen from when you fist opened the simulation, the solar cells are often made
from many layers of different materials. Some of these materials, are designed to absorb light,
some are designed to conduct charge carriers out of the cell. The simulator has a database
of these materials, to look at the database, click on the Database tab, the click on Material
database. This should bring up a window as shown in figure 3.10, once this is open navigate
to the directory polymers, and double click on the material p3ht, in the new window click on
the tab Absorption (see figure 3.11). This plot shows how light is absorbed in the material as
a function of wavelength.

Figure 3.10: The materials database

Figure 3.11: Optical absorption of the light.

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

3.1.6 Parasitic elements


Many devices have parasitic shunt and series resistances associated with them. Shunt resis-
tances (Rs ) are caused by conduction straight through the device in thin novel devices this is
often caused by impurities in the material system. Parasitic series resistances (Rs ) are often
associated with the resistance of the contacts, the resistance of the HTL/ETL or any other
resistances which are not associated with the active layer. These resistance can be seen for a
typical solar cell in figure 3.12 also shown in the figure is the ideal diode of the device. These
resistances can be set in the parasitic component window shown in figure 3.13

Figure 3.13: The parasitic component edi-


Figure 3.12: Circuit model of a solar cell.
tor.
You can change the values of series and shunt resistance in OghmaNano, by going to the
Electrical tab and then clicking on the Parasitic components button. Due to the flat broad
contacts on a solar cell, there is often a capacitance associated with the device, this is important
for transient measurements and can be calculated with the equation:
r 0 A
C= (3.1)
d+∆
where A is the area of the device  are the hyperactivities, and d is the thickness of the
device. Often for various reasons the measured capacitance of the device does not match what
one would expect from the above equation. Therefore the term ”Other layers” (∆) has been
added to the parasitic window to account for differences between measured capacitance and
layer measured layer thicknesses.

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

3.1.7 Solar cells in the dark


So far, all the simulations we have run have been performed in the light. This is a logical, as
usually we are interested in solar cell performance only in the light. However, a lot of interesting
information can be gained about solar cells by studying their performance in the dark. We are
now going to turn off the light in the simulation. From the Optical tab set the Light intensity
(suns) drop down menu to 0.0 Suns, this can be seen in figure 3.14. The photons in the 3D
image should disappear as seen in figure 3.14.

Figure 3.14: Running OghmaNano in the


dark, the Light intensity drop-down menu Figure 3.15: A sketch of a typical dark JV
has been set to 0 Suns and the photons curve.
have disappeared from the image.
Now set the shunt resistance to 1M Ωm2 , and run a simulation. Plot the jv curve. It is
customary to plot jv curves on a x-linear y-log scale. To do this in the plot window, hit the
’l’ key to do this. The shape should resemble, the JV curve in figure 3.15. Certain solar cell
parameters affect different parts of the dark JV curve differently, the lower region is affected
very strongly by shunt resistance, the middle part is affected strongly by recombination, and
the upper part is strongly affected by the series resistance.

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

3.1.8 The contact editor


The contact editor is used to configure the electrical contacts. Which layers act as contacts is
configured in the layer editor see section 3.1.3. The contact editor has the following fields:

Figure 3.16: The contact editor

ˆ 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

3.1.9 Electrical parameters


The electrical parameter editor enables you to change the electrical parameters associated with
the active layers. Here you can change mobilities, trap constants etc. If you set a layer to active
wihtin the layer editor it will apear within the electrical paramter editor. The toolbar at the
top of the window allows you to turn off and on various electrical mechanisms including:

ˆ 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.

ˆ Excitons: This enables singlet and triplet states to be modelled.

Figure 3.17: Electrical parameter window

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:

R(x) = kn(x)p(x) (3.2)

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.

How do I know what electrical parameters to use?


For traditional semiconductors that have been studied for years such as AlGaAs or InP the
values of charge carrier mobility, band gap, electron affinity (etc..) are well known and can
simply be looked up on sites such as this or in books such in Piprek’s [6] excellent book. These
materials are highly pure (99.999999999%) (the so-called ”eleven nines” purity). This means
that when one has a sample of such a semiconductor one knows exactly what one has in the hand
and what its physical properties will be. Organic semiconductors (also other novel materials
such as perovskites etc..) on the are typically only 99.9% on a good day, that is a whole eight
orders of magnitude less pure than their traditional counterparts. This means that when one
has a sample of such a material one is not exactly sure what material one has hold of so it’s
harder to know what the values of mobility etc will be.
Furthermore, traditional semiconductors are very ordered, this means that the atoms within
them pack in a regular lattice (think marbles packing in a biscuit tin) this again helps make
their electronic properties predictable. Novel semiconductors on the other hand are typically
much more disordered than their traditional counterparts and consist of a higgldy piggidly
collection of polymers/molecules (or perovskite domains etc..), and the exact structure of these
materials depends very much on how they were deposited. This means that due to fabrication
techniques/conditions varying between different labs, nominally the same material produced
by the same suppler but can behave very differently depending on when/who/where it was
deposited by.
So this brings us back to the question that started this section, what parameters should I
use for my novel device? Here are some tips:

ˆ 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

Simulation modes and simulation


editors

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:

ˆ Plugins for various types of experiment


– jv: To calculate steady state JV curves.
– suns jsc: Simulate suns v.s. Jsc curves.
– suns voc: Suns v.s. Voc simulations.
– eqe: Simulates EQE.
– cv: Capacitance voltage simulations.
– ce: To simulate charge extraction experiments.
– time domain: A time domain solver for transient simulations.
– fx domain: Simulate the frequency domain response of a device, both electrical and
optical excitation.
– pl ss: Calculate the PL spectrum at in steady state.
– mode: Used to solve optical modes in 1/2D waveguides.
– spm: Simulates scanning probe microscopy in 3D electrical simulations.
– equilibrium: Equilibrium electrical simulations.
– exciton: Exciton simulations.
– mesh gen: Generates meshes.

ˆ Optical solver plugins


– fdtd: Finite Difference Time Domain (FDTD) optical solver.
– optics: Optical transfer matrix solver for 1D structures
– light full: Optical transfer matrix solver.
– light qe: Calculates optical profile using the experimental quantum efficiency.
– light exp: Calculates optical profile assuming exponential propagation of light in 1D
structures.
– light flat: Calculates optical profile assuming flat optical profiles in the structure.
– light constant: Assumes user given values of generation rate in optical structures.
– light fromfile: Takes a generation rate from a file.
CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

Figure 4.1: Simulation editors use this toolbar to edit the various simulation conditions your
device will experience.

In the simulation editors ribbon (see Figure 4.1) you can see icons that represent each plugin,
these are the simulation editors. By clicking on an icon in this ribbon you will be able to edit
how the plugin performs the various simulations. For example in the JV simulation editor one
can change the start/stop voltages of a voltage sweep. The JV editor can be seen in Figure 4.2.
Within each simulation editor the user can define multiple so called experiments. This can be
seen in below in Figure 4.2 and Figure 4.3, where two JV scans have been defined within the
JV editor, one called JV curve - low voltage and another called JV curve - high voltage. One
has a start voltage of 0.02V and stop voltage of 1.0V, while the other has a start voltage of
1.0V and a stop voltage of 10V. This feature is most useful in more complex experiments such
as in time domain experiments where one may want to simulate multiple different voltage/light
ramps/pulses for one device. There is no limit to how many experiments can be defined for
each plugin.

Figure 4.2: An experiment set up in the JV Figure 4.3: An experiment set up in the JV
window for high voltage simulations. window for low voltage simulations.

Once an experiment has been defined an icon representing it will appear in the simulation
mode ribbon shown in figure 4.4. You can see in the figure an icon for JV curve low voltage and
JV curve high voltage that were defined in Figure 4.2 and 4.3. You can see in Figure 4.4 that
JV curve low voltage is depressed. This means that when the simulation is run this simulation
mode will be executed. If you select another simulation mode, then when the play button (or
F9) is pressed that simulation mode will be run. Only one simulation mode can be run at a
time.
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

4.1 JV editor (Steady state simulation editor)


If you click on the JV editor icon in figure 4.5, the JV editor window will open shown below in
figure 4.6.

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.

File name Description


jv.dat Current voltage curve
charge.dat voltage charge density
k.csv Recombination constant k
sim inf o.dat Calculated Voc , Jsc etc.. see 4.1.4

Table 4.1: Files produced by the JV simulation

4.1.3 sim info.dat


This is a json file containing all key simulation metrics such as Jsc , Voc , and example sim info.dat
file is given below:

4.1.4 Steady state electrical simulation


In steady state electrical simulations such as performing a JV scan the sim info.dat outputs
the following parameters.
Symbol JSON token Meaning Units Equ. Ref
FF ff Fill factor au
PCE pce PCE percent
Pmax P max Power at Pmax
Voc V oc Voc
vocR voc R Recombination rate at Pmax
jvvoc jv voc
jvpmax jv pmax
vocnt voc nt Trapped electron carrier densiyt at Vo c
vocpt voc pt Trapped hole carrier density at Vo c
vocnf voc nf Free electron carrier densiyt at Vo c
vocpf voc pf Free hole carrier density at Vo c
Jsc J sc Jsc Am−2
jvjsc jv jsc Average charge density at Jsc m−3
jvvbi jv vbi Built in voltage V
jvgen jv gen Average generation rate
vocnp voc np
jpmax j pmax Current at Pmax Am−2
vpmax v pmax Voltage at Pmax V

Symbol JSON token Meaning Units Equ. Ref


µjsc mu jsc Avg. mobility at Jsc m2 V −1 s−1
µgeom
jsc mu geom jsc Geom. avg. mobility @ Jsc m2 V −1 s−1
micro
µgeom
jsc mu geom micro jsc Geom. avg. mobility @ Jsc m2 V −1 s−1
µvoc mu voc Average mobility @ Voc m2 V −1 s−1 p
µgeom
voc mu geom voc Geom. avg. mobility @ Voc m2 V −1 s−1 hµ ihµ i
avg √ e h
µgeom
voc mu geom micro voc Geom. avg. mobility @ Voc m2 V −1 s−1 h mue µh i
e
µpmax mu e pmax Avg. electron mobility @ Pmax m2 V −1 s−1
µhpmax mu h pmax Avg. hole mobility @ Pmax m2 V −1 s−1 p
µgeom
pmax mu geom pmax Geom. avg. mobility @ Pmax m2 V −1 s−1 hµ ihµ i
micro √ e h
µgeom
pmax mu geom micro pmax Geom. avg. mobility @ Pmax m2 V −1 s−1 h mue µh i
pmax
CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

µ mu pmax Avg. mobility @ Pmax m2 V −1 s−1


Symbol JSON token Meaning Units Equ. Ref
τvoc tau voc Recom. time at Voc s R = (n − n0)/τ [7]
τpmax tau pmax Recom. time at Pmax s R = (n − n0)/τ [7]
all
τvoc tau all voc Recomb. time at Voc s R = (n)/τ [7]
all
τpmax tau all pmax Recomb. time at Pmax s R = (n)/τ [7]
thetasrh theta srh θSRH Collection coefficient at Pmax y au p.100 5.2a[8],[9]
thetasrh theta srh θSRH Collection coefficient at Pmax au p.100 5.2a[8],[9]
4.1. JV EDITOR (STEADY STATE SIMULATION EDITOR)
CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

4.2 Time domain editor


Related YouTube videos:

Simulating optoelectronic sensors made from polymers.

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 Frequency domain editor


Related YouTube videos:

Simulating impedance spectroscopy (IS) in solar cells.

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.

Large signal or small signal

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

File name Description


Vexternal The external voltage applied to the cell
Simulation type Leave this as Large signal.
Load resistor External load resistor, this should be usually
set to zero.
FX domain mesh points The number of time steps used to simulate
each cycle
Cycles to simulate The number of complete periods of any given
frequency that are simulated
Excite with How the device is excited, either optically or
electrically.
Measure What is measured, current or voltage.
Modulation depth How deep is the DC voltage/current modu-
lated
Periods to fit The number of frequency domain cycles that
are fit to extract phase angle
Output verbosity to disk How much data is dumped to disk (described
in other sections)
Output verbosity to screen How much data is shown on the creen (de-
scribed in other sections)

Table 4.2: Files produced by the time domain simulation

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

File name Description


real imag.csv Re(i(fx)) v.s. Im(i(fx))
fx imag.csv fx v.s. Im(i(fx))
fx real.csv fx v.s. Re(i(fx))
fx abs.csv fx v.s. |i(f x)|
fx phi.csv fx v.s. 6 i(f x)
fx C.csv fx v.s. Capacitance
fx R.csv fx v.s. Resistance

Table 4.3: Files produced by the time domain simulation


CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

Figure 4.11: Configuring a frequency domain simulation


4.4. SUNS-VOC EDITOR

4.4 Suns-Voc editor


The Suns-Voc plugin can be used to calculate how open circuit voltage changes as a function
of light intensity. This can be useful for understanding tail slope and disorder in devices. A
picture of the suns-voc editor window can be seen below in figure 4.12. The window can be
used to set the start and stop light intensity. The Suns-Voc applies the voltage to the contact
that is labelled Change.

Figure 4.12: The suns-voc editor window

4.4.1 Outputs

File name Description


suns voc.csv Suns v.s. Voc curve
suns Q.csv Suns v.s. Charge density
suns mu.csv Suns v.s. average charge carrier mobility
suns tau.csv Suns v.s. recombination constant tau
Q Qtau.csv Charge density v.s. recombination constant tau
Q mu.csv Charge density v.s. charge carrier mobility
Q kbi.csv Charge density v.s. recombination prefactor kbi
Q trap filling.csv Charge density v.s. fraction of filled traps
V mu.csv Voc v.s. average charge carrier mobility

Table 4.4: Files produced by the Suns-Voc simulation


CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

4.5 Suns-Jsc editor


The Jsc editor can be used to configure suns-Jsc simulations. It enables you to set the start
light intensity, stop light intensity and how big the steps are. This is shown in figure 4.13.

Figure 4.13: The JV curve editor window

4.5.1 Outputs

File name Description


suns jsc.csv Suns v.s. Jsc curve
suns mu.csv Suns v.s. average charge carrier mobility

Table 4.5: Files produced by the Suns-Jsc simulation


4.6. QUANTUM EFFICIENCY EDITOR

4.6 Quantum efficiency editor


The quantum efficiency editor simulates both EQE and IQE. The configuration window can be
used to set the voltage at which EQE and IQE are performed.

Figure 4.14: The quantum efficiency editor window

4.6.1 Outputs

File name Description


eqe.csv Wavelength v.s. EQE
E eqe.csv Photon energy v.s. EQE
E eqe norm.csv Photon energy v.s. Normalized EQE
iqe.csv Wavelength v.s. IQE
E iqe.csv Photon energy v.s. IQE
lam Gn.csv Wavelength v.s. Average charge carrier generation rate

Table 4.6: Files produced by the Suns-Jsc simulation


CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

4.7 Scanning probe microscopy editor


When simulating a 3D structure such as a large area contact one often wants to map the resis-
tance between an x,z point on the surface of the device and the charge extraction contact. This
tool is used to apply voltages systematically over z,x regions to map out voltage or resistance
profiles in space. This tool is usually used with either full 2/3D drift diffusion simulations or
the 3D large area electrical circuit model. There is more about this tool in Section 11.

Figure 4.15: The scanning probe microscopy editor


4.8. ELECTRICAL EQUILIBRIUM EDITOR

4.8 Electrical equilibrium editor


Sometimes when studding a device, it is not necessary to simulate an entire JV curve. One
may for example just for example be interested in the band structure at 0V in the dark. The
Electrical equilibrium allows the user to setup simulations that only simulate the device at
equilibrium (0V applied bias in the dark).

Figure 4.16: Electrical equilibrium editor


CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

4.9 Steady state photoluminencense editor


This tool is used to generate photoluminencense spectra at a desired voltage, either short circuit
or open circuit.

Figure 4.17: Steady state photoluminencense editor


4.10. CHARGE EXTRACTION EDITOR

4.10 Charge extraction editor


This is the charge extraction editor, it allows
one to simulate charge extraction transients. A
charge extraction experiment is performed to
find out how much charge is in a disordered de-
vice. For this type of experiment one runs the
device at a set voltage and light intensity say
1V @ 1Sun. Then one turns off the light and
shorts the cell through a resistor and integrates
the total current outputted by the cell to get
the charge that was in the cell when it was op-
erating. Typically the cell is shorted through
the the 50 Ohm termination of an oscilloscope
so that by measuring the voltage transient and
applying V=IR one can calculate the current
and thus total charge. Figure 4.18: Charge extraction editor
This type of measurement is important in disordered devices when one wants to find out
how much charge is in the trap states. It is important to note that the experiment does not
extract all the charge in the device, it only extracts the difference between charge at operating
conditions and 0V @ 0 Suns. The background charge due to injection from the contacts/doping
is still left in the device. There is also error loss in the CE experiment due to recombination
annihilating charge before it has left the device.

4.10.1 Outputs

File name Description


time i.csv Time v.s. extraction current for a single CE experiment
time v.csv Time v.s. voltage for a single CE experiment
suns Q ce.dat Suns v.s. extracted charge including effects of recombination
v np.dat Voltage c.s. extracted charge including the effects of recombination
suns np.dat Suns c.s. extracted charge including the effects of recombination
v np ideal.dat Voltage v.s. extracted charge not including the effects of recombination
suns np ideal.dat Suns v.s. extracted charge not including the effects of recombination

Table 4.7: Files produced by the charge extraction simulation


CHAPTER 4. SIMULATION MODES AND SIMULATION EDITORS

4.11 Capacitance voltage editor


Experimentally capacitance voltage (CV) measurements are a useful way to determine doping
within a device. In OghmaNano CV measurements use a cut down version of frequency domain
simulation tool described above.

Figure 4.19: The capacitance voltage editor

4.11.1 Outputs

File name Description


real imag.dat Re(i(fx)) v.s. Im(i(fx))
fx real.dat fx v.s. Re(i(fx))
fx imag.dat fx v.s. Im(i(fx))
cv.dat fx v.s. Capacitance
cv2.dat fx v.s. 1/Capacitance2

Table 4.8: Files produced by the CV simulation


Chapter 5

2D Simulations - OFETs

Tutorial on OFET simulation.

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

5.0.1 The anatomy of a 2D simulation

Figure 5.3: The default ofet simulation.

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.

Figure 5.4: The layers of an OFET device


The contacts are defined in the contact editor shown in Figure 5.5. The contact editor has
been described in detail in section 3.1.8, however because this is a 2D simulation another two
extra columns have appeared. They are start and width. These define the start position of the
contact on the x-axis and width which describes the width of the contact on the x-axis. The
source starts at 0 m and extends to 5µm, the drain starts at 75 µm and extends to 5µm, while
the gate starts at 0 m and extends to cover the entire width of the device which is 80 µm. If you
are unsure which is the x-axis, the origin marker is visible at the bottom of figure 5.3. Notice
also that under the column Applied Voltage, the source is marked Ground this means that
0V will be applied to the ground, the gate is marked change meaning that our voltage ramp
as defined in the JV editor will be applied to this contact, and the drain is marked constant
bias with a voltage of 15V, this means that a constant voltage of 15V will be applied to this
contact. And thus we are scanning the gate contact while applying a constant voltage between
the source and the drain.

Figure 5.5: Editing the contacts on a 2D device.

5.0.2 Electrical parameters

Disabling drift diffusion in the insulator layer

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)

5.0.3 Running a 2D simulation


2D simulations are run in the same way as 1D simulations, simply click on the play button, see
figure 5.7.

Figure 5.7: Running an OFET simulation

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.

File name Description


contact iv0.dat Current voltage current curve for contact 0
contact iv1.dat Current voltage current curve for contact 1
contact iv2.dat Current voltage current curve for contact 2
contact jv0.dat Current density voltage current curve for contact 0
contact jv1.dat Current density voltage current curve for contact 1
contact jv2.dat Current density voltage current curve for contact 2
snapshots Simulation snapshots

Table 5.1: Files produced by the steady state OFET simulation

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.

Adjusting the mesh


The electrical mesh editor can be accessed through the electrical ribbon in the main window.
The mesh editor is shown in Figure 5.9, here the x and y mesh can be adjusted. The number
CHAPTER 5. 2D SIMULATIONS - OFETS

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.

Figure 5.9: Meshing

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

Simulating 2D BHJ structures in OghmaNano

To be written but there is an example simulation in the new simulation window.


Chapter 7

Meshing

7.1 What is meshing?


Meshing is the process of taking a continuous problem space, say a bar along which heat
is conducted form a candle to a block of ice and turning this into a discrete computational
problem. This usually involves picking a series of points along this space and using these to
represent the entire problem (see Figure 7.1). The reason we need to break a region up into
points to model it is because computers have finite memory and can not model a continuum
very easily. If you want more details why and how this is done search for basic finite difference
tutorials on the web.

Figure 7.1: An example of a continuous problem broken up (or meshed) into a series of discrete
points.

7.2 Different meshes for different problems


In simple terms OghmaNano solves three physical models, the optical model describing light, the
thermal model describing thermal effects and the electrical model describing electrical effects.
The physical effects from each of these three models often happen on different length scales so
need different meshes. For example:

ˆ 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.

7.3 The three meshes of OghmaNano


The thermal, optical and electrical ribbons are shown below in Figure 7.2, it can be seen that
in each of these ribbons is a a mesh button, where the thermal, optical and electrical meshes
can be defined.

Figure 7.2: The thermal, electrical and optical ribbons.

7.3.1 Electrical mesh


If you click on the electrical mesh button in the electrical ribbon of the main window a window
looking like Figure 7.3 will appear. The buttons marked 1D, 2D and 3D at the top of the
window in Figure 7.3 can be used to toggle the simulation between 1D, 2D and 3D modes. In
this example the mesh is set up for a 2D OFET simulation, so y and x are depressed. Note,
if you want to do 2D or 3D simulations you are best off using a default 2D simulation, such
as the OFET simulation. This is because to do 2D/3D simulations, a special newton solver
configuration will be needed. The tables that looks like a spreadsheet is used to configure the
mesh. The columns thickness and mesh points, determine the thickness of the mesh layer and
the number of points on the mesh layer. The column, step multiply by how much to grow each
step. For the second row of the x mesh the step multiplier is set to 1.1 which means the distance
between the points will grow by 10% each mesh point. The buttons marked left/right, defines
on which side the mesh layer is generated from. The resulting meshes are plotted in the graphs
at the bottom of the window.
CHAPTER 7. MESHING

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.

7.3.2 Optical mesh


The optical mesh window is shown below in Figure 7.4, this is more or less identical to the
electrical mesh window except it also has a panel to configure which wavelengths are simulated
in a simulation. These wavelengths are used in ray tracing, FTDT simulations and transfer
matrix simulations. In any simulation where a wavelength range is defined this mesh will be
used.

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

7.3.3 Thermal mesh

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

7.4 The electrical mesh in detail

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.

Figure 7.5: A 1D diagram of the mesh


CHAPTER 7. MESHING

7.5 When do I need to worry about meshing in Ogham-


Nano?

7.5.1 Electrical mesh

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.

7.5.2 Optical mesh

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.

7.5.3 Thermal mesh

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

7.6 Meshing tips


7.6.1 Should I be simulating in 1D, 2D or 3D?
When deciding if you should perform 1D, 2D or 3D, simulations, consider the dimensionality
of your problem. For example if you consider a solar cell, it is only a few micros thick, and
there is rapid variation in the structure, charge densities, mobilities, and doping as a function
of depth (y). However, the structure will not vary very in the lateral (xz) plane. Therefore, in
general to capture all interesting effects present within a solar cell one only needs a 1D model.
If one now considers OFETs, there is both vertical an lateral current flow, therefore one can
not get away with a 1D model any more, as one must simulate both vertical current flow, and
current between the source and the drain, thus one needs a 2D simulation. As the number of
dimensions increases, computation speed will decrease, therefore my general advice is to use
the minimum number of dimensions possible to solve your problem.
In short try to make your simulation as simple as possible as it will save you time and effort.
Generally the following geometries could be used for various types of devices:

Device type Number of dimentions


Solarcells 1D
Opticalf ilter 1D
OF ET 2D

Table 7.1: How many dimensions should I use to simulate my device.

7.6.2 Speed v.s. accuracy


When setting up your device in OghmaNano you should try to:

ˆ 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

Theory of drift diffusion modelling

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.

8.2 Electrostatic potential


The conduction band/valance band (or LUMO/HOMO in organic semiconductor speak) are
defined as

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,

∇ · 0 r ∇ = q(nf + nt − pf − pt − Nad + −Nion + a), (8.3)


where nf , nt are the carrier densities of free and trapped electrons; pf and pt are the carrier
densities of the free and trapped holes; and Nad is the doping density. Nion is the background
density of perovskite ions and a is the density of mobile ions.

8.3 Free charge carrier statistics


For free carriers the model can either use Maxwell-Boltzmann statistics i.e.
 
Fn − Ec
nl = Nc exp (8.4)
kT
8.4. CARRIER TRAPPING AND SHOCKLEY-READ-HALL RECOMBINATION

 
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

8.4 Carrier trapping and Shockley-Read-Hall recombi-


nation
The model provides two methods to account for carrier trapping and recombination via trap
states. The first by equation 8.11, this assumes that the trapped carrier distribution has
reached equilibrium. It also assumes there are relatively few trapped charge carriers compared
the the number of free carriers, and thus the trapped charges do not significantly change the
electrostatic potential. These assumptions are valid when the material is very ordered (i.e.
GaAs) or at a push in steady state for some moderately disordered material systems. However
if you wish to simulate transient or frequency domain experiments, then you can no longer use
8.11. Instead, one must use a non-equilibrium SRH approach which does not assume trapped
carriers have reached equilibrium. Unlike many other models, OghmaNano has such a non-
equilibrium SRH model built in this is described in section 8.4.2. In fact, it is turned on by
default so when using OghmaNano you have to go out of your way to turn on equation 8.11.
To understand the importance of such a dynamic solver, consider the following example:
You are performing a transient photocurrent experiment (TPC). You photo-excite your device
with a laser, carriers very quickly become trapped during the first 1-2µs after photoexcitation,
as time passes, the carriers gradually de-trap from deeper and deeper trap states and produce
the long photocurrent transient [10]. These transients can often extend out to over 1 second
after photo-excitation. Current at the start of the transient originates from shallow traps while
current at the end of the transient originates from carriers from very deep trap levels. To
simulate this one has to be able to account for the gradual emptying of trap states firstly
starting at the shallow traps, then progressing to deeper and deeper trap states. Were one to
assume all trap states were in equilibrium one would not be able to simulate this process.
So in summary, although many others have used 8.11 to model disordered devices in time
DON’T you results won’t make sense. If you want to simulate anything but steady state in an
CHAPTER 8. THEORY OF DRIFT DIFFUSION MODELLING

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

ordered device turn ON the non-equilibrium solver.

8.4.1 Equilibrium Shockley-Read-Hall recombination


For some very ordered material systems where there are not many trap states it is enough to
describe SRH trap states using the equation:
np − n0 ∗ p0
RSRH = (8.11)
τp (n + n1 ) + τn (p + p1 )
where RSRH is the rate of SRH recombination, n, p are the density of free charge carriers
n0 , p0 , are the equilibrium density of charge carriers, τn,p are the SRH life times and n1 and p1
are the trapped electron and hole densities when the Fermi-level matches the trap state energy.
This can be turned on in the electrical parameter editor.

8.4.2 Non-equilibrium carrier trapping and recombination using Shockley-


Read-Hall trap states
To describe charge becoming trapping into trap states and recombination associated with those
states the model uses Shockley-Read-Hall (SRH) theory. A 0D depiction of this SRH recom-
bination and trapping is shown in figure 8.1, the free electron and hole carrier distributions
are labeled as n free and p free respectively. The trapped carrier populations are denoted with
n trap and p trap , they are depicted with filled red and blue boxes. SRH theory describes
the rates at which electrons and holes become captured and escape from the carrier traps. If
one considers a single electron trap, the change in population of this trap can be described
by four carrier capture and escape rates as depicted in figure 8.1. The rate rec describes the
rate at which electrons become captured into the electron trap, ree is the rate which electrons
can escape from the trap back to the free electron population, rhc is the rate at which free
holes get trapped and rhe is the rate at which holes escape back to the free hole population.
Recombination is described by holes becoming captured into electron space slice through our
1D traps. Analogous processes are also defined for the hole traps.
For each trap level the carrier balance 8.12 is solved, giving each trap level an independent
quasi-Fermi level. Each point in position space can be allocated between 10 and 160 independent
trap states. The rates of each process rec , ree , rhc , and rhe are give in table 8.1.
δnt
= rec − ree − rhc + rhe (8.12)
∂t
8.4. CARRIER TRAPPING AND SHOCKLEY-READ-HALL RECOMBINATION

Mechanism Symbol Description


Electron capture rate rec nvth σn Nt (1 − f )
Electron escape rate ree en Nt f
Hole capture rate rhc pvth σp Nt f
Hole escape rate rhe ep Nt (1 − f )

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.

The escape probabilities are given by:


 
Et − Ec
en = vth σn Nc exp (8.13)
kT
and
 
Ev − Et
ep = vth σp Nv exp (8.14)
kT
where σn,p are the trap cross sections, vth is the thermal emission velocity of the carriers, and
Nc,v are the effective density of states for free electrons or holes. The distribution of trapped
states (DoS) is defined between the mobility edges as

ρe/h (E) = N e/h exp(E/Eue/h ) (8.15)


where , Ne/h is the density of trap states at the LUMO or HOMO band edge in states/eV
e/h
and where EU is slope energy of the density of states.
The value of Nt for any given trap level is calculated by averaging the DoS function over
the energy (∆E ) which a trap occupies:
R E+∆E/2
E−∆E/2
ρe EdE
Nt (E) = (8.16)
∆E
The occupation function is given by the equation,
1
f (Et , Ft ) = Et −Ft (8.17)
e kT +1
Where, Et is the trap level, and Ft is the Fermi-Level of the trap. The carrier escape rates for
electrons and holes are given by

8.4.3 Free-to-free carrier recombination


A free-carrier-to-free-carrier recombination (bi-molecular) pathway is also included. However,
most organic solar cells have a great deal of trap states and an ideality factor greater than
1.0 suggesting that free-to-free recombination is not the dominant mechanism. Free-to-free
recombination is described using equation 8.18

Rf ree = kr (nf pf − n0 p0 ) (8.18)

8.4.4 Auger recombination


Auger recombination is as
CHAPTER 8. THEORY OF DRIFT DIFFUSION MODELLING

RAU = (CnAU n + CpAU p)(np − n0 p0 ) (8.19)


where CnAU and CpAU are the Auger coefficient of electrons and holes in m6 s−1 . This can be
set in the electrical paramter editor.

8.5 Charge carrier transport


To describe charge carrier transport, the bi-polar drift-diffusion equations are solved in position
space for electrons,
Jn = qµe nf ∇Ec + qDn ∇nf , (8.20)
and holes,
Jp = qµh pf ∇Ev − qDp ∇pf . (8.21)
Conservation of charge carriers is forced by solving the charge carrier continuity equations
for both electrons,
∂n
∇Jn = q(R − G + ), (8.22)
∂t
and holes
∂p
∇Jp = −q(R − G + ). (8.23)
∂t
where R and G are the net recombination and generation rates per unit volume respectively.

8.6 Perovskite mobile ion solver


The mobile ion solver is implemented after the work of Calado [11]

Ja = qµa af ∇Ev − qDa ∇af . (8.24)

∂a
∇Ja = −q . (8.25)
∂t

8.7 Semiconductor interfaces


8.7.1 Tunnelling through heterojunctions
Tunnelling of holes through hetrojunction interfaces are is give by

Jp = qTh ((p1 − peq eq


1 ) − (p0 − p0 )), (8.26)

and for electrons

Jn = −qTe ((n1 − neq eq


1 ) − (n0 − n0 )). (8.27)
Where Th and Te represent the rate constants of the tunnelling. This can be configured in
the interfaces editor.

8.7.2 Doping on the interface


Using the interface editor, layers of doping measuring one mesh point thick can be added to
either side of the interface. This is useful for OFET simulations where interface charge is
8.7. SEMICONDUCTOR INTERFACES

important to the turn on voltage.


CHAPTER 8. THEORY OF DRIFT DIFFUSION MODELLING

8.8 Configuring the electrical solver


Behind OghmaNano are a series of non-linear solvers that solve the electrical equations in a
highly efficient way. These can be configured by going to the electrical tab. There you will see
the Drift diffusion button, to the left of that is an arrow. If you click on this it will bring up a
window which allows you to configure the ”Newton solver”. The options are described below.
Related YouTube videos:

How to optimize simulations in OghmaNano so they run faster

ˆ 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.

ˆ Newton 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

– newton: The standard 1D Newton solver.


– newton 2D: The standard 2D Newton solver.
– newton norm: The standard 1D Newton solver but with Slotboom normalization.
This is handy when solving systems with large difference in density between minority
and majority carrier density.
– poisson 2d: A 2D Poisson solver with no drift diffusion equations.

ˆ Complex matrix solver:

ˆ Slotboom T0: Slotboom variable for the newton norm solver.

ˆ Slotboom D0: Slotboom variable for the newton norm solver.

ˆ Slotboom n0: Slotboom variable for the newton norm solver.

ˆ Use newton cache (experimental): Cache large problems to disk - experimental.

ˆ Quit on convergence problem: Quit on convergence problem. Quite often

ˆ Quit on inverted Fermi-level:

ˆ Solver output verbosity:

8.8.1 Solver stability


Avoiding very big and very small numbers
Try opening up MATLAB (Octave if you are on Linux) and typing in the following equation
((1e − 1 + 1e1) − 1e1)/1e − 1. Before pressing enter, try to evaluate it in your head. the 1e1
and the −1e1 cancel leaving 1e−11e−1
which equates to 1. Now try replacing the powers to 1 with
to the 19, so type in ((1e − 19 + 1e19) − 1e19)/1e − 19, again evaluate this in your head. Again ,
1e−19
1e19 and the −1e19 cancel leaving 1e−19 which equates to 1 Now let the computer evaluate the
expression. In fact this time the computer does not give you 1 but gives you 0. Double check
that you typed it in correctly... you did so what is happening. Why is the computer giving
me an answer which is 100% wrong. The answer is easy, computers have a limited precision.
This means that they can only store a limited number of decimal places. On a modern PC it’s
about 15 decimal places. After this the computer starts ignoring the numbers. So when we
added (1e − 19 + 1e19) the computer could not keep track of the decimal places so it assumed
that the answer was exactly 1.000000000000000e19 and not 1.0000000000000000001e19, then
when we subtracted −1e19 from the answer the computer gave us zero instead of 1e − 19. The
1e − 19 was lost in the precision.
All computers are affected by this no matter how powerful they are, this has important
implications when solving device equations. If you have too big a spread of numbers in your
simulation (matrix/Jacobian) the computer won’t be able to solve it easily. So if you have
very low values of mobility say 1e − 19 and very big values say 1e5 the computer wills start to
have problems solving the electrical problem. There fore generally try to reduce the spread of
parameters in you model. This is important when simulating insulators.

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

Very big steps in the band gap


Big steps in the band gap will produce very small and very large carrier densities - see Avoiding
very big and very small numbers above.

8.8.2 Simulating disordered devices without traps


This section needs to be rewritten, to more generally talk about recombination and not just
Langevin recombination. For a more complete view watch the video below
Related YouTube videos:

Please stop simulating disordered semiconductors without trap states.

In my view Langevin recombination is in general a really bad way to describe recombination


in OPV devices. This is because the mechanism assumes Brownian motion of electrons and
holes and that charge carriers of opposite polarity will recombine when they get close enough
to fall into each others electrostatic field. This picture assumes the charge carriers are free
and completely neglects the influence of trap states. I therefore think Langeving recombination
should be avoided in OPVs. But in dx.doi.org/10.1021/jp200234m you used Langevin recom-
bination - why?: In this paper I allowed the mobility in the Langevin expression to vary as a
function of carrier density i.e.

(αµe (n) + βµh (n))ntot ptot


Rf ree = qkr (8.28)
20 r
I then by defining a mobility edge and assuming any carrier below the mobility edge could
not move and any carrier above it could. I could define the averaged electron/hole mobility as:

µ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

(αµ0e nf ree ptrap + βµh pf ree ntrap )


R(n, p) = qkr (8.31)
20 r
Thus by making the mobility carrier density dependent we arrive at an expression for
Langeving recombination that’s dependent upon the density of free and trapped carriers (i.e.
nf ree ptrap and pf ree ntrap ) This is in principle the same as SRH recombination (i.e. a process
involving free electrons (holes) recombining with trapped holes (electrons)). This was a nice
simple approach and it worked quite well in the steady state. However, to make this all work I
had to assume all electrons (holes) at any given position in space had a single quasi-Fermi level,
which meant they were all in equilibrium with each other. For this to be true, all electrons
(holes) would have to be able to exchange energy with all other electrons (holes) at that position
in space and have an infinite charge carrier thermalization velocity. This seemed like an OK
assumption in steady state when electrons (holes) had time to exchange energy, however once
we start thinking about things happening in time domain, it becomes harder to justify because
8.9. CALCULATING THE BUILT IN POTENTIAL

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.

8.9 Calculating the built in potential


The first step to performing a device simulation, is to calculate the built in potential of the
device. To do this we must know the following things:

ˆ The majority carrier concentrations on the contacts n and p.

ˆ The effective densities of states NLU M O and NHOM O .

ˆ The effective band gap Eg

Figure 8.2: Band structure of device in equilibrium.

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.

8.9.1 Average free carrier mobility


In this model there are two types of electrons (holes), free electrons (holes) and trapped electrons
(holes). Free electrons (holes) have a finite mobility of µ0e (µ0h ) and trapped electrons (holes)
can not move at all and have a mobility of zero. To calculate the average mobility we take the
ratio of free to trapped carriers and multiply it by the free carrier mobility.:

µ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”.

Figure 8.3: Thermal

8.10.1 Lattice thermal model


When solving only the lattice heat equation heat transfer and generation is given by

0 = ∇κl ∇TL + Hj + Hr + Hoptical + Hshunt (8.43)


where joule heating (Hj ) is give by

∇Ec ∇Eh
Hj = Jn + Jh , (8.44)
q q
recombination heating (Hr ) is given by,

Hr = R(Ec − Ev ) (8.45)

optical absorption heating is given by,


8.10.

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.

8.10.2 Energy balance - hydrodynamic transport model


If you turn on the electrical and hole thermal model, then the heat source term will be replaced
by
!
3kb Tn − Tl Tp − Tl
H= n( ) + p( ) + R(Ec − Ev ) (8.48)
2 τe τh
and the energy transport equation for electrons
dTn 5 kb Tn
Sn = −κn − Jn (8.49)
dx 2 q
and holes,
dTp 5 kb Tp
Sp = −κp + Jp (8.50)
dx 2 q
will be solved.
The energy balance equations will also be solved for electrons,
!
dSn 1 dEc 3kb Tn − Tl
= Jn − RTn + n( ) (8.51)
dx q dx 2 τe
and for holes
!
dSp 1 dEv 3kb Tp − Tl
= Jp − RTp + n( ) (8.52)
dx q dx 2 τe
The thermal conductivity of the electron gas is given by
!
5 kb 2
κn = + cn Tn µn n (8.53)
2 q
and for holes as,
!
5 kb 2
κp = + cp Tp µp p (8.54)
2 q
Chapter 9

Optical models

9.1 Light sources


In OghmaNano light comes from light sources. Light sources defined in the light source editor
this can be found in the Optical ribbon of the main window see figure 9.1.

Figure 9.1: Opening the light source editor.

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

9.1.1 Local ground view factor

The local ground view factor which is given as [13]

 
2 θt 1 − cos(θt )
Fground = sin = (9.1)
2 2

can be set in the configure tab.

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

9.2 Transfer matrix model


In general the transfer matrix method is good for simulating sandwich type structures where
light is incident normal to the surface of a device. Examples of such devices are solar cells,
optical filters or sensors. This method is good for understanding optical absorption, reflection
and transition in these structures. There are other more complex methods which can accomplish
the same task such as FDTD, however general speaking the transfer matrix model will be orders
of magnitude faster than these methods.

9.2.1 The user interface


The transfer matrix simulation tool can be reached from the Optical ribbon in the main window
by selecting Transfer matrix. If you click Run optical simulation (see 9.4) the distribution of
light within the structure will be calculated as a function of position and wavelength. You can
see from the top of the figure that there are various simulation modes. The full transfer matrix
method is selected by selecting Transfer matrix, this will do full optical simulation. The other
buttons represent other simplified approximations to the transfer matrix method that allow the
user to explore more simple charge carrier generation profiles. From the left the push buttons
in Figure 9.4 represent the following optical models:

ˆ Transfer matrix: This is a full transfer matrix simulation that takes into account multiple
reflections from the interfaces and optical loss within the structure. This is in effect solving
the wave equation in 1D and is an accurate (and recommended) optical model to use. See
section 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

Figure 9.5: Various views of the optical simulation window

Running the transfer matrix simulation


As described above, the transfer matrix simulation can be run by directly clicking on the play
button. However when running an electrical simulation the optical model is run automaticity
without any user interaction. The only difference between the two ways of calling the optical
simulation is that when the user directly calls the optical model more output files are written to
disk, however when the optical simulation is run as part of an electrical simulation the number
of files and output are limited as to not slow the electrical simulation.
CHAPTER 9. OPTICAL MODELS

9.2.2 Output files

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 directory in depth

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:

File name Description


alpha.csv y-position v.s. absorption @ given wavelength
data.json json file containing wavelength value
En.csv y-position (m) v.s. Electric field with -ve component (V/m) @ given wavelength
Ep.csv y-position (m) v.s. Electric field with +ve component (V/m) @ given wavelength
G.csv y-position (m) v.s. Generation rate (m−3 s−1 )
n.csv y-position (m) v.s. Real part of the refractive index n (au) @ given wavelength
photons.csv y-position (m) v.s. photon density (m−3 ) @ given wavelength
photons abs.csv y-position (m) v.s. photons absorbed (m−3 s−1 ) @ given wavelength

Table 9.1: Files produced by the JV simulation


CHAPTER 9. OPTICAL MODELS

Figure 9.8: Various views of the optical simulation window

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.

Figure 9.9: The content of photons abs.csv.

The optical output folder in depth

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

Figure 9.10: The content of optical output directory

The files shown in Figure 9.10 are described in table 9.2.

File name Description Plot type


data.json Miscellaneous simulation information in json format 1D
G y.csv y-position (m) v.s. Charge generation rate (m−3 s−1 ) 2D
G zxy.csv zxy-position (m) v.s. Charge generation rate (m−3 s−1 ) 2D
Htot zxy.csv zxy-position (m) v.s. Optical heat generation (W m−3 ) 2D
light src id xxx.csv wavelength (m) v.s. Light intensity from source (W/m) 2D
photons abs yl.csv wavelength (m) v.s. y-position (m) v.s. photons absorbed (m−3 s−1 ) 2D
photons yl.csv wavelength (m) v.s. y-position (m) v.s. Photon density (m−3 s−1 ) 2D
photons yl norm.csv wavelength (m) v.s. y-position (m) v.s. Normalized photons (au) 2D
reflect.csv wavelength (m) v.s. Light reflected from the stack 1D
transmit.csv wavelength (m) v.s. Transmitted though the stack 1D

Table 9.2: Files produced by the JV simulation


CHAPTER 9. OPTICAL MODELS

9.2.3 Simulating optically thick layers (incoherent layers)


Typical optoelectronic devices have layer thicknesses between 10 nm and 100 nm. However
often these devices are deposited on top of substrates that are between 10 mm and 1 cm thick
and often one wants to not only simulate the device but also the impact of the substrate. Thus
to perform this type of simulation one will need a simulation tool that covers length scales from
the nm top the meter scale. There are three problems with doing this:

ˆ 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.

Figure 9.13: The effective optical thickness win-


dow, you can see that for this structure the op-
Figure 9.12: Opening the effective optical thick- tical thickness of glass has been set to 1 meter.
ness window.
CHAPTER 9. OPTICAL MODELS

9.2.4 Theory of the transfer matrix method


On the left of the interface the electric field is given by

E1 = E1+ e−jk1 z + E1− ejk1 z (9.5)


and on the right hand side of the interface the electric field is given by

E2 = E2+ e−jk2 z + E2− ejk2 z (9.6)

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

− jµωH2y = −jk2 E2+ e−jk2 z + jk2 E2− ejk2 z . (9.10)

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,

(E2+ + E2− ) − (E1+ + E1− ) = 0 (9.15)

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 (E2+ − E2− ) − n1 (E1+ − E1− ) = 0 (9.18)


9.2. TRANSFER MATRIX MODEL

Forward propagating wave

Rearrange equation, 9.18 to give,


n2 +
E1− = E1+ − (E2 − E2− ) (9.19)
n1
Inserting in equation 9.15, gives
n2 +
E2+ + E2− = E1+ + E1+ − (E − E2− ) (9.20)
n1 2

n2 +
2E1+ = E2+ + E2− + (E2 − E2− ) (9.21)
n1
n1 n1 − n2
2E1+ = E2+ + E2− (9.22)
n1 + n2 n1 + n2

Backwards propagating wave

Rearrange equation, 9.18 to give,


n2 +
E1+ = E1− + (E2 − E2− ) (9.23)
n1
Inserting in equation 9.15, gives
n2 +
E2+ + E2− = E1− + (E2 − E2− ) + E1− (9.24)
n1

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:

E1− t12 = E2+ r12 + E2− (9.27)


and
E1+ t12 = E2+ + E2− r12 (9.28)
Accounting for propagation we can write. Note the change in sign between [15] and this
work, this is because of how I have defined my wave equation.

E1+ t12 = E2+ eζ2 d1 + E2− r12 e−ζ2 d1 (9.29)

and

E1− t12 = E2+ r12 eζ2 d1 + E2− e−ζ2 d1 (9.30)


where

ζ= n̄ (9.31)
λ
For a device with non reflecting back contacts:
CHAPTER 9. OPTICAL MODELS
  +
eζd r01 e−ζd

0 0 0 0 0 0 E1
ζd −ζd +
 
−t12 e 0 0 0 r12 e 0 0   E t01 E external
 ζd −ζd
  2+ 
 0
 −t 23 e 0 0 0 r23 e 0  E3  
   0 

ζd −ζd   + 
 0 0 −t34 e 0 0 0 r34 e  E4    0 
 ζd1 −ζd − = 
 0
 r 12 e 0 0 −t 12 e 0 0  E1  
  −  0 

ζd −ζd
 0 0 r23 e 0 0 −t23 e 0  E2  
   0 
−ζd   − 
 ζd
 0 0 0 r34 e 0 0 −t34 e E3 0
0 0 0 0 0 0 0 −t45 E4−

9.2.5 Refractive index and absorption


−2π(n+jκ) 2πκz j(−2π(n+jκ)
E(z, t) = Re(E0 ej(−kz+ωt) ) = Re(E0 ej( λ
z+ωt)
)=e λ Re(E0 e λ
z+ωt
) (9.32)
And because the intensity is proportional to the square of the electric field the absorption
coefficient becomes
2πκz
e−αx = e λ (9.33)

4πκ
α=− (9.34)
λ0
9.3. OPTICAL MODE SOLVE 1D/2D

9.3 Optical mode solve 1D/2D


Related YouTube videos:

Tutorial on calculating TE/TM modes in slab waveguides

Text to be added later.


CHAPTER 9. OPTICAL MODELS

9.4 Finite Difference Time Domain


Finite Difference Time Domain (FDTD) is a very computationally intensive way to simulate
the propagation of electromagnetic radiation. It solves full on Maxwell’s equations in time
domain making no assumptions. This approach has only been possible in the last few years
with the increase in computing power.
Food for thought: Before using FDTD, you should be aware that in many cases when
simulating a device, using FDTD is like using a sledge hammer to crack a nut. For example
when simulating a standard solar cell, one could use FDTD, this would involve simulating
a wave front entering the cell through the top contact in time domain and waiting until the
optical field reaches steady state then calculating how much light is being absorbed. This would
require thousands of time domain simulation steps per wavelength. However usually one is not
interested in the time evolution of light in a solar cell as sunlight varies very slowly indeed, so
one is better off not using a steady state method but other methods which assume light has
already reached steady state, such as the transfer matrix method discussed above.
Never the less, FDTD is an import method, and can be used to design and understand
complex devices.
Related YouTube videos:

Generating photonic crystal structures for FDTD simulation

Tutorial on simulating photonic crystal waveguides using FDTD

9.4.1 Running an FDTD simulation


There is a demo FDTD simulation in the new simulations window. To open this click on new
simulation in the file ribbon of the main window. The window in figure 9.14 will appear. Double
click on the ”Photonic-xtal FDTD” simulation to open it. Save the simulation on your local
hard disk, don’t save it on a remote disk, USB disk or OneDrive they will be too slow to run
the simulation.

Figure 9.14: The new simulation window


9.4. FINITE DIFFERENCE TIME DOMAIN

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

Figure 9.17: The FDTD snapshots window.

9.4.2 Manipulating objects in OghmaNano

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.18: Changing the object view in OghmaNano

Figure 9.19: An example of moving objects in the simulation window.


CHAPTER 9. OPTICAL MODELS

Figure 9.20: The object viewer. This window is brought up by right clicking on an object and
selecting Edit.

9.4.3 Manipulating light sources in OghmaNano


Also visible in figure 9.19 is the light source given by the green arrow. Try moving this more
forward in the device.

9.4.4 Theoretical background


References for this section are [16]. This section of the manual aims to describe the FDTD
code in full with verbose derivations to help understanding/pick up errors.
Ampere’s law is given as [16]

x̂ ŷ ẑ
∂E ∂ ∂ ∂
σE +  =∇×H = ∂x ∂y ∂z (9.35)
∂t
Hx Hy Hz
9.4. FINITE DIFFERENCE TIME DOMAIN

which can be expanded as

∂Ex ∂Hz ∂Hy


σEx +  = − (9.36)
∂t ∂y ∂z

∂Ey ∂Hz ∂Hx


σEy +  =− + (9.37)
∂t ∂x ∂z

∂Ez ∂Hy ∂Hx


σEz +  = − (9.38)
∂t ∂x ∂y

For the case ∂y
=0

∂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

∂Ey ∂Hz ∂Hx


σEy +  =− +
∂t ∂x ∂z
t+ 12 1 t+ 12 t+ 12 1 t+ 12
Eyt+1 [] + Eyt [] Eyt+1 [] − Eyt [] Hz [2] − Hz [− 21 ] Hx [2] − Hx [− 12 ]
σ + =− +
2 ∆t ∆x ∆z
1 1 1 1
t+ t+ t+ t+
Eyt+1 [] Eyt+1 [] Hz 2 [ 21 ] − Hz 2 [− 12 ] Hx 2 [ 12 ] − Hx 2 [− 21 ] Eyt [] Eyt [] (9.41)
σ + =− + −σ +
2  ∆t 1 ∆x ∆z 2 ∆t
t+ 2 1 t+ 12 t+ 1
t+ 1
Hz [ 2 ] − Hz [− 12 ] Hx 2 [ 12 ] − Hx 2 [− 12 ] Eyt [] Eyt []
Eyt+1 [] = − + −σ +  2∆t
∆x ∆z 2 ∆t σ∆t + 2
CHAPTER 9. OPTICAL MODELS

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

Faraday’s law is given as [16]

x̂ ŷ ẑ
∂H ∂ ∂ ∂
− σm H − µ =∇×E = ∂x ∂y ∂z (9.43)
∂t
Ex Ey Ez

which can be expanded to give:

∂Hx ∂Ez ∂Ey


− σm Hx − µ = − (9.44)
∂t ∂y ∂z

∂Hy ∂Ez ∂Ex


− σm Hy − µ =− + (9.45)
∂t ∂x ∂z

∂Hz ∂Ey ∂Ex


− σm Hz − µ = − (9.46)
∂t ∂x ∂y

With σm = 0 and ∂y
=0

 
∂Hx 1 ∂Ey
=
∂t µ ∂z
 
∂Hy 1 ∂Ez ∂Ex
= − (9.47)
∂t µ ∂x ∂z
 
∂Hz 1 ∂Ey
=−
∂t µ ∂x

which discretizing gives

 
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

9.4.5 Ray tracing model


Add text.
Chapter 10

Simple circuit simulations

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

ˆ Wire: A perfect wire with no parasitic parameters.

ˆ Earth: This acts as a ground set at 0V.

ˆ Battery: This applies the voltage to the circuit. The voltage is taken from the contact
marked change in the contact editor.

ˆ Pointer: This ise used to select and edit circuit elements.

ˆ Brush: This is used to delete circuit elements.

Figure 10.4: The circuit tab of the example


Figure 10.3: The usual interface opens when the
showing the circuit diagram used to simulate
circuit simulation is selected.
the device.
By clicking on any circuit element with any tool apart from the brush, you can change the
values of the components as seen in Figure 10.5, and zoomed in Figure 10.6. Figure 10.6 shows
the configuration window for the diode component. From the top the options are:

ˆ 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.

ˆ Ideality factor: The diode ideality factor n.

ˆ I0: Saturation current in the diode equation.

ˆ 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.

Figure 10.6: A zoomed in view of the diode com-


Figure 10.5: Editing the component values of a
ponent editor. Access this menu by clicking on
diode.
a component.
After you have run the simulation by clicking the play button or by pressing F9, simulation
output will be visible in the output tab as usual. All the files you would expect from the usual
drift diffusion simulations will be generated. One extra output that is generated in the circuit
simulation is the Net list this is visible in Figure 10.8, when you double click on this it brings
up the Net list window which is visible in Figure 10.8, this shows the voltage over and current
through every component in the circuit. You can use the slider to step through the simulation
steps, these will be time or voltage steps. The net list is only generated when the simulation
output is set to Write everything to disk in the simulation editor.
Figure 10.8: The net list, showing the voltages over components and currents through compo-
nents.

10.0.1 JV, IS, CV and other simulation modes

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.9: Changing the simulation mode to impedance spectroscopy.


CHAPTER 10. SIMPLE CIRCUIT SIMULATIONS

Figure 10.10: An impedance spectroscopy simulation performed using the above circuit. To do
this just change the simulation mode to IS.

10.0.2 Using the fitting/scan tools with circuit models


The circuit models are exposed in the json tree just like the drift diffusion material paramters
and therefore you can also use the fitting and scan tools to either fit the data to experiment or
to scan through circuit values.
Chapter 11

Large area device simulation

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.

Related YouTube videos:

Tutorial on designing large area contacts for flexible electronics

Understanding Printed Hexagonal Contacts for Large Area Solar Cells

11.1 Designing contacts for large area devices

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

Figure 11.1: Selecting the large area contact simulation


11.1. DESIGNING CONTACTS FOR LARGE AREA DEVICES

Figure 11.2: A 3D image of the contact printed contact.

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

Figure 11.3: Building the 3D circuit mesh of the contact structure.

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.

Figure 11.4: A 1D diagram of the mesh


11.1. DESIGNING CONTACTS FOR LARGE AREA DEVICES

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.5: A 2D resistance plot across the surface of the device.

File name Description


spm R.dat 2D plot of resistance
spm R x.dat A resistance plot down the centre of the device.

Table 11.1: Files produced by the SPM simulaton.


CHAPTER 11. LARGE AREA DEVICE SIMULATION

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

Figure 11.7: The output files from the simulation.

11.2 Simulating large area solar cells


Chapter 12

Modelling excitons/geminate
recombination - organics only

12.1 Why you should not model excitons


There are a number of models to calculate the number of geminate pairs which get converted to
free charge carriers the Onsager-Braun model for example will give you the exciton dissociation
efficiency. There are other models which will enable you to calculate the distribution of excitons
in a device as a function of position. However, these models will generally require a number
of parameters which are often not reliably known for a material system. Such parameters
include exciton life-time, diffusion length and dissociation rate. So although it’s possible (and
interesting) to write a model to simulate geminate recombination, one is usually better off
simply introducing a photon efficiency factor ηphoton . This number ranges between 0.0 and 1.0
and is multiplied by the number of photons absorbed at any point in the device to account for
geminate recombination losses.

G = Gabs · ηphoton (12.1)


where G is the charge carrier generation rate in m−3 s−1 in equations 12.1 and 8.25.
This factor can be obtained to a reasonable degree by comparing the difference between
the simulated and experimental Jsc . This parameter can set in the configuration section of the
optical simulation window. So therefore my advice is that in most cases you should not be
modelling excitons explicitly but rather using the ’photon efficiency factor’. If you really want
to model excitons read on..

12.2 Modelling excitons


So if you have read section 12.1 and still think you want to model excitons this section will
explain how to do it. Gvpdm includes an exciton solver. This sits between the optical model
and electrical model. If the exciton model is turned off then generation is simply the number
of photons absorbed at any point in the device multiplied by the photon efficiency factor see
equation 12.1. If the exciton model is turned on then optical absorption will feed straight into
the exciton diffusion equation.

∂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.

12.3 Modeling excitions in a device


12.4 Modeling excitions in a unit cell
Chapter 13

The oghma file format

13.1 the .oghma simulation file format


In OghamNano simulations are saved in a directory containing a sim.oghma file. All the pa-
rameters specifying the device and simulations are stored in the sim.oghma file. If you rename
the file so to be called sim.zip you will be able to open it in windows explorer or your favourite
zip viewer. Inside the .oghma file you will find another file called sim.json. You can view this
file in any text editor but the file is quite long so I recommend you use firefox as it has a
very nice built in json viewer. Json is a simple way of storing text and configuration infor-
mation first developed for Java. Json is a standard way to store and transmit data much like
XML. You can see examples here: https://json.org/example.html or below in code listing 1.
You can see the json file is structured using
a series of brackets, double quotes and com-
mas. If you make a copy of sim.json outside 1 {
the .oghma archive, then rename the sim.zip 2 "color_of_dog": "brown",
back to sim.oghma, OghmaNano will ignore the 3 "dog_age": 5,
sim.json file within the sim.oghma archive and 4 "dogs_toys": {
revert to the plain text file stored in the sim- 5 "rabbit": "True",
ulation directory. This feature can be useful 6 "stick": "False"
for automation of simulations as you can sim- 7 }
ply edit the sim.json file using your favourite 8
programming language without having to learn 9 }
about reading and writing zip files. If you open
the sim.json file in firefox it will look like 13.2.
Also have a look at the file in notepad to get a Figure 13.1: A simple JSON example
sense of what is in it.
You can see that the json file has various headings, key headings are listed below in table
13.1. If you wish to programmatically drive OghmaNano you can simply use one of the many
available json editors most languages have them freely available.

13.2 Qwerks of the OghmaNano json format


ˆ The OghmaNano json file does not support standard json lists e.g. [”Red”, ”Green”,
”Blue”]. If there is a list of items, it is defined by firstly declaring the variable segments,
with the number of items in the list so for example ”segments”,0 . Each item in the list
is then stored under, ”segment0”, ”segment1” etc... This format enables OghmaNano to
allocate the memory for reading in the structures before doing the reading. This can be
CHAPTER 13. THE OGHMA FILE FORMAT

Figure 13.2: An example sim.json file opened in Firefox.


13.2. QWERKS OF THE OGHMANANO JSON FORMAT

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

Table 13.1: Key headings/sections in the sim.json file.


CHAPTER 13. THE OGHMA FILE FORMAT

seen in figure 13.2 where there is a list with 1 segment.

ˆ 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.

13.4 Forwards/backwards compatability of the file for-


mat
Significant effort is made to make sure new versions of OghmaNano can read files generated in
older versions. However, older versions of OghmaNano may not be able to read files generated
on newer versions. Every time the user opens a sim.oghma file using the GUI the file format
is checked and if it differs to that being used in the current version the file is updated and
written back to disk. If you are using OghmaNano in a headless configuration by calling
oghma core.exe directly, then when sim.oghma files from old versions of the model, before
running oghma core.exe, make sure you have opened it in the GUI first to make sure the file
is in the correct format.
Chapter 14

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.

Figure 14.1: The database ribbon

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

14.1 Materials database

Related YouTube videos:

A tutorial on adding new materials to OghmaNano

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.

Figure 14.2: An example of a materials database item for Alq3.

File name Description


data.json json file infomration about the material (LUMO/HOMO levels etc..)
alpha.csv wavelength (m) v.s. absorption (m−1 )
n.csv wavelength (m) v.s. refractive index (au)
emission.csv ∗seebelow wavelength (m) v.s. PL emission (au)
mat.bib Bibtex file containing references

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

14.1.1 Adding new materials - the hard way


If you wish to add materials to the database which do not come as standard with the model you
can do it in the following way: Simply copy an existing material directory (say oghma local\materials\oxieds
to a new directory (say oghma local\materials\oxieds\mynewmaterial). Then replace alpha.csv
and n.csv with your data for the new material. You can ignore the data.json file, although if
you know the energy levels you can add the values in the file.
If you don’t have data to hand for your material, but you do have a paper containing the
data, you use the program Engauge Digitizer, written by Mark Mitchell https://github.
com/markummitchell/engauge-digitizer to export data from publications. After you have
finished updating the new material directory, whenever a new simulation is generated the new
material files will automatically be copied into the active simulation directory ready for use.
CHAPTER 14. DATABASES

14.1.2 Adding new materials - the easy way


To add a new material go to the database ribbon and click on Materials database as shown in
figure 14.3.

Figure 14.3: Opening the 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.

Figure 14.5: Type the name of the new material

Figure 14.4: Select Add material


Once you have clicked OK the new material will appear see Figure 14.6, open it by double click-
ing on it. This will bring up an empty material window with no data. See Figure 14.7.

Figure 14.7: The new material without any data

Figure 14.6: Open the new material


To import data to the material use the Import data from file button situated on the top
left of the material window see Figure 14.7 this will bring up the import data wizard which is
shown in Figure 14.8. To use this wizard follow these steps:
14.1. MATERIALS DATABASE

Figure 14.8: The data importer window

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

14.1.3 But I have a data in nm/n/k format


Usually OghamNano only accepts data input in SI units and usually only accepts input in one
format. This is to reduce the overall number of lines of code and reduce maintenance. However,
I have been asked to make the model accept data of format: wavelength (nm), refractive index
(au), k (au), as shown in Figure 14.10. OghmaNano will be able to read this file if you simply
copy it into your home directory\oghma local\materials and give it a file extension .nk, so for
example ito.nk. Where your home directory is simply your Windows home directory. It is
usually located on the C:\Users on a home PC but the location can change if you are on a
corporate PC. Once you have dragged the file into your home directory\oghma local\materials
it will appear as a material in the model. See Figure 14.11. You can see that the .nk file in Figure
14.11 is greyed out, this is because it is a non standard OghamNano file, that OghmaNano can
read but not edit.

Figure 14.10: An example of wavelength/n/k data.

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

14.2 Shape database

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.

Figure 14.12: the box shape.

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.

Figure 14.13: Opening the shape database


14.2. SHAPE DATABASE

Figure 14.14: The shape database window

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.

Figure 14.18: The shape database

14.2.1 The shape file format


A shape has to be a fully enclosed volume, if you use the built in shape discretizer this will be
done for you automaticity. However if you are building shapes by hand you will have to enforce
this condition. Each shape directory contains the following files

File name Description


data.json Holds the configuration for the shape file
image original.png backup of the imported image
image out.png The final processed image
image.png The imported image which may be modified.
shape.inp The discretized 3D structure.

Table 14.2: The files within a shape directory

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.

Figure 14.19: An example of the shape.inp file.


CHAPTER 14. DATABASES

14.3 Filters database


This contains optical filters.
14.4. BACKUPS OF SIMULATIONS

14.4 Backups of simulations


Very often when running a simulation you want to make a copy of it before continuing to play
with the parameters. To do this click on the backup simulation button in the database ribbon
(see figure 14.1), this will bring up the backup window, see figure 14.20. If you click on the
”New backup” icon on the top right of the window, a backup will be made of your current
simulation. And an icon representing the backup will appear in the backup window. To restore
the backup double click on the icon representing your stored simulation. Note this backup
is only stored in the your local simulation directory, and is more of a checkpoint than a real
backup.... so make sure you have other copies of your simulation if it is very important to you..

Figure 14.20: Backing up a simulation


Chapter 15

Fitting experimental data

Related YouTube videos:

Advanced topics in fitting of JV curves to experimental data using OghmaNano.

Fitting transient photocurrent (TPC) and light JV curves using OghmaNano

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.

15.1 Key tips and tricks


ˆ Generally speaking fitting is tricky process requiring a lot of patience and manual fine
tuning to get it to work. Don’t expect to click a button and for it to just work. You will
have to work to get nice fits.

ˆ 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.

15.2 The main fitting window


An example of how to fit the model to experimental data is included in the demo simulations
provided with OghmaNano. This can be found under ”Fitting and parameter extraction” (see
??). If you open this simulation you will be presented with

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.

ˆ Rename experiment: This will rename the data set.

ˆ Export data: This will export the fit to a zip file.

ˆ 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.

Figure 15.2: The main fitting window.


15.3. FIT VARIABLES

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.

15.3 Fit variables


In figure 15.2, there is a ”Configure” icon. If you click on this it will open the fit variable
window. This window is used to configure the fitting variables. This window has the following
tabs:

ˆ 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.

ˆ Configure minimizer: This configures how the fitting algorithm behaves.

– 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.

– Fitting method: This can be set to Simplex (simplex downhill https://en.wikipedia.


org/wiki/Nelder%E2%80%93Mead_method) or newton. Newton is experimental and
should not be used.

– 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

Figure 15.5: The fit variables used to fit the data.

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

Figure 15.6: The fit patch applied to each data set.

15.5 Fitting without the GUI


The GUI is a very easy and efficient way to setup a fit. However, it takes considerable CPU
time to update the user interface as the fit runs and this therefore slows the fitting process.
Therefore if you are doing lots of fitting or fitting difficult problems, fitting without the GUI
can be faster. This section covers how to fit from the Windows command line:

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

office/developer/sharepoint-2010/ee537574(v=office.14) instructions. These in-


structions are for a modern version of Windows, but on your system things may be in
slightly different places. On most versions of windows the process is more or less the
same, if you get stuck google ”adding a path to window”.

3. Click on the start menu and type ”cmd” and enter to bring up a Windows terminal.
Type:

oghma_core.exe --help

Note it is a double dash before help not a single dash.


This should bring up some help for OghmaNano. If it does them we have successfully
told windows where oghma core.exe lives. If you get an error, try step 2 again (and/or
restart your computer).

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.

6. Now run a single fit by typing:

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

Automation and Scripting

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

16.1 The parameter scan window


Related YouTube videos:

Using the parameter scan tool in OghmaNano

The most straight forward way to systemati-


cally vary a simulation parameter is to use the
scan window. In this example we are going
to systematic change the mobility of the ac-
tive layer of a PM6:Y6 solar cell, you can find Figure 16.1: Step 1: Select the Parameter scan
this example in the example simulations un- tool, to bring up the parameter scan window.
der Scripting and fitting/Scan demo (PMY:Y6
OPV). Once you have located this simulation
and opened it, you then need to bring up the
parameter scan window, this can be done by
clicking on the Parameter scan icon in the Au-
tomation ribbon (see Figure 16.1). Then make
a new scan by clicking on the new scan button
(1) (In the example simulation this has already
been done for you). Open the new scan by dou-
ble clicking on the icon representing the scan
(2), see figure 16.2. This will bring up the scan
window, see figure 16.3. Figure 16.2: Step 2: Make a new parameter
scan, then double click on it to open it.

16.1.1 Changing one material parameter


Once the scan window has opened, make a new scan line by clicking on the the plus icon (1) in
figure 16.3, then select this line so that it is highlighted (2), then click on the three dots (3) to
select which parameter you want to scan. Again if you are using the example simulation this
will already have been done for you.

Figure 16.3: Step 3: Add a ’scan line’ to the scan.


CHAPTER 16. AUTOMATION AND SCRIPTING

In this example we will be selecting the elec-


tron mobility of a PM6:Y6 solar cell. Do this
by navigating to epitaxy→ PM6:Y6→ Drift
diffusion→ Electron mobility y. Highlight the
parameter and then click OK. This should then
appear in the scan line. The meaning of
epitaxy→ PM6:Y6→ Drift diffusion→Electron
mobility y will now be explained below:

ˆ epitaxy: All parameters in the .oghma file


are exposed via the parameter selection
window see 16.4. This file is a tree struc-
ture, see 13.1. The device structure is de-
fined under the heading epitaxy.

ˆ PM6:Y6: Under epitaxy each layer of the


device is given by its name. The active
layer in this device is called PM6:Y6, if
your active layer was called Perovskite
or P3HT:PCBM you would have selected Figure 16.4: Step 5: Select the parameter you
this instead. want to scan in the parameter selection win-
dow, in this case we are selecting epitaxy→
ˆ Drift diffusion: All electrical parameters PM6:Y6→ Drift diffusion→ Electron mobility
are stored under the sub heading drift dif- y.
fusion.

ˆ 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.

Figure 16.7: Step 8: The result of the mobility scan.

16.1.2 Duplicating parameters - changing the thickness of the active


layer
Very often one wants to change a parameter, then set another parameter equal to the parameter
which was changed. An example of this is one may want to change electron and hole mobilities
together when simulating a device with symmetric mobilities. This can be done using the
duplicate function of the scan window as seen in figure 16.8. In this example we tackle a
slightly more tricky problem than changing mobilities together we are going to change the
physical width of the active layer and at the same time adjust the electrical mesh to make it
match. As discussed in section 7 the width of the active layer must always match the width of
the electrical mesh. When you change the layer width by hand in the layer editor OghmaNano
updates the width of the electrical mesh for you. But when scripting the model it won’t do
CHAPTER 16. AUTOMATION AND SCRIPTING

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

epitaxy→PM6:Y6→dy of the object

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.

Figure 16.8: Duplicating material paramters.

Side note: Device with multiple active layers


The sum of the active layer thickness (as defined in the layer editor) MUST equal the electrical
mesh thickness (more about the mesh in section 7). If for example one had three active layers
TiO2 (100 nm)/Perovskite (200 nm)/Spiro (100 nm) with a total width of 400 nm. The total
mesh length must be 400 nm as well. Therefore were one want to change the thickness of the
perovskite layer as in 16.8 one would have to break the electrical mesh up into three sections
and make sure you were updating the mesh segment referring to the perovskite layer alone.

16.1.3 Setting constants


Often when running a parameter scan one wants to set a constant value, this can be done using
the ”constant” option in the Operations dropdown menu. See figure 16.9

Figure 16.9: The result of the mobility scan.


16.1. THE PARAMETER SCAN WINDOW

16.1.4 The equivalent of loops


Often when scanning over a parameter range one may want to simulate so many parameters
that it is not practical to type them in. In this case OghmaNano has the equivalent of a loop.
So for example if one wanted to change a value from 100 to 400 in steps of 1, one could type

[100 400 1]

Listing 1: The equivalent of loops in OghmaNano, this is often quicker than typing parameters
in by hand.

16.1.5 Limitations of the scan window


Although the scan window is convenient in that it provides a quick way to scan simulation
parameters, it is by nature rather limited in terms of flexibility. If you want to do complex
scans were multiple parameters are changed or to programmatically collect data from each
simulation then you can use the or matlab interfaces to OghmaNano. These are described in
the latter sections.
CHAPTER 16. AUTOMATION AND SCRIPTING

16.2 Multiparameter device optimizer


Related YouTube videos:

Optimizing the layer structure of a Perovskite solar cell

Optimizing an OPV device for maximum photon harvesting.

Searching for the optimum layer structure in an organic solar cell.

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.

16.2.1 Using the multi parameter optimizer


In the new simulation window under the sub-topic Scripting and fitting there are several ex-
amples of multi-parameter optimizers:

ˆ 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

Figure 16.11: The file your simulation directory/optimizer/optimizer output.csv


opened in LibreOffice (You can use Excel).
16.3. PYTHON/MATLAB SCRIPTING OF OGHMANANO

16.3 Python/MATLAB scripting of OghmaNano


Scripting offers a more powerful way to interact with gvpdm. Rather than using the graphical
user interface, you can use your favourite programming language to interact with OghmaNano.
This gives you the option to drive simulations in a far more powerful way than can be done
using the graphical interface alone. Below I give examples of using MATLAB and python to
drive OghmaNano, but you can use any language you want which has a json reader/writer.
Pearl and Java are two languages which spring to mind.
Before you begin scripting OghmaNano you need to tell windows where OghmaNano is
installed, the default OghmaNano will be installed to C:\Program files x86 \OghmaNano, in
there you will see in this directory there are two windows executables, one called oghma.exe,
this is the graphical user interface, and a second .exe, called oghma core.exe. You can run
oghma core.exe from the command line without oghma.exe. You simply need to navigate to
a directory containing a sim.oghma folder and call oghma core.exe, this can be done from the
windows command line, matlab, python or any other scripting language. However, before you
can do this on windows, you need to add C:\Program files x86 \OghmaNano to your windows
path so that windows knows where OghmaNano is installed. An example of how to do this
on a modern version of windows is given in the link https://docs.microsoft.com/en-us/
previous-versions/office/developer/sharepoint-2010/ee537574(v=office.14)
Every new version of windows seems to move the configuration options around, so you may
have to find instructions for your version of windows.

16.3.1 Python scripting


Related YouTube videos:

Python scripting perovskite solar cell simulation

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.

The native python way


As described in section 13.1, .oghmafiles are simply json files zipped up in an archive. If you
extract the sim.json file form the sim.oghmafile you can use Python’s json reading/writing code
to edit the .json config file directly, this is a quick and dirty approach which will work. You
can then use the os.system call to run oghma core to execute OghmaNano.
For example were one to want to change the mobility of the 1st device layer to 1.0 and then
run a simulation you would use the code listed in listing 2.
If the simulation in sim.json is setup to run a JV curve, then a file called sim data.dat will
be written to the simulation directory containing paramters such as PCE, fill factor, Jsc and
Voc . This again is a raw json file, to read this file in using python and write out the value of
Vo c to a second file use the code given in listing 3.

Using OghmaNano’s built in classes for reading and writing json


OghmaNanohas a set of classes that can read in OghmaNanofiles and write them to disk.
The difference between using python’s native commands and the gpvmd classes is that, Ogh-
maNanowill convert the json save files to a hierarchical tree of python classes rather than leaving
them as raw json. So for example using Python’s native json interpreters one would write:
CHAPTER 16. AUTOMATION AND SCRIPTING

import json
import os
import sys

f=open('sim.json') #open the sim.json file


lines=f.readlines()
f.close()
lines="".join(lines) #convert the text to a python json object
data = json.loads(lines)

#Edit a value (use firefox as a json viewer


# to help you figure out which value to edit)
# this time we are editing the mobility of layer 1
data['epitaxy']['layer1']['shape_dos']['mue_y']=1.0

#convert the json object back to a string


jstr = json.dumps(data, sort_keys=False, indent='\t')

#write it back to disk


f=open('sim.json',"w")
f.write(jstr)
f.close()

#run the simulation using oghma_core


os.system("oghma_core.exe")

Listing 2: Manipulating a sim.json file with python and running a OghmaNanosimulation.

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

sys.path.append('c:\Program files x86\\simname\modules')


from json_root import json_root

data=json_root()
data.load("sim.json")
data.epitaxy.layer[1].shape_dos.mue_y=1.0
data.save()

os.system("coreexename.exe")

Listing 6: Editing sim.json files using OghmaNano’s built in classes.

but using the OghmaNanointerpreter one would write


The OghmaNanoclass tree also has embedded functions for searching for objects and alike
some of which are described below in listing 6.

Running OghmaNanoacross multiple cores


The scan window by default uses OghmaNano’s built in job scheduler so that if you want to
scan across 10 parameters and have a CPU with multiple cores, the jobs will be spread across
all cores. This increases the overall speed of the simulations. You can access this API using
the OghmaNano api class, an example of how to do this is given in listing 7.
CHAPTER 16. AUTOMATION AND SCRIPTING

#!/usr/bin/env python3
import os
import sys
sys.path.append('c:\Program files x86\ \simname \ modules')

from model_api import model_api

#initialize the API


api=model_api(verbose=False)

#Use the name of the current script to determine the directory name to make
script_name=os.path.basename(__file__).split(".")[0]

#define the name of the simulation dir


scan_dir=os.path.join(os.getcwd(),script_name)

#make the simulation dir


api.mkdir(scan_dir) #make a new scandir

#tell the API where we are going to run the simulation


api.server.server_base_init(scan_dir)

#Loop over electron and hole mobilities.


for mue in [ 1e-5, 1e-6, 1e-7, 1e-8]:
for muh in [ 1e-5, 1e-6, 1e-7, 1e-8 ]:
#define the sub sim path
sim_path=os.path.join(scan_dir,"{:.2e}".format(mue),"{:.2e}".format(muh))
#make the directory
api.mkdir(sim_path)

#clone the current sim dir to the new dir


api.clone(sim_path,os.getcwd())

#make edit the newly generated sim.json file


data=json_root()
data.load(os.path.join(sim_path,"sim.json"))
data.epitaxy.layer[1].shape_dos.mue_y=mue
data.epitaxy.layer[1].shape_dos.muh_y=muh
data.save()

#Add the path to the job list


api.add_job(path=sim_path)

#run all the jobs over multiple CPUs


api.server.simple_run()

#Generate GNUPLOT compatible files for plotting the results together.


api.build_multiplot(scan_dir,gnuplot=True])

Listing 7: Running jobs across multiple CPUs using python


16.3. PYTHON/MATLAB SCRIPTING OF OGHMANANO

16.3.2 MATLAB scripting


As described in section 13.1 OghmaNano simulations are stored in .json files zipped up in-
side a zip archive. Matlab has both a zip decompressor and a json decoder. Therefore it
is straight forward to edit and read and edit .oghma files in MATLAB. You can then use
MATLAB to perform quite complex parameter scans. The example script below in listing
8 demonstrates how to run multiple simulations with mobilities ranging from 1e-7 to 1e-
5 m2 V −1 s−1 ). The script starts off by unzipping the sim.json file, if you already have ex-
tracted your sim.json file from the sim.oghma file you don’t need these lines. The code then
reads in sim.json using the MATLAB json decoder jsondecode. A new directory is made
which corresponds to the mobility value, the sim.oghma file copied into that directory. Then
json data.epitaxy.layer0.shape dos.muey is set to the desired value of mobility and the sim-
ulation saved using jsonencode and f open, f printf, f close. The system call is then used to
run oghma core.exe to perform the simulation. Out put parameters such as Jsc are stored in
sim data.dat again in json format, see section 4.1.4, although this is not done in this simple
script.
CHAPTER 16. AUTOMATION AND SCRIPTING

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

A = fileread("sim.json"); %Read the json file.


json_data=jsondecode(A); %Decode the json file

mobility=1e-7 %Start mobility


origonal_path=pwd %working with the current dir
base_dir="mobility_scan" %output directory name
while(mobility<1e-5)
dir_name=sprintf("%e",mobility);
full_path=fullfile(origonal_path,base_dir,dir_name) %join paths
mkdir(full_path) %make the dir
cd(full_path) %cd to the dir

%Update the json mobility


json_data.epitaxy.layer0.shape_dos.mue_y=mobility %Change mobility
%of layer0

copyfile(fullfile(origonal_path,"sim.oghma"),\\
fullfile(origonal_path,base_dir,dir_name,"sim.oghma"))

%now write the json file back to disk


out=jsonencode(json_data);
json_data
fid = fopen("sim.json",'w');
fprintf(fid, '%s', out);
fclose(fid);

%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

%Move back to the original dir


cd(origonal_path)

Listing 8: An example of how to call OghmaNano from MATLAB


Chapter 17

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

See section 17.2.

17.1 Snapshots directory - dir

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

17.2 Trap map directory - dir

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.3 Optical snapshots - dir


Contains results of the optical simulations.

17.4 Cache - dir


Getting a computer to do math is on the whole a slow thing to do. It’s much faster to
precalculate results then store the answers in a look up table. This can speed up calculations
significantly. The cahce dir stores the results of such precalculations, you can delete if you want
it OghmaNanowill just remake it when it runs.

17.5 Equilibrium directory


Before the solver starts any simulation it solves the device equations in the dark with 0V applied
bias. The result of this calculation are placed in this directory. The practical reason for doing
this is that Newton’s method only works if you give it a reasonable starting guess for any given
problem. Thus to start the solver, we guess the carrier densities at 0V in the dark, we then
use Newton’s method to calculate the exact carrier density profiles at 0V in the dark (results
are stored in the equilibrium directory), then from this point we can work our way to other
solutions say at +1V in the light.[14]
17.6. FILE FORMATS

17.5.1 Optical simulation


JSON token Meaning Units Ref
Jphoto Photo current density Am−2
Iphoto Photo current A

17.6 File formats


Almost all input and output files associated with OghmaNanoare human readable, meaning
that they are straight up text files. All output files can be directly plotted in gnuplot/excel as
can the input files. Output files are currently called .dat, but they are simply text files. All
configuration files are in json format so can be edit directly or by using the python json library.

17.6.1 .dat files


This type of file is a straight text file which can be imported into excel or any other plotting
program. It contains two columns of data x and y. There is also a preamble in the file containing
information such as units etc.. OghmaNanois moving from .dat files to .csv files.

17.6.2 .csv files


This is a straight csv file as you would expect which can be imported into any text editor. The
first line of the file is a json string containing information such as units etc. You can ignore
this. The second line of the file describes the x/y data in a human readable form then the rest
of the file contains the data.

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

18.1 Windows gives warms me the software is unsigned

18.2 Why don’t I get a 3D view of the device

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.

Figure 18.1: OghmaNanowith working 3D acceleration hardware.


18.2. WHY DON’T I GET A 3D VIEW OF THE DEVICE

Figure 18.2: OghmaNanowith no 3D acceleration hardware.


Chapter 19

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.

19.1.2 Can I use the model to simulate my exotic* material sys-


tem/contacts?
The short answer is yes. The model is an effective medium model, meaning that it does not
simulate the details of the medium, rather it approximates the medium with a set of electrical
parameters. For example, when simulating an organic solar cell, it does not simulate every
detail of the BHJ, rather it just assumes an effective mobility, density of states, recombination
cross sections, trapping cross sections and so on... So if you can find electrical parameters to
aproximate your material system (or guess them), there is nothing stopping you using Ogh-
maNano to simulate any exotic device/material. The same goes for the contacts, the model
simulates the contacts simply as a charge density. So if you have fancy graphene contacts which
inject lots of charge, use a high majority carrier density on the contacts. Where as if you have
some dirty old ITO contacts may be drop the majority carrier density a bit.
19.2 Excited states
This is a new feautre and is not yet finished. I am writing the equations as I implment them in the solver.
dNS 1 1 7
= Rf ree + κT T NT2 − (κS + κISC )Ns − ( κSS NS − κST NT )NS (19.1)
dt 4 4 4
dNt 3 3
= Rf ree + κISC NS + κSS NS2 (19.2)
dt 4 4
19.2. EXCITED STATES

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.

20.2 Copyright of the manual


This manual is released under CC-BY license.
20.3. DATA PRIVACY STATEMENT

20.3 Data privacy statement


In some versions of OghmaNanoit will ask you to register before using it. In these versions it asks
for your name, title, company that you work for and what you intend on using OghmaNanofor.
This data is then transmitted to the OghmaNanoserver where it is securely stored. The reason
I ask for this information is to be able generate accurate usage information. Having accurate
information helps when requesting grants from funding bodies. It’s much easier to ask a funding
body for money if you can prove you actually have users and your software is a benefit to society.
Periodicity OghmaNanowill also contact the OghmaNanoserver to see if there are any software
updates. By using OghmaNanoyou agree for the above to happen.
Bibliography

[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.

[3] R. C. MacKenzie, C. G. Shuttle, M. L. Chabinyc, and J. Nelson. Advanced Energy Mate-


rials, 2012, 2 6 662–669.

[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.

[5] C. Wopke, C. Gohler, M. Saladina, X. Du, L. Nian, C. Greve, C. Zhu, K. M. Yallum, Y. J.


Hofstetter, D. Becker-Koch, et al. NATURE COMMUNICATIONS, 2022, 13 1 .

[6] J. Piprek. Semiconductor optoelectronic devices: introduction to physics and simulation.


Elsevier, 2013.

[7] B. C. O’Regan, J. R. Durrant, P. M. Sommeling, and N. J. Bakker. The Journal of Physical


Chemistry C, 2007, 111 37 14001–14010.

[8] P. Kaienburg. 2019.

[9] P. Kaienburg, U. Rau, and T. Kirchartz. Phys. Rev. Applied, Aug 2016, 6 024001.

[10] R. C. MacKenzie, C. G. Shuttle, G. F. Dibb, N. Treat, E. von Hauff, M. J. Robb, C. J.


Hawker, M. L. Chabinyc, and J. Nelson. The Journal of Physical Chemistry C, 2013, 117
24 12407–12414.

[11] P. Calado, A. M. Telford, D. Bryant, X. Li, J. Nelson, B. C. O’Regan, and P. R. Barnes.


Nature communications, 2016, 7 1 1–10.

[12] E. M. Azoff. Solid State Electronics, September 1987, 30 9 913–917.

[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.

[15] P. Peumans, A. Yakimov, and S. R. Forrest. Journal of Applied Physics, 2003, 93 7


3693–3723.

[16] J. Schneider. Understanding the Finite-Difference Time-Domain Method. 2010.

[17] S. Solak, S. Shishegaran, A. C. Hübler, and R. C. MacKenzie. Solar RRL, 2021, 5 12


2100787.
BIBLIOGRAPHY

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..

You might also like