Shockley-Quiesser limit calculations.
Project description
Shockley Queisser limit :
Theoretical Solar Cell Efficiencies calculator and visualizer
Based off of marcus-cmc/Shockley-Queisser-limit, updated for Python 3 and PyPI.
pip install sqlimit
It calculates the theoretical solar cell parameters with options to change temperature, light intensity, and radiative efficiency, provides visualization tools.
The calculation is based on the radiative limit or the Shockley Queisser limit
[Wikipedia: Shockley–Queisser limit] (https://en.wikipedia.org/wiki/Shockley–Queisser_limit)
Example Outputs
Bandap vs Efficiencies of a single junction solar cell
Create a SQlim
object, which calculates all the parameters and then call the method plot('PCE')
to generate the bandgap vs efficiency plot. PCE: power conversion efficiency.
SQ = SQlim()
SQ.plot('PCE')
The efficiencies will be in the SQ.PCE
attribute, an numpy array. There's also a dictionary SQ.paras
that stores all the characteristics as a key (string): characteristics (numpy array) pairs.
Four important parameters in a single figure:
Calling the method plotall()
will generate a plot containing the 4 most important characteristics of a solar cell in the subplots
SQ.plotall()
- Voc: Open-circuit voltage,
- Jsc: Short-circuit current density,
- FF: Fill factor
A method get_paras(self, Eg, toPrint=True)
can be used to look up the results. For example, the following call would print the theoretical parameters for a 1.337 eV solar cell.
SQ.get_paras(Eg=1.337)
would print the following lines like these in the colsole:
"""
Bandgap: 1.337 eV ; J0 = 2.64e-17 mA/cm^2
Voc = 1.079 V
Jsc = 35.14 mA/cm^2
FF = 88.88 %
PCE = 33.703 %
"""
Plot other characteristics
The plot(para)
method can be used to generate different plots. Valid input para
are "Voc"
, "Jsc"
, ``"FF",
"PCE"`, and `J0` (dark saturation current)
SQ.plot('J0') # dark saturation current
SQ.plot('Voc')
Calculate and plot the J-V curves
The simulate_JV()
method can be used to calculate the J-V curve with an option to plot it.
SQ.simulate_JV(Eg=1.337, plot=True) # calculate the J-V curve of solar cell, plot it, and return the J-V data
Savedata
The data (Voc, Jsc, FF, PCE, J0 as a function of bandgap) can be saved as a single .csv file
SQ.saveall(savename="SQ lim") # save data as "SQ lim.csv"
The data can be accessed here: SQ limit data
Visualize more interesting results
Break down of the theoretical efficiency and the energy loss
The method SQ.E_loss(Eg)
, which takes bandgap Eg
as an input, can be used to visualize the break down of energy loss.
SQ.E_loss(Eg=1.337)
Shown here are the break down for a 1.337 eV solar cell, which has the maximum theoretical efficiency of 33.7 %.
Available Energies
The mathod SQ.available_E(Egs) can be used to calculate and plot theoretical maximum available energies from a series of (mechanically stacked) solar cells with different Egs.
Single-junction solar cell, 1.337 eV
SQ.available_E(Egs=1.337)
This is the similar to the one above but without the break down of energy loss.
Multi-junction solar cells
The theoretical efficiencies of multijunction solar cells can be higher than single junction solar cells. The method SQ.available_E
can actually take a list of different bandgaps and calculate the maximum possible efficiencies by using materials with these bandgaps.
Note : In this calculation, we ignore the fact that the bottom cells (lower bandgaps) could absorb the 'excess' emission from the top cells (higher bandgaps)--when the top cells are operated at their maximum power point with finite voltage, there would be some excess emission. This phenomenon has a very minor effect on the calculated efficiencies for multi-junction cells.
Two bandgaps: 1.1 eV and 1.8 eV
SQ.available_E(Egs=[1.1, 1.8])
The sum of the two sub-cells are higher than any single-junction solar cells.
Three bandgaps: 0.95 eV, 1.37 eV, 1.90 eV
SQ.available_E(Egs=[0.95, 1.37, 1.90])
The sum of the efficiency are even higher.
Three bandgaps: Ge(0.65 eV), InGaAs (1.40 eV), InGaP (1.86 eV)
This bandgap-material combination is the example you can find on [Wikipedia's Multi-Junction Solar Cell] (https://en.wikipedia.org/wiki/Multi-junction_solar_cell) page
Efficiency Limit: "Infinite" number of junctions
The theoretical limit for tandem cells with a infinite number of junctions is about ~68%. (This number may be derived analytically, see [Wikipedia's page] (https://en.wikipedia.org/wiki/Multi-junction_solar_cell#Theoretical_Limiting_Efficiency) and the references therein.) But we can also use this SQ.available_E()
method to numerically approximate it. And we don't actually need an "infinite" amount of junctions. 50 junctions is close enough to get the job done:
# 50 subcells, 0.496 eV (2500nm) to 4.2 eV with equal energy spacing
SQ.available_E(np.linspace(0.496, 4.2, 50), legend=False)
A hypothetical multi-junction solar cell consisting of 50 sub-cells
Its overall power conversion efficiency is 67.1%
Different Conditions
The default conditions for calculating the theoretical limits are the standard conditions : Temperature T = 300
K, 1-sun condition intensity = 1.0
, and radiative efficiency EQE_EL = 1.0
(100% external quantum efficiency for electroluminescence).
class SQlim(object):
def __init__(self, T=300, EQE_EL=1.0, intensity=1.0):
"""
T: temperature in K
EQE_EL: radiative efficiency (EL quantum yield)
intensity: light concentration, 1.0 = one Sun, 100 mW/cm^2
"""
We can calculate the efficiencies in different conditions by simply changing the input.
Because of this flexibility, we can easily get an idea of how the change of these factors affect the theoretical efficiencies (or other characteristics fo interest).
Different Temperature
The theoretical maximum possible efficiencies of solar cells could be higher at lower temperature.
The classmethod vary_temp()
can do this calculation and plot the results.
SQlim.vary_temp(T=[150, 200, 250, 300, 350, 400])
Different Light intensity (Solar concentrator)
The efficiencies are higher when the incident light intensity is higher.
The classmethod vary_suns
does that caculation.
SQlim.vary_suns(Suns=[1, 10, 100, 1000])
Different radiative efficiency
The lower the EQE_EL (radiative efficiency), the lower the power conversion efficiency.
SQlim.vary_EQE_EL(EQE_EL=[1, 1E-2, 1E-4, 1E-6])
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file sqlimit-0.0.1.post1.tar.gz
.
File metadata
- Download URL: sqlimit-0.0.1.post1.tar.gz
- Upload date:
- Size: 115.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 268e75c396de774029aac98b335c56e958ac2452939bc095636be92b556c9f6f |
|
MD5 | b61ed61c1f8c5f1bfe800c81c73d73e2 |
|
BLAKE2b-256 | a2e252372174345faca1723f22a5c91a1f3ae80f941431a7cef99c3febe46197 |
File details
Details for the file sqlimit-0.0.1.post1-py3-none-any.whl
.
File metadata
- Download URL: sqlimit-0.0.1.post1-py3-none-any.whl
- Upload date:
- Size: 111.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1c68264d834ddc7fa0ba58c722e8b6bffa6c76c85098f5c1a0cdb5e9027355a |
|
MD5 | 98a00701ba544746542bf2999fadd64c |
|
BLAKE2b-256 | 75b331fb4830462c9167b73851aa56c30bfc40d34aa938795eeb46685ebac4d9 |