-
Notifications
You must be signed in to change notification settings - Fork 78
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
714 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
repos: | ||
- repo: https://github.com/kynan/nbstripout | ||
rev: master | ||
hooks: | ||
- id: nbstripout | ||
files: ".ipynb" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
190 changes: 190 additions & 0 deletions
190
examples/notebooks/Absorption_profile_AlGaAs_GaAs_structure.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
{ | ||
"nbformat": 4, | ||
"nbformat_minor": 0, | ||
"metadata": { | ||
"colab": { | ||
"name": "Absorption_profile_AlGaAs_GaAs_structure.ipynb", | ||
"provenance": [] | ||
}, | ||
"kernelspec": { | ||
"name": "python3", | ||
"display_name": "Python 3" | ||
} | ||
}, | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "-1Z1-d4C47YK", | ||
"colab_type": "text" | ||
}, | ||
"source": [ | ||
"# Absorption Profile AlGaAs GaAs Structure Example" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "9282DOR42thA", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"import matplotlib.pyplot as plt\n", | ||
"import numpy as np\n", | ||
"from solcore.absorption_calculator import calculate_absorption_profile\n", | ||
"from solcore import material, si\n", | ||
"from solcore.structure import Structure, Layer" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "U9-mFKNO22IZ", | ||
"colab_type": "text" | ||
}, | ||
"source": [ | ||
"First we defined a couple of materials, for example, GaAs and AlGAs" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "dHoZMpKB25ZY", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"GaAs = material('GaAs')(T=300)\n", | ||
"AlGaAs = material('AlGaAs')(T=300, Al=0.3)" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "qmA8l1ja272Y", | ||
"colab_type": "text" | ||
}, | ||
"source": [ | ||
"Now, let's build the structure" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "d5DpfgwH2-rp", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"my_structure = Structure([\n", | ||
" Layer(si(30, 'nm'), material=AlGaAs),\n", | ||
" Layer(si(3000, 'nm'), material=GaAs),\n", | ||
" Layer(si(300, 'um'), material=GaAs),\n", | ||
"])" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "q-p7bGCM3BAJ", | ||
"colab_type": "text" | ||
}, | ||
"source": [ | ||
"We want to calculate the absorption profile of this structure as a function of the position and wavelength" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "ihObNLeu3C4p", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"wl = np.linspace(400, 1000, 200)\n", | ||
"out = calculate_absorption_profile(my_structure, wl, steps_size=1, z_limit=3000)" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "rq_rk3S13Enp", | ||
"colab_type": "text" | ||
}, | ||
"source": [ | ||
"Finally, we plot the absorption profile. Note that absorption at short wavelengths take place near the surface of the structure, in the AlGaAs layer and top of the GaAs layer, while longer wavelengths penetrate more. Wavelengths beyond the GaAs band edge are not absorbed." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "WAfmwPn_3dYh", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"plt.figure(1)\n", | ||
"ax = plt.contourf(out['position'], wl, out['absorption'], 200)\n", | ||
"plt.xlabel('Position (nm)')\n", | ||
"plt.ylabel('Wavelength (nm)')\n", | ||
"cbar = plt.colorbar()\n", | ||
"cbar.set_label('Absorption (1/nm)')" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": { | ||
"id": "ta2lqN483fQI", | ||
"colab_type": "text" | ||
}, | ||
"source": [ | ||
"We can also check what is the overall light absorption in the AlGaAs and GaAs epilayers as that represents the total light absorption in our solar cell and therefore the maximum EQE (light absorbed in the thick substrate lost). The absorption is mostly limited by the reflexion in the front surface. Clearly, this solar cell needs an AR coating." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "MFBsE2UG2SLc", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"A = np.zeros_like(wl)\n", | ||
"\n", | ||
"for i, absorption in enumerate(out['absorption'][:]):\n", | ||
" A[i] = np.trapz(absorption, out['position'])" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"metadata": { | ||
"id": "zGdyOW4H3oig", | ||
"colab_type": "code", | ||
"colab": {} | ||
}, | ||
"source": [ | ||
"plt.figure(2)\n", | ||
"plt.plot(wl, A)\n", | ||
"plt.xlabel('Wavelength (nm)')\n", | ||
"plt.ylabel('Absorption')\n", | ||
"\n", | ||
"plt.show()" | ||
], | ||
"execution_count": 0, | ||
"outputs": [] | ||
} | ||
] | ||
} |
Oops, something went wrong.