{
"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
}