An open source drift diffusion code based in MATLAB for simulating solar cells
Authors: Philip Calado, Piers RF Barnes, Ilario Gelmetti, Mohammed Azzouzi, Benjamin Hilton
Imperial College London, 2019
If you use Driftfusion please let us know by emailing: p.calado13@imperial.ac.uk
Please log bugs through GitHub.
The easiest way to get started is to look at and adapt the scripts contained within the Scripts
folder. Each is designed to test different device architectures and simulation protocols.
Alternatively to get started manually do the following:
-
If you are new to GitHub it is highly recommended that you download GitHub desktop at: https://desktop.github.com/. Alternatively, you can download Driftfusion standalone as a folder but you won’t easily be able to synch to the latest version.
-
Fork the Driftfusion GitHub repository (project). Instructions can be found here: https://help.github.com/en/articles/fork-a-repo
-
Navigate to your repository/project folder in MATLAB.
-
Type
initialise_df
into the command prompt. This adds the subfolders and associated functions to the file path. -
The parameters class
pc
defines all the parameters for your device. You can edit the parameters directly inpc
(found in the/Core folder
and create a parameters object by typing:
par = pc;
The names of properties and their units are given in the commented code in the pc
class.
- A better way of defining your device is to use the .csv files contained in the
/Input_files
folder. For example, to create a parameters object with default parameters to simulate a Spiro-OMeTAD/MAPI/TiO2 device type:
par = pc('Input_files/spiro_mapi_tio2.csv');
It is recommended to duplicate the existing .csv files to define your own device and use a programme like Excel or Open Office to edit them. Ensure that the material name given in the 'material' column matches with one of the materials in the Libraries/Index_of_Refraction_library.xls
if you wish to use the Beer-Lambert optical model.
- Obtain equilibrium solutions for your device by typing:
soleq = equilibrate(par)
Inside soleq are 2 solutions: soleq.el
and soleq.ion
. For perovskites you should generally use soleq.ion
. soleq.el
is the same device at equilibrium without mobile ions.
- Try running a JV using:
JVsol = doJV(soleq.ion, 1e-2, 100, 1, 1, 0, 1.4, 3)
The various input arguments are discussed in the comments of each code. At any time you can plot the JV using dfplot.JV(JVsol,3)
.
Try using doJV as a model for writing functions of your own.
The example script shows you how to produce two devices with different transport layers and scan current-voltage scans at 50 mVs-1 for each and plot the current-voltage curve, an energy level diagram and the currents using dfplot
.
Good luck!
Submitted on arXiv on May 2018, published on Energy & Environmental Science on march 2019.
Check out the 2018-EIS branch of this repository or download directly just this branch.
Then follow the instructions in the branch readme or on this wiki page.
Submitted on arXiv on January 2022.
Check out the 2022-EA_SDP_EIS branch of this repository or download directly just this branch.
Then follow the instructions in the branch readme or on this wiki page.