{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Reading in material parameters and using the modified critical point parabolic band model (CPPB) to approximate the complex dielectric
\n", "function of GaAs. This model is based on:
\n", "- Adachi, S., Physical Properties of III-V Semiconductor Compounds, John Wiley & Sons (1992)
\n", "- C. C. Kim et al, 'Modelling the optical dielectric function of semiconductors: Extension of the critical-point parabolic band approximation', Physical Review B 45(20) 11749, 1992
\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from solcore.graphing.Custom_Colours import colours\n", "from solcore.absorption_calculator.cppm import Custom_CPPB as cppb\n", "from solcore.absorption_calculator.dielectric_constant_models import Oscillator\n", "from solcore.structure import Structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, read in experimental data for GaAs dielectric function (from Palik)..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Palik_Eps1 = np.loadtxt(\"../data/Palik_GaAs_Eps1.csv\", delimiter=',', unpack=False)\n", "Palik_Eps2 = np.loadtxt(\"../data/Palik_GaAs_Eps2.csv\", delimiter=',', unpack=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a list of energies over which to calculate the model dielectric function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "E = np.linspace(0.2, 5, 1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Class object is created, CPPB_Model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "CPPB_Model = cppb()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Material_Params method loads in the desired material parameters as a dictionary variable..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "MatParams = CPPB_Model.Material_Params(\"GaAs\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Parameters can be customised by assigning to the correct dictionary key..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "MatParams[\"B1\"] = 5.8\n", "MatParams[\"B1s\"] = 1.0\n", "MatParams[\"Gamma_Eg_ID\"] = 0.3\n", "MatParams[\"Alpha_Eg_ID\"] = 0.0\n", "MatParams[\"E1\"] = 2.8\n", "MatParams[\"E1_d1\"] = 2.9\n", "MatParams[\"Gamma_E1\"] = 0.1\n", "MatParams[\"E2\"] = 4.72\n", "MatParams[\"C\"] = 3.0\n", "MatParams[\"Alpha_E2\"] = 0.04\n", "MatParams[\"Gamma_E2\"] = 0.19" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Must define a structure object containing the required oscillator functions. The oscillator type and material
\n", "parameters are both passed to individual 'Oscillators' in the structure..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Adachi_GaAs = Structure([\n", " Oscillator(oscillator_type=\"E0andE0_d0\", material_parameters=MatParams),\n", " Oscillator(oscillator_type=\"E1andE1_d1\", material_parameters=MatParams),\n", " Oscillator(oscillator_type=\"E_ID\", material_parameters=MatParams),\n", " Oscillator(oscillator_type=\"E2\", material_parameters=MatParams)\n", "])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Output = CPPB_Model.eps_calc(Adachi_GaAs, E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "PLOT OUTPUT..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(7, 4.5))\n", "\n", "ax1.set_yscale(\"linear\")\n", "ax1.set_xlim(0, 5.3)\n", "ax1.set_ylim(-14, 27)\n", "\n", "ax1.plot(Palik_Eps1[:, 0], Palik_Eps1[:, 1], label=\"Exp. Data (Palik)\",\n", " marker='o', ls='none', markerfacecolor='none', markeredgecolor=colours(\"Red\"))\n", "\n", "ax1.plot(E, Output[\"eps\"].real, color=colours(\"Navy\"), label=\"Total\")\n", "ax1.plot(E, Output[\"components\"][0].real, color=colours(\"Orange Red\"), ls='--', label=\"$E_0$ and $E_0+\\Delta_0$\")\n", "ax1.plot(E, Output[\"components\"][1].real, color=colours(\"Dodger Blue\"), ls='--', label=\"$E_1$ and $E_1+\\Delta_1$\")\n", "ax1.plot(E, Output[\"components\"][2].real, color=colours(\"lime green\"), ls='--', label=\"$E_{ID}$ (Indirect)\")\n", "ax1.plot(E, Output[\"components\"][3].real, color=colours(\"gold\"), ls='--', label=\"$E_2$\")\n", "\n", "ax1.set_xlabel(\"Energy (eV)\")\n", "ax1.set_ylabel(\"$\\epsilon_1 (\\omega)$\")\n", "ax1.text(0.05, 0.05, '(a)', transform=ax1.transAxes, fontsize=12)\n", "\n", "ax2.set_yscale(\"linear\")\n", "\n", "ax2.plot(Palik_Eps2[:, 0], Palik_Eps2[:, 1], label=\"Exp. Data (Palik)\",\n", " marker='o', ls='none', markerfacecolor='none', markeredgecolor=colours(\"Red\"))\n", "\n", "ax2.plot(E, Output[\"eps\"].imag, color=colours(\"Navy\"), label=\"Total\")\n", "ax2.plot(E, Output[\"components\"][0].imag, color=colours(\"Orange Red\"), ls='--', label=\"$E_0$ and $E_0+\\Delta_0$\")\n", "ax2.plot(E, Output[\"components\"][1].imag, color=colours(\"Dodger Blue\"), ls='--', label=\"$E_1$ and $E_1+\\Delta_1$\")\n", "ax2.plot(E, Output[\"components\"][2].imag, color=colours(\"lime green\"), ls='--', label=\"$E_{ID}$ (Indirect)\")\n", "ax2.plot(E, Output[\"components\"][3].imag, color=colours(\"gold\"), ls='--', label=\"$E_2$\")\n", "ax2.set_xlim(0, 5.3)\n", "ax2.set_ylim(0, 27)\n", "\n", "ax2.set_xlabel(\"Energy (eV)\")\n", "ax2.set_ylabel(\"$\\epsilon_2 (\\omega)$\")\n", "ax2.text(0.05, 0.05, '(b)', transform=ax2.transAxes, fontsize=12)\n", "ax2.legend(loc=\"upper left\", frameon=False)\n", "\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }