From 4d98e17383b897ce105daee4e21e3711e0d0ae69 Mon Sep 17 00:00:00 2001 From: Phoebe Pearce Date: Mon, 20 Nov 2023 20:14:26 +1100 Subject: [PATCH] update examples --- docs/search.json | 782 ++++++++-------- .../notebooks/10-perovskite_Si_rt.html | 588 +++++++----- .../figure-html/cell-10-output-1.png | Bin 0 -> 75221 bytes .../figure-html/cell-12-output-1.png | Bin 0 -> 68454 bytes .../figure-html/cell-13-output-1.png | Bin 0 -> 81004 bytes .../notebooks/2-Efficiency_limits.html | 607 +++++++------ .../figure-html/cell-10-output-2.png | Bin 0 -> 31976 bytes .../figure-html/cell-11-output-2.png | Bin 0 -> 29461 bytes .../figure-html/cell-14-output-2.png | Bin 0 -> 22656 bytes .../figure-html/cell-15-output-2.png | Bin 0 -> 30705 bytes .../figure-html/cell-18-output-2.png | Bin 0 -> 32237 bytes .../figure-html/cell-19-output-3.png | Bin 0 -> 25205 bytes .../figure-html/cell-2-output-3.png | Bin 0 -> 36830 bytes .../figure-html/cell-21-output-2.png | Bin 0 -> 36219 bytes .../figure-html/cell-23-output-2.png | Bin 0 -> 72594 bytes .../figure-html/cell-6-output-2.png | Bin 0 -> 38286 bytes .../figure-html/cell-9-output-2.png | Bin 0 -> 27489 bytes .../notebooks/4-Spectral2.html | 159 ++-- .../figure-html/cell-2-output-3.png | Bin 0 -> 47885 bytes .../figure-html/cell-3-output-2.png | Bin 0 -> 59155 bytes .../figure-html/cell-4-output-2.png | Bin 0 -> 63950 bytes .../figure-html/cell-5-output-2.png | Bin 0 -> 60946 bytes .../figure-html/cell-6-output-2.png | Bin 0 -> 74301 bytes .../notebooks/5a-simple_Si_cell.html | 266 +++--- .../figure-html/cell-12-output-1.png | Bin 0 -> 35583 bytes .../figure-html/cell-19-output-1.png | Bin 0 -> 38043 bytes .../figure-html/cell-20-output-1.png | Bin 0 -> 41508 bytes .../figure-html/cell-22-output-1.png | Bin 0 -> 48000 bytes .../figure-html/cell-23-output-1.png | Bin 0 -> 26994 bytes .../notebooks/5b-Si_cell_PDD.html | 419 +++++---- .../figure-html/cell-10-output-1.png | Bin 80849 -> 0 bytes .../figure-html/cell-11-output-1.png | Bin 0 -> 80752 bytes .../figure-html/cell-12-output-1.png | Bin 31429 -> 0 bytes .../figure-html/cell-13-output-1.png | Bin 0 -> 28970 bytes .../figure-html/cell-15-output-1.png | Bin 0 -> 20124 bytes .../figure-html/cell-16-output-1.png | Bin 0 -> 18126 bytes .../figure-html/cell-5-output-1.png | Bin 15164 -> 17518 bytes .../figure-html/cell-6-output-1.png | Bin 0 -> 15804 bytes .../notebooks/6a-TMM_introduction.html | 226 ++--- .../figure-html/cell-10-output-1.png | Bin 0 -> 83899 bytes .../figure-html/cell-8-output-1.png | Bin 0 -> 114129 bytes .../figure-html/cell-9-output-1.png | Bin 0 -> 136766 bytes .../notebooks/6b-arc_optimization.html | 268 +++--- .../figure-html/cell-11-output-1.png | Bin 0 -> 20589 bytes .../figure-html/cell-7-output-2.png | Bin 0 -> 29916 bytes .../notebooks/7-InGaP_Si_planar.html | 465 ++++++---- .../figure-html/cell-13-output-1.png | Bin 0 -> 56648 bytes .../figure-html/cell-16-output-2.png | Bin 0 -> 44974 bytes .../figure-html/cell-17-output-2.png | Bin 0 -> 29954 bytes .../notebooks/8-grating_pyramids_OPTOS.html | 537 ++++++----- .../figure-html/cell-10-output-1.png | Bin 0 -> 68632 bytes .../figure-html/cell-11-output-1.png | Bin 0 -> 19417 bytes .../figure-html/cell-9-output-1.png | Bin 0 -> 77091 bytes .../notebooks/9a-GaInP_GaAs_Si_grating.html | 229 +++-- ...l-12-output-1.png => cell-11-output-1.png} | Bin ...ell-8-output-3.png => cell-7-output-2.png} | Bin .../notebooks/9b-GaInP_GaAs_Si_pyramids.html | 341 +++---- .../figure-html/cell-10-output-1.png | Bin 44348 -> 43774 bytes .../figure-html/cell-13-output-3.png | Bin 33301 -> 0 bytes .../figure-html/cell-15-output-3.png | Bin 62098 -> 33591 bytes .../figure-html/cell-16-output-3.png | Bin 0 -> 61835 bytes .../9b-GaInP_GaAs_Si_pyramids_new.html | 633 ------------- .../9b-GaInP_GaAs_Si_pyramids_new.html | 662 -------------- .../figure-html/cell-10-output-1.png | Bin 43414 -> 0 bytes solcore-workshop-2/5b-simple_GaAs_cell.py | 154 ---- solcore-workshop-2/db_test.py | 64 -- .../notebooks/10-perovskite_Si_rt.ipynb | 243 ++++- .../notebooks/2-Efficiency_limits.ipynb | 406 ++++++++- .../notebooks/4-Spectral2.ipynb | 136 ++- .../notebooks/5a-simple_Si_cell.ipynb | 177 +++- .../notebooks/5b-Si_cell_PDD.ipynb | 242 ++++- .../notebooks/6a-TMM_introduction.ipynb | 67 +- .../notebooks/6b-arc_optimization.ipynb | 845 +++--------------- .../notebooks/7-InGaP_Si_planar.ipynb | 265 +++++- .../notebooks/8-grating_pyramids_OPTOS.ipynb | 239 +++-- .../notebooks/9a-GaInP_GaAs_Si_grating.ipynb | 106 +-- .../notebooks/9b-GaInP_GaAs_Si_pyramids.ipynb | 238 +++-- .../9b-GaInP_GaAs_Si_pyramids_new.ipynb | 414 --------- .../{ => plain}/10-perovskite_Si_rt.py | 71 +- .../{ => plain}/2-Efficiency_limits.py | 44 +- solcore-workshop-2/{ => plain}/4-Spectral2.py | 10 +- .../{ => plain}/5a-simple_Si_cell.py | 56 +- .../{ => plain}/5b-Si_cell_PDD.py | 166 +++- .../{ => plain}/6a-TMM_introduction.py | 18 +- .../{ => plain}/6b-arc_optimization.py | 108 +-- .../{ => plain}/7-InGaP_Si_planar.py | 54 +- .../{ => plain}/8-grating_pyramids_OPTOS.py | 51 +- .../{ => plain}/9a-GaInP_GaAs_Si_grating.py | 45 +- .../{ => plain}/9b-GaInP_GaAs_Si_pyramids.py | 72 +- solcore-workshop-2/schedule.qmd | 2 +- .../III_V_Si_cell/III_V_frontfrontA.npz | Bin 27381 -> 0 bytes .../III_V_Si_cell/III_V_frontfrontRT.npz | Bin 15974 -> 0 bytes .../III_V_Si_cell/III_V_frontrearA.npz | Bin 36430 -> 0 bytes .../III_V_Si_cell/III_V_frontrearRT.npz | Bin 9854 -> 0 bytes .../crossed_grating_backfrontA.npz | Bin 20859 -> 0 bytes .../crossed_grating_backfrontRT.npz | Bin 476057 -> 0 bytes .../crossed_grating_backfrontA.npz | Bin 42574 -> 0 bytes .../crossed_grating_backfrontRT.npz | Bin 428663 -> 0 bytes .../inv_pyramids_front_500000.0frontA.npz | Bin 770 -> 0 bytes .../inv_pyramids_front_500000.0frontRT.npz | Bin 517017 -> 0 bytes .../inv_pyramids_front_500000.0rearA.npz | Bin 770 -> 0 bytes .../inv_pyramids_front_500000.0rearRT.npz | Bin 81220 -> 0 bytes .../OPTOS_comparison/planar_backfrontA.npz | Bin 770 -> 0 bytes .../OPTOS_comparison/planar_backfrontRT.npz | Bin 8404 -> 0 bytes .../OPTOS_comparison/planar_frontfrontA.npz | Bin 770 -> 0 bytes .../OPTOS_comparison/planar_frontfrontRT.npz | Bin 19970 -> 0 bytes .../OPTOS_comparison/planar_frontrearA.npz | Bin 770 -> 0 bytes .../OPTOS_comparison/planar_frontrearRT.npz | Bin 8951 -> 0 bytes 108 files changed, 4788 insertions(+), 5687 deletions(-) create mode 100644 docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt_files/figure-html/cell-10-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt_files/figure-html/cell-12-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt_files/figure-html/cell-13-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-10-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-11-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-14-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-15-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-18-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-19-output-3.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-2-output-3.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-21-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-23-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-6-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-9-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-2-output-3.png create mode 100644 docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-3-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-4-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-5-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-6-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-12-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-19-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-20-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-22-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-23-output-1.png delete mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-10-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-11-output-1.png delete mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-12-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-13-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-15-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-16-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD_files/figure-html/cell-6-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/6a-TMM_introduction_files/figure-html/cell-10-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/6a-TMM_introduction_files/figure-html/cell-8-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/6a-TMM_introduction_files/figure-html/cell-9-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/6b-arc_optimization_files/figure-html/cell-11-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/6b-arc_optimization_files/figure-html/cell-7-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/7-InGaP_Si_planar_files/figure-html/cell-13-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/7-InGaP_Si_planar_files/figure-html/cell-16-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/7-InGaP_Si_planar_files/figure-html/cell-17-output-2.png create mode 100644 docs/solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS_files/figure-html/cell-10-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS_files/figure-html/cell-11-output-1.png create mode 100644 docs/solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS_files/figure-html/cell-9-output-1.png rename docs/solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating_files/figure-html/{cell-12-output-1.png => cell-11-output-1.png} (100%) rename docs/solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating_files/figure-html/{cell-8-output-3.png => cell-7-output-2.png} (100%) delete mode 100644 docs/solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_files/figure-html/cell-13-output-3.png create mode 100644 docs/solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_files/figure-html/cell-16-output-3.png delete mode 100644 docs/solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html delete mode 100644 docs/solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html delete mode 100644 docs/solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new_files/figure-html/cell-10-output-1.png delete mode 100644 solcore-workshop-2/5b-simple_GaAs_cell.py delete mode 100644 solcore-workshop-2/db_test.py delete mode 100644 solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.ipynb rename solcore-workshop-2/{ => plain}/10-perovskite_Si_rt.py (89%) rename solcore-workshop-2/{ => plain}/2-Efficiency_limits.py (98%) rename solcore-workshop-2/{ => plain}/4-Spectral2.py (99%) rename solcore-workshop-2/{ => plain}/5a-simple_Si_cell.py (95%) rename solcore-workshop-2/{ => plain}/5b-Si_cell_PDD.py (52%) rename solcore-workshop-2/{ => plain}/6a-TMM_introduction.py (99%) rename solcore-workshop-2/{ => plain}/6b-arc_optimization.py (66%) rename solcore-workshop-2/{ => plain}/7-InGaP_Si_planar.py (92%) rename solcore-workshop-2/{ => plain}/8-grating_pyramids_OPTOS.py (86%) rename solcore-workshop-2/{ => plain}/9a-GaInP_GaAs_Si_grating.py (87%) rename solcore-workshop-2/{ => plain}/9b-GaInP_GaAs_Si_pyramids.py (85%) delete mode 100644 solcore-workshop/notebooks/III_V_Si_cell/III_V_frontfrontA.npz delete mode 100644 solcore-workshop/notebooks/III_V_Si_cell/III_V_frontfrontRT.npz delete mode 100644 solcore-workshop/notebooks/III_V_Si_cell/III_V_frontrearA.npz delete mode 100644 solcore-workshop/notebooks/III_V_Si_cell/III_V_frontrearRT.npz delete mode 100644 solcore-workshop/notebooks/III_V_Si_cell/crossed_grating_backfrontA.npz delete mode 100644 solcore-workshop/notebooks/III_V_Si_cell/crossed_grating_backfrontRT.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/crossed_grating_backfrontA.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/crossed_grating_backfrontRT.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/inv_pyramids_front_500000.0frontA.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/inv_pyramids_front_500000.0frontRT.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/inv_pyramids_front_500000.0rearA.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/inv_pyramids_front_500000.0rearRT.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/planar_backfrontA.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/planar_backfrontRT.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/planar_frontfrontA.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/planar_frontfrontRT.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/planar_frontrearA.npz delete mode 100644 solcore-workshop/notebooks/OPTOS_comparison/planar_frontrearRT.npz diff --git a/docs/search.json b/docs/search.json index fa17301..70717fd 100644 --- a/docs/search.json +++ b/docs/search.json @@ -196,270 +196,256 @@ "text": "Questions\n\nWhy does the grating only affect the absorption in Si at long wavelengths?\nWhat is the reason for using the angular redistribution matrix method, rather than defining an RCWA-only structure (rcwa_structure)?" }, { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html", - "title": "Section 6a: Basic cell optics", + "objectID": "solcore-workshop/workshop2023.html", + "href": "solcore-workshop/workshop2023.html", + "title": "Solcore Workshop 2023 (SKKU)", "section": "", - "text": "In this script, we will build on the TMM model from example 1(a) and look at the effects of interference.\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\nfrom solcore.solar_cell import Layer\nfrom solcore.absorption_calculator import calculate_rat, OptiStack\nimport seaborn as sns" - }, - { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#setting-up", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#setting-up", - "title": "Section 6a: Basic cell optics", - "section": "Setting up", - "text": "Setting up\nFirst, let’s define some materials:\n\nSi = material(\"Si\")\nSiN = material(\"Si3N4\")()\nAg = material(\"Ag\")()\n\nNote the second set of brackets (or lack thereof). The Solcore material system essentially operates in two stages; we first call the material function with the name of the material we want to use, for example Si = material(“Si”), which creates a general Python class corresponding to that material. We then call this class to specify further details, such as the temperature, doping level, or alloy composition (where relavant). This happens below when defining Si_n and Si_p; both are use the Si class defined above, and adding further details to the material. For the definitions of SiN and Ag above, we do both steps in a single line, hence the two sets of brackets.\n\nSi_n = Si(Nd=si(\"1e21cm-3\"), hole_diffusion_length=si(\"10um\"))\nSi_p = Si(Na=si(\"1e16cm-3\"), electron_diffusion_length=si(\"400um\"))\n\nTo look at the effect of interference in the Si layer at different thicknesses, we make a list of thicknesses to test (evenly spaced on a log scale from 400 nm to 300 um):\n\nSi_thicknesses = np.linspace(np.log(0.4e-6), np.log(300e-6), 8)\nSi_thicknesses = np.exp(Si_thicknesses)\n\nwavelengths = si(np.linspace(300, 1200, 400), \"nm\")\n\noptions = {\n \"recalculate_absorption\": True,\n \"optics_method\": \"TMM\",\n \"wavelength\": wavelengths\n }\n\nMake a color palette using the seaborn package to make the plots look nicer\n\ncolors = sns.color_palette('rocket', n_colors=len(Si_thicknesses))\ncolors.reverse()\n\ncreate an ARC layer:\n\nARC_layer = Layer(width=si('75nm'), material=SiN)" + "text": "Click here to view all the slides.\nOutline:\nDay 1:\n\nIntroduction to Solcore & computer modelling (lecture)\nIntegration for limiting current, limiting voltage model\nShockley-Queisser efficiency limit and detailed balance (DB) junction model (lecture)\n\nDay 2:\n\nIntroduction to drift-diffusion junction model, depletion approximation (lecture) & spectral irradiance\nThe depletion approximation: Si cell and GaAs cell\nOptical modelling using the transfer-matrix model (TMM):\n\nTMM introduction\nOptimizing an anti-reflection coating\n\nPlanar III-V on Si tandem solar cell\n\nDay 3:\n\nOptical absorption in textured Si: ray-tracing for pyramid textures, rigorous coupled-wave analysis (RCWA) for nano-scale gratings\nIII-V/Si cells with light-trapping structures:\n\nPlanar III-V wafer-bonded to silicon with planar front using e.g. epoxy\nPlanar III-V bonded to textured silicon with diffraction grating on rear\n\nConformal perovskite on silicon tandem cells" }, { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-si-thickness", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-si-thickness", - "title": "Section 6a: Basic cell optics", - "section": "Effect of Si thickness", - "text": "Effect of Si thickness\nNow we are going to loop through the different Si thicknesses generated above, and create a simple solar cell-like structure. Because we will only do an optical calculation, we don’t need to define a junction and can just make a simple stack of layers.\nWe then calculate reflection, absorption and transmission (RAT) for two different situations: 1. a fully coherent stack 2. assuming the silicon layer is incoherent. This means that light which enters the Si layer cannot interfere with itself, but light in the ARC layer can still show interference. In very thick layers (much thicker than the wavelength of light being considered) this is likely to be more physically accurate because real light does not have infinite coherence length; i.e. if you measured wavelength-dependent transmission or reflection of a Si wafer hundreds of microns thick you would not expect to see interference fringes.\nPLOT 1\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p) # silicon layer\n solar_cell = OptiStack([ARC_layer, base_layer]) # OptiStack (optical stack) to feed into calculate_rat function\n\n # Coherent calculation:\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False) # coherent calculation\n # For historical reasons, Solcore's default setting is to ignore reflection at the back of the cell (i.e. at the\n # interface between the final material in the stack and the substrate). Hence we need to tell the calculate_rat\n # function NOT to ignore this reflection (no_back_reflection=False).\n\n # Calculation assuming no interference in the silicon (\"incoherent\"):\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i']) # partially coherent: ARC is coherent, Si is not\n\n # Plot the results:\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1], label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(1) Absorption in Si with varying thickness\")\nplt.show()\n\n\n\n\nWe can see that the coherent calculations (solid lines) show clear interference fringes which depend on the Si thickness. The incoherent calculations do not have these fringes and seem to lie around the average of the interference fringes. For both sets of calculations, we see increasing absorption as the Si gets thicker, as expected." + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "", + "text": "The structure in this example is based on that of the previous example (9a), but with the planar bottom Si cell replaced by a Si cell with a pyramidal texture, bonded to the III-V top cells with a low-index epoxy/glass layer.\nWe could use the angular redistribution matrix method as in the previous example - however, because in this example we only need to use TMM and ray-tracing (RT), we can use the ray-tracing method with integrated RT directly (this is generally faster, because we do not need to calculate the behaviour of the surfaces for every angle of incidence)." }, { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-reflective-substrate", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-reflective-substrate", - "title": "Section 6a: Basic cell optics", - "section": "Effect of reflective substrate", - "text": "Effect of reflective substrate\nNow we repeat the calculation, but with an Ag substrate under the Si. Previously, we did not specify the substrate and so it was assumed by Solcore to be air (\\(n\\) = 1, \\(\\kappa\\) = 0).\nPLOT 2\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p)\n\n # As before, but now we specify the substrate to be silver:\n solar_cell = OptiStack([ARC_layer, base_layer], substrate=Ag)\n\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False)\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1],\n label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(2) Absorption in Si with varying thickness (Ag substrate)\")\nplt.show()\n\n\n\n\nWe see that the interference fringes get more prominent in the coherent calculation, due to higher reflection at the rear Si/Ag surface compared to Ag/Air. We also see a slightly boosted absorption at long wavelengths at all thicknesses, again due to improved reflection at the rear surface" + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#setting-up", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#setting-up", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Setting up", + "text": "Setting up\nWe load relevant packages and define materials, the same as in the previous example.\n\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer\nfrom solcore.light_source import LightSource\nfrom rayflare.ray_tracing import rt_structure\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.textures import planar_surface, regular_pyramids\nfrom rayflare.options import default_options\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# download_db()\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nTa2O5_pageid = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0];\nSU8_pageid = search_db(\"SU8\")[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nepoxy = material(\"BK7\")()\n\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nTa2O5 = material(str(Ta2O5_pageid), nk_db=True)();\nSU8 = material(str(SU8_pageid), nk_db=True)();\nAg = material(str(Ag_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")\nAlGaAs = material(\"AlGaAs\")\n\nAir = material(\"Air\")()\n\nGaAs = material(\"GaAs\")\n\nSi = material(\"Si\")\n\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n234 main MgF2 Rodriguez-de_Marcos main/MgF2/Rodriguez-de Marcos.yml 1 1 0.0299919 2.00146 960\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n475 main Ta2O5 Rodriguez-de_Marcos main/Ta2O5/Rodriguez-de Marcos.yml 1 1 0.0294938 1.51429 212\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n2 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2835 other negative_tone_photoresists Microchem_SU8_2000 other/resists/Microchem SU-8 2000.yml 1 0 0.32 0.8 200\n2836 other negative_tone_photoresists Microchem_SU8_3000 other/resists/Microchem SU-8 3000.yml 1 0 0.32 1.7 200\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2 main Ag Jiang main/Ag/Jiang.yml 1 1 0.3 2.0 1701\n\n\nWe define the layers we will need, as before. We specify the thickness of the silicon (280 \\(\\mu\\)m) and epoxy (1 mm) at the top:\n\nd_Si = 280e-6 # thickness of Si wafer\nd_epoxy = 1e-6 # thickness of epoxy. In reality, the epoxy is much thicker, but the exact thickness doesn't matter \n # because the material is transparent and we will treat it incoherently.\n\nGaInP_total_thickness = 350e-9\nGaAs_total_thickness = 1200e-9\n\nARC = [Layer(110e-9, MgF2), Layer(65e-9, Ta2O5)]\n\nGaInP_junction = [Layer(20e-9, window), Layer(GaInP_total_thickness, GaInP(In=0.50))]\n\n# 100 nm TJ\ntunnel_1 = [Layer(100e-9, AlGaAs(Al=0.8)), Layer(20e-9, GaInP(In=0.5))]\n\nGaAs_junction = [Layer(20e-9, GaInP(In=0.5)), Layer(GaAs_total_thickness, GaAs()), Layer(70e-9, AlGaAs(Al=0.8))]\n\nspacer_ARC = [Layer(80e-9, Ta2O5)]" }, { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-polarization-and-angle-of-incidence", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-polarization-and-angle-of-incidence", - "title": "Section 6a: Basic cell optics", - "section": "Effect of polarization and angle of incidence", - "text": "Effect of polarization and angle of incidence\nFinally, we look at the effect of incidence angle and polarization of the light hitting the cell.\nPLOT 3\n\nangles = [0, 30, 60, 70, 80, 89] # angles in degrees\n\nARC_layer = Layer(width=si('75nm'), material=SiN)\nbase_layer = Layer(width=si(\"100um\"), material=Si_p)\n\ncolors = sns.cubehelix_palette(n_colors=len(angles))\n\nplt.figure()\n\nfor i1, theta in enumerate(angles):\n\n solar_cell = OptiStack([ARC_layer, base_layer])\n\n RAT_s = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='s',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n RAT_p = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='p',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n\n plt.plot(wavelengths*1e9, RAT_s[\"A\"], color=colors[i1], label=str(round(theta)))\n plt.plot(wavelengths*1e9, RAT_p[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"$\\theta (^\\circ)$\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(3) Absorption in Si with varying angle of incidence\")\nplt.show()\n\n\n\n\nFor normal incidence (\\(\\theta = 0^\\circ\\)), s (solid lines) and p (dashed lines) polarization are equivalent. As the incidence angle increases, in general absorption is higher for p-polarized light (due to lower reflection). Usually, sunlight is modelled as unpolarized light, which computationally is usually done by averaging the results for s and p-polarized light." + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-cell-layers", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-cell-layers", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Defining the cell layers", + "text": "Defining the cell layers\nThere are three interfaces in the cell which will define the structure to simulate:\n\nthe III-V/epoxy interface, where the epoxy itself will be treated as a bulk layer in the simulation\nthe epoxy/Si interface, where the Si has a pyramidal texture (the Si itself is another bulk layer in the simulation).\nthe rear surface of the cell, where the Si again has a pyramidal texture (and we assume there is a silver back mirror behind the cell)\n\nThese 3 interfaces are defined here, using the pre-defined textures for a planar surface or regular pyramids:\n\nfront_layers = ARC + GaInP_junction + tunnel_1 + GaAs_junction + spacer_ARC\n\nfront_surf = planar_surface(interface_layers = front_layers, prof_layers=np.arange(1, len(front_layers)+1))\n\nSi_front = regular_pyramids(elevation_angle=50, upright=True)\n\nSi_back = regular_pyramids(elevation_angle=50, upright=False)\n\nNow we set relevant options for the solver. We set the number of rays to trace at each wavelength (more rays will make the result less noisy, but increase computation time) and whether to calculate the absorption profile in the bulk layers (no, in this case). The randomize_surface options determines whether the ray keeps track of its positions in the unit cell while travelling between surfaces; we set this to False to mimic random pyramids.\n\noptions = default_options()\n\nwl = np.arange(300, 1201, 10) * 1e-9\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl, output_units=\"photon_flux_per_m\")\n\noptions.wavelength = wl\noptions.project_name = \"III_V_Si_cell\"\n\n# options for ray-tracing\noptions.randomize_surface = True\noptions.n_rays = 1000\noptions.bulk_profile = False" }, { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#conclusions", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#conclusions", - "title": "Section 6a: Basic cell optics", - "section": "Conclusions", - "text": "Conclusions\nWe have now seen some effects of interference in layers of different thicknesses, and seen the effect of adding a highly reflective substrate. So we already have two strategies for light-trapping/improving the absorption in a solar cell: adding an anti-reflection coating (in example 1a), to reduce front-surface reflection and get more light into the cell, and adding a highly reflective layer at the back, to reduce loss through the back of the cell and keep light trapped in the cell." + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-structures", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-structures", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Defining the structures", + "text": "Defining the structures\nFinally, we define the ray-tracing structure we will use, using the interfaces, bulk materials, and options set above. Because we want to calculate the reflection/absorption/transmission probabilities at the front surface using TMM, we set the use_TMM argument to True. We also define a completely planar cell with the same layer thicknesses etc. to compare and evaluate the effect of the textures Si surfaces.\n\noptical_structure = rt_structure(\n textures=[front_surf, Si_front, Si_back],\n materials=[epoxy, Si()],\n widths=[d_epoxy, d_Si],\n incidence=Air,\n transmission=Ag,\n options=options,\n use_TMM=True,\n save_location=\"current\", # lookup table save location\n overwrite=True, # whether to overwrite any previously existing results, if found\n)\n\n# options for TMM\noptions.coherent = False\noptions.coherency_list = len(front_layers)*['c'] + ['i']*2\n\nplanar_optical_structure = tmm_structure(\n layer_stack = front_layers + [Layer(d_epoxy, epoxy), Layer(d_Si, Si())],\n incidence=Air,\n transmission=Ag,\n)\n\nINFO: Pre-computing TMM lookup table(s)\n\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded." }, { - "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#questions", - "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#questions", - "title": "Section 6a: Basic cell optics", - "section": "Questions", - "text": "Questions\n\nWhy are the interference fringes stronger when adding a silver back mirror, compared to having air behind the Si?\nWe modelled s and p-polarized light - how do we normally model unpolarized light?" + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#calculations", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#calculations", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Calculations", + "text": "Calculations\nCalculate the R/A/T for the planar reference cell:\n\ntmm_result = planar_optical_structure.calculate(options=options)\n\nGaInP_A_tmm = tmm_result['A_per_layer'][:,3]\nGaAs_A_tmm = tmm_result['A_per_layer'][:,7]\nSi_A_tmm = tmm_result['A_per_layer'][:,len(front_layers)+1]\n\nJmax_GaInP_tmm = q*np.trapz(GaInP_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs_tmm = q*np.trapz(GaAs_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_Si_tmm = q*np.trapz(Si_A_tmm*AM15G.spectrum()[1], x=wl)/10\n\nCalculate the R/A/T for the textured cell:\n\nrt_result = optical_structure.calculate(options=options)\n\nGaInP_absorption_ARC = rt_result['A_per_interface'][0][:,3]\nGaAs_absorption_ARC = rt_result['A_per_interface'][0][:,7]\nSi_absorption_ARC = rt_result['A_per_layer'][:,1]\n\nJmax_GaInP = q*np.trapz(GaInP_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs = q*np.trapz(GaAs_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_Si = q*np.trapz(Si_absorption_ARC*AM15G.spectrum()[1], x=wl)/10" }, { - "objectID": "solcore-workshop-2/schedule.html", - "href": "solcore-workshop-2/schedule.html", - "title": "Schedule", - "section": "", - "text": "Day 1 (Wednesday 22/11)\n\nDay 2 (Thursday 23/11)\n\nDay 3 (Friday 24/11)\n\n\n\n\nThemes:\nIntroduction, efficiency limits & fitting data\n\nJunction models & planar optics\n\nAdvanced light-trapping structures\n\n\n1.00 - 1.30\nIntroduction to computer modelling & Solcore\n1.00 - 1.30\nIntroduction to different junction models\n1.00 - 1.20\nIntroduction to RayFlare & different optical methods\n\n\n1.30 - 2.15\nLimiting current & voltage models\n1.30 - 2.00\nPlanar Si cell using depletion approximation junction\n1.20 - 2.00\nEffect of diffraction grating (RCWA) and ray-tracing (RT) on a silicon wafer\n\n\n2.15 - 2.45\nBreak\n2.00 - 2.45\nIntroduction to the transfer-matrix method: interference and anti-reflection coatings\n2.00 - 2.30\nGaInP/GaAs/Si triple-junction cell with rear diffraction grating\n\n\n2.45 - 3.30\nShockley-Queisser efficiency limit\n2.45 - 3.15\nBreak\n2.30 - 3.00\nBreak\n\n\n3.30 - 4.00\nChanging irradiance spectra\n3.00 - 3.45\nPlanar Si cell using drift-diffusion junction\n3.00 - 3.45\nEpoxy-bonded GaInP/GaAs//Si triple-junction cell with pyramidally textured silicon\n\n\n4.00 - 4.15\nBreak\n3.45 - 4.15\nBreak\n3.45 - 4.30\nPerovskite on silicon tandem cell with pyramidcal texturing\n\n\n4.15 - 5.00\nTwo-diode model fits to experimental data\n4.15 - 5.00\nOptical model of a planar III-V on Si tandem cell\n4.30 - 5.00\nUsing the Katana HPC" + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#plotting-the-results", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#plotting-the-results", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Plotting the results", + "text": "Plotting the results\nFinally, we plot the results; the solid lines show the results for the textured Si cell (calculated using ray-tracing), the dashed lines for the planar cell (calculated using TMM). The maximum possible currents are shown in the plot, with the value in brackets for Si being for the planar cell.\n\nplt.figure(figsize=(6,3))\nplt.plot(wl * 1e9, GaInP_absorption_ARC, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_absorption_ARC, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_absorption_ARC, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, GaInP_A_tmm, \"--k\")\nplt.plot(wl * 1e9, GaAs_A_tmm, \"--b\")\nplt.plot(wl * 1e9, Si_A_tmm, \"--r\")\nplt.plot(wl * 1e9, rt_result['R'], '-', color='grey', label=\"Reflected\")\nplt.plot(wl * 1e9, tmm_result['R'], '--', color='grey')\n\nplt.text(420, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(870, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si))\nplt.text(870, 0.45, r\"({:.1f} mA/cm$^2)$\".format(Jmax_Si_tmm))\n\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.tight_layout()\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html", - "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html", - "title": "Section 6b: Optimizing an ARC", - "section": "", - "text": "In the previous example, we introduced a simple one-layer anti-reflection coating (ARC); ARCs are a standard feature of all high-efficiency solar cells. But how do you find out the right thickness for the anti-reflection coating layer(s) (or the right dimensions for a light-trapping grating, or some other structure in your cell)? This is where optimization comes in. Here, we will look at a very simple ‘brute-force’ optimization for a single or double-layer ARC.\nimport numpy as np\nimport os\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\nfrom solcore.solar_cell import Layer, SolarCell\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom solcore.light_source import LightSource\nfrom solcore.absorption_calculator import search_db, download_db\nfrom solcore.absorption_calculator import calculate_rat\nfrom solcore.state import State\n\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.options import default_options\nimport seaborn as sns\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The Poisson - Drift-Diffusion solver will not be available because the ddModel fortran library could not be imported.\nname 'dd' is not defined\n\n\n/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/registries.py:73: UserWarning: Optics solver 'RCWA' will not be available. An installation of S4 has not been found.\n warn(" + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#questionschallenges", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#questionschallenges", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Questions/challenges", + "text": "Questions/challenges\n\nDoes it make sense to do a ray-tracing calculation for short wavelengths? For this structure, can you speed up the calculation and avoid the random noise at short wavelengths?\nHow much current is lost to parasitic absorption in e.g. tunnel junctions, window layers etc.?\nHow can we reduce reflection at the epoxy interfaces?\nIf the epoxy/glass layer is much thicker than the relevant incident wavelengths, and not absorbing, does the exact thickness matter in the simulation?\nWhat happens if only the rear surface is textured? Would a structure without the front texture have other advantages?\nWhy does the Si have lower absorption/limiting current in this structure compared to the previous example?" }, { - "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#setting-up", - "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#setting-up", - "title": "Section 6b: Optimizing an ARC", - "section": "Setting up", - "text": "Setting up\nWe set some options, as in previous examples, setting the wavelengths and defining the incident spectrum. We are going to do a partially coherent calculation, treating the ARC as a coherent layer and the thick Si layer as incoherent (no thin-film interference).\n\nopts = State()\n\nwavelengths = np.linspace(300, 1200, 800)*1e-9\n\nAM15g = LightSource(source_type=\"standard\", version=\"AM1.5g\", output_units=\"photon_flux_per_m\")\nspectrum = AM15g.spectrum(wavelengths)[1]\nnormalised_spectrum = spectrum/np.max(spectrum)\n\nopts.wavelength = wavelengths\nopts.coherency_list = ['c', 'i']\nopts.optics_method = 'TMM'\nopts.position = 100e-6\nopts.no_back_reflection = False\n\nSi = material(\"Si\")()\nSiN = material(\"Si3N4\")()\nAg = material(\"Ag\")()\nAir = material(\"Air\")()" + "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#electrical-calculation", + "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#electrical-calculation", + "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "section": "Electrical calculation", + "text": "Electrical calculation\nNow we can also use RayFlare’s optical results to run an electrical simulation in Solcore. To use the depletion approximation (DA) or drift-diffusion (PDD) solvers, we need the front surface reflectivity, and a depth-dependent absorption/generation profile. While so far we have been plotting total absorption per layer, RayFlare can calculate depth-dependent profiles too.\nWe need to import some more things, and set some options for solar_cell_solver, as we did before. We must set the optics_method option to 'external', since we want to pass the values calculated by RayFlare into Solcore.\n\nfrom solcore.solar_cell import SolarCell, Junction\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom rayflare.utilities import make_absorption_function\nfrom solcore.state import State\n\noptions = State(options) # convert the RayFlare options to Solcore options object so Solcore will recognise it\nV = np.linspace(-3, 0, 100)\noptions.optics_method = 'external'\noptions.voltages = V\noptions.internal_voltages = np.linspace(-4, 1, 200)\noptions.light_iv = True\noptions.mpp = True\noptions.light_source = AM15G\noptions.recalculate_absorption = True\n\n/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/registries.py:73: UserWarning: Optics solver 'RCWA' will not be available. An installation of S4 has not been found.\n warn(\n\n\nNow, previously we only calculate total reflection/absorption/transmission. Now we want to calculate depth-dependent absorption (generation) profiles at every wavelength. We set some options for RayFlare for this (we can use the same options object) and then ask RayFlare to calculate the absorption profile:\n\noptions.bulk_profile = True\noptions.depth_spacing = 1e-9\noptions.depth_spacing_bulk = 10e-9\n\nprofile_data = optical_structure.calculate_profile(options)\n\nWe not only want to calculate the absorption profile in the bulk layers (the Si) but also the front surface layers, since the GaInP and GaAs junctions are defined as part of the front interface. This was the reason for defining the surface as:\nfront_surf = planar_surface(interface_layers = front_layers, prof_layers=np.arange(1, len(front_layers)+1))\nnear the start of the script. The prof_layers argument tells RayFlare we want to calculate the absorption profile in the surface layers, in addition to the total absorption.\nIn order for Solcore to use the information we just calculated, it must be in the right format. We need to provide Solcore with two things: the reflectance, and a function which describes the depth-dependent absorption. This function expects an argument which is an array of positions, and returns the generation (units of \\(m^{-1}\\)) at each position and each wavelength. Fortunately, RayFlare has a function which takes your layer structure, results, and user options, and creates such a function for you:\n\ndepths, external_optics_func = make_absorption_function(profile_data, optical_structure, options)\n\noptions.position = depths\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\nPreviously, we defined RayFlare rt_structure and tmm_structure objects to do the optical calculation. For the cell calculation, we need a Solcore SolarCell object, which needs different information (such as doping levels) to perform the electrical calculation. Here we create the junctions, making sure that the total layer thicknesses of each material are the same as they were in the ray-traced structure.\n\nGaInP_emitter_thickness = 100e-9\nGaAs_emitter_thickness = 200e-9\nSi_emitter_thickness = 1e-6\n\nGaInP_base_thickness = GaInP_total_thickness - GaInP_emitter_thickness\nGaAs_base_thickness = GaAs_total_thickness - GaAs_emitter_thickness\nSi_base_thickness = d_Si - Si_emitter_thickness\n\nGaInP_junction = Junction([\n Layer(20e-9, material(\"AlInP\")(Al=0.52), Nd=si(\"1e18cm-3\"), role=\"window\"), # window\n Layer(GaInP_emitter_thickness, GaInP(In=0.50, Nd=si(\"1e18cm-3\"), hole_diffusion_length=si(\"200nm\")), role=\"emitter\"), # emitter\n Layer(GaInP_base_thickness, GaInP(In=0.50, Na=si(\"1e17cm-3\"), electron_diffusion_length=si(\"300nm\")), role=\"base\"), # base\n ], kind=\"DA\") # TJ\n\nGaAs_junction = Junction([\n Layer(20e-9, GaInP(In=0.5, Nd=si(\"1e18cm-3\")), role=\"window\"), # window\n Layer(GaAs_emitter_thickness, GaAs(Nd=si(\"1e18cm-3\"), hole_diffusion_length=si(\"250nm\")), role=\"emitter\"), # emitter\n Layer(GaAs_base_thickness, GaAs(Na=si(\"9e16cm-3\"), electron_diffusion_length=si(\"1000nm\")), role=\"base\"), # basee\n Layer(70e-9, AlGaAs(Al=0.8, Na=si(\"4e18cm-3\")), role=\"bsf\") # BSF\n ], kind=\"DA\")\n\nSi_junction = Junction([\n Layer(Si_emitter_thickness, Si(Nd=si(\"1e19cm-3\"), hole_diffusion_length=si(\"1000nm\")), role=\"emitter\"),\n Layer(Si_base_thickness, Si(Na=si(\"1e16cm-3\"), electron_diffusion_length=si(\"250um\")), role=\"base\")],\n kind=\"DA\")\n\nsolar_cell = SolarCell(\n ARC + [GaInP_junction] + tunnel_1 + [GaAs_junction] + spacer_ARC + [Layer(d_epoxy, epoxy)] + [Si_junction],\n external_reflected=rt_result[\"R\"],\n external_absorbed=external_optics_func)\n\nFinally, we are ready to the our cell calculations; first, we calculate and plot the light I-V:\n\nsolar_cell_solver(solar_cell, 'iv', options)\n\nplt.figure(2)\nplt.plot(-V, -solar_cell.iv['IV'][1]/10, 'k', linewidth=3, label='3J cell')\nplt.plot(-V, solar_cell(0).iv(V)/10, 'b', label='InGaP sub-cell')\nplt.plot(-V, solar_cell(1).iv(V)/10, 'g', label='GaAs sub-cell')\nplt.plot(-V, solar_cell(2).iv(V)/10, 'r', label='Si sub-cell')\nplt.text(1.5, 5,f'Jsc= {abs(solar_cell.iv.Isc/10):.2f} mA.cm' + r'$^{-2}$')\nplt.text(1.5, 4,f'Voc= {abs(solar_cell.iv.Voc):.2f} V')\nplt.text(1.5, 3,f'FF= {solar_cell.iv.FF*100:.2f} %')\nplt.text(1.5, 2,f'Eta= {solar_cell.iv.Eta*100:.2f} %')\n\nplt.legend()\nplt.ylim(-10, 15)\nplt.xlim(0, 3)\nplt.ylabel('Current (mA/cm$^2$)')\nplt.xlabel('Voltage (V)')\nplt.show()\n\nINFO: Solving optics of the solar cell...\n\n\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\n\n\n\nAnd now the QE (we also plot the total absorption in each junction for comparison with the EQE):\n\n\nsolar_cell_solver(solar_cell, 'qe', options)\n\nplt.figure(1)\nplt.plot(wl * 1e9, solar_cell(0).eqe(wl) * 100, 'b', label='GaInP QE')\nplt.plot(wl * 1e9, solar_cell(1).eqe(wl) * 100, 'g', label='GaAs QE')\nplt.plot(wl * 1e9, solar_cell(2).eqe(wl) * 100, 'r', label='Si QE')\nplt.fill_between(wl * 1e9, GaInP_absorption_ARC * 100, 0, alpha=0.3,\n label='GaInP Abs.', color='b')\nplt.fill_between(wl * 1e9, GaAs_absorption_ARC * 100, 0, alpha=0.3,\n label='GaAs Abs.', color='g')\nplt.fill_between(wl * 1e9, Si_absorption_ARC * 100, 0, alpha=0.3,\n label='Ge Abs.', color='r')\n\nplt.plot(wl*1e9, 100*(1-solar_cell.reflected), '--k', label=\"100 - Reflectivity\")\nplt.legend()\nplt.ylim(0, 100)\nplt.ylabel('EQE (%)')\nplt.xlabel('Wavelength (nm)')\nplt.show()\n\nINFO: Solving optics of the solar cell...\n\n\nSolving QE of the solar cell..." }, { - "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#single-layer-arc", - "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#single-layer-arc", - "title": "Section 6b: Optimizing an ARC", - "section": "Single-layer ARC", - "text": "Single-layer ARC\nHere, we will calculate the behaviour of a single-layer SiN anti-reflection coating on Si while changing the ARC thickness between 0 and 200 nm. We will consider two values to optimize: the mean reflectance mean_R, and the reflectance weighted by the photon flux in an AM1.5G spectrum (weighted_R). The reason for considering the second value is that it is more useful to suppress reflection at wavelengths where there are more photons which could be absorbed by the cell (up to the cell’s bandgap).\nWe will loop through the different ARC thicknesses in d_range, build the structure for each case, and then calculate the reflectance. We then save the mean reflected and weighted mean reflectance in the corresponding arrays. We also plot the reflectance for each 15th loop (this is just so the plot does not get too crowded).\n\nd_range = np.linspace(0, 200, 200)\n\nmean_R = np.empty_like(d_range)\nweighted_R = np.empty_like(d_range)\n\ncols = sns.cubehelix_palette(np.ceil(len(d_range)/15))\n\nplt.figure()\njcol = 0\n\nfor i1, d in enumerate(d_range):\n\n struct = SolarCell([Layer(si(d, 'nm'), SiN), Layer(si('120um'), Si)], substrate=Ag)\n solar_cell_solver(struct, task='optics', user_options=opts)\n\n if i1 % 15 == 0:\n plt.plot(wavelengths*1e9, struct.reflected, label=str(np.round(d, 0)), color=cols[jcol])\n jcol += 1\n\n mean_R[i1] = np.mean(struct.reflected)\n weighted_R[i1] = np.mean(struct.reflected*normalised_spectrum)\n\nplt.legend()\nplt.show()\n\nWe now find at which index mean_R and weighted_R are minimised using np.argmin, and use this to print the ARC thickness at which this occurs (rounded to 1 decimal place).\n\nprint('Minimum mean reflection occurs at d = ' + str(np.round(d_range[np.argmin(mean_R)], 1)) + ' nm')\nprint('Minimum weighted reflection occurs at d = ' + str(np.round(d_range[np.argmin(weighted_R)], 1)) + ' nm')\n\nMinimum mean reflection occurs at d = 67.3 nm\nMinimum weighted reflection occurs at d = 74.4 nm\n\n\nWe see that the values of \\(d\\) for the two different ways of optimizing are very similar, but not exactly the same, as we would expect. The minimum in both cases occurs around 70 nm. We can also plot the variation of the mean and weighted \\(R\\) with ARC thickness \\(d\\):\n\nplt.figure()\nplt.plot(d_range, mean_R, label='Mean reflection')\nplt.plot(d_range[np.argmin(mean_R)], np.min(mean_R), 'ok')\nplt.plot(d_range, weighted_R, label='Weighted mean reflection')\nplt.plot(d_range[np.argmin(weighted_R)], np.min(weighted_R), 'ok')\nplt.xlabel('d$_{SiN}$')\nplt.ylabel('(Weighted) mean reflection 300-1200 nm')\nplt.legend()\nplt.show()\n\n\n\n\nNow, to see what the reflectance looks like for the optimized structure, we make new tmm_structures with the optimal values and calculate and plot the reflectance:\n\nstruct_1 = SolarCell([Layer(si(d_range[np.argmin(mean_R)], 'nm'), SiN), Layer(si('120um'), Si)], substrate=Ag)\nsolar_cell_solver(struct_1, task='optics', user_options=opts)\nR_1 = struct_1.reflected\n\nstruct_2 = SolarCell([Layer(si(d_range[np.argmin(weighted_R)], 'nm'), SiN), Layer(si('120um'), Si)], substrate=Ag)\nsolar_cell_solver(struct_2, task='optics', user_options=opts)\nR_2 = struct_2.reflected\n\nplt.figure()\nplt.plot(wavelengths*1e9, R_1, label='Mean R minimum')\nplt.plot(wavelengths*1e9, R_2, label='Weighted R minimum')\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"R\")\nplt.show()\n\nTreating layer(s) 1 incoherently\nCalculating RAT...\nCalculating absorption profile...\nTreating layer(s) 1 incoherently\nCalculating RAT...\nCalculating absorption profile...\n\n\n\n\n\nWe see that the two reflectance curves are very similar, as expected because the layer thicknesses are very similar." + "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html", + "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html", + "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "section": "", + "text": "This example shows how you can simulate a perovskite-Si tandem cell with pyramidal surface textures, where the perovskite and other surface layers are assumed to be deposited conformally (i.e., also in a pyramid shape) on top of the Si. The perovskite optical constants are from this paper, while the structure is based on this paper We will calculate total reflection, transmission and absorption per layer as well as the wavelength-dependent absorption profiles in the perovskite and Si, which can be used in e.g. device simulations. We will look at the effect of treating the layers deposited on Si (including the perovskite) coherently or incoherently.\nFirst, import relevant packages and RayFlare functions:\nimport numpy as np\nimport os\n\nfrom solcore.structure import Layer\nfrom solcore.constants import q\nfrom solcore import material\nfrom solcore.absorption_calculator import search_db, download_db\nfrom solcore.light_source import LightSource\n\nfrom rayflare.textures import regular_pyramids\nfrom rayflare.options import default_options\nfrom rayflare.ray_tracing import rt_structure\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom cycler import cycler\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nNow we set some relevant options. We will scan across 20 x 20 surface points of the pyramid unit cell between 300 and 1200 nm, for unpolarized, normally-incident light. The randomize_surface option is set to True to prevent correlation between the incident position on the front and rear pyramids. The n_jobs option is set to -1, which means that all available cores will be used. If you want to use all but one core, change this to -2 etc. We also need to provide a project_name to save the lookup tables which will be calculated using TMM to use during ray-tracing.\nwavelengths = np.linspace(300, 1200, 40) * 1e-9\n\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wavelengths,\n output_units=\"photon_flux_per_m\")\n\noptions = default_options()\noptions.wavelength = wavelengths\noptions.nx = 20\noptions.ny = options.nx\noptions.n_rays = 4 * options.nx**2\noptions.depth_spacing = 1e-9\noptions.pol = \"u\"\noptions.I_thresh = 1e-3\noptions.project_name = \"perovskite_Si_rt\"\noptions.randomize_surface = True\noptions.n_jobs = -1 # use all cores; to use all but one, change to -2 etc." }, { - "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#double-layer-arc", - "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#double-layer-arc", - "title": "Section 6b: Optimizing an ARC", - "section": "Double-layer ARC", - "text": "Double-layer ARC\nWe will now consider a similar situation, but for a double-layer MgF\\(_2\\)/Ta\\(_2\\)O\\(_5\\) ARC on GaAs.\nSolcore can directly interface with the database from www.refractiveindex.info, which contains around 3000 sets of data for a large number of different materials. Before the first use, it is necessary to download the database. This only needs to be done once, so you can comment this line out after it’s done:\n\ndownload_db(confirm=True) # only needs to be done once\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaking request to https://refractiveindex.info/download/database/rii-database-2021-07-18.zip\nDownloaded and extracting...\n\n\nWe search for materials in the refractiveindex.info database, and use only the part of the solar spectrum relevant for absorption in GaAs (in this case, there is no benefit to reducing absorption above the GaAs bandgap around 900 nm). We will only consider the weighted mean \\(R\\) in this case. Since all the layers in the structure are relatively thin compared to the wavelengths of light, we do a coherent calculation.\n\npageid_MgF2 = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0]\npageid_Ta2O5 = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0]\n\nGaAs = material(\"GaAs\")()\nMgF2 = material(str(pageid_MgF2), nk_db=True)()\nTa2O5 = material(str(pageid_Ta2O5), nk_db=True)()\n\nMgF2_thickness = np.linspace(50, 100, 20)\nTa2O5_thickness = np.linspace(30, 80, 20)\n\nweighted_R_matrix = np.zeros((len(MgF2_thickness), len(Ta2O5_thickness)))\n\nwavelengths_GaAs = wavelengths[wavelengths < 900e-9]\nnormalised_spectrum_GaAs = normalised_spectrum[wavelengths < 900e-9]\n\nopts.coherency_list = None\nopts.wavelength = wavelengths_GaAs\nopts.position = 20e-6\n\nWe now have two thicknesses to loop through; otherwise, the procedure is similar to the single-layer ARC example.\n\nfor i1, d_MgF2 in enumerate(MgF2_thickness):\n for j1, d_Ta2O5 in enumerate(Ta2O5_thickness):\n struct = SolarCell([Layer(si(d_MgF2, 'nm'), MgF2), Layer(si(d_Ta2O5, 'nm'), Ta2O5),\n Layer(si('20um'), GaAs)],\n substrate=Ag)\n solar_cell_solver(struct, 'optics', opts)\n R = struct.reflected\n\n weighted_R_matrix[i1, j1] = np.mean(R * normalised_spectrum_GaAs)\n\n# find the row and column indices of the minimum weighted R value\nri, ci = np.unravel_index(weighted_R_matrix.argmin(), weighted_R_matrix.shape)\n\nWe plot the total absorption (\\(1-R\\)) in the structure with the optimized ARC, and print the thicknesses of MgF\\(_2\\) and Ta\\(_2\\)O\\(_5\\) at which this occurs:\n\nplt.figure()\nplt.imshow(1-weighted_R_matrix, extent=[min(Ta2O5_thickness), max(Ta2O5_thickness),\n min(MgF2_thickness), max(MgF2_thickness)],\n origin='lower', aspect='equal')\nplt.plot(Ta2O5_thickness[ci], MgF2_thickness[ri], 'xk')\nplt.colorbar()\nplt.xlabel(\"Ta$_2$O$_5$ thickness (nm)\")\nplt.ylabel(\"MgF$_2$ thickness (nm)\")\nplt.show()\n\nprint(\"Minimum reflection occurs at MgF2 / Ta2O5 thicknesses of %.1f / %.1f nm \"\n % (MgF2_thickness[ri], Ta2O5_thickness[ci]))\n\nFor these two examples, where we are only trying to optimize one and two parameters respectively across a relatively small range, using a method (TMM) which executes quickly, brute force searching is possible. However, as we introduce more parameters, a wider parameter space, and slower simulation methods, it may no longer be computationally tractable; in that case, using for example differential evolution or other types of numerical optimization may be more appropriate (see this example)." + "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#adding-custom-materials", + "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#adding-custom-materials", + "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "section": "Adding custom materials", + "text": "Adding custom materials\nWe define our materials. Note that some of these are custom materials added to the database; we only need to do this once. We then define the front layer stack (i.e. all the materials which are on top of the Si, excluding Si itself, which will be the ‘bulk’ material) and the rear layer stack. Layer stacks are always defined starting with the layer closest to the top of the cell.\n\n# Can comment out this block after running once to add materials to the database\nfrom solcore.material_system import create_new_material\n\ncreate_new_material(\"Perovskite_CsBr_1p6eV\", \"data/CsBr10p_1to2_n_shifted.txt\",\n \"data/CsBr10p_1to2_k_shifted.txt\")\ncreate_new_material(\"ITO_lowdoping\", \"data/model_back_ito_n.txt\",\n \"data/model_back_ito_k.txt\")\ncreate_new_material(\"aSi_i\", \"data/model_i_a_silicon_n.txt\",\n \"data/model_i_a_silicon_k.txt\")\ncreate_new_material(\"aSi_p\", \"data/model_p_a_silicon_n.txt\",\n \"data/model_p_a_silicon_k.txt\")\ncreate_new_material(\"aSi_n\", \"data/model_n_a_silicon_n.txt\",\n \"data/model_n_a_silicon_k.txt\")\ncreate_new_material(\"C60\", \"data/C60_Ren_n.txt\",\n \"data/C60_Ren_k.txt\")\ncreate_new_material(\"IZO\", \"data/IZO_Ballif_rO2_10pcnt_n.txt\",\n \"data/IZO_Ballif_rO2_10pcnt_k.txt\")\n# Comment out until here\n\n\n# download_db()\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nSi = material(\"Si\")()\nAir = material(\"Air\")()\nMgF2 = material(str(MgF2_pageid), nk_db=True)()\nITO_back = material(\"ITO_lowdoping\")()\nPerovskite = material(\"Perovskite_CsBr_1p6eV\")()\nAg = material(str(Ag_pageid), nk_db=True)()\naSi_i = material(\"aSi_i\")()\naSi_p = material(\"aSi_p\")()\naSi_n = material(\"aSi_n\")()\nLiF = material(\"LiF\")()\nIZO = material(\"IZO\")()\nC60 = material(\"C60\")()\n\n# stack based on doi:10.1038/s41563-018-0115-4\nfront_materials = [\n Layer(100e-9, MgF2),\n Layer(110e-9, IZO),\n Layer(15e-9, C60),\n Layer(1e-9, LiF),\n Layer(440e-9, Perovskite),\n Layer(6.5e-9, aSi_n),\n Layer(6.5e-9, aSi_i),\n]\n\nback_materials = [Layer(6.5e-9, aSi_i), Layer(6.5e-9, aSi_p), Layer(240e-9, ITO_back)]\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n234 main MgF2 Rodriguez-de_Marcos main/MgF2/Rodriguez-de Marcos.yml 1 1 0.0299919 2.00146 960\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2 main Ag Jiang main/Ag/Jiang.yml 1 1 0.3 2.0 1701" }, { - "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#questions", - "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#questions", - "title": "Section 6b: Optimizing an ARC", - "section": "Questions", - "text": "Questions\n\nApart from varying the thickness of the layers, what else could we change?\nHow do we know where to start when designing an ARC (layer thickness/material)?" + "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#defining-the-interfaces-and-structure", + "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#defining-the-interfaces-and-structure", + "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "section": "Defining the interfaces and structure", + "text": "Defining the interfaces and structure\nNow we define our front and back surfaces, including interface_layers. We will use regular pyramids for both the front and back surface; these pyramids point out on both sides, but since the direction of the pyramids is defined relative to the front surface, we must set upright=True for the top surface and upright=False for the rear surface. We also gives the surfaces a name (used to save the lookup table data) and ask RayFlare to calculate the absorption profile in the 5th layer, which is the perovskite.\n\ntriangle_surf = regular_pyramids(\n elevation_angle=55,\n upright=True,\n size=1,\n interface_layers=front_materials,\n name=\"coh_front\",\n prof_layers=[5],\n)\n\ntriangle_surf_back = regular_pyramids(\n elevation_angle=55,\n upright=False,\n size=1,\n interface_layers=back_materials,\n name=\"Si_back\",\n coherency_list=[\"i\"] * len(back_materials),\n)\n\nNow we make our ray-tracing structure by combining the front and back surfaces, specifying the material in between (Si) and setting its width to 260 microns. In order to use the TMM lookuptables to calculate reflection/transmission/absorption probabilities we must also set use_TMM=True.\n\n%%capture\n\nrtstr_coh = rt_structure(\n textures=[triangle_surf, triangle_surf_back],\n materials=[Si],\n widths=[260e-6],\n incidence=Air,\n transmission=Ag,\n use_TMM=True,\n options=options,\n overwrite=True,\n save_location=\"current\",\n)\n\n# calculate:\nresult_coh = rtstr_coh.calculate(options)\n\nINFO: Pre-computing TMM lookup table(s)\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\n\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ag/Jiang.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ag/Jiang.yml loaded.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.WARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found." }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "", - "text": "In this first set of examples, we will look at simple planar Si solar cell.\nIn this script, we will look at the difference between Beer-Lambert absorption calculations, using the Fresnel equations for front-surface reflection, and using the transfer-matrix model.\nFirst, lets import some very commonly-used Python packages:\nimport numpy as np\nimport matplotlib.pyplot as plt\nNumpy is a Python library which adds supports for multi-dimensional data arrays and matrices, so it is very useful for storing and handling data. You will probably use it in every Solcore script you write. Here, it is imported under the alias ‘np’, which you will see used below. matplotlib is used for making plots, and is imported under the alias ‘plt’. Both the ‘np’ and ‘plt’ aliases are extremely commonly used in Python programming.\nNow, let’s import some things from Solcore (which will be explained as we use them):\nfrom solcore import material, si\nfrom solcore.solar_cell import SolarCell, Layer, Junction\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom solcore.interpolate import interp1d" + "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#incoherent-calculation", + "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#incoherent-calculation", + "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "section": "Incoherent calculation", + "text": "Incoherent calculation\nNow we define the same front surface and structure again, except now we will treat all the layers incoherently (i.e. no thin-film interference) in the TMM.\n\n%%capture\n\ntriangle_surf = regular_pyramids(\n elevation_angle=55,\n upright=True,\n size=1,\n interface_layers=front_materials,\n coherency_list=[\"i\"] * len(front_materials),\n name=\"inc_front\",\n prof_layers=[5],\n)\n\nrtstr_inc = rt_structure(\n textures=[triangle_surf, triangle_surf_back],\n materials=[Si],\n widths=[260e-6],\n incidence=Air,\n transmission=Ag,\n use_TMM=True,\n options=options,\n overwrite=True,\n save_location=\"current\",\n)\n\nresult_inc = rtstr_inc.calculate(options)\n\nINFO: Pre-computing TMM lookup table(s)\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\n\n\nNow we plot the results for reflection, transmission, and absorption per layer for both the coherent and incoherent cases.\n\npal = sns.color_palette(\"husl\", n_colors=len(front_materials) + len(back_materials) + 2)\n# create a colour palette\n\ncols = cycler(\"color\", pal)\n# set this as the default colour palette in matplotlib\n\nparams = {\n \"axes.prop_cycle\": cols,\n}\n\nplt.rcParams.update(params)\n\nfig = plt.figure(figsize=(8, 3.7))\nplt.subplot(1, 1, 1)\nplt.plot(wavelengths * 1e9, result_coh[\"R\"], \"-ko\", label=\"R\")\nplt.plot(wavelengths * 1e9, result_coh[\"T\"], mfc=\"none\", label=\"T\")\nplt.plot(wavelengths * 1e9, result_coh[\"A_per_layer\"][:, 0], \"-o\", label='Si')\nplt.plot(wavelengths * 1e9, result_coh[\"A_per_interface\"][0], \"-o\",\n label=[None, \"IZO\", \"C60\", None, \"Perovskite\", None, None])\nplt.plot(wavelengths * 1e9, result_coh[\"A_per_interface\"][1], \"-o\",\n label=[None, None, \"ITO\"])\n\nplt.plot(wavelengths * 1e9, result_inc[\"R\"], \"--ko\", mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"T\"], mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"A_per_layer\"][:, 0], \"--o\", mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"A_per_interface\"][0], \"--o\", mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"A_per_interface\"][1], \"--o\", mfc=\"none\")\n\nplt.plot([300, 301], [0, 0], \"-k\", label=\"coherent\")\nplt.plot([300, 301], [0, 0], \"--k\", label=\"incoherent\")\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"R / A / T\")\nplt.ylim(0, 1)\nplt.xlim(300, 1200)\nplt.legend(bbox_to_anchor=(1.05, 1))\nplt.tight_layout()\nplt.show()\n\n\n\n\nCalculate and print the limiting short-circuit current per junction:\n\nJmax_Pero_coh = q*np.trapz(result_coh[\"A_per_interface\"][0][:,4]*AM15G.spectrum()[1],\n x=wavelengths)/10\nJmax_Si_coh = q*np.trapz(result_coh[\"A_per_layer\"][:, 0]*AM15G.spectrum()[1],\n x=wavelengths)/10\n\nprint(\"Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:\"\n \".2f}\".format(Jmax_Pero_coh, Jmax_Si_coh))\n\nJmax_Pero_inc = q*np.trapz(result_inc[\"A_per_interface\"][0][:,4]*AM15G.spectrum()[1],\n x=wavelengths)/10\nJmax_Si_inc = q*np.trapz(result_inc[\"A_per_layer\"][:, 0]*AM15G.spectrum()[1],\n x=wavelengths)/10\n\nprint(\"Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:\"\n \".2f}\".format(Jmax_Pero_inc, Jmax_Si_inc))\n\nLimiting short-circuit currents in coherent calculation (mA/cm2): 19.27 / 21.47\nLimiting short-circuit currents in coherent calculation (mA/cm2): 18.67 / 20.98" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-materials", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-materials", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Defining materials", - "text": "Defining materials\nTo define our solar cell, we first want to define some materials. Then we want to organise those materials into Layers, organise those layers into a Junction (or multiple Junctions, for a multi-junction cell, as we will see later), and then finally define a SolarCell with that Junction.\nFirst, let’s define a silicon material. Silicon, along with many other semiconductors, dielectrics, and metals common in solar cells, is included in Solcore’s database:\n\nSi = material(\"Si\")\n\nThis creates an instance of the Si material. However, to use this in a solar cell we need to do specify some more information, specifically the doping level and the minority carrier diffusion length. The ‘si’ function comes in handy here to convert all quantities to base units e.g. m, m\\(^{-3}\\)…\n\nSi_n = Si(Nd=si(\"1e21cm-3\"), hole_diffusion_length=si(\"10um\"))\nSi_p = Si(Na=si(\"1e16cm-3\"), electron_diffusion_length=si(\"400um\"))" + "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#absorption-profiles", + "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#absorption-profiles", + "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "section": "Absorption profiles", + "text": "Absorption profiles\nWe can also plot the absorption profiles, for wavelengths up to 800 nm, in the perovskite (since we asked the solver to calculate the profile in the perovskite layer above).\n\nwl_Eg = wavelengths < 800e-9\n\npal = sns.cubehelix_palette(sum(wl_Eg), reverse=True)\ncols = cycler(\"color\", pal)\nparams = {\n \"axes.prop_cycle\": cols,\n}\nplt.rcParams.update(params)\n\npos = np.arange(0, rtstr_coh.interface_layer_widths[0][4], options.depth_spacing*1e9)\n\nfig, (ax1, ax2) = plt.subplots(1,2)\nax1.plot(pos, result_coh[\"interface_profiles\"][0][wl_Eg].T)\nax1.set_ylim(0, 0.02)\nax1.set_xlabel(\"z (nm)\")\nax1.set_ylabel(\"a(z)\")\nax1.set_title(\"Coherent\")\nax2.plot(pos, result_inc[\"interface_profiles\"][0][wl_Eg].T)\nax2.set_ylim(0, 0.02)\nax2.yaxis.set_ticklabels([])\nax2.set_xlabel(\"z (nm)\")\nax2.set_title(\"Incoherent\")\nplt.show()\n\n\n\n\nWe see that, as expected, the coherent case shows interference fringes while the incoherent case does not. We can also plot the absorption profile in the Si (> 800 nm):\n\npos_bulk = pos = np.arange(0, rtstr_coh.widths[0]*1e6, options.depth_spacing_bulk*1e6)\n\nfig, (ax1, ax2) = plt.subplots(1,2)\nax1.semilogy(pos, result_coh[\"profile\"][~wl_Eg].T)\nax1.set_ylim(1e-8, 0.00015)\nax1.set_xlabel(\"z (um)\")\nax1.set_ylabel(\"a(z)\")\nax1.set_title(\"Coherent\")\nax2.semilogy(pos, result_inc[\"profile\"][~wl_Eg].T)\nax2.set_ylim(1e-8, 0.00015)\nax2.yaxis.set_ticklabels([])\nax2.set_xlabel(\"z (um)\")\nax2.set_title(\"Incoherent\")\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-layers", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-layers", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Defining layers", - "text": "Defining layers\nNow we define the emitter and base layers we will have in the solar cell; we specify their thickness, the material they are made of and the role they play within the cell (emitter or base). We create a junction which is a total of 200 \\(\\mu\\)m thick, with a 1 \\(\\mu\\)m junction depth.\n\nemitter_layer = Layer(width=si(\"1um\"), material=Si_n, role='emitter')\nbase_layer = Layer(width=si(\"199um\"), material=Si_p, role='base')\n\nNow we create the p-n junction using the layers defined above. We set kind=“DA” to tell Solcore to use the Depletion Approximation in the calculation:\n\nSi_junction = Junction([emitter_layer, base_layer], kind=\"DA\")" + "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#questions", + "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#questions", + "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "section": "Questions", + "text": "Questions\n\nWhy do you think the total absorption is slightly lower in the incoherent calculation?\nEven though the layers on top of the Si are not very thick compared to the wavelength, and they are the first thing encountered by the light, why might it make sense to treat them incoherently?\nCan you improve the current-matching (at least in terms of limiting currents) between the perovskite and the Si?" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#setting-user-options", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#setting-user-options", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Setting user options", - "text": "Setting user options\nWavelengths we want to use in the calculations; wavelengths between 300 and 1200 nm, at 200 evenly spaced intervals:\n\nwavelengths = si(np.linspace(300, 1200, 200), \"nm\")\n\nNote that here and above in defining the layers and materials we have used the “si()” function multiple times: you can use this to automatically convert quantities in other units to base SI units (e.g. nanometres to metres).\nNow we specify some options for running the calculation. Initially we will use the Beer-Lambert absorption law (\\(I(z) = I_0 e^{-\\alpha*z}\\)) to calculate the optics of the cell (“BL”). We set the wavelengths we want to use, and we set “recalculate_absorption” to True so that further down in the script when we try different optics methods, Solcore knows we want to re-calculate the optics of the cell rather than re-using previous results. We can specify the options in a Python format called a dictionary:\n\noptions = {\n \"recalculate_absorption\": True,\n \"optics_method\": \"BL\",\n \"wavelength\": wavelengths\n }" + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html", + "title": "Section 8: Textured Si", + "section": "", + "text": "This example is based on Figures 6, 7 and 8 from this paper. This compares three different structures, all based on a 200 micron thick slab of silicon with different surface textures:\nThe methods which will be used to calculate the redistribution matrices in each case are given in brackets. If case 1 and 2 are calculated first, then case 3 does not require the calculations of any additional matrices, since it will use the rear matrix from (1) and the front matrix from (2)." }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#running-cell-simulations", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#running-cell-simulations", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Running cell simulations", - "text": "Running cell simulations\nDefine the solar cell; in this case it is very simple and we just have a single junction:\n\nsolar_cell = SolarCell([Si_junction])\n\nNow we use solar_cell_solver to calculate the QE of the cell; we can ask solar_cell_solver to calculate ‘qe’, ‘optics’ or ‘iv’.\n\nsolar_cell_solver(solar_cell, 'qe', options)\n\nPLOT 1: plotting the QE in the Si junction, as well as the fraction of light absorbed in the junction and reflected. Because we are using the Beer-Lambert absorption law and we did not specify external reflectance, the reflectance = 0 over the whole wavelength range.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell[0].eqe(wavelengths), 'k-', label=\"EQE\")\nplt.plot(wavelengths*1e9, 100*solar_cell[0].layer_absorption, label='Absorptance (A)')\nplt.plot(wavelengths*1e9, 100*solar_cell.reflected, label='Reflectance (R)')\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"QE/Absorptance (%)\")\nplt.title(\"(1) QE of Si cell - Beer-Lambert absorption\")\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#setting-up", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#setting-up", + "title": "Section 8: Textured Si", + "section": "Setting up", + "text": "Setting up\nFirst, importing relevant packages:\n\nimport numpy as np\nimport os\n\n# solcore imports\nfrom solcore.structure import Layer\nfrom solcore import material\nfrom solcore import si\n\nfrom rayflare.structure import Interface, BulkLayer, Structure\nfrom rayflare.matrix_formalism import process_structure, calculate_RAT\nfrom rayflare.utilities import get_savepath\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.angles import theta_summary, make_angle_vector\nfrom rayflare.textures import regular_pyramids\nfrom rayflare.options import default_options\n\nimport matplotlib.pyplot as plt\nimport matplotlib as mpl\nimport seaborn as sns\nfrom sparse import load_npz\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\nSetting options (taking the default options for everything not specified explicitly):\n\nangle_degrees_in = 8 # same as in Fraunhofer paper\n\nwavelengths = np.linspace(900, 1200, 20) * 1e-9\n\nSi = material(\"Si\")()\nAir = material(\"Air\")()\n\noptions = default_options()\noptions.wavelength = wavelengths\noptions.theta_in = angle_degrees_in * np.pi / 180 # incidence angle (polar angle)\noptions.n_theta_bins = 30\noptions.c_azimuth = 0.25\noptions.n_rays = 5e4 # number of rays per wavelength in ray-tracing\noptions.project_name = \"OPTOS_comparison\"\noptions.orders = 60 # number of RCWA orders to use (more = better convergence, but slower)\noptions.pol = \"u\" # unpolarized light\noptions.only_incidence_angle = True\noptions.RCWA_method = \"Inkstone\"" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-fresnel", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-fresnel", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Adding front-surface reflection: Fresnel", - "text": "Adding front-surface reflection: Fresnel\nNow, to make this calculation a bit more realistic, there are a few things we could do. We could load some measured front surface reflectance from a file, or we could calculate the reflectance. To calculate the reflectance, there are many approaches we could take; we are going to explore two of them here.\nIf we assume the silicon is infinitely thick (or at least much thicker than the wavelengths of light we care about) then the reflectance will approach the reflectivity of a simple air/Si interface. We can calculate what this is using the Fresnel equation for reflectivity.\n\ndef calculate_R_Fresnel(incidence_n, transmission_n, wl):\n # return a function that gives the value of R (at normal incidence) at the input wavelengths\n\n Rs = np.abs((incidence_n - transmission_n)/(incidence_n + transmission_n))**2\n\n return interp1d(wl, Rs)\n\nThe transmission_n is the complex reflective index of Si at our wavelengths for the transmission medium (Si), which we can extract easily from the Si material object in Solcore. The incidence_n = 1 (air). Note that the function above is specifically for normal incidence.\n\ntrns_n = Si_n.n(wavelengths) + 1j*Si_n.k(wavelengths)\nreflectivity_fn = calculate_R_Fresnel(1, trns_n, wavelengths)\n\nWe define the solar cell again, with the same layers but now supplying the function for the externally-calculated reflectivity, and calculate the optics (reflection, absorption, transmission) again:\n\nsolar_cell_fresnel = SolarCell([Si_junction], reflectivity=reflectivity_fn)\n\nsolar_cell_solver(solar_cell_fresnel, 'optics', options)" + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#defining-the-structures", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#defining-the-structures", + "title": "Section 8: Textured Si", + "section": "Defining the structures", + "text": "Defining the structures\nNow, set up the grating basis vectors for the RCWA calculations and define the grating structure. These are squares, rotated by 45 degrees. The halfwidth is calculated based on the area fill factor of the etched pillars given in the paper.\n\nx = 1000\n\nd_vectors = ((x, 0), (0, x))\narea_fill_factor = 0.36\nhw = np.sqrt(area_fill_factor) * 500\n\nback_materials = [\n Layer(width=si(\"120nm\"), material=Si,\n geometry=[{\"type\": \"rectangle\", \"mat\": Air, \"center\": (x / 2, x / 2),\n \"halfwidths\": (hw, hw), \"angle\": 45}],\n )]\n\nNow we define the pyramid texture for the front surface in case (2) and (3) and make the four possible different surfaces: planar front and rear, front with pyramids, rear with grating. We specify the method to use to calculate the redistribution matrices in each case and create the bulk layer.\n\nsurf = regular_pyramids(elevation_angle=55, upright=False)\n\nfront_surf_pyramids = Interface(\n \"RT_Fresnel\",\n texture=surf,\n layers=[],\n name=\"inv_pyramids_front_\" + str(options[\"n_rays\"]),\n)\n\nfront_surf_planar = Interface(\"TMM\", layers=[], name=\"planar_front\")\n\nback_surf_grating = Interface(\n \"RCWA\",\n layers=back_materials,\n name=\"crossed_grating_back\",\n d_vectors=d_vectors,\n rcwa_orders=20,\n)\n\nback_surf_planar = Interface(\"TMM\", layers=[], name=\"planar_back\")\n\nbulk_Si = BulkLayer(200e-6, Si, name=\"Si_bulk\")\n\nNow we create the different structures and ‘process’ them (this will calculate the relevant matrices if necessary, or do nothing if it finds the matrices have previously been calculated and the files already exist). We don’t need to process the final structure because it will use matrices calculated for SC_fig6 and SC_fig7.\n\n%%capture\n\nSC_fig6 = Structure(\n [front_surf_planar, bulk_Si, back_surf_grating], incidence=Air, transmission=Air\n)\nSC_fig7 = Structure(\n [front_surf_pyramids, bulk_Si, back_surf_planar], incidence=Air, transmission=Air\n)\nSC_fig8 = Structure(\n [front_surf_pyramids, bulk_Si, back_surf_grating], incidence=Air, transmission=Air\n)\n\nprocess_structure(SC_fig6, options, save_location='current') # if you want to overwrite previous results, add overwrite=Trues\nprocess_structure(SC_fig7, options, save_location='current')\n\nINFO: Making matrix for planar surface using TMM for element 0 in structure\nINFO: Existing angular redistribution matrices found\nINFO: Existing angular redistribution matrices found\nINFO: RCWA calculation for element 2 in structure\nINFO: Existing angular redistribution matrices found\nINFO: Ray tracing with Fresnel equations for element 0 in structure\nINFO: Existing angular redistribution matrices found\nINFO: RT calculation for wavelength = 947.3684210526316 nm\nINFO: RT calculation for wavelength = 915.7894736842105 nm\nINFO: RT calculation for wavelength = 931.578947368421 nm\nINFO: RT calculation for wavelength = 994.7368421052631 nm\nINFO: RT calculation for wavelength = 1010.5263157894736 nm\nINFO: RT calculation for wavelength = 900.0000000000001 nm\nINFO: RT calculation for wavelength = 1026.3157894736842 nm\nINFO: RT calculation for wavelength = 978.9473684210526 nm\nINFO: RT calculation for wavelength = 1042.1052631578948 nm\nINFO: RT calculation for wavelength = 963.1578947368421 nm\nINFO: RT calculation for wavelength = 1057.8947368421054 nm\nINFO: RT calculation for wavelength = 1073.6842105263158 nm\nINFO: RT calculation for wavelength = 1089.4736842105265 nm\nINFO: RT calculation for wavelength = 1105.2631578947369 nm\nINFO: RT calculation for wavelength = 1121.0526315789475 nm\nINFO: RT calculation for wavelength = 1136.842105263158 nm\nINFO: RT calculation for wavelength = 1152.6315789473683 nm\nINFO: RT calculation for wavelength = 1168.421052631579 nm\nINFO: RT calculation for wavelength = 1184.2105263157896 nm\nINFO: RT calculation for wavelength = 1200.0000000000002 nm\nINFO: Making matrix for planar surface using TMM for element 2 in structure\n\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.WARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found." }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-tmm", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-tmm", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Adding front surface reflection: TMM", - "text": "Adding front surface reflection: TMM\nFinally, we do the same again but now instead of supplying the external reflectivity we ask set the optics_method to “TMM” (Transfer Matrix Method), to correctly calculate reflection at the front surface. We will learn more about the transfer matrix method later.\n\nSi_junction = Junction([emitter_layer, base_layer], kind=\"DA\")\n\nsolar_cell_TMM = SolarCell([Si_junction])\n\nSet some more options for the cell calculation:\n\noptions[\"optics_method\"] = \"TMM\"\nvoltages = np.linspace(-1.1, 1.1, 100)\noptions[\"light_iv\"] = True\noptions[\"mpp\"] = True\noptions[\"voltages\"] = voltages\noptions[\"internal_voltages\"] = voltages\n\nwe calculate the QE and the IV (we set the light_iv option to True; if we don’t do this, Solcore just calculates the dark IV). We also ask Solcore to find the maximum power point (mpp) so we can get the efficiency. Note that the sign convention used by Solcore means that an n-on-p cell with have a negative open-circuit voltage.\n\nsolar_cell_solver(solar_cell_TMM, 'iv', options)\nsolar_cell_solver(solar_cell_TMM, 'qe', options)\n\nPLOT 2: here we plot the reflection, transmission, and absorption calculated with the Fresnel equation defined above, and with the TMM solver in Solcore, showing that for this simple situation (no anti-reflection coating, thick Si junction) they are exactly equivalent.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, color='firebrick', label = \"R (TMM)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_fresnel.reflected, '--', color='orangered', label = \"R (Fresnel)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.absorbed, color='dimgrey', label = \"A (TMM)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_fresnel.absorbed, '--', color='lightgrey', label = \"A (Fresnel)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, color='blue', label = \"T (TMM)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_fresnel.transmitted, '--', color='dodgerblue', label = \"T (Fresnel)\")\nplt.ylim(0, 100)\nplt.legend()\nplt.title(\"(2) Optics of Si cell - Fresnel/TMM\")\nplt.show()\n\nPLOT 3: As above for the TMM calculation, plotting the EQE as well, which will be slightly lower than the absorption because not all the carriers are collected. Comparing to plot (1), we can see we now have lower absorption due to the inclusion of front surface reflection, which is ~ 30% or more over the wavelength range of interest for a bare Si surface.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].eqe(wavelengths), 'k-', label=\"EQE\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].layer_absorption, label='A')\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, label=\"R\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, label=\"T\")\nplt.title(\"(3) QE of Si cell (no ARC) - TMM\")\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"QE/Absorptance (%)\")\nplt.ylim(0, 100)\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#calculating-rat", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#calculating-rat", + "title": "Section 8: Textured Si", + "section": "Calculating R/A/T", + "text": "Calculating R/A/T\nThen we ask RayFlare to calculate the reflection, transmission and absorption through matrix multiplication, and get the required result out (absorption in the bulk) for each cell. We also load the results from the reference paper to compare them to the ones calculated with RayFlare.\n\n%%capture\n\nresults_fig6 = calculate_RAT(SC_fig6, options, save_location='current')\nresults_fig7 = calculate_RAT(SC_fig7, options, save_location='current')\nresults_fig8 = calculate_RAT(SC_fig8, options, save_location='current')\n\nRAT_fig6 = results_fig6[0]\nRAT_fig7 = results_fig7[0]\nRAT_fig8 = results_fig8[0]\n\nsim_fig6 = np.loadtxt(\"data/optos_fig6_sim.csv\", delimiter=\",\")\nsim_fig7 = np.loadtxt(\"data/optos_fig7_sim.csv\", delimiter=\",\")\nsim_fig8 = np.loadtxt(\"data/optos_fig8_sim.csv\", delimiter=\",\")\n\nINFO: After iteration 1: maximum power fraction remaining = 0.2955034746873003\nINFO: After iteration 2: maximum power fraction remaining = 0.24735134017097984\nINFO: After iteration 3: maximum power fraction remaining = 0.2163507471365699\nINFO: After iteration 4: maximum power fraction remaining = 0.19159890069625435\nINFO: After iteration 5: maximum power fraction remaining = 0.17095529483161526\nINFO: After iteration 6: maximum power fraction remaining = 0.15344062600062974\nINFO: After iteration 7: maximum power fraction remaining = 0.1384291294436452\nINFO: After iteration 8: maximum power fraction remaining = 0.12547688890130715\nINFO: After iteration 9: maximum power fraction remaining = 0.11424326382940328\nINFO: After iteration 10: maximum power fraction remaining = 0.10445704654991224\nINFO: After iteration 11: maximum power fraction remaining = 0.09589761402726735\nINFO: After iteration 12: maximum power fraction remaining = 0.0883830436692257\nINFO: After iteration 13: maximum power fraction remaining = 0.08176193170317834\nINFO: After iteration 14: maximum power fraction remaining = 0.07590744044348399\nINFO: After iteration 15: maximum power fraction remaining = 0.07071278644058707\nINFO: After iteration 16: maximum power fraction remaining = 0.06608771669781371\nINFO: After iteration 17: maximum power fraction remaining = 0.0619556977477\nINFO: After iteration 18: maximum power fraction remaining = 0.05825164073869242\nINFO: After iteration 19: maximum power fraction remaining = 0.05492004211445781\nINFO: After iteration 20: maximum power fraction remaining = 0.05191345343864926\nINFO: After iteration 21: maximum power fraction remaining = 0.04919121562204323\nINFO: After iteration 22: maximum power fraction remaining = 0.046718407568182026\nINFO: After iteration 23: maximum power fraction remaining = 0.044464969858259776\nINFO: After iteration 24: maximum power fraction remaining = 0.042404972041952975\nINFO: After iteration 25: maximum power fraction remaining = 0.04051599822739152\nINFO: After iteration 26: maximum power fraction remaining = 0.038778630473564266\nINFO: After iteration 27: maximum power fraction remaining = 0.03717601330766723\nINFO: After iteration 28: maximum power fraction remaining = 0.03569348574421198\nINFO: After iteration 29: maximum power fraction remaining = 0.034318269637635124\nINFO: After iteration 30: maximum power fraction remaining = 0.03303920518123784\nINFO: After iteration 31: maximum power fraction remaining = 0.031846525969740455\nINFO: After iteration 32: maximum power fraction remaining = 0.030731667346668046\nINFO: After iteration 33: maximum power fraction remaining = 0.029687102821135403\nINFO: After iteration 34: maximum power fraction remaining = 0.028706204208766243\nINFO: After iteration 35: maximum power fraction remaining = 0.027783121866022602\nINFO: After iteration 36: maximum power fraction remaining = 0.026912681975976842\nINFO: After iteration 37: maximum power fraction remaining = 0.026090298330296663\nINFO: After iteration 38: maximum power fraction remaining = 0.025311896455915424\nINFO: After iteration 39: maximum power fraction remaining = 0.024573848270729514\nINFO: After iteration 40: maximum power fraction remaining = 0.023872915732924625\nINFO: After iteration 41: maximum power fraction remaining = 0.023206202183040037\nINFO: After iteration 42: maximum power fraction remaining = 0.022571110274614448\nINFO: After iteration 43: maximum power fraction remaining = 0.02196530555470288\nINFO: After iteration 44: maximum power fraction remaining = 0.021386684895000417\nINFO: After iteration 45: maximum power fraction remaining = 0.02083334909208419\nINFO: After iteration 46: maximum power fraction remaining = 0.020303579054949197\nINFO: After iteration 47: maximum power fraction remaining = 0.019795815082497975\nINFO: After iteration 48: maximum power fraction remaining = 0.019308638805378607\nINFO: After iteration 49: maximum power fraction remaining = 0.018840757427562815\nINFO: After iteration 50: maximum power fraction remaining = 0.018390989954995544\nINFO: After iteration 51: maximum power fraction remaining = 0.01795825514292941\nINFO: After iteration 52: maximum power fraction remaining = 0.017541560931354713\nINFO: After iteration 53: maximum power fraction remaining = 0.017139995170233478\nINFO: After iteration 54: maximum power fraction remaining = 0.016752717463871532\nINFO: After iteration 55: maximum power fraction remaining = 0.016378951987414226\nINFO: After iteration 56: maximum power fraction remaining = 0.01601798114871917\nINFO: After iteration 57: maximum power fraction remaining = 0.01566913998624118\nINFO: After iteration 58: maximum power fraction remaining = 0.015331811208484045\nINFO: After iteration 59: maximum power fraction remaining = 0.015005420793388834\nINFO: After iteration 60: maximum power fraction remaining = 0.014689434077044667\nINFO: After iteration 61: maximum power fraction remaining = 0.014383352270584045\nINFO: After iteration 62: maximum power fraction remaining = 0.014086709352282257\nINFO: After iteration 63: maximum power fraction remaining = 0.013799069288907425\nINFO: After iteration 64: maximum power fraction remaining = 0.013520023546425057\nINFO: After iteration 65: maximum power fraction remaining = 0.013249188855386125\nINFO: After iteration 66: maximum power fraction remaining = 0.012986205200837965\nINFO: After iteration 67: maximum power fraction remaining = 0.01273073401049334\nINFO: After iteration 68: maximum power fraction remaining = 0.012482456518260769\nINFO: After iteration 69: maximum power fraction remaining = 0.012241072283152531\nINFO: After iteration 70: maximum power fraction remaining = 0.012006297846108658\nINFO: After iteration 71: maximum power fraction remaining = 0.011777865509460205\nINFO: After iteration 72: maximum power fraction remaining = 0.011555522225649468\nINFO: After iteration 73: maximum power fraction remaining = 0.011339028583468616\nINFO: After iteration 74: maximum power fraction remaining = 0.011128157881506017\nINFO: After iteration 75: maximum power fraction remaining = 0.010922695279730358\nINFO: After iteration 76: maximum power fraction remaining = 0.010722437021222662\nINFO: After iteration 77: maximum power fraction remaining = 0.010527189717006499\nINFO: After iteration 78: maximum power fraction remaining = 0.010336769687746671\nINFO: After iteration 79: maximum power fraction remaining = 0.010151002356801959\nINFO: After iteration 80: maximum power fraction remaining = 0.009969721689742805\nINFO: After iteration 1: maximum power fraction remaining = 0.6904687021340956\nINFO: After iteration 2: maximum power fraction remaining = 0.5529545101509352\nINFO: After iteration 3: maximum power fraction remaining = 0.511292942194319\nINFO: After iteration 4: maximum power fraction remaining = 0.44224378131338016\nINFO: After iteration 5: maximum power fraction remaining = 0.39997454451423775\nINFO: After iteration 6: maximum power fraction remaining = 0.3485295085904421\nINFO: After iteration 7: maximum power fraction remaining = 0.3138482613917786\nINFO: After iteration 8: maximum power fraction remaining = 0.27553594442668927\nINFO: After iteration 9: maximum power fraction remaining = 0.24751635054463023\nINFO: After iteration 10: maximum power fraction remaining = 0.21840401464945428\nINFO: After iteration 11: maximum power fraction remaining = 0.19583800968944132\nINFO: After iteration 12: maximum power fraction remaining = 0.17344166256983365\nINFO: After iteration 13: maximum power fraction remaining = 0.15530793273842505\nINFO: After iteration 14: maximum power fraction remaining = 0.13789731413300393\nINFO: After iteration 15: maximum power fraction remaining = 0.12335775256871925\nINFO: After iteration 16: maximum power fraction remaining = 0.10971979419070547\nINFO: After iteration 17: maximum power fraction remaining = 0.09808315863565356\nINFO: After iteration 18: maximum power fraction remaining = 0.08734240233208478\nINFO: After iteration 19: maximum power fraction remaining = 0.0780417094944075\nINFO: After iteration 20: maximum power fraction remaining = 0.06955082453103606\nINFO: After iteration 21: maximum power fraction remaining = 0.06212436763500962\nINFO: After iteration 22: maximum power fraction remaining = 0.05539475523478134\nINFO: After iteration 23: maximum power fraction remaining = 0.04946888092506737\nINFO: After iteration 24: maximum power fraction remaining = 0.04412586351647957\nINFO: After iteration 25: maximum power fraction remaining = 0.03939959150147595\nINFO: After iteration 26: maximum power fraction remaining = 0.035152466756422904\nINFO: After iteration 27: maximum power fraction remaining = 0.03138417210722542\nINFO: After iteration 28: maximum power fraction remaining = 0.02800549474394666\nINFO: After iteration 29: maximum power fraction remaining = 0.025001662835576158\nINFO: After iteration 30: maximum power fraction remaining = 0.022336528444980536\nINFO: After iteration 31: maximum power fraction remaining = 0.019970345021341422\nINFO: After iteration 32: maximum power fraction remaining = 0.017850251895806992\nINFO: After iteration 33: maximum power fraction remaining = 0.01595879897926111\nINFO: After iteration 34: maximum power fraction remaining = 0.014265341950741119\nINFO: After iteration 35: maximum power fraction remaining = 0.012753479233909213\nINFO: After iteration 36: maximum power fraction remaining = 0.01140055750519969\nINFO: After iteration 37: maximum power fraction remaining = 0.010192162654957652\nINFO: After iteration 38: maximum power fraction remaining = 0.009111167021520275\nINFO: After iteration 1: maximum power fraction remaining = 0.7673983435875205\nINFO: After iteration 2: maximum power fraction remaining = 0.6372585557661392\nINFO: After iteration 3: maximum power fraction remaining = 0.5414879294120498\nINFO: After iteration 4: maximum power fraction remaining = 0.46198278041320184\nINFO: After iteration 5: maximum power fraction remaining = 0.39433973016867285\nINFO: After iteration 6: maximum power fraction remaining = 0.33676090679898063\nINFO: After iteration 7: maximum power fraction remaining = 0.28761095693740824\nINFO: After iteration 8: maximum power fraction remaining = 0.2456437571054792\nINFO: After iteration 9: maximum power fraction remaining = 0.20980167029275584\nINFO: After iteration 10: maximum power fraction remaining = 0.17918990119472689\nINFO: After iteration 11: maximum power fraction remaining = 0.15304474763794992\nINFO: After iteration 12: maximum power fraction remaining = 0.13071442653724563\nINFO: After iteration 13: maximum power fraction remaining = 0.11164227220874255\nINFO: After iteration 14: maximum power fraction remaining = 0.09535288871681696\nINFO: After iteration 15: maximum power fraction remaining = 0.08144024158383945\nINFO: After iteration 16: maximum power fraction remaining = 0.06955754767323634\nINFO: After iteration 17: maximum power fraction remaining = 0.059408621208283954\nINFO: After iteration 18: maximum power fraction remaining = 0.05074049344792487\nINFO: After iteration 19: maximum power fraction remaining = 0.04333710537780831\nINFO: After iteration 20: maximum power fraction remaining = 0.03701392274486675\nINFO: After iteration 21: maximum power fraction remaining = 0.03161333608191989\nINFO: After iteration 22: maximum power fraction remaining = 0.02700073227373622\nINFO: After iteration 23: maximum power fraction remaining = 0.02306113917976735\nINFO: After iteration 24: maximum power fraction remaining = 0.0196963598948841\nINFO: After iteration 25: maximum power fraction remaining = 0.016822525118259837\nINFO: After iteration 26: maximum power fraction remaining = 0.014368002659713427\nINFO: After iteration 27: maximum power fraction remaining = 0.012271611959434315\nINFO: After iteration 28: maximum power fraction remaining = 0.010481099123494625\nINFO: After iteration 29: maximum power fraction remaining = 0.008951834461485581\n\n\nFinally, we use TMM to calculate the absorption in a structure with a planar front and planar rear, as a reference.\n\nstruc = tmm_structure([Layer(si(\"200um\"), Si)], incidence=Air, transmission=Air)\noptions.coherent = False\noptions.coherency_list = [\"i\"]\nRAT = tmm_structure.calculate(struc, options)" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-an-arc", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-an-arc", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Adding an ARC", - "text": "Adding an ARC\nThe reflectance of bare Si is very high. Let’s try adding a simple anti-reflection coating (ARC), a single layer of silicon nitride (Si\\(_3\\)N\\(_4\\)):\n\nSiN = material(\"Si3N4\")()\n\nSi_junction = Junction([emitter_layer, base_layer], kind=\"DA\")\n\nsolar_cell_TMM_ARC = SolarCell([Layer(width=si(75, \"nm\"), material=SiN), Si_junction])\n\nsolar_cell_solver(solar_cell_TMM_ARC, 'qe', options)\nsolar_cell_solver(solar_cell_TMM_ARC, 'iv', options)\n\nPLOT 4: Absorption, EQE, reflection and transmission for the cell with a simple one-layer ARC. We see the reflection is significantly reduced from the previous plot leading to higher absorption/EQE.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].eqe(wavelengths), 'k-', label=\"EQE\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].layer_absorption, label='A')\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.reflected, label=\"R\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.transmitted, label=\"T\")\nplt.legend()\nplt.title(\"(4) QE of Si cell (ARC) - TMM\")\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"QE/Absorptance (%)\")\nplt.ylim(0, 100)\nplt.show()\n\nPLOT 5: Compare the IV curves of the cells with and without an ARC. The efficiency is also shown on the plot. Note that because we didn’t specify a light source, Solcore will assume we want to use AM1.5G; in later examples we will set the light source used for light IV simulations explicitly.\n\nplt.figure()\nplt.plot(-voltages, solar_cell_TMM[0].iv(voltages)/10, label=\"No ARC\")\nplt.plot(-voltages, solar_cell_TMM_ARC[1].iv(voltages)/10, label=\"75 nm SiN\")\nplt.text(0.5, 1.02*abs(solar_cell_TMM.iv[\"Isc\"])/10, str(round(solar_cell_TMM.iv[\"Eta\"]*100,\n 1)) + ' %')\nplt.text(0.5, 1.02*abs(solar_cell_TMM_ARC.iv[\"Isc\"])/10, str(round(solar_cell_TMM_ARC\n .iv[\"Eta\"]*100, 1)) + ' %')\nplt.ylim(0, 38)\nplt.xlim(-0.8, 0.8)\nplt.legend()\nplt.xlabel(\"V (V)\")\nplt.ylabel(r\"J (mA/cm$^2$)\")\nplt.title(\"(5) IV curve of Si cell with and without ARC\")\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#plotting", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#plotting", + "title": "Section 8: Textured Si", + "section": "Plotting", + "text": "Plotting\nPlot everything together, including data from the reference paper for comparison:\n\npalhf = sns.color_palette(\"hls\", 4)\n\nfig = plt.figure()\nplt.plot(sim_fig6[:, 0], sim_fig6[:, 1],\n \"--\", color=palhf[0], label=\"OPTOS - rear grating (1)\")\nplt.plot(wavelengths * 1e9, RAT_fig6[\"A_bulk\"][0],\n \"-o\", color=palhf[0], label=\"RayFlare - rear grating (1)\", fillstyle=\"none\")\nplt.plot(sim_fig7[:, 0], sim_fig7[:, 1],\n \"--\", color=palhf[1], label=\"OPTOS - front pyramids (2)\",)\nplt.plot(wavelengths * 1e9, RAT_fig7[\"A_bulk\"][0],\n \"-o\", color=palhf[1], label=\"RayFlare - front pyramids (2)\", fillstyle=\"none\")\nplt.plot(sim_fig8[:, 0], sim_fig8[:, 1],\n \"--\", color=palhf[2], label=\"OPTOS - grating + pyramids (3)\")\nplt.plot(wavelengths * 1e9, RAT_fig8[\"A_bulk\"][0],\n \"-o\", color=palhf[2],label=\"RayFlare - grating + pyramids (3)\", fillstyle=\"none\",)\nplt.plot(wavelengths * 1e9, RAT[\"A_per_layer\"][:, 0], \"-k\", label=\"Planar\")\nplt.legend(loc=\"lower left\")\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorption in Si\")\nplt.xlim([900, 1200])\nplt.ylim([0, 1])\nplt.show()\n\n\n\n\nWe can see good agreement between the reference values and our calculated values. The structure with rear grating also behaves identically to the planar TMM reference case at the short wavelengths where front surface reflection dominates the result, as expected. Clearly, the pyramids perform much better overall, giving a large boost in the absorption at long wavelengths and also reducing the reflection significantly at shorter wavelengths. Plotting reflection and transmission emphasises this:\n\nfig = plt.figure()\nplt.plot(wavelengths * 1e9,RAT_fig6[\"R\"][0],\n \"-o\", color=palhf[0], label=\"RayFlare - rear grating (1)\", fillstyle=\"none\")\nplt.plot(wavelengths * 1e9, RAT_fig7[\"R\"][0],\n \"-o\", color=palhf[1], label=\"RayFlare - front pyramids (2)\", fillstyle=\"none\")\nplt.plot(wavelengths * 1e9, RAT_fig8[\"R\"][0],\n \"-o\", color=palhf[2], label=\"RayFlare - grating + pyramids (3)\", fillstyle=\"none\")\n\nplt.plot(wavelengths * 1e9, RAT_fig6[\"T\"][0], \"--o\", color=palhf[0])\nplt.plot(wavelengths * 1e9, RAT_fig7[\"T\"][0], \"--o\", color=palhf[1])\nplt.plot(wavelengths * 1e9, RAT_fig8[\"T\"][0], \"--o\", color=palhf[2])\n\n# these are just to create the legend:\nplt.plot(-1, 0, \"k-o\", label=\"R\", fillstyle=\"none\")\nplt.plot(-1, 0, \"k--o\", label=\"T\")\n\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Reflected/transmitted fraction\")\nplt.xlim([900, 1200])\nplt.ylim([0, 0.6])\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#conclusions", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#conclusions", - "title": "Section 5a: Planar Si solar cell using DA", - "section": "Conclusions", - "text": "Conclusions\nWe see that the cell with an ARC has a significantly higher \\(J_{sc}\\), and a slightly higher \\(V_{oc}\\), than the bare Si cell. In reality, most Si cells have a textured surface rather than a planar surface with an ARC; this will be discussed later in the course.\nOverall, some things we can take away from the examples in this script:\n\nThe Beer-Lambert law is a very simple way to calculate absorption in a cell, but won’t take into account important effects such as front-surface reflection or the effects of anti-reflection coatings.\nUsing the transfer-matrix method (TMM), we can account for front surface reflection and interference effects which make e.g. ARCs effective. In the simple situation of a thick cell without any front surface layers, it is equivalent to simply calculating the reflection with the Fresnel equations and assuming Beer-Lambert absorption in the cell.\nAdding a simple, one-layer ARC can significantly reduce front-surface reflection for a single-junction cell, leading to improved short-circuit current. To correctly account for interference in this layer, which is what causes its anti-reflective properties, we most use the transfer-matrix method (TMM) optical solver." + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#redistribution-matrices", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#redistribution-matrices", + "title": "Section 8: Textured Si", + "section": "Redistribution matrices", + "text": "Redistribution matrices\nPlot the redistribution matrix for the rear grating (summed over azimuthal angles) at 1100 nm:\n\ntheta_intv, phi_intv, angle_vector = make_angle_vector(\n options[\"n_theta_bins\"], options[\"phi_symmetry\"], options[\"c_azimuth\"])\n\npath = get_savepath(save_location='current', project_name=options.project_name)\nsprs = load_npz(os.path.join(path, SC_fig6[2].name + \"frontRT.npz\"))\n\nwl_to_plot = 1100e-9\nwl_index = np.argmin(np.abs(wavelengths - wl_to_plot))\n\nfull = sprs[wl_index].todense()\n\nsummat = theta_summary(full, angle_vector, options[\"n_theta_bins\"], \"front\")\nsummat_r = summat[: options[\"n_theta_bins\"], :]\nsummat_r = summat_r.rename({ r\"$\\theta_{in}$\": r\"$\\sin(\\theta_{in})$\",\n r\"$\\theta_{out}$\": r\"$\\sin(\\theta_{out})$\"})\n\nsummat_r = summat_r.assign_coords({r\"$\\sin(\\theta_{in})$\": np.sin(summat_r.coords[r\"$\\sin(\\theta_{in})$\"]).data,\n r\"$\\sin(\\theta_{out})$\": np.sin(summat_r.coords[r\"$\\sin(\\theta_{out})$\"]).data})\n\npalhf = sns.cubehelix_palette(256, start=0.5, rot=-0.9)\npalhf.reverse()\nseamap = mpl.colors.ListedColormap(palhf)\n\nfig = plt.figure()\nax = plt.subplot(111)\nax = summat_r.plot.imshow(ax=ax, cmap=seamap, vmax=0.3)\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#questions", - "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#questions", - "title": "Section 5a: Planar Si solar cell using DA", + "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#questions", + "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#questions", + "title": "Section 8: Textured Si", "section": "Questions", - "text": "Questions\n\nWhich parameters could we change which would affect the EQE and/or IV of the cell?\nWhy can’t we just use the Fresnel equations to calculate the effect of an anti-reflection coating?" + "text": "Questions\n\nIf you can add only one of the textures (pyramids or a grating), which one is better? Why?\nWhy do the structures with a front-surface texture have high reflection at long wavelengths? The anti-reflection properties of pyramids (treated with ray optics) are mostly independent of the wavelength, so why does apparent reflection increase near the bandgap of Si?\nCan you explain any of the features present in the angular redistribution matrix of the rear grating surface?" }, { - "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html", - "href": "solcore-workshop-2/notebooks/4-Spectral2.html", - "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", + "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html", + "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html", + "title": "Section 7: Planar GaInP//Si tandem cell", "section": "", - "text": "SPCTRAL 2 is a clear-sky spectral irradiance model that accounts for variations in the atmospheric conditions and air-mass. Developed at NREL in 1984, it generates terrestrial spectral irradiance from 300nm to 4um with a resolution of approximately 10nm.\n“Simple Solar Spectral Model for Direct and Diffuse Irradiance on Horizontal and Tilted Planes at the Earth’s Surface for Cloudless Atmospheres”, R. Bird, C. Riordan, December 1984\nThe Solcore implementation accomodates the following inputs (stated values are defaults):\nAll the inputs are numeric other than the aod_model whose options are: ‘rural’, ‘urban’, ‘maritime’ and ‘tropospheric’." + "text": "This example is partly based on the structure presented in this paper, but with planar interfaces instead of a textured Si surface. This is a four-terminal GaInP/Si device which uses an epoxy and glass to bond the two cells together mechanically. First, we will do optical-only calculations to look at the effect of an intermediate anti-reflection coating (on top of the epoxy/glass) on the absorption in the bottom Si cell, and then we will use the results of the optical calculation to do a device simulation and calculate external quantum efficiency and current-voltage under AM1.5G.\nNote: the paper linked above has a GaInP/AlGaInP heterojunction as the top junction. Because we do not have AlGaInP built in to Solcore’s database, this is replaced by a GaInP homojunction in this example.\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer, Junction\nfrom solcore.solar_cell_solver import solar_cell_solver, default_options\nfrom solcore.solar_cell import SolarCell\nfrom solcore.light_source import LightSource\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\n/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/registries.py:73: UserWarning: Optics solver 'RCWA' will not be available. An installation of S4 has not been found.\n warn(" }, { - "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#comparison-between-spctral2-with-default-parameters-and-am1.5g", - "href": "solcore-workshop-2/notebooks/4-Spectral2.html#comparison-between-spctral2-with-default-parameters-and-am1.5g", - "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", - "section": "Comparison between SPCTRAL2 with default parameters and AM1.5G", - "text": "Comparison between SPCTRAL2 with default parameters and AM1.5G\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom solcore.light_source import LightSource\n\n# Setup the AM1.5G solar spectrum\nwl = np.linspace(300, 4000, 4000) * 1e-9 #wl contains the x-ordinate in wavelength\nam15g = LightSource(source_type='standard', x=wl*1e9, version='AM1.5g')\n\nspc2default = LightSource(source_type='SPECTRAL2', x=wl * 1e9)\n\nplt.figure()\nplt.title(\"Comparing SPCTRAL 2 vs AM1.5G\")\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2default.spectrum(wl*1e9), label='SPC-default')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()" - }, - { - "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#adjusting-the-precipitable-water-value", - "href": "solcore-workshop-2/notebooks/4-Spectral2.html#adjusting-the-precipitable-water-value", - "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", - "section": "Adjusting the precipitable water value", - "text": "Adjusting the precipitable water value\nThe default SPCTRAL2 parameters results in almost no atmospheric absorption. This suggests the precipitable water column thickness is much too low, the default is 0.00142 cm. Let’s increase that value to 1cm to roughly match AM1.5G:\n\nspc2pc = LightSource(source_type='SPECTRAL2', precipwater=1.0, x=wl * 1e9)\n\nplt.figure()\nplt.title('Comparions between SPCTRAL2 defaults, 1cm precipitable water & AM1.5G')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2default.spectrum(wl*1e9), label='SPC-default')\nplt.plot(*spc2pc.spectrum(wl*1e9), label='PC water')\n\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()" + "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#defining-materials-layers-and-junctions", + "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#defining-materials-layers-and-junctions", + "title": "Section 7: Planar GaInP//Si tandem cell", + "section": "Defining materials, layers and junctions", + "text": "Defining materials, layers and junctions\nThe paper referenced above uses a double-layer anti-reflection coating (ARC) made of MgF\\(_2\\) and ZnS. As in the previous example, we use the interface to the refractiveindex.info database to select optical constant data from specific sources, and define Solcore materials using this data. The III-V materials are taken from Solcore’s own material database.\nNote that for the epoxy/glass layer, we use only a single material (BK7 glass). The epoxy and glass used in the paper have the same refractive index (n = 1.56), so we can use a single material with an appropriate refractive index to represent them.\n\ndownload_db(confirm=True) # uncomment to download database\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaking request to https://refractiveindex.info/download/database/rii-database-2021-07-18.zip\nDownloaded and extracting...\nWrote /var/folders/wh/w5k56r_927j4yp3mh91bggfc0000gq/T/tmpxl4nacr8/database from https://refractiveindex.info/download/database/rii-database-2021-07-18.zip\nLOG: 2746,other,PtAl2,Chen : Bad Material YAML File.\n***Wrote SQLite DB on /Users/z3533914/.solcore/nk/nk.db\n\n\n/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/material_data/refractiveindex_info_DB/dbmaterial.py:278: RuntimeWarning: invalid value encountered in sqrt\n n = numpy.sqrt(nsq)\n/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/material_data/refractiveindex_info_DB/dbmaterial.py:299: RuntimeWarning: invalid value encountered in sqrt\n n = numpy.sqrt(n)\n\n\n\n%%capture\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nZnS_pageid = search_db(os.path.join(\"ZnS\", \"Querry\"))[0][0];\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nZnS = material(str(ZnS_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")\nBSF = material(\"AlGaAs\")(Al=0.5)\n\nepoxy = material(\"BK7\")()\n\nFor the Si cell, the front surface has both a low-index and high-index SiN\\(x\\) layer. The rear surface uses Al\\(2\\)O\\(3\\), and the cell has Al at the rear surface.\n\nSiOx = material(\"SiO\")()\nSiN_191_pageid = search_db(\"Vogt-1.91\")[0][0];\nSiN_213_pageid = search_db(\"Vogt-2.13\")[0][0];\nSiN_191 = material(str(SiN_191_pageid), nk_db=True)();\nSiN_213 = material(str(SiN_213_pageid), nk_db=True)();\n\nSi = material(\"Si\")\n\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2816 other SiN Vogt-1.91 anti-reflective coatings/SiN/Vogt-1.91.yml 1 1 0.25 1.7 146\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2818 other SiN Vogt-2.13 anti-reflective coatings/SiN/Vogt-2.13.yml 1 1 0.25 1.7 146\n\n\nWe now define the layers used in the top cell stack: the ARC and window layer for the top cell, and the GaInP junction itself. The ARC and window layers are not involved in the electrical calculation using the depletion approximation, so they are defined as simple layers, while the GaInP emitter and base are defined as part of a Junction object.\n\nARC_window = [\n Layer(97e-9, MgF2),\n Layer(41e-9, ZnS),\n Layer(17e-9, window, role=\"window\"),\n]\n\nGaInP_junction = Junction([\n Layer(200e-9, GaInP(In=0.50, Nd=si(\"2e18cm-3\"), hole_diffusion_length=si(\"300nm\")),\n role=\"emitter\"),\n Layer(750e-9, GaInP(In=0.50, Na=si(\"1e17cm-3\"), electron_diffusion_length=si(\n \"800nm\")),\n role=\"base\"),\n Layer(500e-9, BSF, role=\"bsf\")], kind=\"DA\", sn=1, sp=1\n)\n\nWe now define the spacer layer, with and without a ZnS anti-reflection coating, so we can compare their performance in the cell stack. Note that we set the epoxy thickness here to be 10 microns, although the real thickness is much higher - this is because the epoxy/glass is not absorbing at the wavelengths which are able to reach it (which are not absorbed in the GaInP top cell), and we will treat it incoherently (no thin-film interference), so the exact thickness does not matter.\n\nspacer = [\n Layer(82e-9, ZnS),\n Layer(10e-6, epoxy), # real thickness is much higher, but since this layer is\n # non-absorbing at the relevant wavelength (> 650 nm) and treated incoherently,\n # this does not matter\n]\n\nspacer_noARC = [\n Layer(10e-6, epoxy),\n]\n\nNow we define the layer stacks for the Si cell, including the front SiO\\(_x\\)/SiN\\(_x\\) stack, the junction itself, and the back dielectric layers.\n\nSi_front_surf = [\n Layer(100e-9, SiOx),\n Layer(70e-9, SiN_191),\n Layer(15e-9, SiN_213),\n ]\n\nSi_junction = Junction([\n Layer(1e-6, Si(Nd=si(\"2e18cm-3\"), hole_diffusion_length=2e-6), role=\"emitter\"),\n Layer(150e-6, Si(Na=si(\"2e15cm-3\"), electron_diffusion_length=150e-6), role=\"base\"),\n], kind=\"DA\", sn=0.1, sp=0.1)\n\nSi_back_surf = [\n Layer(15e-9, Al2O3),\n Layer(120e-9, SiN_191)\n]" }, { - "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#atmospheric-turbidity", - "href": "solcore-workshop-2/notebooks/4-Spectral2.html#atmospheric-turbidity", - "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", - "section": "Atmospheric Turbidity", - "text": "Atmospheric Turbidity\nThe short wavelength is attenuated which is likely due to a high level of aerosol loading in the default spectrum. To address this atmospheric turbidity can be reduced to around 0.05.\n\nspc2high = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2, x=wl * 1e9)\nspc2med = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.1, x=wl * 1e9)\nspc2low = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.05, x=wl * 1e9)\n\nplt.figure()\nplt.title('Spectral Irradiance Plotted for Different Aersol Models')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2high.spectrum(wl*1e9), label='Turbidity = 0.2')\nplt.plot(*spc2med.spectrum(wl*1e9), label='Turbidity = 0.1')\nplt.plot(*spc2low.spectrum(wl*1e9), label='Turbidity = 0.05')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()" + "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#comparing-the-optical-performance-with-and-without-intermediate-arc", + "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#comparing-the-optical-performance-with-and-without-intermediate-arc", + "title": "Section 7: Planar GaInP//Si tandem cell", + "section": "Comparing the optical performance with and without intermediate ARC", + "text": "Comparing the optical performance with and without intermediate ARC\nNow we will run the calculation. We will treat some of the layers (those above the epoxy) with a coherent TMM calculation, and the epoxy and the layers below it using incoherent TMM. We will discuss the difference this makes, why this is important, and when to use coherent and incoherent layers.\n\nn_coh_layers = len(ARC_window + GaInP_junction)\nn_inc_layers = 1 + len(Si_front_surf + Si_junction + Si_back_surf)\n\nwl = np.linspace(300, 1200, 600) * 1e-9\n\noptions = default_options\noptions.recalculate_absorption = True\noptions.wavelength = wl\noptions.optics_method = 'TMM'\n\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl*1e9,\n output_units=\"photon_flux_per_nm\")\n\nNow we define two versions of the cell for optical calculations, without and with the ZnS anti-reflection coating on the epoxy. Note that we also set the substrate for the calculation (aluminium) here.\n\ncell_no_ARC = SolarCell(\n ARC_window + GaInP_junction + spacer_noARC + Si_front_surf + Si_junction +\n Si_back_surf,\n substrate=Al,\n)\n\ncell_with_ARC = SolarCell(\n ARC_window + GaInP_junction + spacer + Si_front_surf + Si_junction + Si_back_surf,\n substrate=Al,\n)\n\nWe set the appropriate coherency list for the structure (a list with entry ‘c’ for a coherent layer or ‘i’ for an incoherent layer), and solve for the cell optics of the cell without the intermediate ARC. We get the total absorption in the GaInP and Si junctions.\n\n%%capture\n\noptions.coherency_list = ['c']*(n_coh_layers) + ['i']*n_inc_layers\nsolar_cell_solver(cell_no_ARC, \"optics\", options)\n\nGaInP_A = cell_no_ARC[3].layer_absorption + cell_no_ARC[4].layer_absorption\nSi_A = cell_no_ARC[10].layer_absorption + cell_no_ARC[11].layer_absorption\n\nTreating layer(s) 11 incoherently\nCalculating RAT...\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/ZnS/Querry.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/ZnS/Querry.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial anti-reflective coatings/SiN/Vogt-1.91.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial anti-reflective coatings/SiN/Vogt-1.91.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial anti-reflective coatings/SiN/Vogt-2.13.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial anti-reflective coatings/SiN/Vogt-2.13.yml loaded.\nCalculating absorption profile...\n\n\nAs above, but for the cell with an intermediate ARC:\n\noptions.coherency_list = [\"c\"]*(n_coh_layers + 1) + ['i']*n_inc_layers\nsolar_cell_solver(cell_with_ARC, \"optics\", options)\n\nGaInP_A_ARC = cell_with_ARC[3].layer_absorption + cell_with_ARC[4].layer_absorption\nSi_A_ARC = cell_with_ARC[11].layer_absorption + cell_with_ARC[12].layer_absorption\n\nTreating layer(s) 12 incoherently\nCalculating RAT...\nCalculating absorption profile...\n\n\nNow we plot the GaInP and Si absorption, and the reflectance of the whole structure, for both cells:\n\nplt.figure()\n\nplt.plot(wl * 1e9, GaInP_A_ARC, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, Si_A_ARC, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, cell_with_ARC.reflected, '-b', label=\"R\")\n\nplt.plot(wl * 1e9, GaInP_A, \"--k\", label=\"No middle ARC\")\nplt.plot(wl * 1e9, Si_A, \"--r\")\nplt.plot(wl * 1e9, cell_no_ARC.reflected, '--b')\n\nplt.legend(loc='upper right')\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance/Reflectance\")\nplt.tight_layout()\nplt.show()\n\n\n\n\nWe see that the cell without an ARC on the epoxy shows much stronger interference fringes (due to the thickness of the top stack), and higher reflectance overall in the long-wavelength region (at short wavelengths, light is absorbed before it is able to reach the epoxy at all). Before doing an actual electrical calculation, we will calculate the limiting current in both of the sub-cells (assuming all the generated charge carriers can be collected):\n\nJ_GaInP = q*np.trapz(GaInP_A * AM15G.spectrum()[1], wl*1e9)\nJ_Si = q*np.trapz(Si_A * AM15G.spectrum()[1], wl*1e9)\n\nprint(\"Limiting short-circuit currents without ARC (mA/cm2): {:.1f} / {:.1f}\".format(\n J_GaInP/10, J_Si/10))\n\nJ_GaInP_ARC = q*np.trapz(GaInP_A_ARC * AM15G.spectrum()[1], wl*1e9)\nJ_Si_ARC = q*np.trapz(Si_A_ARC * AM15G.spectrum()[1], wl*1e9)\n\nprint(\"Limiting short-circuit currents with ARC (mA/cm2): {:.1f} / {:.1f}\".format(\n J_GaInP_ARC/10, J_Si_ARC/10))\n\nLimiting short-circuit currents without ARC (mA/cm2): 16.4 / 15.5\nLimiting short-circuit currents with ARC (mA/cm2): 16.4 / 17.4\n\n\nAs expected from the reduced reflection and increased absorption in the Si, the cell with an intermediate ARC has significantly higher maximum current in the bottom Si cell." }, { - "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#variation-with-aerosol-models", - "href": "solcore-workshop-2/notebooks/4-Spectral2.html#variation-with-aerosol-models", - "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", - "section": "Variation with Aerosol models", - "text": "Variation with Aerosol models\nSeveral standard aerosol models are implemented in SPCTRAL 2 that were established by Shettle & Fenn.\nShettle, E. P., and R. W. Fenn, “Models of the Atmospheric Aerosol and Their Optical Properties, II Proceedings of the Advisory Group for Aerospace Reseach and Development Conference No . 183, Optical Propagation in the Atmosphere, 1975, pp. 2.1-2.16. Presented at the Electromagnetic Wave Propagation Panel Symposium, Lyngby, Denmark; 27-31 October 1975.\nHere we plot some of them with a turbidity of 0.2 to emphasise the different spectral behaviour:\n\nspc2rural = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,\n aod_model='rural', x=wl * 1e9)\nspc2marit = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,\n aod_model='maritime', x=wl * 1e9)\nspc2tropo = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,\n aod_model='tropospheric', x=wl * 1e9)\n\nplt.figure(1)\nplt.title('Spectral Irradiance Plotted for Different Aersol Models')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2rural.spectrum(wl*1e9), label='rural')\nplt.plot(*spc2marit.spectrum(wl*1e9), label='maritime')\nplt.plot(*spc2tropo.spectrum(wl*1e9), label='tropospheric')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()" + "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#eqe-and-iv-calculation", + "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#eqe-and-iv-calculation", + "title": "Section 7: Planar GaInP//Si tandem cell", + "section": "EQE and IV calculation", + "text": "EQE and IV calculation\nNow, just taking the structure with an intermediate ARC, we do a cell calculation using the depletion approximation.\n\noptions.mpp = True\noptions.light_iv = True\noptions.voltages = np.linspace(-1.9, 0.1, 100)\noptions.light_source = AM15G\n\nsolar_cell = SolarCell(\n ARC_window + [GaInP_junction] + spacer + Si_front_surf + [Si_junction] +\n Si_back_surf,\n substrate=Al,\n)\n\nFirst, we calculate and plot the external quantum efficiency (EQE):\n\nsolar_cell_solver(solar_cell, 'qe', options)\n\nplt.figure()\nplt.plot(wl * 1e9, GaInP_A_ARC, \"--k\", label=\"GaInP only absorption\")\nplt.plot(wl * 1e9, Si_A_ARC, \"--r\", label=\"Si only absorption\")\nplt.plot(wl*1e9, solar_cell[3].eqe(wl), '-k')\nplt.plot(wl*1e9, solar_cell[9].eqe(wl), '-r')\nplt.legend(loc='upper right')\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance/EQE\")\nplt.ylim(0,1)\nplt.tight_layout()\nplt.show()\n\nTreating layer(s) 12 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving QE of the solar cell...\n\n\n\n\n\nAnd the current-voltage under AM1.5G:\n\nsolar_cell_solver(solar_cell, 'iv', options)\n\nplt.figure()\nplt.plot(-options.voltages, -solar_cell.iv['IV'][1]/10, 'k', linewidth=3,\n label='Total (2-terminal)')\nplt.plot(-options.voltages, solar_cell[3].iv(options.voltages)/10, 'b',\n label='GaInP')\nplt.plot(-options.voltages, solar_cell[9].iv(options.voltages)/10, 'g',\n label='Si')\nplt.text(0.1, 18, r\"2-terminal $\\eta$ = {:.2f}%\".format(solar_cell.iv[\"Eta\"]*100))\nplt.legend()\nplt.ylim(0, 20)\nplt.xlim(0, 1.9)\nplt.ylabel('Current (mA/cm$^2$)')\nplt.xlabel('Voltage (V)')\nplt.tight_layout()\nplt.show()\n\nTreating layer(s) 12 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell..." }, { - "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#changing-the-time-of-day", - "href": "solcore-workshop-2/notebooks/4-Spectral2.html#changing-the-time-of-day", - "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", - "section": "Changing the time of day", - "text": "Changing the time of day\nOne of the most common uses for a spectral irradiance model such as SPCTRAL2 is to calculate how a particular solar cell technology behaves under varying spectral conditions during the day. This is particularly important whan working with series connected tandem solar cells where the current matching condition will vary according to the incident spectrum. Here we plot the spectral irradiance at 12pm, 2pm, 3pm, 4pm, 5pm, 6pm and 7pm. Note the strong relative loss in short-wavelength light relative to the infrared as the air-mass increases throughout the afternoon.\n\nimport datetime\n\nplt.figure(1)\nplt.title('Spectral Irradiance plotted from 12pm-7pm')\nhours=[12, 14, 15, 16, 17, 18, 19]\n\nfor h in hours:\n spc2 = LightSource(source_type='SPECTRAL2', dateAndTime=datetime.datetime(2011, 6, 30, h, 00),\n precipwater=1.0, turbidity=0.05, x=wl * 1e9)\n plt.plot(*spc2.spectrum(wl*1e9), label='hour '+ str(h))\n\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()" + "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#two-vs.-four-terminal-efficiency", + "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#two-vs.-four-terminal-efficiency", + "title": "Section 7: Planar GaInP//Si tandem cell", + "section": "Two vs. four-terminal efficiency", + "text": "Two vs. four-terminal efficiency\nBy default, Solcore assumes any SolarCell object is a two-terminal device, and will thus calculate the total I-V curve assuming the cells are connected in series and that the current is limited by the lowest-current sub-cell. However, it will also calculate the I-V curves of the individual cells, so we can use this information to calculate the possible power output in a 4-terminal configuration where the cells operate independently from an electrical point of view:\n\nV = np.linspace(0, 1.3, 100)\nP_GaInP = V*solar_cell[3].iv(V)\nP_Si = V*solar_cell[9].iv(V)\n\nP_MPP_GaInP = max(P_GaInP)\n\nP_MPP_Si = max(P_Si)\n\neta_4T = (P_MPP_GaInP + P_MPP_Si)/AM15G.power_density\n\nprint('4-terminal efficiency: {:.1f} %'.format(eta_4T*100))\n\n4-terminal efficiency: 39.6 %" }, { - "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html", - "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html", - "title": "Section 5b: Planar Si solar cell using PDD", - "section": "", - "text": "In the previous example, we looked at a silicon cell using the depletion approximation. Here, we will instead use Solcore’s Poisson drift-diffusion (PDD) solver, which is can handle doping profiles (not just constant doping levels). Note that Solcore actually has two PDD solvers: a built-in one which was developed in Fortran specifically for cells with quantum wells, and an interface to the Sesame package, which was written in Python and developed for silicon-based cells. Here, we will use the Sesame solver.\nThe script starts of in much the same way as the DA cell in the previous example: we import relevant external packages and Solcore features, define some of the materials we will use, and set user options for solar_cell_solver.\n\nfrom solcore.solar_cell import SolarCell, Junction, Layer\nfrom solcore.state import State\nfrom solcore.solar_cell_solver import solar_cell_solver\nimport numpy as np\nfrom solcore.light_source import LightSource\nfrom scipy.special import erfc\n\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\n\nAir = material(\"Air\")()\nMgF2 = material(\"MgF2\")()\nAg = material(\"Ag\")()\nTCO = material('ITO2')()\n\nwavelengths = np.linspace(280, 1200, 100)*1e-9\n\noptions = State()\noptions.wavelength = wavelengths\noptions.optics_method = 'TMM'\noptions.light_iv = True\noptions.T = 298\noptions.light_source = LightSource(source_type=\"standard\",\n version=\"AM1.5g\", x=options.wavelength)\n\noptions.voltages = np.linspace(0, 0.8, 40)\noptions.internal_voltages = options.voltages\noptions.mpp = True\noptions.no_back_reflection = False\noptions.position = 1e-9\n\nThe Sesame PDD solver which we will be using can affect doping profiles (although you can also still set constant doping, like in the previous example, for each layer). Because we are going to pass a doping profile rather than distinct p and n-type materials, we just define one Si material which will be used for the whole junction, with electron and hole mobilities and lifetimes.\nOf course, there are many other material parameters which the PDD solver must have access to; these are stored in Solcore’s material database, but they can always be overridden by user-specified values when calling the material function.\n\nSi_pn = material(\"Si\")(electron_mobility=si(\"1e4cm2\"), hole_mobility=si(\"1e3cm2\"),\n electron_minority_lifetime=0.001, hole_minority_lifetime=0.001)\n\nNow we will define the doping profile. We will define a p-n junction, with the highly-doped region (the emitter) at the rear and an ‘erfc’ profile at the front and rear surfaces. Note that Solcore expects the doping to be provided in base Si units (per m3). Solcore expects the doping profile information in the form of a function which returns the doping at a given depth (in m) in the junction. Positive values are n-type doping, negative values are p-type.\n\nnD = si(\"1e20cm-3\")\nnA = si(\"1e19cm-3\")\nbulk_doping = si(\"5e15cm-3\") # n type bulk\n\nd_bulk = 100e-6 # Si thickness, in m\n\n# rear junction (n-type)\ndef doping_profile_func(x):\n\n L = d_bulk\n\n doping_profile = - nA * erfc(x/150e-9) # characteristic depth of 150 nm\n\n doping_profile_rear = nD * erfc((L - x)/200e-9) # characteristic depth of 200 nm\n\n return doping_profile + doping_profile_rear + bulk_doping\n\nTo check it looks reasonable, let’s plot this doping profile:\n\ndepth = np.linspace(0, d_bulk, int(1e5))\n\nplt.figure()\nplt.semilogy(depth*1e6, doping_profile_func(depth))\nplt.xlabel(r\"Depth ($\\mu$m)\")\nplt.ylabel(r\"Doping (m$^{-3}$)\")\nplt.show()\n\n\n\n\nWe will add transparent conducting oxides (TCOs) and an anti-reflection coating. Note that a real Si cell would have a more complicated layer structure (for example, for a heterojunction cell, the amorphous Si layers). In this case, these layers will be outside the junction: this means they will have optical effects but will not be included in the drift-diffusion calculation.\n\nfront_materials = [Layer(80e-9, MgF2), Layer(55e-9, TCO)]\n\nback_materials = [Layer(55e-9, TCO),\n Layer(120e-9, MgF2)]\n\nAnother important cell parameter, for both the depletion approximation and the drift-diffusion solvers, is the surface recombination. This is passed to Solcore as a surface recombination velocity (SRV). With the Si_pn material, the doping profile function, and the SRVs, we define the Junction. We set the kind of junction to sesame_PDD, so that Solcore knows to use the Sesame PDD solver.\n\nSi_junction = [Junction([Layer(d_bulk, Si_pn)],\n doping_profile=doping_profile_func, kind='sesame_PDD',\n sn=2, sp=1 # SRVs. Note these should be in m/s, not cm/s! sn refers to the n-type region (can be at the back or the front!), sp to the p-type.\n )]\n\nNow we combine the surface layers and the junction into a solar cell, with 2% shading and a silver back mirror.\n\nSi_cell = SolarCell(front_materials +\n Si_junction +\n back_materials,\n shading=0.02,\n substrate=Ag,\n )\n\nNow we ask Solcore to solve both the light IV and QE of the cell:\n\nsolar_cell_solver(Si_cell, 'qe', options)\nsolar_cell_solver(Si_cell, 'iv', options)\n\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving QE of the solar cell...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\nPlot the results:\n\nresult_stack = np.vstack([Si_cell.reflected, [layer.layer_absorption for layer in Si_cell]])\n\nfig, (ax, ax2) = plt.subplots(1, 2, figsize=(10, 3.5))\nax.stackplot(wavelengths * 1e9, 100 * result_stack[::-1], linewidth=0.5, alpha=0.5,\n labels=['MgF2 (rear)', 'TCO (rear)', 'Si bulk', 'TCO (front)', 'MgF2 (front)',\n 'Reflection'])\nax.plot(wavelengths * 1e9, 100 * Si_cell(0).eqe(wavelengths), '-k', linewidth=2,\n label='EQE')\n\nax.set_xlim(280, 1200)\nax.set_ylim(0, 100)\nax.set_xlabel(\"Wavelength (nm)\")\nax.set_ylabel(\"R / A / EQE (%)\")\nax.set_title('a) EQE and cell optics', loc='left')\nax.legend()\n# plt.show()\n\njsc = Si_cell.iv.Isc / 10\n\nax2.plot(Si_cell.iv['IV'][0], Si_cell.iv['IV'][1] / 10, '-', label='IV',\n linewidth=2, color='k')\n\nax2.set_ylim(0, 1.03 * jsc)\nax2.set_xlim(np.min(options.voltages), np.max(options.voltages))\nax2.set_xlabel('Voltage (V)')\nax2.set_ylabel('Current density (mA/cm$^2$)')\nax2.set_title('b) IV characteristics and power output', loc='left')\n\nax3 = ax2.twinx()\nax3.plot(options.voltages, Si_cell.iv['IV'][0] * Si_cell.iv['IV'][1],\n '-r', label='Power', linewidth=2)\nax3.set_ylabel('Power density (W m$^{-2}$)')\nax3.set_ylim(0, 1.03 * jsc * 10)\n\nax3.spines['right'].set_color('r')\nax3.yaxis.label.set_color('r')\nax3.tick_params(axis='y', colors='r')\n\nax2.set_axisbelow(True)\nax3.set_axisbelow(True)\n\nax2.text(0.02, 0.9 * jsc, r'$J_{SC}$', zorder=5)\nax2.text(0.02, 0.8 * jsc, r'$V_{OC}$')\nax2.text(0.02, 0.7 * jsc, 'FF')\nax2.text(0.02, 0.6 * jsc, r'$\\eta$')\nax2.text(0.02, 0.5 * jsc, r'$J_{MPP}$')\nax2.text(0.02, 0.4 * jsc, r'$V_{MPP}$')\n\nax2.text(0.1, 0.9 * jsc, r'= {:.2f} mA/cm$^2$'.format(jsc))\nax2.text(0.1, 0.8 * jsc, r'= {:.3f} V'.format(Si_cell.iv.Voc))\nax2.text(0.1, 0.7 * jsc, '= {:.2f} %'.format(Si_cell.iv.FF * 100))\nax2.text(0.1, 0.6 * jsc, r'= {:.2f} %'.format(Si_cell.iv.Eta * 100))\nax2.text(0.1, 0.5 * jsc, r'= {:.2f} mA/cm$^2$'.format( Si_cell.iv.Impp / 10))\nax2.text(0.1, 0.4 * jsc, r'= {:.3f} V'.format(Si_cell.iv.Vmpp))\nax2.grid(which='major', alpha=0.35)\n\nax3.grid(False)\nplt.tight_layout()\n\nplt.show()\n\n\n\n\nRecently, record-efficiency silicon cells have been optimized to such a level that Auger recombination (rather than Shockley-Read-Hall recombination) becomes the dominant recombination mechanism. SRH recombination is parameterized in the PDD solver through the minority lifetimes. Here, we will scan through different minority carrier lifetimes between 1e-4 s to 0.1 s and look at the effect on cell parameters. Other cell parameters are assumed to stay the same.\n\nlifetime_exp = np.linspace(-4, -1.5, 6) # exponent for the lifetimes\n\nlifetimes = 10.0**lifetime_exp # lifetimes which are linearly spaced on a log scale\n\ncell_results = np.zeros(([len(lifetimes), 4])) # make an array to store the efficiency, FF, Voc, Jsc for each lifetime\n\nfor i1, lt in enumerate(lifetimes): # loop through the lifetimes\n\n options.recalculate_absorption = True\n\n Si_pn = material(\"Si\")(electron_mobility=si(\"1e4cm2\"), hole_mobility=si(\"1e3cm2\"),\n electron_minority_lifetime=lt, hole_minority_lifetime=lt)\n\n Si_junction = [Junction([Layer(d_bulk, Si_pn)],\n doping_profile=doping_profile_func, kind='sesame_PDD',\n sn=2, sp=1)]\n\n Si_cell = SolarCell(front_materials +\n Si_junction +\n back_materials,\n shading=0.02,\n substrate=Ag,\n )\n\n solar_cell_solver(Si_cell, 'iv', options)\n\n cell_results[i1] = np.array([100*Si_cell.iv.Eta, 100*Si_cell.iv.FF, Si_cell.iv.Voc, Si_cell.iv.Isc/10])\n\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\nNow we plot the results. The points are labelled with the lifetime in ms in the left-hand plot.\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3.5))\n\nax1.plot(cell_results[:, 2], cell_results[:, 1], 'ko')\n\nfor i, lt in enumerate(lifetimes):\n ax1.annotate(str(np.round(1000*lt,2)), (cell_results[i, 2] - 0.001, cell_results[i, 1]), ha='right')\n\nax1.set_xlabel(r'V$_{oc}$ (V)')\nax1.set_ylabel('FF (%)')\nax1.set_xlim(0.69, 0.75)\n\nax2.semilogx(lifetimes, cell_results[:, 0], 'o', color='k')\nax2.set_ylabel('Efficiency (%)')\nax3 = ax2.twinx()\nax3.plot(lifetimes, cell_results[:, 3], 'o', color='r', markerfacecolor='none')\nax3.set_ylim(33, 34)\nax3.set_ylabel(r'$J_{sc}$ (mA/cm$^2$)', color='r')\n\nax2.set_xlabel(r'$\\tau$ (s)')\n\nplt.tight_layout()\nplt.show()\n\n\n\n\nAs the lifetimes become very long, the fill factor shoots up rapidly, while the open-circuit voltage saturates. This increase in FF is faster than would be expected with an ideality factor of 1 (for SRH recombination) in the diode equation, and occurs because recombination becomes increasingly dominated by Auger recombination (ideality factor = 2/3). Compare the plot on the left with Figure 1b in this paper, where much the same behaviour is observed with data from real record efficiency devices.\n\n1000*lifetimes\n\narray([ 0.1 , 0.31622777, 1. , 3.16227766, 10. ,\n 31.6227766 ])" + "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#questionschallenges", + "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#questionschallenges", + "title": "Section 7: Planar GaInP//Si tandem cell", + "section": "Questions/challenges", + "text": "Questions/challenges\n\nWhat causes the strange, sharp fringes in the simulation data of Fig. 1 in the reference paper? Can you reproduce them by modifying this code? Which version of the simulation do you think is more correct, and why?\nHow could you increase the current in one or both of the sub-cells (remember, unlike the paper, we assumed all the layers in the cell are planar!).\nOnce the light encounters an ‘incoherent’ (thick) layer, does it make sense to treat any layers below that as coherent?" }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", "section": "", - "text": "In this example, we will build two structures similar to those described in this paper. These are both triple-junction, two-terminal GaInP/GaAs/Si cells; one cell is planar, while the other has a diffraction grating deposited on the rear of the bottom Si cell to boost its current." + "text": "Tuesday 1 August 2023" }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#setting-up", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#setting-up", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", - "section": "Setting up", - "text": "Setting up\n\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer\nfrom solcore.light_source import LightSource\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.options import default_options\nfrom rayflare.structure import Interface, BulkLayer, Structure\nfrom rayflare.matrix_formalism import process_structure, calculate_RAT\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\nAs before, we load some materials from the refractiveindex.info database. The MgF\\(_2\\) and Ta\\(_2\\)O\\(_5\\) are the same as the ARC example; the SU8 is a negative photoresist which was used in the reference paper The optical constants for silver are also loaded from a reliable literature source. Note that the exact compositions of some semiconductor alloy layers (InGaP, AlInP and AlGaAs) are not given in the paper and are thus reasonable guesses.\n\n# download_db() # only needs to be run once\n# commented out because this should have already been done in a previous example. Uncomment if necessary.\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nTa2O5_pageid = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0];\nSU8_pageid = search_db(\"SU8\")[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nTa2O5 = material(str(Ta2O5_pageid), nk_db=True)();\nSU8 = material(str(SU8_pageid), nk_db=True)();\nAg = material(str(Ag_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")(In=0.5)\nAlGaAs = material(\"AlGaAs\")(Al=0.8)\nGaAs = material(\"GaAs\")()\nSi = material(\"Si\")\n\nAir = material(\"Air\")()\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()" + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#trivich-flinn-efficiency-limit", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#trivich-flinn-efficiency-limit", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "section": "Trivich-Flinn Efficiency limit", + "text": "Trivich-Flinn Efficiency limit\nIn 1955 Trivich & Flinn published a model for limiting efficiency. The limit it produces is too high, but it represents a good place to start with a computer model.\nTrivich D, Flinn PA. Maximum efficiency of solar energy conversion by quantum processes. In Solar Energy Research, Daniels F, Duffie J (eds). Thames and Hudson: London, 1955.\nTrivich & Flinn assumed that the ideal solar cell would absorb all photons with energy above the band-gap energy \\(E_g\\) and that the maximum voltage that could ever be attained in a solar cell is the band-gap energy. The latter assumption is incorrect unless the solar cell is operating at absolute zero temperature.\nTo develop a model for the Trivich & Flinn efficiency limit the first step is to calculate what the limit to the photocurrent is in a solar cell." }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#defining-the-cell-layers", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#defining-the-cell-layers", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", - "section": "Defining the cell layers", - "text": "Defining the cell layers\nNow we define the layers for the III-V top junctions, and the Si wafer, grouping them together in a logical way. In this example, we will only do optical simulations, so we will not set e.g. diffusion lengths or doping levels.\n\nARC = [Layer(110e-9, MgF2), Layer(65e-9, Ta2O5)]\n\nGaInP_junction = [Layer(17e-9, window), Layer(400e-9, GaInP), Layer(100e-9, AlGaAs)]\n\ntunnel_1 = [Layer(80e-9, AlGaAs), Layer(20e-9, GaInP)]\n\nGaAs_junction = [Layer(17e-9, GaInP), Layer(1050e-9, GaAs), Layer(70e-9, AlGaAs)]\n\ntunnel_2 = [Layer(50e-9, AlGaAs), Layer(125e-9, GaAs)]\n\nSi_junction = [Layer(280e-6, Si(Nd=si(\"2e18cm-3\"), hole_diffusion_length=2e-6), role=\"emitter\")]\n\ncoh_layers = len(ARC) + len(GaInP_junction) + len(tunnel_1) + len(GaAs_junction) + len(tunnel_2)\n\nAs for Example 7, to get physically reasonable results we must treat the very thick layers in the structure incoherently. The coh_layers variable sums up how many thin layers (which must be treated coherently) must be included in the coherency_list options." + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#limits-to-the-short-circuit-current", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#limits-to-the-short-circuit-current", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "section": "Limits to the short-circuit current", + "text": "Limits to the short-circuit current\n\nSolar Spectrum\nThe solar spectrum defines the ultimate current that a solar cell can produce. First we will plot the AM1.5G solar spectrum \\(b(\\lambda)\\) as a spectral irradiance, meaning that the y-axis has units of \\(W.m^{-2}.nm^{-1}\\)\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom solcore.light_source import LightSource\nimport seaborn as sns\n\n# Setup the AM1.5G solar spectrum\nwl = np.linspace(300, 4000, 4000) * 1e-9 # wl contains the x-coordinate in wavelength\nam15g = LightSource(source_type='standard', x=wl*1e9, version='AM1.5g',\n output_units=\"power_density_per_nm\")\n\nplt.figure()\nplt.title('Spectral Irradiance')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\n<matplotlib.legend.Legend at 0x175783150>\n\n\n\n\n\nLet us now integrate the solar spectrum to provide the total irradiance in units of [\\(W.m^{-2}\\)]. The code below performs the following operation \\(b=\\int^{\\infty}_{0} b(\\lambda) d\\lambda\\)\n\n# Since .spectrum function returns a tuple (x,y) but np.trapz requires data in format (y,x) these are extracted into separate 1D np arrays.\nyval = am15g.spectrum()[1]\nxval = am15g.spectrum()[0]\nintegrated_value = np.trapz(yval,xval) # Perform integration using trapezium rule\nb = integrated_value # Save the integrated power density for the sun for later.\nprint('b = ', integrated_value)\n\nb = 1000.3974821197136\n\n\nLet’s take the opportunity to learn how to format numbers nicely in Python. Here we use the command “%.0f” % to display the value to zero decimal places.\n\nprint('b = ',\"%.0f\" % integrated_value,\"W.m-2\")\n\nb = 1000 W.m-2\n\n\nSolcore performs this integration for us internally. Let’s try the same exercise but for the extraterrestrial solar spectrum, AM0\n\nam0 = LightSource(source_type='standard', x=wl*1e9, version='AM0')\nprint(\"AM0 integrates to\", \"%.0f\" % am0.power_density, \"W.m-2\")\n\nAM0 integrates to 1348 W.m-2\n\n\n\n\nSpectral Photon Flux\nTo calculate a short-circuit current it is convenient to change the units. Two changes are necessary : 1. Since we specify band-gap energies in electron volts (eV) we need to transform the x-axis from nm to eV 2. Photocurrent is proportional to the incident photon flux (number of photons per second) not the irradiance (watts) so we need to convert the y-axis from energy to photon number.\nNote: The conversion is performed internally within the software but be aware that because the transformation from wavelength is non-linear, changing the x-axis from nm to eV also changes the y-values of the data. This is known as a Jacobian transformation and discussed in more detail in an article “Getting the basics right: Jacobian Conversion of Wavelength and Energy Scales for Quantatitive Analysis of Emission Spectra”, Journal of Physical Chemistry, 4(19) 3316 (2013)\n\nev = np.linspace(0.02,4,4000)\nflux = LightSource(source_type='standard', version='AM1.5g', x=ev, output_units='photon_flux_per_ev')\n\nplt.figure()\nplt.title('Spectral Photon Flux')\nplt.plot(*flux.spectrum(), label='AM1.5G')\nplt.xlim(0.2, 4)\nplt.xlabel('Photon Energy (eV)')\nplt.ylabel('Photon flux N ($ph.s^{-1}m^{-2}eV^{-1}$)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x177da5050>\n\n\n\n\n\n\n\nCalculating the short-circuit current\nIntegrating the photon flux can provide an upper limit to the short-circuit current [A.m-2]. We can integrate the spectrum over the entire spectral range using \\(J_{sc}=q\\int_{0}^{\\infty}N(E)dE\\)\n\nq = 1.60217662E-19\nyval = flux.spectrum()[1]\nxval = flux.spectrum()[0]\nyint = q*np.trapz(yval,xval) # Perform integration using trapezium rule\n\nprint(\"%.0f\" % yint)\n\n690\n\n\nA more useful calculation is to calculate the current that a solar cell would produce with a particular band-gap energy. To do this requires a bit more coding, since we now wish to integrate between limits: \\(J_{sc}=q\\int_{Eg}^{\\infty}N(E)dE\\)\nLet’s do this for a band-gap of 1.42 eV:\n\nq = 1.60217662E-19\neg = 1.42\nyval = flux.spectrum()[1]\nxval = flux.spectrum()[0]\n\nyval[xval < eg] = 0 # set photon flux to zero for photon energies below the band-gap\n\nyint = q*np.trapz(yval,xval) # Perform integration using trapezium rule\n\nprint(\"%.0f\" % yint)\n\n321\n\n\nLet’s reproduce the \\(J_{sc}\\) vs \\(E_g\\) graph that is shown on p. 87 of Martin Green’s Solar Cells book:\n\nq = 1.60217662E-19\n\ndef getJsc(eg):\n yval = flux.spectrum()[1] # Start with the solar spectrum in yval & xval\n xval = flux.spectrum()[0]\n yval[xval < eg] = 0 # set photon flux to zero for photon energies below the band-gap\n return q*np.trapz(yval,xval) # return the integrated value\n\neg = np.linspace(0.5,2.5,100)\njsc = np.vectorize(getJsc)(eg)\n\nplt.figure()\nplt.title('Limit to the short-circuit current $J_{sc}$')\nplt.plot(eg, jsc/10, label='AM1.5G') # Divide by 10 to convert from A.m^-2 to mA.cm^-2\nplt.xlim(0.5, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('$J_{sc}$ ($mA.cm^{-2}$)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x177dde090>\n\n\n\n\n\n\n\nCalculating the Trivich-Flinn Efficiency limit\nNow that the limit to \\(J_{sc}\\) is known, we can estimate the power of delivered by the solar cell by evaluating \\(\\frac{Eg J_{sc}}{b}\\)\n\nplt.figure()\nplt.title('Trivich-Flinn Single Junction Efficiency Limit')\nplt.plot(eg, 100*eg*jsc/b,label='AM1.5G') # Divide by 10 to convert from A.m^-2 to mA.cm^-2\nplt.xlim(0.5, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('Efficiency (%)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x177edb150>" }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#planar-cell", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#planar-cell", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", - "section": "Planar cell", - "text": "Planar cell\nNow we define the planar cell, and options for the solver:\n\ncell_planar = tmm_structure(\n ARC + GaInP_junction + tunnel_1 + GaAs_junction + tunnel_2 + Si_junction,\n incidence=Air, transmission=Ag,\n)\n\nn_layers = cell_planar.layer_stack.num_layers\n\ncoherency_list = [\"c\"]*coh_layers + [\"i\"]*(n_layers-coh_layers)\n\noptions = default_options()\n\nwl = np.arange(300, 1201, 10) * 1e-9\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl,\n output_units=\"photon_flux_per_m\")\n\noptions.wavelength = wl\noptions.coherency_list = coherency_list\noptions.coherent = False\n\nRun the TMM calculation for the planar cell, and then extract the relevant layer absorptions. These are used to calculate limiting currents (100% internal quantum efficiency), which are displayed on the plot with the absorption in each layer.\n\ntmm_result = cell_planar.calculate(options=options)\n\nGaInP_A = tmm_result['A_per_layer'][:,3]\nGaAs_A = tmm_result['A_per_layer'][:,8]\nSi_A = tmm_result['A_per_layer'][:,coh_layers]\n\nJmax_GaInP = q*np.trapz(GaInP_A*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs = q*np.trapz(GaAs_A*AM15G.spectrum()[1], x=wl)/10\nJmax_Si = q*np.trapz(Si_A*AM15G.spectrum()[1], x=wl)/10\n\nR_spacer_ARC = tmm_result['R']\n\nplt.figure(figsize=(6,4))\nplt.plot(wl * 1e9, GaInP_A, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_A, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_A, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, 1 - R_spacer_ARC, '-y', label=\"1 - R\")\n\nplt.text(450, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(860, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si))\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance\")\nplt.tight_layout()\nplt.legend(loc='upper right')\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.show()\n\nWARNING: The option 'wavelengths' (plural) will be deprecated in the next version. Please use 'wavelength' (singular) instead. Currently, wavelengths (plural) will override wavelength (singular) if both are specified.\n\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ag/Jiang.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ag/Jiang.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded." + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#the-shockley-queisser-efficiency-limit", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#the-shockley-queisser-efficiency-limit", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "section": "The Shockley-Queisser Efficiency limit", + "text": "The Shockley-Queisser Efficiency limit\nShockley & Queisser refined the Trivich-Flinn limit by linking the voltage a solar cell can deliver to the Fermi level separation in the conduction and valance bands, not the band-gap energy.\nTo do this, a model is required for the recombination processes between the conduction and valance bands. The most fundamental (and inescapable) recombination mechanism is the radiative process. In section 3 we will derive a limit to Shockley’s diode equation \\(J=J_0 e^{\\frac{V}{kT}}\\) for the radiative limit, that being a diode where all current flows are linked to an optical process, either absorption or recombination.\nIn the radiative limit and an abrupt band-edge at band-gap energy \\(E_g\\) it can be shown that \\(J_0\\) is approximated by \\(J_0=q \\frac{2 \\pi}{c^2 h^3} kT \\left(E_g^2+2 E_g k T+2 k^2 T^2\\right) e^{\\frac{-E_g}{k T}}\\)\nWe can now plot a chart of \\(J_0\\) as a function of band-gap energy using this expression:\n\n# Define some physical constants:\nq = 1.60217662E-19 # electronic charge [C]\nk = 1.38064852E-23/q # Boltzmann constant [eV/K]\nh = 6.62607004E-34/q # Planck constant expressed in [eV.s]\nc = 299792458 # Speed of light [m.s^-1]\n\nt = 300 # Perform the calculation for a solar cell at 300K.\n\n# Define a function to return J0 implementing the expression above\ndef getJ0(eg):\n return k*t*q*(2*np.pi/(c**2*h**3))*(eg**2+2*eg*k*t+2*k**2*t**2)*np.exp(-eg/(k*t))\n\neg = np.linspace(0.5,2.5,100)\nj0 = np.vectorize(getJ0)(eg)\n\nplt.figure()\nplt.title('The radiative limit to $J_0$ plotted as a function of band-gap energy Eg')\nplt.plot(eg,j0,label='J0') # Divide by 10 to convert from A.m^-2 to mA.cm^-2\nplt.xlim(0.2, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('$J_{0}$ ($A.m^{-2}$)')\nplt.yscale(\"log\")\nplt.legend()\n\n<matplotlib.legend.Legend at 0x177f1ccd0>\n\n\n\n\n\nLet’s obtain J0 for GaAs and InGaP, two common III-V materials that are used in tandem solar cells: evaluate getJ0() for Eg=1.42 and Eg=1.88\n\ngetJ0(1.42)\n\n1.195457897843886e-17\n\n\n\ngetJ0(1.88)\n\n3.888154629395649e-25" }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#cell-with-rear-grating", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#cell-with-rear-grating", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", - "section": "Cell with rear grating", - "text": "Cell with rear grating\nNow, for the cell with a grating on the rear, we have a multi-scale problem where we must combine the calculation of absorption in a very thick (compared to the wavelengths of light) layer of Si with the effect of a wavelength-scale (1000 nm pitch) diffraction grating. For this, we will use the Angular Redistribution Matrix Method (ARMM) which was also used in Example 8.\nThe front surface of the cell (i.e. all the layers on top of Si) are planar, and can be treated using TMM. The rear surface of the cell, which has a crossed grating consisting of silver and SU8, must be treated with RCWA to account for diffraction. The thick Si layer will be the bulk coupling layer between these two interfaces.\nFirst, we set up the rear grating surface; we must define its lattice vectors, and place the Ag rectangle in the unit cell of the grating. More details on how unit cells of different shapes can be defined for the RCWA solver can be found here.\n\nx = 1000\n\nd_vectors = ((x, 0), (0, x))\narea_fill_factor = 0.4\nhw = np.sqrt(area_fill_factor) * 500\n\nback_materials = [\n Layer(width=si(\"250nm\"), material=SU8,\n geometry=[{\"type\": \"rectangle\", \"mat\": Ag, \"center\": (x / 2, x / 2),\n \"halfwidths\": (hw, hw), \"angle\": 0}])]\n\nNow, we define the Si bulk layer, and the III-V layers which go in the front interface. Finally, we put everything together into the ARMM Structure, also giving the incidence and transmission materials.\n\nbulk_Si = BulkLayer(280e-6, Si(), name=\"Si_bulk\")\n\nIII_V_layers = ARC + GaInP_junction + tunnel_1 + GaAs_junction + tunnel_2\n\nfront_surf_planar = Interface(\"TMM\", layers=III_V_layers, name=\"III_V_front\",\n coherent=True)\n\nback_surf_grating = Interface(\"RCWA\", layers=back_materials, name=\"crossed_grating_back\",\n d_vectors=d_vectors, rcwa_orders=60)\n\ncell_grating = Structure([front_surf_planar, bulk_Si, back_surf_grating],\n incidence=Air, transmission=Ag)\n\nBecause RCWA calculations are very slow compared to TMM, it makes sense to only carry out the RCWA calculation at wavelengths where the grating has any effect. Depending on the wavelength, all the incident light may be absorbed in the III-V layers or in its first pass through the Si, so it never reaches the grating. We check this by seeing which wavelengths have even a small amount of transmission into the silver back mirror, and only doing the new calculation at these wavelengths. At shorter wavelengths, the results previously calculated using TMM can be used.\n\nwl_rcwa = wl[tmm_result['T'] > 1e-4] # check where transmission fraction is bigger\n# than 1E-4\n\noptions.wavelength = wl_rcwa\noptions.project_name = \"III_V_Si_cell\"\noptions.n_theta_bins = 30\noptions.c_azimuth = 0.25\noptions.RCWA_method = \"inkstone\"\n\nprocess_structure(cell_grating, options, save_location='current')\nresults_armm = calculate_RAT(cell_grating, options, save_location='current')\nRAT = results_armm[0]" + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-iv-curve", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-iv-curve", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "section": "Calculating the IV curve", + "text": "Calculating the IV curve\nWe are now able to calculate the limiting efficiency for a solar cell using the simple Shockley diode expression \\(J(V)=J_{s c}-J_0\\left(e^{\\frac{q V}{k T}}-1\\right)\\). Let’s plot the IV curve for a band-gap of 1.42eV\n\ndef getJ(v,eg):\n return getJsc(eg) - getJ0(eg)*(np.exp(v/(k*t)) - 1)\n\neg = 1.42\nv = np.linspace(0,1.2,100)\nj = np.vectorize(getJ)(v,eg)\n\nplt.figure(3)\nplt.title('Limiting Efficiency IV curve for Eg=1.42eV (GaAs)')\nplt.plot(v,j/10) #convert to mA.cm^-2\nplt.xlim(0.2, 1.2)\nplt.ylim(0,35)\nplt.xlabel('Voltage (V)')\nplt.ylabel('Current ($mA.cm^{-2}$)')\n\nText(0, 0.5, 'Current ($mA.cm^{-2}$)')" }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#comparison-of-planar-and-grating-cell", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#comparison-of-planar-and-grating-cell", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", - "section": "Comparison of planar and grating cell", - "text": "Comparison of planar and grating cell\nWe extract the relevant absorption per layer, and use it to calculate the new limiting current for the Si junction. The plot compares the absorption in the Si with and without the grating.\n\nSi_A_total = np.zeros(len(wl))\nSi_A_total[tmm_result['T'] > 1e-4] = RAT['A_bulk'][0]\nSi_A_total[tmm_result['T'] <= 1e-4] = Si_A[tmm_result['T'] <= 1e-4]\n\nJmax_Si_grating = q*np.trapz(Si_A_total*AM15G.spectrum()[1], x=wl)/10\n\nplt.figure(figsize=(6,3))\nplt.plot(wl * 1e9, GaInP_A, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_A, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_A, \"--r\", label=\"Si (planar)\")\nplt.plot(wl * 1e9, Si_A_total, '-r', label=\"Si (with grating)\")\nplt.text(420, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.50, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(860, 0.45, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si_grating))\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance\")\n\nplt.tight_layout()\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-electrical-power-curve-and-finding-the-maximum-power", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-electrical-power-curve-and-finding-the-maximum-power", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "section": "Calculating the electrical power curve and finding the maximum power", + "text": "Calculating the electrical power curve and finding the maximum power\n\nplt.figure()\nplt.title('Limiting Efficiency power curve for $E_g$ = 1.42 eV (GaAs)')\nplt.plot(v,v*j)\nplt.xlim(0.2, 1.2)\nplt.ylim(0,350)\nplt.xlabel('Voltage (V)')\nplt.ylabel('Power ($W.m^{-2}$)')\n\nText(0, 0.5, 'Power ($W.m^{-2}$)')\n\n\n\n\n\nDefine a function to find the maximum power point of the curve above:\n\ndef getPmax(eg):\n v = np.linspace(0,eg-0.1,500)\n p = v*np.vectorize(getJ)(v,eg)\n return (np.amax(p)) # The amax command returns the maximum value in the array p\n\nTest it out on the curve above\n\ngetPmax(1.42)\n\n331.6412760959975\n\n\n\nPlotting the Shockley-Queisser efficiency limit graph:\nFinally we can calculate the Shockley-Queisser efficiency limit for AM1.5G\n\neg = np.linspace(0.5,2.5,100)\np = np.vectorize(getPmax)(eg)\n\nplt.figure(3)\nplt.title('Limiting Shockley-Queisser Efficiency Curve')\nplt.plot(eg, p/b, label='AM1.5G') # Remember b is the integrated power of the\n# incident sunlight\nplt.xlim(0.2, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('Efficiency (%)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x298214750>" }, { - "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#questions", - "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#questions", - "title": "Section 9a: Planar III-V on planar Si, with rear grating", - "section": "Questions", - "text": "Questions\n\nWhy does the grating only affect the absorption in Si at long wavelengths?\nWhat is the reason for using the angular redistribution matrix method, rather than defining an RCWA-only structure (rcwa_structure)?" + "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#an-easier-way-using-solcore", + "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#an-easier-way-using-solcore", + "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "section": "An easier way – using Solcore!", + "text": "An easier way – using Solcore!\nThe Solcore library has all the functions we have written above built into it. We worked through this example step by step, but we can calculate the same result using the code below. First let’s calculate an IV curve for a Shockley-Queisser solar cell with a band-gap of 1.42eV:\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom solcore.light_source import LightSource\nfrom solcore.solar_cell import SolarCell\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom solcore.structure import Junction\n\n# Load the AM1.5G solar spectrum\nwl = np.linspace(300, 4000, 4000) * 1e-9 # wl contains the x-coordinate in wavelength\nam15g = LightSource(source_type='standard', x=wl, version='AM1.5g')\n\neg = 1.42\nV = np.linspace(0, 1.3, 500)\ndb_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1) #\n# detailed-balance junction (Shockley-Queisser limit)\n\nmy_solar_cell = SolarCell([db_junction], T=300, R_series=0)\n\nsolar_cell_solver(my_solar_cell, 'iv',\n user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True,\n 'internal_voltages': np.linspace(0, 1.3, 400), 'wavelength': wl,\n 'mpp': True, 'light_source': am15g})\n\nplt.figure()\nplt.title('Limiting Efficiency IV curve for $E_g$ = 1.42eV')\nplt.plot(V, my_solar_cell.iv.IV[1], 'k')\nplt.ylim(0, 350)\nplt.xlim(0, 1.2)\nplt.text(0.1,300,f'Jsc: {my_solar_cell.iv.Isc:.2f}')\nplt.text(0.1,280,f'Voc: {my_solar_cell.iv.Voc:.2f}')\nplt.text(0.1,260,f'Pmax: {my_solar_cell.iv.Pmpp:.2f}')\nplt.xlabel('Voltage (V)')\nplt.ylabel('Current (A/m$^2$)')\nplt.show()\n\n/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/registries.py:73: UserWarning: Optics solver 'RCWA' will not be available. An installation of S4 has not been found.\n warn(\n\n\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\n\n\n\nThe Shockley-Queisser efficiency calculation can now be performed over a range of band-gap energies. To do this, we make a function that calculates the maximum power Pmax as a function of band-gap energy.\n\n%%capture\n# A command that prevents the screen from filling up with unnecessary working\n\n# Function that returns the maximum power for a Shockley-Queisser solar cell with band-gap Eg\ndef getPmax(eg):\n V = np.linspace(0, eg-0.1, 500)\n db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)\n my_solar_cell = SolarCell([db_junction], T=300, R_series=0)\n\n solar_cell_solver(my_solar_cell, 'iv',\n user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,\n 'mpp': True, 'light_source': am15g})\n return(my_solar_cell.iv.Pmpp)\n\n# Define the range of band-gaps to perform the calculation over\neg=np.linspace(0.5,2.5,100)\n# Perform the claculation for all values of eg\np=np.vectorize(getPmax)(eg)\n\nNow let’s plot the result:\n\nplt.figure() # Plot the results calculated above:\nplt.title('Shockley-Queisser Limiting Efficiency for Unconentrated Sunlight')\nplt.plot(eg, p/am15g.power_density,label='AM1.5G')\nplt.xlim(0.5, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('Efficiency (%)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x2981fe210>\n\n\n\n\n\n\nEffect of solar concentration on a Shockley-Queisser Solar Cell\nIn a Trivich-Flinn model for a solar cell, concentrated sunlight is only expected to increase the current of a solar cell, not the voltage. In that model the current would increase in proportion with the concentration so the efficiency of the solar cell would be unchanged.\nIn the Shockley-Queisser model, concentrated sunlight increased both the current and the voltage of the solar cell which, in the absence of series resistance losses, leads to an increase in the efficiency of the solar cell. Here we calculate the Shockley-Queisser efficiency at different solar concentrations under the direct solar spectrum AM1.5D:\n\n%%capture\n\n# Set up a series of AM1.5D solar spectra at different concentrations\nwl = np.linspace(300, 4000, 4000) * 1e-9 #wl contains the x-ordinate in wavelength\nam15d1x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=1)\nam15d30x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=30)\nam15d1000x = LightSource(source_type='standard', x=wl, version='AM1.5d',\n concentration=1000)\n\n#Define a function to find Pmax for a particular band-gap energy and solar spectrum\ndef getPmax(eg,spectrum):\n V = np.linspace(0, eg-0.1, 500)\n db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)\n my_solar_cell = SolarCell([db_junction], T=300, R_series=0)\n\n solar_cell_solver(my_solar_cell, 'iv',\n user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,\n 'mpp': True, 'light_source': spectrum})\n return my_solar_cell.iv.Pmpp\n\n# Evaluate the Pmax function for band-gaps spanning 0.8 to 1.6eV and concentrations 1x,30x,1000x\neg = np.linspace(0.8,1.6,100)\np1x = np.vectorize(getPmax)(eg, am15d1x)\np30x = np.vectorize(getPmax)(eg, am15d30x)\np1000x = np.vectorize(getPmax)(eg, am15d1000x)\n\n\n# Setup a figure for dual y-axes\nfig, ax = plt.subplots(1)\n\n# Plot the SQ curves\ncolors = sns.color_palette('husl', n_colors=3)\nax.plot(eg, 100*p1x/am15d1x.power_density,label='$\\eta$ @ AM1.5d 1x', color=colors[0])\nax.axvline(eg[np.argmax(p1x)], color=colors[0])\n\nax.plot(eg, 100*p30x/am15d30x.power_density,label='$\\eta$ @ AM1.5d 30x', color=colors[1])\nax.axvline(eg[np.argmax(p30x)], color=colors[1])\n\nax.plot(eg, 100*p1000x/am15d1000x.power_density,label='$\\eta$ @ AM1.5d 1000x', color=colors[2])\nax.axvline(eg[np.argmax(p1000x)], color=colors[2])\n\n# Define the second y-axis and plot the photon flux in units of eV\nax2 = ax.twinx()\nax2.plot(eg, am15d1x.spectrum(x=eg, output_units=\"photon_flux_per_ev\")[1],\n '--', color='grey', label=\"AM1.5d\")\n\nax.set_xlim(0.8, 1.6)\nax.set_xlabel('Band Gap energy (eV)')\nax.set_ylabel('Efficiency (%)')\nax2.set_ylabel(r'Photon flux (s$^{-1}$ m$^{-2}$ eV$^{-1}$)')\nax.legend()\nax2.legend()\n\n<matplotlib.legend.Legend at 0x2bf13f050>\n\n\n\n\n\nThe maximum band-gap energy moves to lower energies with increaseing solar concentration. This arises since although the current increases with increasing solar concentration, the cell voltage also increases which means the optimal effiicency is obtained at lower band-gaps. However, the drop in band-gap energy is modest owing to a strong atmospheric absorption feature at 1.1um which serves to pin the optimum bandgap around 1.12eV.\n\n\nExercise: Concentrated AM0\nTry repeating the example above but use the AM0 extraterrestial spectrum. Observe what happens to the band-gap shift with increasing concentration. How is it different to AM1.5d?" }, { "objectID": "solcore-workshop-2/notebooks/6a-TMM_introduction.html", "href": "solcore-workshop-2/notebooks/6a-TMM_introduction.html", "title": "Section 6a: Basic cell optics", "section": "", - "text": "In this script, we will build on the TMM model from example 1(a) and look at the effects of interference.\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\nfrom solcore.solar_cell import Layer\nfrom solcore.absorption_calculator import calculate_rat, OptiStack\nimport seaborn as sns" + "text": "In this script, we will build on the TMM model from example 1(a) and look at the effects of interference.\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\nfrom solcore.solar_cell import Layer\nfrom solcore.absorption_calculator import calculate_rat, OptiStack\nimport seaborn as sns\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found." }, { "objectID": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#setting-up", @@ -473,21 +459,21 @@ "href": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#effect-of-si-thickness", "title": "Section 6a: Basic cell optics", "section": "Effect of Si thickness", - "text": "Effect of Si thickness\nNow we are going to loop through the different Si thicknesses generated above, and create a simple solar cell-like structure. Because we will only do an optical calculation, we don’t need to define a junction and can just make a simple stack of layers.\nWe then calculate reflection, absorption and transmission (RAT) for two different situations: 1. a fully coherent stack 2. assuming the silicon layer is incoherent. This means that light which enters the Si layer cannot interfere with itself, but light in the ARC layer can still show interference. In very thick layers (much thicker than the wavelength of light being considered) this is likely to be more physically accurate because real light does not have infinite coherence length; i.e. if you measured wavelength-dependent transmission or reflection of a Si wafer hundreds of microns thick you would not expect to see interference fringes.\nPLOT 1\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p) # silicon layer\n solar_cell = OptiStack([ARC_layer, base_layer]) # OptiStack (optical stack) to feed into calculate_rat function\n\n # Coherent calculation:\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False) # coherent calculation\n # For historical reasons, Solcore's default setting is to ignore reflection at the back of the cell (i.e. at the\n # interface between the final material in the stack and the substrate). Hence we need to tell the calculate_rat\n # function NOT to ignore this reflection (no_back_reflection=False).\n\n # Calculation assuming no interference in the silicon (\"incoherent\"):\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i']) # partially coherent: ARC is coherent, Si is not\n\n # Plot the results:\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1], label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(1) Absorption in Si with varying thickness\")\nplt.show()\n\nWe can see that the coherent calculations (solid lines) show clear interference fringes which depend on the Si thickness. The incoherent calculations do not have these fringes and seem to lie around the average of the interference fringes. For both sets of calculations, we see increasing absorption as the Si gets thicker, as expected." + "text": "Effect of Si thickness\nNow we are going to loop through the different Si thicknesses generated above, and create a simple solar cell-like structure. Because we will only do an optical calculation, we don’t need to define a junction and can just make a simple stack of layers.\nWe then calculate reflection, absorption and transmission (RAT) for two different situations: 1. a fully coherent stack 2. assuming the silicon layer is incoherent. This means that light which enters the Si layer cannot interfere with itself, but light in the ARC layer can still show interference. In very thick layers (much thicker than the wavelength of light being considered) this is likely to be more physically accurate because real light does not have infinite coherence length; i.e. if you measured wavelength-dependent transmission or reflection of a Si wafer hundreds of microns thick you would not expect to see interference fringes.\nPLOT 1\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p) # silicon layer\n solar_cell = OptiStack([ARC_layer, base_layer]) # OptiStack (optical stack) to feed into calculate_rat function\n\n # Coherent calculation:\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False) # coherent calculation\n # For historical reasons, Solcore's default setting is to ignore reflection at the back of the cell (i.e. at the\n # interface between the final material in the stack and the substrate). Hence we need to tell the calculate_rat\n # function NOT to ignore this reflection (no_back_reflection=False).\n\n # Calculation assuming no interference in the silicon (\"incoherent\"):\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i']) # partially coherent: ARC is coherent, Si is not\n\n # Plot the results:\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1], label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(1) Absorption in Si with varying thickness\")\nplt.show()\n\n\n\n\nWe can see that the coherent calculations (solid lines) show clear interference fringes which depend on the Si thickness. The incoherent calculations do not have these fringes and seem to lie around the average of the interference fringes. For both sets of calculations, we see increasing absorption as the Si gets thicker, as expected." }, { "objectID": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#effect-of-reflective-substrate", "href": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#effect-of-reflective-substrate", "title": "Section 6a: Basic cell optics", "section": "Effect of reflective substrate", - "text": "Effect of reflective substrate\nNow we repeat the calculation, but with an Ag substrate under the Si. Previously, we did not specify the substrate and so it was assumed by Solcore to be air (\\(n\\) = 1, \\(\\kappa\\) = 0).\nPLOT 2\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p)\n\n # As before, but now we specify the substrate to be silver:\n solar_cell = OptiStack([ARC_layer, base_layer], substrate=Ag)\n\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False)\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1],\n label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(2) Absorption in Si with varying thickness (Ag substrate)\")\nplt.show()\n\nWe see that the interference fringes get more prominent in the coherent calculation, due to higher reflection at the rear Si/Ag surface compared to Ag/Air. We also see a slightly boosted absorption at long wavelengths at all thicknesses, again due to improved reflection at the rear surface" + "text": "Effect of reflective substrate\nNow we repeat the calculation, but with an Ag substrate under the Si. Previously, we did not specify the substrate and so it was assumed by Solcore to be air (\\(n\\) = 1, \\(\\kappa\\) = 0).\nPLOT 2\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p)\n\n # As before, but now we specify the substrate to be silver:\n solar_cell = OptiStack([ARC_layer, base_layer], substrate=Ag)\n\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False)\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1],\n label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(2) Absorption in Si with varying thickness (Ag substrate)\")\nplt.show()\n\n\n\n\nWe see that the interference fringes get more prominent in the coherent calculation, due to higher reflection at the rear Si/Ag surface compared to Ag/Air. We also see a slightly boosted absorption at long wavelengths at all thicknesses, again due to improved reflection at the rear surface" }, { "objectID": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#effect-of-polarization-and-angle-of-incidence", "href": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#effect-of-polarization-and-angle-of-incidence", "title": "Section 6a: Basic cell optics", "section": "Effect of polarization and angle of incidence", - "text": "Effect of polarization and angle of incidence\nFinally, we look at the effect of incidence angle and polarization of the light hitting the cell.\nPLOT 3\n\nangles = [0, 30, 60, 70, 80, 89] # angles in degrees\n\nARC_layer = Layer(width=si('75nm'), material=SiN)\nbase_layer = Layer(width=si(\"100um\"), material=Si_p)\n\ncolors = sns.cubehelix_palette(n_colors=len(angles))\n\nplt.figure()\n\nfor i1, theta in enumerate(angles):\n\n solar_cell = OptiStack([ARC_layer, base_layer])\n\n RAT_s = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='s',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n RAT_p = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='p',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n\n plt.plot(wavelengths*1e9, RAT_s[\"A\"], color=colors[i1], label=str(round(theta)))\n plt.plot(wavelengths*1e9, RAT_p[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"$\\theta (^\\circ)$\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(3) Absorption in Si with varying angle of incidence\")\nplt.show()\n\nFor normal incidence (\\(\\theta = 0^\\circ\\)), s (solid lines) and p (dashed lines) polarization are equivalent. As the incidence angle increases, in general absorption is higher for p-polarized light (due to lower reflection). Usually, sunlight is modelled as unpolarized light, which computationally is usually done by averaging the results for s and p-polarized light." + "text": "Effect of polarization and angle of incidence\nFinally, we look at the effect of incidence angle and polarization of the light hitting the cell.\nPLOT 3\n\nangles = [0, 30, 60, 70, 80, 89] # angles in degrees\n\nARC_layer = Layer(width=si('75nm'), material=SiN)\nbase_layer = Layer(width=si(\"100um\"), material=Si_p)\n\ncolors = sns.cubehelix_palette(n_colors=len(angles))\n\nplt.figure()\n\nfor i1, theta in enumerate(angles):\n\n solar_cell = OptiStack([ARC_layer, base_layer])\n\n RAT_s = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='s',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n RAT_p = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='p',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n\n plt.plot(wavelengths*1e9, RAT_s[\"A\"], color=colors[i1], label=str(round(theta)))\n plt.plot(wavelengths*1e9, RAT_p[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"$\\theta (^\\circ)$\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(3) Absorption in Si with varying angle of incidence\")\nplt.show()\n\n\n\n\nFor normal incidence (\\(\\theta = 0^\\circ\\)), s (solid lines) and p (dashed lines) polarization are equivalent. As the incidence angle increases, in general absorption is higher for p-polarized light (due to lower reflection). Usually, sunlight is modelled as unpolarized light, which computationally is usually done by averaging the results for s and p-polarized light." }, { "objectID": "solcore-workshop-2/notebooks/6a-TMM_introduction.html#conclusions", @@ -966,312 +952,298 @@ "text": "Times & locations\nPre-workshop help sessions (OPTIONAL):\n\nMonday 20 November, 3-4 pm\nTuesday 21 November, 3-4 pm\n\nIn TETB meeting room Gnd 22 (Ground Floor, across from the main entrance). If the installation described above works for you, no need to attend either of these!\nWorkshop:\nWednesday - Friday, 22 - 24 November\n1 - 5 pm. Click here for full schedule (subject to change).\nLocation: F10 June Griffith M10 (K-F10-M10), UNSW Sydney\n(June Griffith building is next to the Law faculty, diagonally across from Tyree on the University Mall. When you enter the building from the University Mall (coming from Tyree), you need to go up the set of stairs by the main entrance, go through the fire doors, and turn left. If you are coming from the other side, the room is directly on your right when you enter)." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", "section": "", - "text": "The structure in this example is based on that of the previous example (9a), but with the planar bottom Si cell replaced by a Si cell with a pyramidal texture, bonded to the III-V top cells with a low-index epoxy/glass layer.\nWe could use the angular redistribution matrix method as in the previous example - however, because in this example we only need to use TMM and ray-tracing (RT), we can use the ray-tracing method with integrated RT directly (this is generally faster, because we do not need to calculate the behaviour of the surfaces for every angle of incidence)." + "text": "In this example, we will build two structures similar to those described in this paper. These are both triple-junction, two-terminal GaInP/GaAs/Si cells; one cell is planar, while the other has a diffraction grating deposited on the rear of the bottom Si cell to boost its current." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#setting-up", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#setting-up", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#setting-up", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#setting-up", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", "section": "Setting up", - "text": "Setting up\nWe load relevant packages and define materials, the same as in the previous example.\n\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer\nfrom solcore.light_source import LightSource\nfrom rayflare.ray_tracing import rt_structure\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.textures import planar_surface, regular_pyramids\nfrom rayflare.options import default_options\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# download_db()\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nTa2O5_pageid = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0];\nSU8_pageid = search_db(\"SU8\")[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nepoxy = material(\"BK7\")()\n\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nTa2O5 = material(str(Ta2O5_pageid), nk_db=True)();\nSU8 = material(str(SU8_pageid), nk_db=True)();\nAg = material(str(Ag_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")\nAlGaAs = material(\"AlGaAs\")\n\nAir = material(\"Air\")()\n\nGaAs = material(\"GaAs\")\n\nSi = material(\"Si\")\n\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()\n\nWe define the layers we will need, as before. We specify the thickness of the silicon (280 \\(\\mu\\)m) and epoxy (1 mm) at the top:\n\nd_Si = 280e-6 # thickness of Si wafer\nd_epoxy = 1e-3 # thickness of epoxy\n\nARC = [\n Layer(110e-9, MgF2),\n Layer(65e-9, Ta2O5),\n]\n\nGaInP_junction = [\n Layer(17e-9, window),\n Layer(400e-9, GaInP(In=0.50)),\n Layer(100e-9, AlGaAs(Al=0.8))]\n\n# 100 nm TJ\ntunnel_1 = [\n Layer(80e-9, AlGaAs(Al=0.8)),\n Layer(20e-9, GaInP(In=0.5)),\n]\n\nGaAs_junction = [\n Layer(17e-9, GaInP(In=0.5), role=\"window\"),\n Layer(1050e-9, GaAs()),\n Layer(70e-9, AlGaAs(Al=0.8), role=\"bsf\")]\n\nspacer_ARC = [\n Layer(80e-9, Ta2O5),\n]" + "text": "Setting up\n\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer\nfrom solcore.light_source import LightSource\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.options import default_options\nfrom rayflare.structure import Interface, BulkLayer, Structure\nfrom rayflare.matrix_formalism import process_structure, calculate_RAT\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\nAs before, we load some materials from the refractiveindex.info database. The MgF\\(_2\\) and Ta\\(_2\\)O\\(_5\\) are the same as the ARC example; the SU8 is a negative photoresist which was used in the reference paper The optical constants for silver are also loaded from a reliable literature source. Note that the exact compositions of some semiconductor alloy layers (InGaP, AlInP and AlGaAs) are not given in the paper and are thus reasonable guesses.\n\n# download_db(confirm=True) # only needs to be run once\n# commented out because this should have already been done in a previous example. Uncomment if necessary.\n\n\n%%capture\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nTa2O5_pageid = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0];\nSU8_pageid = search_db(\"SU8\")[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nTa2O5 = material(str(Ta2O5_pageid), nk_db=True)();\nSU8 = material(str(SU8_pageid), nk_db=True)();\nAg = material(str(Ag_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")(In=0.5)\nAlGaAs = material(\"AlGaAs\")(Al=0.8)\nGaAs = material(\"GaAs\")()\nSi = material(\"Si\")\n\nAir = material(\"Air\")()\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()" }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-cell-layers", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-cell-layers", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#defining-the-cell-layers", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#defining-the-cell-layers", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", "section": "Defining the cell layers", - "text": "Defining the cell layers\nThere are three interfaces in the cell which will define the structure to simulate:\n\nthe III-V/epoxy interface, where the epoxy itself will be treated as a bulk layer in the simulation\nthe epoxy/Si interface, where the Si has a pyramidal texture (the Si itself is another bulk layer in the simulation).\nthe rear surface of the cell, where the Si again has a pyramidal texture (and we assume there is a silver back mirror behind the cell)\n\nThese 3 interfaces are defined here, using the pre-defined textures for a planar surface or regular pyramids:\n\nfront_layers = ARC + GaInP_junction + tunnel_1 + GaAs_junction + spacer_ARC\n\nfront_surf = planar_surface(\n interface_layers = front_layers\n)\n\nSi_front = regular_pyramids(\n elevation_angle=50,\n upright=True\n)\n\nSi_back = regular_pyramids(\n elevation_angle=50,\n upright=False\n)\n\nNow we set relevant options for the solver. We set the number of rays to trace at each wavelength (more rays will make the result less noisy, but increase computation time) and whether to calculate the absorption profile in the bulk layers (no, in this case). The randomize_surface options determines whether the ray keeps track of its positions in the unit cell while travelling between surfaces; we set this to False to mimic random pyramids.\n\noptions = default_options()\n\nwl = np.arange(300, 1201, 10) * 1e-9\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl,\n output_units=\"photon_flux_per_m\")\n\noptions.wavelength = wl\noptions.project_name = \"III_V_Si_cell\"\n\n# options for ray-tracing\noptions.randomize_surface = True\noptions.n_rays = 1000\noptions.bulk_profile = False\noptions.theta_in = 45*np.pi/180" + "text": "Defining the cell layers\nNow we define the layers for the III-V top junctions, and the Si wafer, grouping them together in a logical way. In this example, we will only do optical simulations, so we will not set e.g. diffusion lengths or doping levels.\n\nARC = [Layer(110e-9, MgF2), Layer(65e-9, Ta2O5)]\n\nGaInP_junction = [Layer(17e-9, window), Layer(400e-9, GaInP), Layer(100e-9, AlGaAs)]\n\ntunnel_1 = [Layer(80e-9, AlGaAs), Layer(20e-9, GaInP)]\n\nGaAs_junction = [Layer(17e-9, GaInP), Layer(1050e-9, GaAs), Layer(70e-9, AlGaAs)]\n\ntunnel_2 = [Layer(50e-9, AlGaAs), Layer(125e-9, GaAs)]\n\nSi_junction = [Layer(280e-6, Si(Nd=si(\"2e18cm-3\"), hole_diffusion_length=2e-6), role=\"emitter\")]\n\ncoh_layers = len(ARC) + len(GaInP_junction) + len(tunnel_1) + len(GaAs_junction) + len(tunnel_2)\n\nAs for Example 7, to get physically reasonable results we must treat the very thick layers in the structure incoherently. The coh_layers variable sums up how many thin layers (which must be treated coherently) must be included in the coherency_list options." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-structures", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-structures", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Defining the structures", - "text": "Defining the structures\nFinally, we define the ray-tracing structure we will use, using the interfaces, bulk materials, and options set above. Because we want to calculate the reflection/absorption/transmission probabilities at the front surface using TMM, we set the use_TMM argument to True. We also define a completely planar cell with the same layer thicknesses etc. to compare and evaluate the effect of the textures Si surfaces.\n\nsolar_cell = rt_structure(\n textures=[front_surf, Si_front, Si_back],\n materials=[epoxy, Si()],\n widths=[d_epoxy, d_Si],\n incidence=Air,\n transmission=Ag,\n options=options,\n use_TMM=True,\n save_location=\"current\", # lookup table save location\n overwrite=True, # whether to overwrite any previously existing results, if found\n)\n\n# options for TMM\noptions.coherent = False\noptions.coherency_list = len(front_layers)*['c'] + ['i']*2\n\nsolar_cell_planar = tmm_structure(\n layer_stack = front_layers + [Layer(d_epoxy, epoxy), Layer(d_Si, Si())],\n incidence=Air,\n transmission=Ag,\n)" + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#planar-cell", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#planar-cell", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", + "section": "Planar cell", + "text": "Planar cell\nNow we define the planar cell, and options for the solver:\n\ncell_planar = tmm_structure(\n ARC + GaInP_junction + tunnel_1 + GaAs_junction + tunnel_2 + Si_junction,\n incidence=Air, transmission=Ag,\n)\n\nn_layers = cell_planar.layer_stack.num_layers\n\ncoherency_list = [\"c\"]*coh_layers + [\"i\"]*(n_layers-coh_layers)\n\noptions = default_options()\n\nwl = np.arange(300, 1201, 10) * 1e-9\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl,\n output_units=\"photon_flux_per_m\")\n\noptions.wavelength = wl\noptions.coherency_list = coherency_list\noptions.coherent = False\n\nRun the TMM calculation for the planar cell, and then extract the relevant layer absorptions. These are used to calculate limiting currents (100% internal quantum efficiency), which are displayed on the plot with the absorption in each layer.\n\ntmm_result = cell_planar.calculate(options=options)\n\nGaInP_A = tmm_result['A_per_layer'][:,3]\nGaAs_A = tmm_result['A_per_layer'][:,8]\nSi_A = tmm_result['A_per_layer'][:,coh_layers]\n\nJmax_GaInP = q*np.trapz(GaInP_A*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs = q*np.trapz(GaAs_A*AM15G.spectrum()[1], x=wl)/10\nJmax_Si = q*np.trapz(Si_A*AM15G.spectrum()[1], x=wl)/10\n\nR_spacer_ARC = tmm_result['R']\n\nplt.figure(figsize=(6,4))\nplt.plot(wl * 1e9, GaInP_A, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_A, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_A, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, 1 - R_spacer_ARC, '-y', label=\"1 - R\")\n\nplt.text(450, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(860, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si))\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance\")\nplt.tight_layout()\nplt.legend(loc='upper right')\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.show()\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ag/Jiang.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ag/Jiang.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#calculations", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#calculations", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Calculations", - "text": "Calculations\nCalculate the R/A/T for the planar reference cell:\n\ntmm_result = solar_cell_planar.calculate(options=options)\n\nGaInP_A_tmm = tmm_result['A_per_layer'][:,3]\nGaAs_A_tmm = tmm_result['A_per_layer'][:,8]\nSi_A_tmm = tmm_result['A_per_layer'][:,len(front_layers)+1]\n\nJmax_GaInP_tmm = q*np.trapz(GaInP_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs_tmm = q*np.trapz(GaAs_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_Si_tmm = q*np.trapz(Si_A_tmm*AM15G.spectrum()[1], x=wl)/10\n\nCalculate the R/A/T for the textured cell:\n\nrt_result = solar_cell.calculate(options=options)\n\nGaInP_absorption_ARC = rt_result['A_per_interface'][0][:,3]\nGaAs_absorption_ARC = rt_result['A_per_interface'][0][:,8]\nSi_absorption_ARC = rt_result['A_per_layer'][:,1]\n\nJmax_GaInP = q*np.trapz(GaInP_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs = q*np.trapz(GaAs_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_Si = q*np.trapz(Si_absorption_ARC*AM15G.spectrum()[1], x=wl)/10" + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#cell-with-rear-grating", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#cell-with-rear-grating", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", + "section": "Cell with rear grating", + "text": "Cell with rear grating\nNow, for the cell with a grating on the rear, we have a multi-scale problem where we must combine the calculation of absorption in a very thick (compared to the wavelengths of light) layer of Si with the effect of a wavelength-scale (1000 nm pitch) diffraction grating. For this, we will use the Angular Redistribution Matrix Method (ARMM) which was also used in Example 8.\nThe front surface of the cell (i.e. all the layers on top of Si) are planar, and can be treated using TMM. The rear surface of the cell, which has a crossed grating consisting of silver and SU8, must be treated with RCWA to account for diffraction. The thick Si layer will be the bulk coupling layer between these two interfaces.\nFirst, we set up the rear grating surface; we must define its lattice vectors, and place the Ag rectangle in the unit cell of the grating. More details on how unit cells of different shapes can be defined for the RCWA solver can be found here.\n\nx = 1000\n\nd_vectors = ((x, 0), (0, x))\narea_fill_factor = 0.4\nhw = np.sqrt(area_fill_factor) * 500\n\nback_materials = [\n Layer(width=si(\"250nm\"), material=SU8,\n geometry=[{\"type\": \"rectangle\", \"mat\": Ag, \"center\": (x / 2, x / 2),\n \"halfwidths\": (hw, hw), \"angle\": 0}])]\n\nNow, we define the Si bulk layer, and the III-V layers which go in the front interface. Finally, we put everything together into the ARMM Structure, also giving the incidence and transmission materials.\n\nbulk_Si = BulkLayer(280e-6, Si(), name=\"Si_bulk\")\n\nIII_V_layers = ARC + GaInP_junction + tunnel_1 + GaAs_junction + tunnel_2\n\nfront_surf_planar = Interface(\"TMM\", layers=III_V_layers, name=\"III_V_front\",\n coherent=True)\n\nback_surf_grating = Interface(\"RCWA\", layers=back_materials, name=\"crossed_grating_back\",\n d_vectors=d_vectors, rcwa_orders=60)\n\ncell_grating = Structure([front_surf_planar, bulk_Si, back_surf_grating],\n incidence=Air, transmission=Ag)\n\nBecause RCWA calculations are very slow compared to TMM, it makes sense to only carry out the RCWA calculation at wavelengths where the grating has any effect. Depending on the wavelength, all the incident light may be absorbed in the III-V layers or in its first pass through the Si, so it never reaches the grating. We check this by seeing which wavelengths have even a small amount of transmission into the silver back mirror, and only doing the new calculation at these wavelengths. At shorter wavelengths, the results previously calculated using TMM can be used.\n\n%%capture\n\nwl_rcwa = wl[tmm_result['T'] > 1e-4] # check where transmission fraction is bigger\n# than 1E-4\n\noptions.wavelength = wl_rcwa\noptions.project_name = \"III_V_Si_cell\"\noptions.n_theta_bins = 30\noptions.c_azimuth = 0.25\noptions.RCWA_method = \"inkstone\"\n\nprocess_structure(cell_grating, options, save_location='current')\nresults_armm = calculate_RAT(cell_grating, options, save_location='current')\nRAT = results_armm[0]\n\nINFO: Making matrix for planar surface using TMM for element 0 in structure\nINFO: RCWA calculation for element 2 in structure\nINFO: RCWA calculation for wavelength = 940.0000000000001 nm\nINFO: RCWA calculation for wavelength = 990.0 nm\nINFO: RCWA calculation for wavelength = 960.0000000000001 nm\nINFO: RCWA calculation for wavelength = 1000.0000000000001 nm\nINFO: RCWA calculation for wavelength = 1010.0000000000001 nm\nINFO: RCWA calculation for wavelength = 950.0 nm\nINFO: RCWA calculation for wavelength = 1020.0 nm\nINFO: RCWA calculation for wavelength = 1030.0 nm\nINFO: RCWA calculation for wavelength = 970.0 nm\nINFO: RCWA calculation for wavelength = 980.0000000000001 nm\nINFO: RCWA calculation for wavelength = 1040.0 nm\nINFO: RCWA calculation for wavelength = 1050.0 nm\nINFO: RCWA calculation for wavelength = 1060.0 nm\nINFO: RCWA calculation for wavelength = 1070.0000000000002 nm\nINFO: RCWA calculation for wavelength = 1080.0 nm\nINFO: RCWA calculation for wavelength = 1090.0000000000002 nm\nINFO: RCWA calculation for wavelength = 1100.0 nm\nINFO: RCWA calculation for wavelength = 1110.0000000000002 nm\nINFO: RCWA calculation for wavelength = 1120.0 nm\nINFO: RCWA calculation for wavelength = 1130.0 nm\nINFO: RCWA calculation for wavelength = 1140.0 nm\nINFO: RCWA calculation for wavelength = 1150.0 nm\nINFO: RCWA calculation for wavelength = 1160.0000000000002 nm\nINFO: RCWA calculation for wavelength = 1170.0 nm\nINFO: RCWA calculation for wavelength = 1180.0000000000002 nm\nINFO: RCWA calculation for wavelength = 1190.0 nm\nINFO: RCWA calculation for wavelength = 1200.0000000000002 nm\nINFO: After iteration 1: maximum power fraction remaining = 0.6314182213481858\nINFO: After iteration 2: maximum power fraction remaining = 0.4894786243853588\nINFO: After iteration 3: maximum power fraction remaining = 0.37936409941254223\nINFO: After iteration 4: maximum power fraction remaining = 0.2923832297564508\nINFO: After iteration 5: maximum power fraction remaining = 0.22442973939149682\nINFO: After iteration 6: maximum power fraction remaining = 0.17246216581794507\nINFO: After iteration 7: maximum power fraction remaining = 0.13285217091457766\nINFO: After iteration 8: maximum power fraction remaining = 0.10234781936869419\nINFO: After iteration 9: maximum power fraction remaining = 0.07886820065679137\nINFO: After iteration 10: maximum power fraction remaining = 0.06079469712756424\nINFO: After iteration 11: maximum power fraction remaining = 0.046878313361311943\nINFO: After iteration 12: maximum power fraction remaining = 0.03615861519954806\nINFO: After iteration 13: maximum power fraction remaining = 0.027897938239687625\nINFO: After iteration 14: maximum power fraction remaining = 0.021529761625524578\nINFO: After iteration 15: maximum power fraction remaining = 0.01661882076260673\nINFO: After iteration 16: maximum power fraction remaining = 0.01283049650651593\nINFO: After iteration 17: maximum power fraction remaining = 0.009907380417311016\n\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.WARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#plotting-the-results", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#plotting-the-results", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Plotting the results", - "text": "Plotting the results\nFinally, we plot the results; the solid lines show the results for the textured Si cell (calculated using ray-tracing), the dashed lines for the planar cell (calculated using TMM). The maximum possible currents are shown in the plot, with the value in brackets for Si being for the planar cell.\n\nplt.figure(figsize=(6,3))\nplt.plot(wl * 1e9, GaInP_absorption_ARC, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_absorption_ARC, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_absorption_ARC, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, GaInP_A_tmm, \"--k\")\nplt.plot(wl * 1e9, GaAs_A_tmm, \"--b\")\nplt.plot(wl * 1e9, Si_A_tmm, \"--r\")\nplt.plot(wl * 1e9, rt_result['R'], '-', color='grey', label=\"Reflected\")\nplt.plot(wl * 1e9, tmm_result['R'], '--', color='grey')\n\nplt.text(420, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(870, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si))\nplt.text(870, 0.45, r\"({:.1f} mA/cm$^2)$\".format(Jmax_Si_tmm))\n\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.tight_layout()\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#comparison-of-planar-and-grating-cell", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#comparison-of-planar-and-grating-cell", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", + "section": "Comparison of planar and grating cell", + "text": "Comparison of planar and grating cell\nWe extract the relevant absorption per layer, and use it to calculate the new limiting current for the Si junction. The plot compares the absorption in the Si with and without the grating.\n\nSi_A_total = np.zeros(len(wl))\nSi_A_total[tmm_result['T'] > 1e-4] = RAT['A_bulk'][0]\nSi_A_total[tmm_result['T'] <= 1e-4] = Si_A[tmm_result['T'] <= 1e-4]\n\nJmax_Si_grating = q*np.trapz(Si_A_total*AM15G.spectrum()[1], x=wl)/10\n\nplt.figure(figsize=(6,3))\nplt.plot(wl * 1e9, GaInP_A, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_A, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_A, \"--r\", label=\"Si (planar)\")\nplt.plot(wl * 1e9, Si_A_total, '-r', label=\"Si (with grating)\")\nplt.text(420, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.50, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(860, 0.45, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si_grating))\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance\")\n\nplt.tight_layout()\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#questionschallenges", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#questionschallenges", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Questions/challenges", - "text": "Questions/challenges\n\nDoes it make sense to do a ray-tracing calculation for short wavelengths? For this structure, can you speed up the calculation and avoid the random noise at short wavelengths?\nHow much current is lost to parasitic absorption in e.g. tunnel junctions, window layers etc.?\nHow can we reduce reflection at the epoxy interfaces?\nIf the epoxy/glass layer is much thicker than the relevant incident wavelengths, and not absorbing, does the exact thickness matter in the simulation?\nWhat happens if only the rear surface is textured? Would a structure without the front texture have other advantages?\nWhy does the Si have lower absorption/limiting current in this structure compared to the previous example?" + "objectID": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#questions", + "href": "solcore-workshop-2/notebooks/9a-GaInP_GaAs_Si_grating.html#questions", + "title": "Section 9a: Planar III-V on planar Si, with rear grating", + "section": "Questions", + "text": "Questions\n\nWhy does the grating only affect the absorption in Si at long wavelengths?\nWhat is the reason for using the angular redistribution matrix method, rather than defining an RCWA-only structure (rcwa_structure)?" }, { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", + "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html", + "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html", + "title": "Section 5b: Planar Si solar cell using PDD", "section": "", - "text": "Tuesday 1 August 2023" + "text": "In the previous example, we looked at a silicon cell using the depletion approximation. Here, we will instead use one of Solcore’s Poisson drift-diffusion (PDD) solvers, which can handle doping profiles (not just constant doping levels). Note that Solcore actually has two PDD solvers: a built-in one which was developed in Fortran specifically for cells with quantum wells, and an interface to the Sesame package, which was written in Python and developed for silicon-based cells. Here, we will use the Sesame solver.\nThe script starts of in much the same way as the DA cell in the previous example: we import relevant external packages and Solcore features, define some of the materials we will use, and set user options for solar_cell_solver.\nfrom solcore.solar_cell import SolarCell, Junction, Layer\nfrom solcore.state import State\nfrom solcore.solar_cell_solver import solar_cell_solver\nimport numpy as np\nfrom solcore.light_source import LightSource\nfrom scipy.special import erfc\n\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\n\nAir = material(\"Air\")()\nMgF2 = material(\"MgF2\")()\nAg = material(\"Ag\")()\nTCO = material('ITO2')()\n\nwavelengths = np.linspace(280, 1200, 100)*1e-9\n\noptions = State() # initialise the options\noptions.wavelength = wavelengths\noptions.optics_method = 'TMM'\noptions.light_iv = True\noptions.T = 298\noptions.light_source = LightSource(source_type=\"standard\",\n version=\"AM1.5g\", x=options.wavelength)\n\noptions.voltages = np.linspace(0, 0.8, 40)\noptions.internal_voltages = options.voltages\noptions.mpp = True\noptions.no_back_reflection = False\noptions.position = 1e-9" }, { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#trivich-flinn-efficiency-limit", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#trivich-flinn-efficiency-limit", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", - "section": "Trivich-Flinn Efficiency limit", - "text": "Trivich-Flinn Efficiency limit\nIn 1955 Trivich & Flinn published a model for limiting efficiency. The limit it produces is too high, but it represents a good place to start with a computer model.\nTrivich D, Flinn PA. Maximum efficiency of solar energy conversion by quantum processes. In Solar Energy Research, Daniels F, Duffie J (eds). Thames and Hudson: London, 1955.\nTrivich & Flinn assumed that the ideal solar cell would absorb all photons with energy above the band-gap energy \\(E_g\\) and that the maximum voltage that could ever be attained in a solar cell is the band-gap energy. The latter assumption is incorrect unless the solar cell is operating at absolute zero temperature.\nTo develop a model for the Trivich & Flinn efficiency limit the first step is to calculate what the limit to the photocurrent is in a solar cell." - }, - { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#limits-to-the-short-circuit-current", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#limits-to-the-short-circuit-current", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", - "section": "Limits to the short-circuit current", - "text": "Limits to the short-circuit current\n\nSolar Spectrum\nThe solar spectrum defines the ultimate current that a solar cell can produce. First we will plot the AM1.5G solar spectrum \\(b(\\lambda)\\) as a spectral irradiance, meaning that the y-axis has units of \\(W.m^{-2}.nm^{-1}\\)\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom solcore.light_source import LightSource\nimport seaborn as sns\n\n# Setup the AM1.5G solar spectrum\nwl = np.linspace(300, 4000, 4000) * 1e-9 # wl contains the x-coordinate in wavelength\nam15g = LightSource(source_type='standard', x=wl*1e9, version='AM1.5g',\n output_units=\"power_density_per_nm\")\n\nplt.figure()\nplt.title('Spectral Irradiance')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\nLet us now integrate the solar spectrum to provide the total irradiance in units of [\\(W.m^{-2}\\)]. The code below performs the following operation \\(b=\\int^{\\infty}_{0} b(\\lambda) d\\lambda\\)\n\n# Since .spectrum function returns a tuple (x,y) but np.trapz requires data in format (y,x) these are extracted into separate 1D np arrays.\nyval = am15g.spectrum()[1]\nxval = am15g.spectrum()[0]\nintegrated_value = np.trapz(yval,xval) # Perform integration using trapezium rule\nb = integrated_value # Save the integrated power density for the sun for later.\nprint('b = ', integrated_value)\n\nLet’s take the opportunity to learn how to format numbers nicely in Python. Here we use the command “%.0f” % to display the value to zero decimal places.\n\nprint('b = ',\"%.0f\" % integrated_value,\"W.m-2\")\n\nSolcore performs this integration for us internally. Let’s try the same exercise but for the extraterrestrial solar spectrum, AM0\n\nam0 = LightSource(source_type='standard', x=wl*1e9, version='AM0')\nprint(\"AM0 integrates to\", \"%.0f\" % am0.power_density, \"W.m-2\")\n\n\n\nSpectral Photon Flux\nTo calculate a short-circuit current it is convenient to change the units. Two changes are necessary : 1. Since we specify band-gap energies in electron volts (eV) we need to transform the x-axis from nm to eV 2. Photocurrent is proportional to the incident photon flux (number of photons per second) not the irradiance (watts) so we need to convert the y-axis from energy to photon number.\nNote: The conversion is performed internally within the software but be aware that because the transformation from wavelength is non-linear, changing the x-axis from nm to eV also changes the y-values of the data. This is known as a Jacobian transformation and discussed in more detail in an article “Getting the basics right: Jacobian Conversion of Wavelength and Energy Scales for Quantatitive Analysis of Emission Spectra”, Journal of Physical Chemistry, 4(19) 3316 (2013)\n\nev = np.linspace(0.02,4,4000)\nflux = LightSource(source_type='standard', version='AM1.5g', x=ev, output_units='photon_flux_per_ev')\n\nplt.figure()\nplt.title('Spectral Photon Flux')\nplt.plot(*flux.spectrum(), label='AM1.5G')\nplt.xlim(0.2, 4)\nplt.xlabel('Photon Energy (eV)')\nplt.ylabel('Photon flux N ($ph.s^{-1}m^{-2}eV^{-1}$)')\nplt.legend()\n\n\n\nCalculating the short-circuit current\nIntegrating the photon flux can provide an upper limit to the short-circuit current [A.m-2]. We can integrate the spectrum over the entire spectral range using \\(J_{sc}=q\\int_{0}^{\\infty}N(E)dE\\)\n\nq = 1.60217662E-19\nyval = flux.spectrum()[1]\nxval = flux.spectrum()[0]\nyint = q*np.trapz(yval,xval) # Perform integration using trapezium rule\n\nprint(\"%.0f\" % yint)\n\nA more useful calculation is to calculate the current that a solar cell would produce with a particular band-gap energy. To do this requires a bit more coding, since we now wish to integrate between limits: \\(J_{sc}=q\\int_{Eg}^{\\infty}N(E)dE\\)\nLet’s do this for a band-gap of 1.42 eV:\n\nq = 1.60217662E-19\neg = 1.42\nyval = flux.spectrum()[1]\nxval = flux.spectrum()[0]\n\nyval[xval < eg] = 0 # set photon flux to zero for photon energies below the band-gap\n\nyint = q*np.trapz(yval,xval) # Perform integration using trapezium rule\n\nprint(\"%.0f\" % yint)\n\nLet’s reproduce the \\(J_{sc}\\) vs \\(E_g\\) graph that is shown on p. 87 of Martin Green’s Solar Cells book:\n\nq = 1.60217662E-19\n\ndef getJsc(eg):\n yval = flux.spectrum()[1] # Start with the solar spectrum in yval & xval\n xval = flux.spectrum()[0]\n yval[xval < eg] = 0 # set photon flux to zero for photon energies below the band-gap\n return q*np.trapz(yval,xval) # return the integrated value\n\neg = np.linspace(0.5,2.5,100)\njsc = np.vectorize(getJsc)(eg)\n\nplt.figure()\nplt.title('Limit to the short-circuit current $J_{sc}$')\nplt.plot(eg, jsc/10, label='AM1.5G') # Divide by 10 to convert from A.m^-2 to mA.cm^-2\nplt.xlim(0.5, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('$J_{sc}$ ($mA.cm^{-2}$)')\nplt.legend()\n\n\n\nCalculating the Trivich-Flinn Efficiency limit\nNow that the limit to \\(J_{sc}\\) is known, we can estimate the power of delivered by the solar cell by evaluating \\(\\frac{Eg J_{sc}}{b}\\)\n\nplt.figure()\nplt.title('Trivich-Flinn Single Junction Efficiency Limit')\nplt.plot(eg, 100*eg*jsc/b,label='AM1.5G') # Divide by 10 to convert from A.m^-2 to mA.cm^-2\nplt.xlim(0.5, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('Efficiency (%)')\nplt.legend()" - }, - { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#the-shockley-queisser-efficiency-limit", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#the-shockley-queisser-efficiency-limit", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", - "section": "The Shockley-Queisser Efficiency limit", - "text": "The Shockley-Queisser Efficiency limit\nShockley & Queisser refined the Trivich-Flinn limit by linking the voltage a solar cell can deliver to the Fermi level separation in the conduction and valance bands, not the band-gap energy.\nTo do this, a model is required for the recombination processes between the conduction and valance bands. The most fundamental (and inescapable) recombination mechanism is the radiative process. In section 3 we will derive a limit to Shockley’s diode equation \\(J=J_0 e^{\\frac{V}{kT}}\\) for the radiative limit, that being a diode where all current flows are linked to an optical process, either absorption or recombination.\nIn the radiative limit and an abrupt band-edge at band-gap energy \\(E_g\\) it can be shown that \\(J_0\\) is approximated by \\(J_0=q \\frac{2 \\pi}{c^2 h^3} kT \\left(E_g^2+2 E_g k T+2 k^2 T^2\\right) e^{\\frac{-E_g}{k T}}\\)\nWe can now plot a chart of \\(J_0\\) as a function of band-gap energy using this expression:\n\n# Define some physical constants:\nq = 1.60217662E-19 # electronic charge [C]\nk = 1.38064852E-23/q # Boltzmann constant [eV/K]\nh = 6.62607004E-34/q # Planck constant expressed in [eV.s]\nc = 299792458 # Speed of light [m.s^-1]\n\nt = 300 # Perform the calculation for a solar cell at 300K.\n\n# Define a function to return J0 implementing the expression above\ndef getJ0(eg):\n return k*t*q*(2*np.pi/(c**2*h**3))*(eg**2+2*eg*k*t+2*k**2*t**2)*np.exp(-eg/(k*t))\n\neg = np.linspace(0.5,2.5,100)\nj0 = np.vectorize(getJ0)(eg)\n\nplt.figure()\nplt.title('The radiative limit to $J_0$ plotted as a function of band-gap energy Eg')\nplt.plot(eg,j0,label='J0') # Divide by 10 to convert from A.m^-2 to mA.cm^-2\nplt.xlim(0.2, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('$J_{0}$ ($A.m^{-2}$)')\nplt.yscale(\"log\")\nplt.legend()\n\nLet’s obtain J0 for GaAs and InGaP, two common III-V materials that are used in tandem solar cells: evaluate getJ0() for Eg=1.42 and Eg=1.88\n\ngetJ0(1.42)\n\n\ngetJ0(1.88)" + "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#defining-materials-and-doping-profile", + "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#defining-materials-and-doping-profile", + "title": "Section 5b: Planar Si solar cell using PDD", + "section": "Defining materials and doping profile", + "text": "Defining materials and doping profile\nThe Sesame PDD solver which we will be using can accept depth-dependent doping profiles (although you can also still set constant doping, like in the previous example, for each layer). Because we are going to pass a doping profile rather than distinct p and n-type materials, we just define one Si material which will be used for the whole junction, with electron and hole mobilities and lifetimes.\nOf course, there are many other material parameters which the PDD solver must have access to, such as radiative and Auger recombination rates, electron affinity, etc.; these are stored in Solcore’s material database, but they can always be overridden by user-specified values when calling the material function.\n\nSi_pn = material(\"Si\")(electron_mobility=si(\"1e4cm2\"), hole_mobility=si(\"1e3cm2\"),\n electron_minority_lifetime=0.001, hole_minority_lifetime=0.001)\n\nNow we will define the doping profile. We will define a p-n junction, with the highly-doped region (the emitter) at the rear and an complimentary error function (‘erfc’) profile at the front and rear surfaces. Note that Solcore expects the doping to be provided in base Si units (per m3). Solcore expects the doping profile information in the form of a function which returns the doping at a given depth (in m) in the junction. Positive values are n-type doping, negative values are p-type.\n\nnD = si(\"1e20cm-3\") # maximum n-type (donor) doping\nnA = si(\"1e19cm-3\") # maximum p-type (acceptor) doping\nbulk_doping = si(\"5e15cm-3\") # n type bulk doping\n\nd_bulk = 100e-6 # Si thickness, in m\n\n# rear junction (n-type)\ndef doping_profile_func(x):\n\n L = d_bulk\n\n doping_profile = - nA * erfc(x/300e-9) # characteristic depth of 300 nm - front p-type doping\n\n doping_profile_rear = nD * erfc((L - x)/200e-9) # characteristic depth of 200 nm - rear n-type doping\n\n return doping_profile + doping_profile_rear + bulk_doping\n\nTo check it looks reasonable, let’s plot this doping profile:\n\ndepth = np.linspace(0, d_bulk, int(1e5))\n\nplt.figure()\nplt.plot(depth*1e6, doping_profile_func(depth))\nplt.xlabel(r\"Depth ($\\mu$m)\")\nplt.ylabel(r\"Doping (m$^{-3}$)\")\nplt.show()\n\n\n\n\nThat didn’t help very much, because the cell is too wide compared to the region where the doping is changing! Let’s try again but splitting the plot into two parts for the front and rear surface (since nothing interesting is happening in the middle).\n\nfig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(5, 3))\n\nax1.plot(depth*1e6, doping_profile_func(depth))\nax1.set_xlim(0, 0.5)\nax1.set_ylabel(r\"Doping (m$^{-3}$)\")\nax1.set_xlabel('x (um)')\n\nax2.plot(depth*1e6, doping_profile_func(depth))\nax2.set_xlim(d_bulk*1e6 - 0.5, d_bulk*1e6)\nax2.set_xlabel('x (um)')\nplt.tight_layout()\nplt.show()\n\n\n\n\nWe will add transparent conducting oxides (TCOs) and an anti-reflection coating. Note that a real Si cell would have a more complicated layer structure (for example, for a heterojunction cell, the amorphous Si layers); we can add as many layers as we want for Solcore to consider, but will keep it simple here. In this case, these layers will be outside the junction: this means they will have optical effects but will not be included in the drift-diffusion calculation. They can be included in the junction, but this requires setting the relevant transport-related parameters.\n\nfront_materials = [Layer(80e-9, MgF2), Layer(55e-9, TCO)]\n\nback_materials = [Layer(55e-9, TCO),\n Layer(120e-9, MgF2)]" }, { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-iv-curve", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-iv-curve", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", - "section": "Calculating the IV curve", - "text": "Calculating the IV curve\nWe are now able to calculate the limiting efficiency for a solar cell using the simple Shockley diode expression \\(J(V)=J_{s c}-J_0\\left(e^{\\frac{q V}{k T}}-1\\right)\\). Let’s plot the IV curve for a band-gap of 1.42eV\n\ndef getJ(v,eg):\n return getJsc(eg) - getJ0(eg)*(np.exp(v/(k*t)) - 1)\n\neg = 1.42\nv = np.linspace(0,1.2,100)\nj = np.vectorize(getJ)(v,eg)\n\nplt.figure(3)\nplt.title('Limiting Efficiency IV curve for Eg=1.42eV (GaAs)')\nplt.plot(v,j/10) #convert to mA.cm^-2\nplt.xlim(0.2, 1.2)\nplt.ylim(0,35)\nplt.xlabel('Voltage (V)')\nplt.ylabel('Current ($mA.cm^{-2}$)')" + "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#defining-the-junction-and-the-cell", + "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#defining-the-junction-and-the-cell", + "title": "Section 5b: Planar Si solar cell using PDD", + "section": "Defining the junction and the cell", + "text": "Defining the junction and the cell\nAnother important cell parameter, for both the depletion approximation and the drift-diffusion solvers, is the surface recombination. This is passed to Solcore as a surface recombination velocity (SRV). With the Si_pn material, the doping profile function, and the SRVs, we define the Junction. We set the kind of junction to sesame_PDD, so that Solcore knows to use the Sesame PDD solver.\n\nSi_junction = [Junction([Layer(d_bulk, Si_pn)],\n doping_profile=doping_profile_func, kind='sesame_PDD',\n sn=2, sp=1 # SRVs. Note these should be in m/s, not cm/s! sn refers to the n-type region (can be at the back or the front!), sp to the p-type.\n )]\n\nNow we combine the surface layers and the junction into a solar cell, with 2% shading and a silver back mirror.\n\nSi_cell = SolarCell(front_materials +\n Si_junction +\n back_materials,\n shading=0.02,\n substrate=Ag,\n )" }, { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-electrical-power-curve-and-finding-the-maximum-power", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#calculating-the-electrical-power-curve-and-finding-the-maximum-power", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", - "section": "Calculating the electrical power curve and finding the maximum power", - "text": "Calculating the electrical power curve and finding the maximum power\n\nplt.figure()\nplt.title('Limiting Efficiency power curve for $E_g$ = 1.42 eV (GaAs)')\nplt.plot(v,v*j)\nplt.xlim(0.2, 1.2)\nplt.ylim(0,350)\nplt.xlabel('Voltage (V)')\nplt.ylabel('Power ($W.m^{-2}$)')\n\nDefine a function to find the maximum power point of the curve above:\n\ndef getPmax(eg):\n v = np.linspace(0,eg-0.1,500)\n p = v*np.vectorize(getJ)(v,eg)\n return (np.amax(p)) # The amax command returns the maximum value in the array p\n\nTest it out on the curve above\n\ngetPmax(1.42)\n\n\nPlotting the Shockley-Queisser efficiency limit graph:\nFinally we can calculate the Shockley-Queisser efficiency limit for AM1.5G\n\neg = np.linspace(0.5,2.5,100)\np = np.vectorize(getPmax)(eg)\n\nplt.figure(3)\nplt.title('Limiting Shockley-Queisser Efficiency Curve')\nplt.plot(eg, p/b, label='AM1.5G') # Remember b is the integrated power of the\n# incident sunlight\nplt.xlim(0.2, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('Efficiency (%)')\nplt.legend()" + "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#calculating-the-iv-and-qe", + "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#calculating-the-iv-and-qe", + "title": "Section 5b: Planar Si solar cell using PDD", + "section": "Calculating the IV and QE", + "text": "Calculating the IV and QE\nNow we ask Solcore to solve both the light IV and QE of the cell:\n\nsolar_cell_solver(Si_cell, 'qe', options)\nsolar_cell_solver(Si_cell, 'iv', options)\n\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving QE of the solar cell...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\nNow we plot the results. Here we have multiple layers, and the junction is actually the third element in the solar cell, so we could access its properties by typing Si_cell[2] (since Python starts counting at 0). However, Solcore has a built-in way to find only the junctions (so, the electrically active) parts of the cell: Si_cell(0) will automatically find the first junction. Similarly, Si_cell(1) would give us the second junction, etc. This avoids having to manually count layers to find out which ones are the Junctions.\n\nresult_stack = np.vstack([Si_cell.reflected, [layer.layer_absorption for layer in Si_cell], Si_cell.transmitted])\n\nfig, (ax, ax2) = plt.subplots(1, 2, figsize=(10, 3.5))\nax.stackplot(wavelengths * 1e9, 100 * result_stack[::-1], linewidth=0.5, alpha=0.5,\n labels=['Ag', 'MgF2 (rear)', 'TCO (rear)', 'Si bulk', 'TCO (front)', 'MgF2 (front)',\n 'Reflection'])\nax.plot(wavelengths * 1e9, 100 * Si_cell(0).eqe(wavelengths), '-k', linewidth=2,\n label='EQE')\n\nax.set_xlim(280, 1200)\nax.set_ylim(0, 100)\nax.set_xlabel(\"Wavelength (nm)\")\nax.set_ylabel(\"R / A / EQE (%)\")\nax.set_title('a) EQE and cell optics', loc='left')\nax.legend()\n\njsc = Si_cell.iv.Isc / 10\n\nax2.plot(Si_cell.iv['IV'][0], Si_cell.iv['IV'][1] / 10, '-', label='IV',\n linewidth=2, color='k')\n\nax2.set_ylim(0, 1.03 * jsc)\nax2.set_xlim(np.min(options.voltages), np.max(options.voltages))\nax2.set_xlabel('Voltage (V)')\nax2.set_ylabel('Current density (mA/cm$^2$)')\nax2.set_title('b) IV characteristics and power output', loc='left')\n\nax3 = ax2.twinx()\nax3.plot(options.voltages, Si_cell.iv['IV'][0] * Si_cell.iv['IV'][1],\n '-r', label='Power', linewidth=2)\nax3.set_ylabel('Power density (W m$^{-2}$)')\nax3.set_ylim(0, 1.03 * jsc * 10)\n\nax3.spines['right'].set_color('r')\nax3.yaxis.label.set_color('r')\nax3.tick_params(axis='y', colors='r')\n\nax2.set_axisbelow(True)\nax3.set_axisbelow(True)\n\nax2.text(0.02, 0.9 * jsc, r'$J_{SC}$', zorder=5)\nax2.text(0.02, 0.8 * jsc, r'$V_{OC}$')\nax2.text(0.02, 0.7 * jsc, 'FF')\nax2.text(0.02, 0.6 * jsc, r'$\\eta$')\nax2.text(0.02, 0.5 * jsc, r'$J_{MPP}$')\nax2.text(0.02, 0.4 * jsc, r'$V_{MPP}$')\n\nax2.text(0.1, 0.9 * jsc, r'= {:.2f} mA/cm$^2$'.format(jsc))\nax2.text(0.1, 0.8 * jsc, r'= {:.3f} V'.format(Si_cell.iv.Voc))\nax2.text(0.1, 0.7 * jsc, '= {:.2f} %'.format(Si_cell.iv.FF * 100))\nax2.text(0.1, 0.6 * jsc, r'= {:.2f} %'.format(Si_cell.iv.Eta * 100))\nax2.text(0.1, 0.5 * jsc, r'= {:.2f} mA/cm$^2$'.format( Si_cell.iv.Impp / 10))\nax2.text(0.1, 0.4 * jsc, r'= {:.3f} V'.format(Si_cell.iv.Vmpp))\nax2.grid(which='major', alpha=0.35)\n\nax3.grid(False)\nplt.tight_layout()\n\nplt.show()\n\n\n\n\nSince this is a planar cell (i.e. no pyramids or other textured surface to reduce reflectance and increase the path length inside the cell), we see high losses due to reflection. We also see parasitic absorption in the front and rear TCO." }, { - "objectID": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#an-easier-way-using-solcore", - "href": "solcore-workshop-2/notebooks/2-Efficiency_limits.html#an-easier-way-using-solcore", - "title": "Section 2: Integration for limiting current, limiting voltage model, efficiency limit", - "section": "An easier way – using Solcore!", - "text": "An easier way – using Solcore!\nThe Solcore library has all the functions we have written above built into it. We worked through this example step by step, but we can calculate the same result using the code below. First let’s calculate an IV curve for a Shockley-Queisser solar cell with a band-gap of 1.42eV:\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom solcore.light_source import LightSource\nfrom solcore.solar_cell import SolarCell\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom solcore.structure import Junction\n\n# Load the AM1.5G solar spectrum\nwl = np.linspace(300, 4000, 4000) * 1e-9 # wl contains the x-coordinate in wavelength\nam15g = LightSource(source_type='standard', x=wl, version='AM1.5g')\n\neg = 1.42\nV = np.linspace(0, 1.3, 500)\ndb_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1) #\n# detailed-balance junction (Shockley-Queisser limit)\n\nmy_solar_cell = SolarCell([db_junction], T=300, R_series=0)\n\nsolar_cell_solver(my_solar_cell, 'iv',\n user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True,\n 'internal_voltages': np.linspace(0, 1.3, 400), 'wavelength': wl,\n 'mpp': True, 'light_source': am15g})\n\nplt.figure()\nplt.title('Limiting Efficiency IV curve for $E_g$ = 1.42eV')\nplt.plot(V, my_solar_cell.iv.IV[1], 'k')\nplt.ylim(0, 350)\nplt.xlim(0, 1.2)\nplt.text(0.1,300,f'Jsc: {my_solar_cell.iv.Isc:.2f}')\nplt.text(0.1,280,f'Voc: {my_solar_cell.iv.Voc:.2f}')\nplt.text(0.1,260,f'Pmax: {my_solar_cell.iv.Pmpp:.2f}')\nplt.xlabel('Voltage (V)')\nplt.ylabel('Current (A/m$^2$)')\nplt.show()\n\nThe Shockley-Queisser efficiency calculation can now be performed over a range of band-gap energies. To do this, we make a function that calculates the maximum power Pmax as a function of band-gap energy.\n\n%%capture\n# A command that prevents the screen from filling up with unnecessary working\n\n# Function that returns the maximum power for a Shockley-Queisser solar cell with band-gap Eg\ndef getPmax(eg):\n V = np.linspace(0, eg-0.1, 500)\n db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)\n my_solar_cell = SolarCell([db_junction], T=300, R_series=0)\n\n solar_cell_solver(my_solar_cell, 'iv',\n user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,\n 'mpp': True, 'light_source': am15g})\n return(my_solar_cell.iv.Pmpp)\n\n# Define the range of band-gaps to perform the calculation over\neg=np.linspace(0.5,2.5,100)\n# Perform the claculation for all values of eg\np=np.vectorize(getPmax)(eg)\n\nNow let’s plot the result:\n\nplt.figure() # Plot the results calculated above:\nplt.title('Shockley-Queisser Limiting Efficiency for Unconentrated Sunlight')\nplt.plot(eg, p/am15g.power_density,label='AM1.5G')\nplt.xlim(0.5, 2.5)\nplt.xlabel('Band Gap energy (eV)')\nplt.ylabel('Efficiency (%)')\nplt.legend()\n\n\nEffect of solar concentration on a Shockley-Queisser Solar Cell\nIn a Trivich-Flinn model for a solar cell, concentrated sunlight is only expected to increase the current of a solar cell, not the voltage. In that model the current would increase in proportion with the concentration so the efficiency of the solar cell would be unchanged.\nIn the Shockley-Queisser model, concentrated sunlight increased both the current and the voltage of the solar cell which, in the absence of series resistance losses, leads to an increase in the efficiency of the solar cell. Here we calculate the Shockley-Queisser efficiency at different solar concentrations under the direct solar spectrum AM1.5D:\n\n%%capture\n\n# Set up a series of AM1.5D solar spectra at different concentrations\nwl = np.linspace(300, 4000, 4000) * 1e-9 #wl contains the x-ordinate in wavelength\nam15d1x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=1)\nam15d30x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=30)\nam15d1000x = LightSource(source_type='standard', x=wl, version='AM1.5d',\n concentration=1000)\n\n#Define a function to find Pmax for a particular band-gap energy and solar spectrum\ndef getPmax(eg,spectrum):\n V = np.linspace(0, eg-0.1, 500)\n db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)\n my_solar_cell = SolarCell([db_junction], T=300, R_series=0)\n\n solar_cell_solver(my_solar_cell, 'iv',\n user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,\n 'mpp': True, 'light_source': spectrum})\n return my_solar_cell.iv.Pmpp\n\n# Evaluate the Pmax function for band-gaps spanning 0.8 to 1.6eV and concentrations 1x,30x,1000x\neg = np.linspace(0.8,1.6,100)\np1x = np.vectorize(getPmax)(eg, am15d1x)\np30x = np.vectorize(getPmax)(eg, am15d30x)\np1000x = np.vectorize(getPmax)(eg, am15d1000x)\n\n\n# Setup a figure for dual y-axes\nfig, ax = plt.subplots(1)\n\n# Plot the SQ curves\ncolors = sns.color_palette('husl', n_colors=3)\nax.plot(eg, 100*p1x/am15d1x.power_density,label='$\\eta$ @ AM1.5d 1x', color=colors[0])\nax.axvline(eg[np.argmax(p1x)], color=colors[0])\n\nax.plot(eg, 100*p30x/am15d30x.power_density,label='$\\eta$ @ AM1.5d 30x', color=colors[1])\nax.axvline(eg[np.argmax(p30x)], color=colors[1])\n\nax.plot(eg, 100*p1000x/am15d1000x.power_density,label='$\\eta$ @ AM1.5d 1000x', color=colors[2])\nax.axvline(eg[np.argmax(p1000x)], color=colors[2])\n\n# Define the second y-axis and plot the photon flux in units of eV\nax2 = ax.twinx()\nax2.plot(eg, am15d1x.spectrum(x=eg, output_units=\"photon_flux_per_ev\")[1],\n '--', color='grey', label=\"AM1.5d\")\n\nax.set_xlim(0.8, 1.6)\nax.set_xlabel('Band Gap energy (eV)')\nax.set_ylabel('Efficiency (%)')\nax2.set_ylabel(r'Photon flux (s$^{-1}$ m$^{-2}$ eV$^{-1}$)')\nax.legend()\nax2.legend()\n\nThe maximum band-gap energy moves to lower energies with increaseing solar concentration. This arises since although the current increases with increasing solar concentration, the cell voltage also increases which means the optimal effiicency is obtained at lower band-gaps. However, the drop in band-gap energy is modest owing to a strong atmospheric absorption feature at 1.1um which serves to pin the optimum bandgap around 1.12eV.\n\n\nExercise: Concentrated AM0\nTry repeating the example above but use the AM0 extraterrestial spectrum. Observe what happens to the band-gap shift with increasing concentration. How is it different to AM1.5d?" + "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#auger-limited-cell", + "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#auger-limited-cell", + "title": "Section 5b: Planar Si solar cell using PDD", + "section": "Auger-limited cell", + "text": "Auger-limited cell\nRecently, record-efficiency silicon cells have been optimized to such a level that Auger recombination (rather than Shockley-Read-Hall recombination) becomes the dominant recombination mechanism. SRH recombination is parameterized in the PDD solver through the minority lifetimes. Here, we will scan through different minority carrier lifetimes and look at the effect on cell parameters. Other cell parameters are assumed to stay the same.\n\nlifetime_exp = np.linspace(-4, -1.5, 6) # exponent for the lifetimes\n\nlifetimes = 10.0**lifetime_exp # lifetimes which are linearly spaced on a log scale\n\ncell_results = np.zeros(([len(lifetimes), 4])) # make an array to store the efficiency, FF, Voc, Jsc for each lifetime\n\nfor i1, lt in enumerate(lifetimes): # loop through the lifetimes\n\n options.recalculate_absorption = True\n\n Si_pn = material(\"Si\")(electron_mobility=si(\"1e4cm2\"), hole_mobility=si(\"1e3cm2\"),\n electron_minority_lifetime=lt, hole_minority_lifetime=lt)\n\n Si_junction = [Junction([Layer(d_bulk, Si_pn)],\n doping_profile=doping_profile_func, kind='sesame_PDD',\n sn=2, sp=1)]\n\n Si_cell = SolarCell(front_materials +\n Si_junction +\n back_materials,\n shading=0.02,\n substrate=Ag,\n )\n\n solar_cell_solver(Si_cell, 'iv', options)\n\n cell_results[i1] = np.array([100*Si_cell.iv.Eta, 100*Si_cell.iv.FF, Si_cell.iv.Voc, Si_cell.iv.Isc/10])\n\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\nNow we plot the results. The points are labelled with the lifetime in ms in the left-hand plot.\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3.5))\n\nax1.plot(cell_results[:, 2], cell_results[:, 1], 'ko')\n\nfor i, lt in enumerate(lifetimes):\n ax1.annotate(str(np.round(1000*lt,2)), (cell_results[i, 2] - 0.001, cell_results[i, 1]), ha='right')\n\nax1.set_xlabel(r'V$_{oc}$ (V)')\nax1.set_ylabel('FF (%)')\nax1.set_xlim(0.69, 0.75)\n\nax2.semilogx(lifetimes, cell_results[:, 0], 'o', color='k')\nax2.set_ylabel('Efficiency (%)')\nax3 = ax2.twinx()\nax3.plot(lifetimes, cell_results[:, 3], 'o', color='r', markerfacecolor='none')\nax3.set_ylim(33, 34)\nax3.set_ylabel(r'$J_{sc}$ (mA/cm$^2$)', color='r')\n\nax2.set_xlabel(r'$\\tau$ (s)')\n\nplt.tight_layout()\nplt.show()\n\n\n\n\nAs the lifetimes become very long, the fill factor shoots up rapidly, while the open-circuit voltage saturates. This increase in FF is faster than would be expected with an ideality factor of 1 (for SRH recombination) in the diode equation, and occurs because recombination becomes increasingly dominated by Auger recombination (ideality factor = 2/3). Compare the plot on the left with Figure 1b in this paper, where much the same behaviour is observed with data from real record efficiency devices." }, { - "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html", - "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html", - "title": "Section 7: Planar GaInP//Si tandem cell", + "objectID": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#other-outputs-from-the-pdd-solver", + "href": "solcore-workshop-2/notebooks/5b-Si_cell_PDD.html#other-outputs-from-the-pdd-solver", + "title": "Section 5b: Planar Si solar cell using PDD", + "section": "Other outputs from the PDD solver", + "text": "Other outputs from the PDD solver\nBecause we used a PDD solver, there are additional outputs in additional to the ones provided by all the junction models (open-circuit voltage, short-circuit current, efficiency, fill factor, etc.). Since solving the PDD equations requires calculating the distribution of carriers in the cell depending on the light and voltage biasing, we can access this information. Here, we will plot the energy levels of the conduction and valence band, and the electron and hole quasi-Fermi levels.\nFirst, we find the index in the voltage array where the voltage is zero (i.e. short circuit), and the index where it is closest to the voltage at the maximum power point (Vmpp), which was calculated during the IV calculation earlier.\n\n# index where voltage is zero:\nSC_ind = np.argmin(np.abs(options.internal_voltages)) # index in voltage array where voltage is (closest to) zero: short circuit\nMPP_ind = np.argmin(np.abs(options.internal_voltages - Si_cell.iv.Vmpp)) # index in voltage array where voltage is closest to Vmpp.\n\nNow we get the conduction and valence band energy levels (Ec and Ev) and the electron and hole quasi-Fermi levels (Efe and Efh), at both of these voltages. The additional outpit from the PDD model are stored in each junction:\nEc_sc = Si_cell(0).pdd_output.Ec[SC_ind] Ev_sc = Si_cell(0).pdd_output.Ev[SC_ind]\nEfe_sc = Si_cell(0).pdd_output.Efe[SC_ind] Efh_sc = Si_cell(0).pdd_output.Efh[SC_ind]\nEc_mpp = Si_cell(0).pdd_output.Ec[MPP_ind] Ev_mpp = Si_cell(0).pdd_output.Ev[MPP_ind]\nEfe_mpp = Si_cell(0).pdd_output.Efe[MPP_ind] Efh_mpp = Si_cell(0).pdd_output.Efh[MPP_ind]\nNow we plot thesince the cell is very wide, let’s split the plot into two parts again, like we did for the doping, and plot the quantities we just extracted for at short circuit:\n\nfig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(5, 3))\nax1.plot(Si_cell(0).mesh*1e6, Ec_sc, label='CB', color='k')\nax1.plot(Si_cell(0).mesh*1e6, Ev_sc, label='VB', color='g')\nax1.plot(Si_cell(0).mesh*1e6, Efe_sc, label=r'$E_{f, e}$', color='r')\nax1.plot(Si_cell(0).mesh*1e6, Efh_sc, label=r'$E_{f, h}$', color='b')\n\nax1.set_xlim(0, 2)\nax1.set_xlabel('x (um)')\nax1.legend()\nax1.set_title(\"Short circuit\", loc='left')\n\nax2.plot(Si_cell(0).mesh*1e6, Ec_sc, label='CB', color='k')\nax2.plot(Si_cell(0).mesh*1e6, Ev_sc, label='VB', color='g')\nax2.plot(Si_cell(0).mesh*1e6, Efe_sc, label=r'$E_{f, e}$', color='r')\nax2.plot(Si_cell(0).mesh*1e6, Efh_sc, label=r'$E_{f, h}$', color='b')\n\nax2.set_xlim(d_bulk*1e6 - 2, d_bulk*1e6)\nax2.set_xlabel('x (um)')\nplt.tight_layout()\nplt.show()\n\n\n\n\nAnd at the maximum power point:\n\nfig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(5, 3))\n\nax1.plot(Si_cell(0).mesh*1e6, Ec_mpp, label='CB', color='k')\nax1.plot(Si_cell(0).mesh*1e6, Ev_mpp, label='VB', color='g')\nax1.plot(Si_cell(0).mesh*1e6, Efe_mpp, label=r'$E_{f, e}$', color='r')\nax1.plot(Si_cell(0).mesh*1e6, Efh_mpp, label=r'$E_{f, h}$', color='b')\nax1.set_xlim(0, 2)\nax1.set_xlabel('x (um)')\nax1.legend()\nax1.set_title(\"Maximum power point\", loc='left')\n\nax2.plot(Si_cell(0).mesh*1e6, Ec_mpp, label='CB', color='k')\nax2.plot(Si_cell(0).mesh*1e6, Ev_mpp, label='VB', color='g')\nax2.plot(Si_cell(0).mesh*1e6, Efe_mpp, label=r'$E_{f, e}$', color='r')\nax2.plot(Si_cell(0).mesh*1e6, Efh_mpp, label=r'$E_{f, h}$', color='b')\n\nax2.set_xlim(d_bulk*1e6 - 2, d_bulk*1e6)\nax2.set_xlabel('x (um)')\nplt.tight_layout()\nplt.show()\n\n\n\n\nAs expected, we see that at forward bias, the band-bending is reduced. We also see that at the rear, where the cell is very highly doped, the electron quasi-Fermi level is inside the conduction band." + }, + { + "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html", + "href": "solcore-workshop-2/notebooks/4-Spectral2.html", + "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", "section": "", - "text": "This example is partly based on the structure presented in this paper, but with planar interfaces instead of a textured Si surface. This is a four-terminal GaInP/Si device which uses an epoxy and glass to bond the two cells together mechanically. First, we will do optical-only calculations to look at the effect of an intermediate anti-reflection coating (on top of the epoxy/glass) on the absorption in the bottom Si cell, and then we will use the results of the optical calculation to do a device simulation and calculate external quantum efficiency and current-voltage under AM1.5G.\nNote: the paper linked above has a GaInP/AlGaInP heterojunction as the top junction. Because we do not have AlGaInP built in to Solcore’s database, this is replaced by a GaInP homojunction in this example.\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer, Junction\nfrom solcore.solar_cell_solver import solar_cell_solver, default_options\nfrom solcore.solar_cell import SolarCell\nfrom solcore.light_source import LightSource\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt" + "text": "SPCTRAL 2 is a clear-sky spectral irradiance model that accounts for variations in the atmospheric conditions and air-mass. Developed at NREL in 1984, it generates terrestrial spectral irradiance from 300nm to 4um with a resolution of approximately 10nm.\n“Simple Solar Spectral Model for Direct and Diffuse Irradiance on Horizontal and Tilted Planes at the Earth’s Surface for Cloudless Atmospheres”, R. Bird, C. Riordan, December 1984\nThe Solcore implementation accomodates the following inputs (stated values are defaults):\nAll the inputs are numeric other than the aod_model whose options are: ‘rural’, ‘urban’, ‘maritime’ and ‘tropospheric’." }, { - "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#defining-materials-layers-and-junctions", - "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#defining-materials-layers-and-junctions", - "title": "Section 7: Planar GaInP//Si tandem cell", - "section": "Defining materials, layers and junctions", - "text": "Defining materials, layers and junctions\nThe paper referenced above uses a double-layer anti-reflection coating (ARC) made of MgF\\(_2\\) and ZnS. As in the previous example, we use the interface to the refractiveindex.info database to select optical constant data from specific sources, and define Solcore materials using this data. The III-V materials are taken from Solcore’s own material database.\nNote that for the epoxy/glass layer, we use only a single material (BK7 glass). The epoxy and glass used in the paper have the same refractive index (n = 1.56), so we can use a single material with an appropriate refractive index to represent them.\n\ndownload_db(confirm=True) # uncomment to download database\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nZnS_pageid = search_db(os.path.join(\"ZnS\", \"Querry\"))[0][0];\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nZnS = material(str(ZnS_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")\nBSF = material(\"AlGaAs\")(Al=0.5)\n\nepoxy = material(\"BK7\")()\n\nFor the Si cell, the front surface has both a low-index and high-index SiN\\(x\\) layer. The rear surface uses Al\\(2\\)O\\(3\\), and the cell has Al at the rear surface.\n\nSiOx = material(\"SiO\")()\nSiN_191_pageid = search_db(\"Vogt-1.91\")[0][0];\nSiN_213_pageid = search_db(\"Vogt-2.13\")[0][0];\nSiN_191 = material(str(SiN_191_pageid), nk_db=True)();\nSiN_213 = material(str(SiN_213_pageid), nk_db=True)();\n\nSi = material(\"Si\")\n\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()\n\nWe now define the layers used in the top cell stack: the ARC and window layer for the top cell, and the GaInP junction itself. The ARC and window layers are not involved in the electrical calculation using the depletion approximation, so they are defined as simple layers, while the GaInP emitter and base are defined as part of a Junction object.\n\nARC_window = [\n Layer(97e-9, MgF2),\n Layer(41e-9, ZnS),\n Layer(17e-9, window, role=\"window\"),\n]\n\nGaInP_junction = Junction([\n Layer(200e-9, GaInP(In=0.50, Nd=si(\"2e18cm-3\"), hole_diffusion_length=si(\"300nm\")),\n role=\"emitter\"),\n Layer(750e-9, GaInP(In=0.50, Na=si(\"1e17cm-3\"), electron_diffusion_length=si(\n \"800nm\")),\n role=\"base\"),\n Layer(500e-9, BSF, role=\"bsf\")], kind=\"DA\", sn=1, sp=1\n)\n\nWe now define the spacer layer, with and without a ZnS anti-reflection coating, so we can compare their performance in the cell stack. Note that we set the epoxy thickness here to be 10 microns, although the real thickness is much higher - this is because the epoxy/glass is not absorbing at the wavelengths which are able to reach it (which are not absorbed in the GaInP top cell), and we will treat it incoherently (no thin-film interference), so the exact thickness does not matter.\n\nspacer = [\n Layer(82e-9, ZnS),\n Layer(10e-6, epoxy), # real thickness is much higher, but since this layer is\n # non-absorbing at the relevant wavelength (> 650 nm) and treated incoherently,\n # this does not matter\n]\n\nspacer_noARC = [\n Layer(10e-6, epoxy),\n]\n\nNow we define the layer stacks for the Si cell, including the front SiO\\(_x\\)/SiN\\(_x\\) stack, the junction itself, and the back dielectric layers.\n\nSi_front_surf = [\n Layer(100e-9, SiOx),\n Layer(70e-9, SiN_191),\n Layer(15e-9, SiN_213),\n ]\n\nSi_junction = Junction([\n Layer(1e-6, Si(Nd=si(\"2e18cm-3\"), hole_diffusion_length=2e-6), role=\"emitter\"),\n Layer(150e-6, Si(Na=si(\"2e15cm-3\"), electron_diffusion_length=150e-6), role=\"base\"),\n], kind=\"DA\", sn=0.1, sp=0.1)\n\nSi_back_surf = [\n Layer(15e-9, Al2O3),\n Layer(120e-9, SiN_191)\n]" + "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#comparison-between-spctral2-with-default-parameters-and-am1.5g", + "href": "solcore-workshop-2/notebooks/4-Spectral2.html#comparison-between-spctral2-with-default-parameters-and-am1.5g", + "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", + "section": "Comparison between SPCTRAL2 with default parameters and AM1.5G", + "text": "Comparison between SPCTRAL2 with default parameters and AM1.5G\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom solcore.light_source import LightSource\n\n# Setup the AM1.5G solar spectrum\nwl = np.linspace(300, 4000, 4000) * 1e-9 #wl contains the x-ordinate in wavelength\nam15g = LightSource(source_type='standard', x=wl*1e9, version='AM1.5g')\n\nspc2default = LightSource(source_type='SPECTRAL2', x=wl * 1e9)\n\nplt.figure()\nplt.title(\"Comparing SPCTRAL 2 vs AM1.5G\")\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2default.spectrum(wl*1e9), label='SPC-default')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\n<matplotlib.legend.Legend at 0x12ee06f50>" }, { - "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#comparing-the-optical-performance-with-and-without-intermediate-arc", - "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#comparing-the-optical-performance-with-and-without-intermediate-arc", - "title": "Section 7: Planar GaInP//Si tandem cell", - "section": "Comparing the optical performance with and without intermediate ARC", - "text": "Comparing the optical performance with and without intermediate ARC\nNow we will run the calculation. We will treat some of the layers (those above the epoxy) with a coherent TMM calculation, and the epoxy and the layers below it using incoherent TMM. We will discuss the difference this makes, why this is important, and when to use coherent and incoherent layers.\n\nn_coh_layers = len(ARC_window + GaInP_junction)\nn_inc_layers = 1 + len(Si_front_surf + Si_junction + Si_back_surf)\n\nwl = np.linspace(300, 1200, 600) * 1e-9\n\noptions = default_options\noptions.recalculate_absorption = True\noptions.wavelength = wl\noptions.optics_method = 'TMM'\n\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl*1e9,\n output_units=\"photon_flux_per_nm\")\n\nNow we define two versions of the cell for optical calculations, without and with the ZnS anti-reflection coating on the epoxy. Note that we also set the substrate for the calculation (aluminium) here.\n\ncell_no_ARC = SolarCell(\n ARC_window + GaInP_junction + spacer_noARC + Si_front_surf + Si_junction +\n Si_back_surf,\n substrate=Al,\n)\n\ncell_with_ARC = SolarCell(\n ARC_window + GaInP_junction + spacer + Si_front_surf + Si_junction + Si_back_surf,\n substrate=Al,\n)\n\nWe set the appropriate coherency list for the structure (a list with entry ‘c’ for a coherent layer or ‘i’ for an incoherent layer), and solve for the cell optics of the cell without the intermediate ARC. We get the total absorption in the GaInP and Si junctions.\n\noptions.coherency_list = ['c']*(n_coh_layers) + ['i']*n_inc_layers\nsolar_cell_solver(cell_no_ARC, \"optics\", options)\n\nGaInP_A = cell_no_ARC[3].layer_absorption + cell_no_ARC[4].layer_absorption\nSi_A = cell_no_ARC[10].layer_absorption + cell_no_ARC[11].layer_absorption\n\nAs above, but for the cell with an intermediate ARC:\n\noptions.coherency_list = [\"c\"]*(n_coh_layers + 1) + ['i']*n_inc_layers\nsolar_cell_solver(cell_with_ARC, \"optics\", options)\n\nGaInP_A_ARC = cell_with_ARC[3].layer_absorption + cell_with_ARC[4].layer_absorption\nSi_A_ARC = cell_with_ARC[11].layer_absorption + cell_with_ARC[12].layer_absorption\n\nNow we plot the GaInP and Si absorption, and the reflectance of the whole structure, for both cells:\n\nplt.figure()\n\nplt.plot(wl * 1e9, GaInP_A_ARC, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, Si_A_ARC, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, cell_with_ARC.reflected, '-b', label=\"R\")\n\nplt.plot(wl * 1e9, GaInP_A, \"--k\", label=\"No middle ARC\")\nplt.plot(wl * 1e9, Si_A, \"--r\")\nplt.plot(wl * 1e9, cell_no_ARC.reflected, '--b')\n\nplt.legend(loc='upper right')\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance/Reflectance\")\nplt.tight_layout()\nplt.show()\n\nWe see that the cell without an ARC on the epoxy shows much stronger interference fringes (due to the thickness of the top stack), and higher reflectance overall in the long-wavelength region (at short wavelengths, light is absorbed before it is able to reach the epoxy at all). Before doing an actual electrical calculation, we will calculate the limiting current in both of the sub-cells (assuming all the generated charge carriers can be collected):\n\nJ_GaInP = q*np.trapz(GaInP_A * AM15G.spectrum()[1], wl*1e9)\nJ_Si = q*np.trapz(Si_A * AM15G.spectrum()[1], wl*1e9)\n\nprint(\"Limiting short-circuit currents without ARC (mA/cm2): {:.1f} / {:.1f}\".format(\n J_GaInP/10, J_Si/10))\n\nJ_GaInP_ARC = q*np.trapz(GaInP_A_ARC * AM15G.spectrum()[1], wl*1e9)\nJ_Si_ARC = q*np.trapz(Si_A_ARC * AM15G.spectrum()[1], wl*1e9)\n\nprint(\"Limiting short-circuit currents with ARC (mA/cm2): {:.1f} / {:.1f}\".format(\n J_GaInP_ARC/10, J_Si_ARC/10))\n\nAs expected from the reduced reflection and increased absorption in the Si, the cell with an intermediate ARC has significantly higher maximum current in the bottom Si cell." + "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#adjusting-the-precipitable-water-value", + "href": "solcore-workshop-2/notebooks/4-Spectral2.html#adjusting-the-precipitable-water-value", + "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", + "section": "Adjusting the precipitable water value", + "text": "Adjusting the precipitable water value\nThe default SPCTRAL2 parameters results in almost no atmospheric absorption. This suggests the precipitable water column thickness is much too low, the default is 0.00142 cm. Let’s increase that value to 1cm to roughly match AM1.5G:\n\nspc2pc = LightSource(source_type='SPECTRAL2', precipwater=1.0, x=wl * 1e9)\n\nplt.figure()\nplt.title('Comparions between SPCTRAL2 defaults, 1cm precipitable water & AM1.5G')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2default.spectrum(wl*1e9), label='SPC-default')\nplt.plot(*spc2pc.spectrum(wl*1e9), label='PC water')\n\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x12ef7a890>" }, { - "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#eqe-and-iv-calculation", - "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#eqe-and-iv-calculation", - "title": "Section 7: Planar GaInP//Si tandem cell", - "section": "EQE and IV calculation", - "text": "EQE and IV calculation\nNow, just taking the structure with an intermediate ARC, we do a cell calculation using the depletion approximation.\n\noptions.mpp = True\noptions.light_iv = True\noptions.voltages = np.linspace(-1.9, 0.1, 100)\noptions.light_source = AM15G\n\nsolar_cell = SolarCell(\n ARC_window + [GaInP_junction] + spacer + Si_front_surf + [Si_junction] +\n Si_back_surf,\n substrate=Al,\n)\n\nFirst, we calculate and plot the external quantum efficiency (EQE):\n\nsolar_cell_solver(solar_cell, 'qe', options)\n\nplt.figure()\nplt.plot(wl * 1e9, GaInP_A_ARC, \"--k\", label=\"GaInP only absorption\")\nplt.plot(wl * 1e9, Si_A_ARC, \"--r\", label=\"Si only absorption\")\nplt.plot(wl*1e9, solar_cell[3].eqe(wl), '-k')\nplt.plot(wl*1e9, solar_cell[9].eqe(wl), '-r')\nplt.legend(loc='upper right')\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorptance/EQE\")\nplt.ylim(0,1)\nplt.tight_layout()\nplt.show()\n\nAnd the current-voltage under AM1.5G:\n\nsolar_cell_solver(solar_cell, 'iv', options)\n\nplt.figure()\nplt.plot(-options.voltages, -solar_cell.iv['IV'][1]/10, 'k', linewidth=3,\n label='Total (2-terminal)')\nplt.plot(-options.voltages, solar_cell[3].iv(options.voltages)/10, 'b',\n label='GaInP')\nplt.plot(-options.voltages, solar_cell[9].iv(options.voltages)/10, 'g',\n label='Si')\nplt.text(0.1, 18, r\"2-terminal $\\eta$ = {:.2f}%\".format(solar_cell.iv[\"Eta\"]*100))\nplt.legend()\nplt.ylim(0, 20)\nplt.xlim(0, 1.9)\nplt.ylabel('Current (mA/cm$^2$)')\nplt.xlabel('Voltage (V)')\nplt.tight_layout()\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#atmospheric-turbidity", + "href": "solcore-workshop-2/notebooks/4-Spectral2.html#atmospheric-turbidity", + "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", + "section": "Atmospheric Turbidity", + "text": "Atmospheric Turbidity\nThe short wavelength is attenuated which is likely due to a high level of aerosol loading in the default spectrum. To address this atmospheric turbidity can be reduced to around 0.05.\n\nspc2high = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2, x=wl * 1e9)\nspc2med = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.1, x=wl * 1e9)\nspc2low = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.05, x=wl * 1e9)\n\nplt.figure()\nplt.title('Spectral Irradiance Plotted for Different Aersol Models')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2high.spectrum(wl*1e9), label='Turbidity = 0.2')\nplt.plot(*spc2med.spectrum(wl*1e9), label='Turbidity = 0.1')\nplt.plot(*spc2low.spectrum(wl*1e9), label='Turbidity = 0.05')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x12f727450>" }, { - "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#two-vs.-four-terminal-efficiency", - "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#two-vs.-four-terminal-efficiency", - "title": "Section 7: Planar GaInP//Si tandem cell", - "section": "Two vs. four-terminal efficiency", - "text": "Two vs. four-terminal efficiency\nBy default, Solcore assumes any SolarCell object is a two-terminal device, and will thus calculate the total I-V curve assuming the cells are connected in series and that the current is limited by the lowest-current sub-cell. However, it will also calculate the I-V curves of the individual cells, so we can use this information to calculate the possible power output in a 4-terminal configuration where the cells operate independently from an electrical point of view:\n\nV = np.linspace(0, 1.3, 100)\nP_GaInP = V*solar_cell[3].iv(V)\nP_Si = V*solar_cell[9].iv(V)\n\nP_MPP_GaInP = max(P_GaInP)\n\nP_MPP_Si = max(P_Si)\n\neta_4T = (P_MPP_GaInP + P_MPP_Si)/AM15G.power_density\n\nprint('4-terminal efficiency: {:.1f} %'.format(eta_4T*100))" + "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#variation-with-aerosol-models", + "href": "solcore-workshop-2/notebooks/4-Spectral2.html#variation-with-aerosol-models", + "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", + "section": "Variation with Aerosol models", + "text": "Variation with Aerosol models\nSeveral standard aerosol models are implemented in SPCTRAL 2 that were established by Shettle & Fenn.\nShettle, E. P., and R. W. Fenn, “Models of the Atmospheric Aerosol and Their Optical Properties, II Proceedings of the Advisory Group for Aerospace Reseach and Development Conference No . 183, Optical Propagation in the Atmosphere, 1975, pp. 2.1-2.16. Presented at the Electromagnetic Wave Propagation Panel Symposium, Lyngby, Denmark; 27-31 October 1975.\nHere we plot some of them with a turbidity of 0.2 to emphasise the different spectral behaviour:\n\nspc2rural = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,\n aod_model='rural', x=wl * 1e9)\nspc2marit = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,\n aod_model='maritime', x=wl * 1e9)\nspc2tropo = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,\n aod_model='tropospheric', x=wl * 1e9)\n\nplt.figure(1)\nplt.title('Spectral Irradiance Plotted for Different Aersol Models')\nplt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')\nplt.plot(*spc2rural.spectrum(wl*1e9), label='rural')\nplt.plot(*spc2marit.spectrum(wl*1e9), label='maritime')\nplt.plot(*spc2tropo.spectrum(wl*1e9), label='tropospheric')\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x12f7769d0>" }, { - "objectID": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#questionschallenges", - "href": "solcore-workshop-2/notebooks/7-InGaP_Si_planar.html#questionschallenges", - "title": "Section 7: Planar GaInP//Si tandem cell", - "section": "Questions/challenges", - "text": "Questions/challenges\n\nWhat causes the strange, sharp fringes in the simulation data of Fig. 1 in the reference paper? Can you reproduce them by modifying this code? Which version of the simulation do you think is more correct, and why?\nHow could you increase the current in one or both of the sub-cells (remember, unlike the paper, we assumed all the layers in the cell are planar!).\nOnce the light encounters an ‘incoherent’ (thick) layer, does it make sense to treat any layers below that as coherent?" + "objectID": "solcore-workshop-2/notebooks/4-Spectral2.html#changing-the-time-of-day", + "href": "solcore-workshop-2/notebooks/4-Spectral2.html#changing-the-time-of-day", + "title": "Section 4: Calculating Spectral Irradiance using SPCTRAL 2", + "section": "Changing the time of day", + "text": "Changing the time of day\nOne of the most common uses for a spectral irradiance model such as SPCTRAL2 is to calculate how a particular solar cell technology behaves under varying spectral conditions during the day. This is particularly important whan working with series connected tandem solar cells where the current matching condition will vary according to the incident spectrum. Here we plot the spectral irradiance at 12pm, 2pm, 3pm, 4pm, 5pm, 6pm and 7pm. Note the strong relative loss in short-wavelength light relative to the infrared as the air-mass increases throughout the afternoon.\n\nimport datetime\n\nplt.figure(1)\nplt.title('Spectral Irradiance plotted from 12pm-7pm')\nhours=[12, 14, 15, 16, 17, 18, 19]\n\nfor h in hours:\n spc2 = LightSource(source_type='SPECTRAL2', dateAndTime=datetime.datetime(2011, 6, 30, h, 00),\n precipwater=1.0, turbidity=0.05, x=wl * 1e9)\n plt.plot(*spc2.spectrum(wl*1e9), label='hour '+ str(h))\n\nplt.xlim(300, 3000)\nplt.xlabel('Wavelength (nm)')\nplt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')\nplt.legend()\n\n<matplotlib.legend.Legend at 0x12f8a5d10>" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html", - "title": "Section 8: Textured Si", + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html", + "title": "Section 5a: Planar Si solar cell using DA", "section": "", - "text": "This example is based on Figures 6, 7 and 8 from this paper. This compares three different structures, all based on a 200 micron thick slab of silicon with different surface textures:\nThe methods which will be used to calculate the redistribution matrices in each case are given in brackets. If case 1 and 2 are calculated first, then case 3 does not require the calculations of any additional matrices, since it will use the rear matrix from (1) and the front matrix from (2)." + "text": "In this first set of examples, we will look at simple planar Si solar cell.\nIn this script, we will look at the difference between Beer-Lambert absorption calculations, using the Fresnel equations for front-surface reflection, and using the transfer-matrix model.\nFirst, lets import some very commonly-used Python packages:\nimport numpy as np\nimport matplotlib.pyplot as plt\nNumpy is a Python library which adds supports for multi-dimensional data arrays and matrices, so it is very useful for storing and handling data. You will probably use it in every Solcore script you write. Here, it is imported under the alias ‘np’, which you will see used below. matplotlib is used for making plots, and is imported under the alias ‘plt’. Both the ‘np’ and ‘plt’ aliases are extremely commonly used in Python programming.\nNow, let’s import some things from Solcore (which will be explained as we use them):\nfrom solcore import material, si\nfrom solcore.solar_cell import SolarCell, Layer, Junction\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom solcore.interpolate import interp1d" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#setting-up", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#setting-up", - "title": "Section 8: Textured Si", - "section": "Setting up", - "text": "Setting up\nFirst, importing relevant packages:\n\nimport numpy as np\nimport os\n\n# solcore imports\nfrom solcore.structure import Layer\nfrom solcore import material\nfrom solcore import si\n\nfrom rayflare.structure import Interface, BulkLayer, Structure\nfrom rayflare.matrix_formalism import process_structure, calculate_RAT\nfrom rayflare.utilities import get_savepath\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.angles import theta_summary, make_angle_vector\nfrom rayflare.textures import regular_pyramids\nfrom rayflare.options import default_options\n\nimport matplotlib.pyplot as plt\nimport matplotlib as mpl\nimport seaborn as sns\nfrom sparse import load_npz\n\nSetting options (taking the default options for everything not specified explicitly):\n\nangle_degrees_in = 8 # same as in Fraunhofer paper\n\nwavelengths = np.linspace(900, 1200, 20) * 1e-9\n\nSi = material(\"Si\")()\nAir = material(\"Air\")()\n\noptions = default_options()\noptions.wavelength = wavelengths\noptions.theta_in = angle_degrees_in * np.pi / 180 # incidence angle (polar angle)\noptions.n_theta_bins = 30\noptions.c_azimuth = 0.25\noptions.n_rays = 5e4 # number of rays per wavelength in ray-tracing\noptions.project_name = \"OPTOS_comparison\"\noptions.orders = 60 # number of RCWA orders to use (more = better convergence, but slower)\noptions.pol = \"u\" # unpolarized light\noptions.only_incidence_angle = True\noptions.RCWA_method = \"Inkstone\"" + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-materials", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-materials", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Defining materials", + "text": "Defining materials\nTo define our solar cell, we first want to define some materials. Then we want to organise those materials into Layers, organise those layers into a Junction (or multiple Junctions, for a multi-junction cell, as we will see later), and then finally define a SolarCell with that Junction.\nFirst, let’s define a silicon material. Silicon, along with many other semiconductors, dielectrics, and metals common in solar cells, is included in Solcore’s database:\n\nSi = material(\"Si\")\n\nThis creates an instance of the Si material. However, to use this in a solar cell we need to do specify some more information, specifically the doping level and the minority carrier diffusion length. The ‘si’ function comes in handy here to convert all quantities to base units e.g. m, m\\(^{-3}\\)…\n\nSi_p = Si(Na=si(\"1e21cm-3\"), electron_diffusion_length=si(\"4um\"))\nSi_n = Si(Nd=si(\"1e16cm-3\"), hole_diffusion_length=si(\"200um\"))" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#defining-the-structures", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#defining-the-structures", - "title": "Section 8: Textured Si", - "section": "Defining the structures", - "text": "Defining the structures\nNow, set up the grating basis vectors for the RCWA calculations and define the grating structure. These are squares, rotated by 45 degrees. The halfwidth is calculated based on the area fill factor of the etched pillars given in the paper.\n\nx = 1000\n\nd_vectors = ((x, 0), (0, x))\narea_fill_factor = 0.36\nhw = np.sqrt(area_fill_factor) * 500\n\nback_materials = [\n Layer(width=si(\"120nm\"), material=Si,\n geometry=[{\"type\": \"rectangle\", \"mat\": Air, \"center\": (x / 2, x / 2),\n \"halfwidths\": (hw, hw), \"angle\": 45}],\n )]\n\nNow we define the pyramid texture for the front surface in case (2) and (3) and make the four possible different surfaces: planar front and rear, front with pyramids, rear with grating. We specify the method to use to calculate the redistribution matrices in each case and create the bulk layer.\n\nsurf = regular_pyramids(elevation_angle=55, upright=False)\n\nfront_surf_pyramids = Interface(\n \"RT_Fresnel\",\n texture=surf,\n layers=[],\n name=\"inv_pyramids_front_\" + str(options[\"n_rays\"]),\n)\n\nfront_surf_planar = Interface(\"TMM\", layers=[], name=\"planar_front\")\n\nback_surf_grating = Interface(\n \"RCWA\",\n layers=back_materials,\n name=\"crossed_grating_back\",\n d_vectors=d_vectors,\n rcwa_orders=20,\n)\n\nback_surf_planar = Interface(\"TMM\", layers=[], name=\"planar_back\")\n\nbulk_Si = BulkLayer(200e-6, Si, name=\"Si_bulk\")\n\nNow we create the different structures and ‘process’ them (this will calculate the relevant matrices if necessary, or do nothing if it finds the matrices have previously been calculated and the files already exist). We don’t need to process the final structure because it will use matrices calculated for SC_fig6 and SC_fig7.\n\nSC_fig6 = Structure(\n [front_surf_planar, bulk_Si, back_surf_grating], incidence=Air, transmission=Air\n)\nSC_fig7 = Structure(\n [front_surf_pyramids, bulk_Si, back_surf_planar], incidence=Air, transmission=Air\n)\nSC_fig8 = Structure(\n [front_surf_pyramids, bulk_Si, back_surf_grating], incidence=Air, transmission=Air\n)\n\nprocess_structure(SC_fig6, options, save_location='current') # if you want to overwrite previous results, add overwrite=Trues\nprocess_structure(SC_fig7, options, save_location='current')\n\nINFO: Making matrix for planar surface using TMM for element 0 in structure\nINFO: RCWA calculation for element 2 in structure\nINFO: RCWA calculation for wavelength = 947.3684210526316 nm\nINFO: RCWA calculation for wavelength = 915.7894736842105 nm\nINFO: RCWA calculation for wavelength = 978.9473684210526 nm\nINFO: RCWA calculation for wavelength = 1010.5263157894736 nm\nINFO: RCWA calculation for wavelength = 994.7368421052631 nm\nINFO: RCWA calculation for wavelength = 931.578947368421 nm\nINFO: RCWA calculation for wavelength = 1026.3157894736842 nm\nINFO: RCWA calculation for wavelength = 900.0000000000001 nm\nINFO: RCWA calculation for wavelength = 1042.1052631578948 nm\nINFO: RCWA calculation for wavelength = 963.1578947368421 nm\nINFO: RCWA calculation for wavelength = 1057.8947368421054 nm\nINFO: RCWA calculation for wavelength = 1073.6842105263158 nm\nINFO: RCWA calculation for wavelength = 1089.4736842105265 nm\nINFO: RCWA calculation for wavelength = 1105.2631578947369 nm\nINFO: RCWA calculation for wavelength = 1121.0526315789475 nm\nINFO: RCWA calculation for wavelength = 1136.842105263158 nm\nINFO: RCWA calculation for wavelength = 1152.6315789473683 nm\nINFO: RCWA calculation for wavelength = 1168.421052631579 nm\nINFO: RCWA calculation for wavelength = 1184.2105263157896 nm\nINFO: RCWA calculation for wavelength = 1200.0000000000002 nm\nINFO: Ray tracing with Fresnel equations for element 0 in structure\nINFO: Calculating matrix only for incidence theta/phi\nINFO: RT calculation for wavelength = 931.578947368421 nm\nINFO: RT calculation for wavelength = 900.0000000000001 nm\nINFO: RT calculation for wavelength = 915.7894736842105 nm\nINFO: RT calculation for wavelength = 947.3684210526316 nm\nINFO: RT calculation for wavelength = 963.1578947368421 nm\nINFO: RT calculation for wavelength = 978.9473684210526 nm\nINFO: RT calculation for wavelength = 994.7368421052631 nm\nINFO: RT calculation for wavelength = 1010.5263157894736 nm\nINFO: RT calculation for wavelength = 1042.1052631578948 nm\nINFO: RT calculation for wavelength = 1026.3157894736842 nm\nINFO: RT calculation for wavelength = 1057.8947368421054 nm\nINFO: RT calculation for wavelength = 1073.6842105263158 nm\nINFO: RT calculation for wavelength = 1089.4736842105265 nm\nINFO: RT calculation for wavelength = 1105.2631578947369 nm\nINFO: RT calculation for wavelength = 1136.842105263158 nm\nINFO: RT calculation for wavelength = 1152.6315789473683 nm\nINFO: RT calculation for wavelength = 1121.0526315789475 nm\nINFO: RT calculation for wavelength = 1168.421052631579 nm\nINFO: RT calculation for wavelength = 1184.2105263157896 nm\nINFO: RT calculation for wavelength = 1200.0000000000002 nm\nINFO: RT calculation for wavelength = 900.0000000000001 nm\nINFO: RT calculation for wavelength = 915.7894736842105 nm\nINFO: RT calculation for wavelength = 931.578947368421 nm\nINFO: RT calculation for wavelength = 947.3684210526316 nm\nINFO: RT calculation for wavelength = 963.1578947368421 nm\nINFO: RT calculation for wavelength = 978.9473684210526 nm\nINFO: RT calculation for wavelength = 994.7368421052631 nm\nINFO: RT calculation for wavelength = 1010.5263157894736 nm\nINFO: RT calculation for wavelength = 1026.3157894736842 nm\nINFO: RT calculation for wavelength = 1042.1052631578948 nm\nINFO: RT calculation for wavelength = 1057.8947368421054 nm\nINFO: RT calculation for wavelength = 1073.6842105263158 nm\nINFO: RT calculation for wavelength = 1089.4736842105265 nm\nINFO: RT calculation for wavelength = 1105.2631578947369 nm\nINFO: RT calculation for wavelength = 1121.0526315789475 nm\nINFO: RT calculation for wavelength = 1136.842105263158 nm\nINFO: RT calculation for wavelength = 1152.6315789473683 nm\nINFO: RT calculation for wavelength = 1168.421052631579 nm\nINFO: RT calculation for wavelength = 1184.2105263157896 nm\nINFO: RT calculation for wavelength = 1200.0000000000002 nm\nINFO: Making matrix for planar surface using TMM for element 2 in structure\n\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.WARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found." + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-layers", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#defining-layers", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Defining layers", + "text": "Defining layers\nNow we define the emitter and base layers we will have in the solar cell; we specify their thickness, the material they are made of and the role they play within the cell (emitter or base). We create a junction which is a total of 200 \\(\\mu\\)m thick, with a 1 \\(\\mu\\)m junction depth.\n\nemitter_layer = Layer(width=si(\"1um\"), material=Si_p, role='emitter')\nbase_layer = Layer(width=si(\"199um\"), material=Si_n, role='base')\n\nNow we create the p-n junction using the layers defined above. We set kind=“DA” to tell Solcore to use the Depletion Approximation in the calculation:\n\nSi_junction = Junction([emitter_layer, base_layer], kind=\"DA\")" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#calculating-rat", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#calculating-rat", - "title": "Section 8: Textured Si", - "section": "Calculating R/A/T", - "text": "Calculating R/A/T\nThen we ask RayFlare to calculate the reflection, transmission and absorption through matrix multiplication, and get the required result out (absorption in the bulk) for each cell. We also load the results from the reference paper to compare them to the ones calculated with RayFlare.\n\nresults_fig6 = calculate_RAT(SC_fig6, options, save_location='current')\nresults_fig7 = calculate_RAT(SC_fig7, options, save_location='current')\nresults_fig8 = calculate_RAT(SC_fig8, options, save_location='current')\n\nRAT_fig6 = results_fig6[0]\nRAT_fig7 = results_fig7[0]\nRAT_fig8 = results_fig8[0]\n\nsim_fig6 = np.loadtxt(\"data/optos_fig6_sim.csv\", delimiter=\",\")\nsim_fig7 = np.loadtxt(\"data/optos_fig7_sim.csv\", delimiter=\",\")\nsim_fig8 = np.loadtxt(\"data/optos_fig8_sim.csv\", delimiter=\",\")\n\nFinally, we use TMM to calculate the absorption in a structure with a planar front and planar rear, as a reference.\n\nstruc = tmm_structure([Layer(si(\"200um\"), Si)], incidence=Air, transmission=Air)\noptions.coherent = False\noptions.coherency_list = [\"i\"]\nRAT = tmm_structure.calculate(struc, options)" + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#setting-user-options", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#setting-user-options", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Setting user options", + "text": "Setting user options\nWavelengths we want to use in the calculations; wavelengths between 300 and 1200 nm, at 200 evenly spaced intervals:\n\nwavelengths = si(np.linspace(300, 1200, 200), \"nm\")\n\nNote that here and above in defining the layers and materials we have used the “si()” function multiple times: you can use this to automatically convert quantities in other units to base SI units (e.g. nanometres to metres).\nNow we specify some options for running the calculation. Initially we will use the Beer-Lambert absorption law (\\(I(z) = I_0 e^{-\\alpha*z}\\)) to calculate the optics of the cell (“BL”). We set the wavelengths we want to use, and we set “recalculate_absorption” to True so that further down in the script when we try different optics methods, Solcore knows we want to re-calculate the optics of the cell rather than re-using previous results. We can specify the options in a Python format called a dictionary:\n\noptions = {\n \"recalculate_absorption\": True,\n \"optics_method\": \"BL\",\n \"wavelength\": wavelengths\n }" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#plotting", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#plotting", - "title": "Section 8: Textured Si", - "section": "Plotting", - "text": "Plotting\nPlot everything together, including data from the reference paper for comparison:\n\npalhf = sns.color_palette(\"hls\", 4)\n\nfig = plt.figure()\nplt.plot(sim_fig6[:, 0], sim_fig6[:, 1],\n \"--\", color=palhf[0], label=\"OPTOS - rear grating (1)\")\nplt.plot(wavelengths * 1e9, RAT_fig6[\"A_bulk\"][0],\n \"-o\", color=palhf[0], label=\"RayFlare - rear grating (1)\", fillstyle=\"none\")\nplt.plot(sim_fig7[:, 0], sim_fig7[:, 1],\n \"--\", color=palhf[1], label=\"OPTOS - front pyramids (2)\",)\nplt.plot(wavelengths * 1e9, RAT_fig7[\"A_bulk\"][0],\n \"-o\", color=palhf[1], label=\"RayFlare - front pyramids (2)\", fillstyle=\"none\")\nplt.plot(sim_fig8[:, 0], sim_fig8[:, 1],\n \"--\", color=palhf[2], label=\"OPTOS - grating + pyramids (3)\")\nplt.plot(wavelengths * 1e9, RAT_fig8[\"A_bulk\"][0],\n \"-o\", color=palhf[2],label=\"RayFlare - grating + pyramids (3)\", fillstyle=\"none\",)\nplt.plot(wavelengths * 1e9, RAT[\"A_per_layer\"][:, 0], \"-k\", label=\"Planar\")\nplt.legend(loc=\"lower left\")\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Absorption in Si\")\nplt.xlim([900, 1200])\nplt.ylim([0, 1])\nplt.show()\n\n\n\n\nWe can see good agreement between the reference values and our calculated values. The structure with rear grating also behaves identically to the planar TMM reference case at the short wavelengths where front surface reflection dominates the result, as expected. Clearly, the pyramids perform much better overall, giving a large boost in the absorption at long wavelengths and also reducing the reflection significantly at shorter wavelengths. Plotting reflection and transmission emphasises this:\n\nfig = plt.figure()\nplt.plot(wavelengths * 1e9,RAT_fig6[\"R\"][0],\n \"-o\", color=palhf[0], label=\"RayFlare - rear grating (1)\", fillstyle=\"none\")\nplt.plot(wavelengths * 1e9, RAT_fig7[\"R\"][0],\n \"-o\", color=palhf[1], label=\"RayFlare - front pyramids (2)\", fillstyle=\"none\")\nplt.plot(wavelengths * 1e9, RAT_fig8[\"R\"][0],\n \"-o\", color=palhf[2], label=\"RayFlare - grating + pyramids (3)\", fillstyle=\"none\")\n\nplt.plot(wavelengths * 1e9, RAT_fig6[\"T\"][0], \"--o\", color=palhf[0])\nplt.plot(wavelengths * 1e9, RAT_fig7[\"T\"][0], \"--o\", color=palhf[1])\nplt.plot(wavelengths * 1e9, RAT_fig8[\"T\"][0], \"--o\", color=palhf[2])\n\n# these are just to create the legend:\nplt.plot(-1, 0, \"k-o\", label=\"R\", fillstyle=\"none\")\nplt.plot(-1, 0, \"k--o\", label=\"T\")\n\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"Reflected/transmitted fraction\")\nplt.xlim([900, 1200])\nplt.ylim([0, 0.6])\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#running-cell-simulations", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#running-cell-simulations", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Running cell simulations", + "text": "Running cell simulations\nDefine the solar cell; in this case it is very simple and we just have a single junction:\n\nsolar_cell = SolarCell([Si_junction])\n\nNow we use solar_cell_solver to calculate the QE of the cell; we can ask solar_cell_solver to calculate ‘qe’, ‘optics’ or ‘iv’.\n\nsolar_cell_solver(solar_cell, 'qe', options)\n\nSolving QE of the solar cell...\n\n\nPLOT 1: plotting the QE in the Si junction, as well as the fraction of light absorbed in the junction and reflected. Because we are using the Beer-Lambert absorption law and we did not specify external reflectance, the reflectance = 0 over the whole wavelength range.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell[0].eqe(wavelengths), 'k-', label=\"EQE\")\nplt.plot(wavelengths*1e9, 100*solar_cell[0].layer_absorption, label='Absorptance (A)')\nplt.plot(wavelengths*1e9, 100*solar_cell.reflected, label='Reflectance (R)')\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"QE/Absorptance (%)\")\nplt.title(\"(1) QE of Si cell - Beer-Lambert absorption\")\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#redistribution-matrices", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#redistribution-matrices", - "title": "Section 8: Textured Si", - "section": "Redistribution matrices", - "text": "Redistribution matrices\nPlot the redistribution matrix for the rear grating (summed over azimuthal angles) at 1100 nm:\n\ntheta_intv, phi_intv, angle_vector = make_angle_vector(\n options[\"n_theta_bins\"], options[\"phi_symmetry\"], options[\"c_azimuth\"])\n\npath = get_savepath(save_location='current', project_name=options.project_name)\nsprs = load_npz(os.path.join(path, SC_fig6[2].name + \"frontRT.npz\"))\n\nwl_to_plot = 1100e-9\nwl_index = np.argmin(np.abs(wavelengths - wl_to_plot))\n\nfull = sprs[wl_index].todense()\n\nsummat = theta_summary(full, angle_vector, options[\"n_theta_bins\"], \"front\")\nsummat_r = summat[: options[\"n_theta_bins\"], :]\nsummat_r = summat_r.rename({ r\"$\\theta_{in}$\": r\"$\\sin(\\theta_{in})$\",\n r\"$\\theta_{out}$\": r\"$\\sin(\\theta_{out})$\"})\n\nsummat_r = summat_r.assign_coords({r\"$\\sin(\\theta_{in})$\": np.sin(summat_r.coords[r\"$\\sin(\\theta_{in})$\"]).data,\n r\"$\\sin(\\theta_{out})$\": np.sin(summat_r.coords[r\"$\\sin(\\theta_{out})$\"]).data})\n\npalhf = sns.cubehelix_palette(256, start=0.5, rot=-0.9)\npalhf.reverse()\nseamap = mpl.colors.ListedColormap(palhf)\n\nfig = plt.figure()\nax = plt.subplot(111)\nax = summat_r.plot.imshow(ax=ax, cmap=seamap, vmax=0.3)\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-fresnel", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-fresnel", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Adding front-surface reflection: Fresnel", + "text": "Adding front-surface reflection: Fresnel\nNow, to make this calculation a bit more realistic, there are a few things we could do. We could load some measured front surface reflectance from a file, or we could calculate the reflectance. To calculate the reflectance, there are many approaches we could take; we are going to explore two of them here.\nIf we assume the silicon is infinitely thick (or at least much thicker than the wavelengths of light we care about) then the reflectance will approach the reflectivity of a simple air/Si interface. We can calculate what this is using the Fresnel equation for reflectivity.\n\ndef calculate_R_Fresnel(incidence_n, transmission_n, wl):\n # return a function that gives the value of R (at normal incidence) at the input wavelengths\n\n Rs = np.abs((incidence_n - transmission_n)/(incidence_n + transmission_n))**2\n\n return interp1d(wl, Rs)\n\nThe transmission_n is the complex reflective index of Si at our wavelengths for the transmission medium (Si), which we can extract easily from the Si material object in Solcore. The incidence_n = 1 (air). Note that the function above is specifically for normal incidence.\n\ntrns_n = Si_n.n(wavelengths) + 1j*Si_n.k(wavelengths)\nreflectivity_fn = calculate_R_Fresnel(1, trns_n, wavelengths)\n\nWe define the solar cell again, with the same layers but now supplying the function for the externally-calculated reflectivity, and calculate the optics (reflection, absorption, transmission) again:\n\nsolar_cell_fresnel = SolarCell([Si_junction], reflectivity=reflectivity_fn)\n\nsolar_cell_solver(solar_cell_fresnel, 'optics', options)" }, { - "objectID": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#questions", - "href": "solcore-workshop-2/notebooks/8-grating_pyramids_OPTOS.html#questions", - "title": "Section 8: Textured Si", - "section": "Questions", - "text": "Questions\n\nIf you can add only one of the textures (pyramids or a grating), which one is better? Why?\nWhy do the structures with a front-surface texture have high reflection at long wavelengths? The anti-reflection properties of pyramids (treated with ray optics) are mostly independent of the wavelength, so why does apparent reflection increase near the bandgap of Si?\nCan you explain any of the features present in the angular redistribution matrix of the rear grating surface?" + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-tmm", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-front-surface-reflection-tmm", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Adding front surface reflection: TMM", + "text": "Adding front surface reflection: TMM\nFinally, we do the same again but now instead of supplying the external reflectivity we ask set the optics_method to “TMM” (Transfer Matrix Method), to correctly calculate reflection at the front surface. We will learn more about the transfer matrix method later.\n\nSi_junction = Junction([emitter_layer, base_layer], kind=\"DA\")\n\nsolar_cell_TMM = SolarCell([Si_junction])\n\nSet some more options for the cell calculation:\n\noptions[\"optics_method\"] = \"TMM\"\nvoltages = np.linspace(-1.1, 1.1, 100)\noptions[\"light_iv\"] = True\noptions[\"mpp\"] = True\noptions[\"voltages\"] = voltages\noptions[\"internal_voltages\"] = voltages\n\nwe calculate the QE and the IV (we set the light_iv option to True; if we don’t do this, Solcore just calculates the dark IV). We also ask Solcore to find the maximum power point (mpp) so we can get the efficiency. Note that the sign convention used by Solcore means that an n-on-p cell with have a negative open-circuit voltage.\n\nsolar_cell_solver(solar_cell_TMM, 'iv', options)\nsolar_cell_solver(solar_cell_TMM, 'qe', options)\n\nTreating layer(s) 1 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\nTreating layer(s) 1 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving QE of the solar cell...\n\n\nPLOT 2: here we plot the reflection, transmission, and absorption calculated with the Fresnel equation defined above, and with the TMM solver in Solcore, showing that for this simple situation (no anti-reflection coating, thick Si junction) they are exactly equivalent.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, color='firebrick', label = \"R (TMM)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_fresnel.reflected, '--', color='orangered', label = \"R (Fresnel)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.absorbed, color='dimgrey', label = \"A (TMM)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_fresnel.absorbed, '--', color='lightgrey', label = \"A (Fresnel)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, color='blue', label = \"T (TMM)\")\nplt.plot(wavelengths*1e9, 100*solar_cell_fresnel.transmitted, '--', color='dodgerblue', label = \"T (Fresnel)\")\nplt.ylim(0, 100)\nplt.legend()\nplt.title(\"(2) Optics of Si cell - Fresnel/TMM\")\nplt.show()\n\n\n\n\nPLOT 3: As above for the TMM calculation, plotting the EQE as well, which will be slightly lower than the absorption because not all the carriers are collected. Comparing to plot (1), we can see we now have lower absorption due to the inclusion of front surface reflection, which is ~ 30% or more over the wavelength range of interest for a bare Si surface.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].eqe(wavelengths), 'k-', label=\"EQE\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].layer_absorption, label='A')\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, label=\"R\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, label=\"T\")\nplt.title(\"(3) QE of Si cell (no ARC) - TMM\")\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"QE/Absorptance (%)\")\nplt.ylim(0, 100)\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html", - "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html", - "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", - "section": "", - "text": "This example shows how you can simulate a perovskite-Si tandem cell with pyramidal surface textures, where the perovskite and other surface layers are assumed to be deposited conformally (i.e., also in a pyramid shape) on top of the Si. The perovskite optical constants are from this paper, while the structure is based on this paper We will calculate total reflection, transmission and absorption per layer as well as the wavelength-dependent absorption profiles in the perovskite and Si, which can be used in e.g. device simulations. We will look at the effect of treating the layers deposited on Si (including the perovskite) coherently or incoherently.\nFirst, import relevant packages and RayFlare functions:\nimport numpy as np\nimport os\n\nfrom solcore.structure import Layer\nfrom solcore.constants import q\nfrom solcore import material\nfrom solcore.absorption_calculator import search_db, download_db\nfrom solcore.light_source import LightSource\n\nfrom rayflare.textures import regular_pyramids\nfrom rayflare.options import default_options\nfrom rayflare.ray_tracing import rt_structure\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom cycler import cycler\nNow we set some relevant options. We will scan across 20 x 20 surface points of the pyramid unit cell between 300 and 1200 nm, for unpolarized, normally-incident light. The randomize_surface option is set to True to prevent correlation between the incident position on the front and rear pyramids. The n_jobs option is set to -1, which means that all available cores will be used. If you want to use all but one core, change this to -2 etc. We also need to provide a project_name to save the lookup tables which will be calculated using TMM to use during ray-tracing.\nwavelengths = np.linspace(300, 1200, 40) * 1e-9\n\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wavelengths,\n output_units=\"photon_flux_per_m\")\n\noptions = default_options()\noptions.wavelength = wavelengths\noptions.nx = 20\noptions.ny = options.nx\noptions.n_rays = 4 * options.nx**2\noptions.depth_spacing = 1e-9\noptions.pol = \"u\"\noptions.I_thresh = 1e-3\noptions.project_name = \"perovskite_Si_rt\"\noptions.randomize_surface = True\noptions.n_jobs = -1 # use all cores; to use all but one, change to -2 etc.\nWe define our materials. Note that some of these are custom materials added to the database; we only need to do this once. We then define the front layer stack (i.e. all the materials which are on top of the Si, excluding Si itself, which will be the ‘bulk’ material) and the rear layer stack. Layer stacks are always defined starting with the layer closest to the top of the cell.\n# Can comment out this block after running once to add materials to the database\nfrom solcore.material_system import create_new_material\n\ncreate_new_material(\"Perovskite_CsBr_1p6eV\", \"data/CsBr10p_1to2_n_shifted.txt\",\n \"data/CsBr10p_1to2_k_shifted.txt\")\ncreate_new_material(\"ITO_lowdoping\", \"data/model_back_ito_n.txt\",\n \"data/model_back_ito_k.txt\")\ncreate_new_material(\"aSi_i\", \"data/model_i_a_silicon_n.txt\",\n \"data/model_i_a_silicon_k.txt\")\ncreate_new_material(\"aSi_p\", \"data/model_p_a_silicon_n.txt\",\n \"data/model_p_a_silicon_k.txt\")\ncreate_new_material(\"aSi_n\", \"data/model_n_a_silicon_n.txt\",\n \"data/model_n_a_silicon_k.txt\")\ncreate_new_material(\"C60\", \"data/C60_Ren_n.txt\",\n \"data/C60_Ren_k.txt\")\ncreate_new_material(\"IZO\", \"data/IZO_Ballif_rO2_10pcnt_n.txt\",\n \"data/IZO_Ballif_rO2_10pcnt_k.txt\")\n# Comment out until here\n# download_db()\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nSi = material(\"Si\")()\nAir = material(\"Air\")()\nMgF2 = material(str(MgF2_pageid), nk_db=True)()\nITO_back = material(\"ITO_lowdoping\")()\nPerovskite = material(\"Perovskite_CsBr_1p6eV\")()\nAg = material(str(Ag_pageid), nk_db=True)()\naSi_i = material(\"aSi_i\")()\naSi_p = material(\"aSi_p\")()\naSi_n = material(\"aSi_n\")()\nLiF = material(\"LiF\")()\nIZO = material(\"IZO\")()\nC60 = material(\"C60\")()\n\n# stack based on doi:10.1038/s41563-018-0115-4\nfront_materials = [\n Layer(100e-9, MgF2),\n Layer(110e-9, IZO),\n Layer(15e-9, C60),\n Layer(1e-9, LiF),\n Layer(440e-9, Perovskite),\n Layer(6.5e-9, aSi_n),\n Layer(6.5e-9, aSi_i),\n]\n\nback_materials = [Layer(6.5e-9, aSi_i), Layer(6.5e-9, aSi_p), Layer(240e-9, ITO_back)]\nNow we define our front and back surfaces, including interface_layers. We will use regular pyramids for both the front and back surface; these pyramids point out on both sides, but since the direction of the pyramids is defined relative to the front surface, we must set upright=True for the top surface and upright=False for the rear surface. We also gives the surfaces a name (used to save the lookup table data) and ask RayFlare to calculate the absorption profile in the 5th layer, which is the perovskite.\ntriangle_surf = regular_pyramids(\n elevation_angle=55,\n upright=True,\n size=1,\n interface_layers=front_materials,\n name=\"coh_front\",\n prof_layers=[5],\n)\n\ntriangle_surf_back = regular_pyramids(\n elevation_angle=55,\n upright=False,\n size=1,\n interface_layers=back_materials,\n name=\"Si_back\",\n coherency_list=[\"i\"] * len(back_materials),\n)\nNow we make our ray-tracing structure by combining the front and back surfaces, specifying the material in between (Si) and setting its width to 260 microns. In order to use the TMM lookuptables to calculate reflection/transmission/absorption probabilities we must also set use_TMM=True.\nrtstr_coh = rt_structure(\n textures=[triangle_surf, triangle_surf_back],\n materials=[Si],\n widths=[260e-6],\n incidence=Air,\n transmission=Ag,\n use_TMM=True,\n options=options,\n overwrite=True,\n save_location=\"current\",\n)\n\n# calculate:\nresult_coh = rtstr_coh.calculate(options)\nNow we define the same front surface and structure again, except now we will treat all the layers incoherently (i.e. no thin-film interference) in the TMM.\ntriangle_surf = regular_pyramids(\n elevation_angle=55,\n upright=True,\n size=1,\n interface_layers=front_materials,\n coherency_list=[\"i\"] * len(front_materials),\n name=\"inc_front\",\n prof_layers=[5],\n)\n\nrtstr_inc = rt_structure(\n textures=[triangle_surf, triangle_surf_back],\n materials=[Si],\n widths=[260e-6],\n incidence=Air,\n transmission=Ag,\n use_TMM=True,\n options=options,\n overwrite=True,\n save_location=\"current\",\n)\n\nresult_inc = rtstr_inc.calculate(options)\nNow we plot the results for reflection, transmission, and absorption per layer for both the coherent and incoherent cases.\npal = sns.color_palette(\"husl\", n_colors=len(front_materials) + len(back_materials) + 2)\n# create a colour palette\n\ncols = cycler(\"color\", pal)\n# set this as the default colour palette in matplotlib\n\nparams = {\n \"axes.prop_cycle\": cols,\n}\n\nplt.rcParams.update(params)\n\nfig = plt.figure(figsize=(8, 3.7))\nplt.subplot(1, 1, 1)\nplt.plot(wavelengths * 1e9, result_coh[\"R\"], \"-ko\", label=\"R\")\nplt.plot(wavelengths * 1e9, result_coh[\"T\"], mfc=\"none\", label=\"T\")\nplt.plot(wavelengths * 1e9, result_coh[\"A_per_layer\"][:, 0], \"-o\", label='Si')\nplt.plot(wavelengths * 1e9, result_coh[\"A_per_interface\"][0], \"-o\",\n label=[None, \"IZO\", \"C60\", None, \"Perovskite\", None, None])\nplt.plot(wavelengths * 1e9, result_coh[\"A_per_interface\"][1], \"-o\",\n label=[None, None, \"ITO\"])\n\nplt.plot(wavelengths * 1e9, result_inc[\"R\"], \"--ko\", mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"T\"], mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"A_per_layer\"][:, 0], \"--o\", mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"A_per_interface\"][0], \"--o\", mfc=\"none\")\nplt.plot(wavelengths * 1e9, result_inc[\"A_per_interface\"][1], \"--o\", mfc=\"none\")\n\nplt.plot([300, 301], [0, 0], \"-k\", label=\"coherent\")\nplt.plot([300, 301], [0, 0], \"--k\", label=\"incoherent\")\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"R / A / T\")\nplt.ylim(0, 1)\nplt.xlim(300, 1200)\nplt.legend(bbox_to_anchor=(1.05, 1))\nplt.tight_layout()\nplt.show()\nCalculate and print the limiting short-circuit current per junction:\nJmax_Pero_coh = q*np.trapz(result_coh[\"A_per_interface\"][0][:,4]*AM15G.spectrum()[1],\n x=wavelengths)/10\nJmax_Si_coh = q*np.trapz(result_coh[\"A_per_layer\"][:, 0]*AM15G.spectrum()[1],\n x=wavelengths)/10\n\nprint(\"Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:\"\n \".2f}\".format(Jmax_Pero_coh, Jmax_Si_coh))\n\nJmax_Pero_inc = q*np.trapz(result_inc[\"A_per_interface\"][0][:,4]*AM15G.spectrum()[1],\n x=wavelengths)/10\nJmax_Si_inc = q*np.trapz(result_inc[\"A_per_layer\"][:, 0]*AM15G.spectrum()[1],\n x=wavelengths)/10\n\nprint(\"Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:\"\n \".2f}\".format(Jmax_Pero_inc, Jmax_Si_inc))\nWe can also plot the absorption profiles, for wavelengths up to 800 nm, in the perovskite (since we asked the solver to calculate the profile in the perovskite layer above).\nwl_Eg = wavelengths < 800e-9\n\npal = sns.cubehelix_palette(sum(wl_Eg), reverse=True)\ncols = cycler(\"color\", pal)\nparams = {\n \"axes.prop_cycle\": cols,\n}\nplt.rcParams.update(params)\n\npos = np.arange(0, rtstr_coh.interface_layer_widths[0][4], options.depth_spacing*1e9)\n\nfig, (ax1, ax2) = plt.subplots(1,2)\nax1.plot(pos, result_coh[\"interface_profiles\"][0][wl_Eg].T)\nax1.set_ylim(0, 0.02)\nax1.set_xlabel(\"z (nm)\")\nax1.set_ylabel(\"a(z)\")\nax1.set_title(\"Coherent\")\nax2.plot(pos, result_inc[\"interface_profiles\"][0][wl_Eg].T)\nax2.set_ylim(0, 0.02)\nax2.yaxis.set_ticklabels([])\nax2.set_xlabel(\"z (nm)\")\nax2.set_title(\"Incoherent\")\nplt.show()\nWe see that, as expected, the coherent case shows interference fringes while the incoherent case does not. We can also plot the absorption profile in the Si (> 800 nm):\npos_bulk = pos = np.arange(0, rtstr_coh.widths[0]*1e6, options.depth_spacing_bulk*1e6)\n\nfig, (ax1, ax2) = plt.subplots(1,2)\nax1.semilogy(pos, result_coh[\"profile\"][~wl_Eg].T)\nax1.set_ylim(1e-8, 0.00015)\nax1.set_xlabel(\"z (um)\")\nax1.set_ylabel(\"a(z)\")\nax1.set_title(\"Coherent\")\nax2.semilogy(pos, result_inc[\"profile\"][~wl_Eg].T)\nax2.set_ylim(1e-8, 0.00015)\nax2.yaxis.set_ticklabels([])\nax2.set_xlabel(\"z (um)\")\nax2.set_title(\"Incoherent\")\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-an-arc", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#adding-an-arc", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Adding an ARC", + "text": "Adding an ARC\nThe reflectance of bare Si is very high. Let’s try adding a simple anti-reflection coating (ARC), a single layer of silicon nitride (Si\\(_3\\)N\\(_4\\)):\n\nSiN = material(\"Si3N4\")()\n\nSi_junction = Junction([emitter_layer, base_layer], kind=\"DA\")\n\nsolar_cell_TMM_ARC = SolarCell([Layer(width=si(75, \"nm\"), material=SiN), Si_junction])\n\nsolar_cell_solver(solar_cell_TMM_ARC, 'qe', options)\nsolar_cell_solver(solar_cell_TMM_ARC, 'iv', options)\n\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving QE of the solar cell...\nTreating layer(s) 2 incoherently\nCalculating RAT...\nCalculating absorption profile...\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\nPLOT 4: Absorption, EQE, reflection and transmission for the cell with a simple one-layer ARC. We see the reflection is significantly reduced from the previous plot leading to higher absorption/EQE.\n\nplt.figure()\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].eqe(wavelengths), 'k-', label=\"EQE\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].layer_absorption, label='A')\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.reflected, label=\"R\")\nplt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.transmitted, label=\"T\")\nplt.legend()\nplt.title(\"(4) QE of Si cell (ARC) - TMM\")\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"QE/Absorptance (%)\")\nplt.ylim(0, 100)\nplt.show()\n\n\n\n\nPLOT 5: Compare the IV curves of the cells with and without an ARC. The efficiency is also shown on the plot. Note that because we didn’t specify a light source, Solcore will assume we want to use AM1.5G; in later examples we will set the light source used for light IV simulations explicitly.\n\nplt.figure()\nplt.plot(voltages, -solar_cell_TMM[0].iv(voltages)/10, label=\"No ARC\")\nplt.plot(voltages, -solar_cell_TMM_ARC[1].iv(voltages)/10, label=\"75 nm SiN\")\nplt.text(0.5, 1.02*abs(solar_cell_TMM.iv[\"Isc\"])/10, str(round(solar_cell_TMM.iv[\"Eta\"]*100,\n 1)) + ' %')\nplt.text(0.5, 1.02*abs(solar_cell_TMM_ARC.iv[\"Isc\"])/10, str(round(solar_cell_TMM_ARC\n .iv[\"Eta\"]*100, 1)) + ' %')\nplt.ylim(0, 38)\nplt.xlim(-0.8, 0.8)\nplt.legend()\nplt.xlabel(\"V (V)\")\nplt.ylabel(r\"J (mA/cm$^2$)\")\nplt.title(\"(5) IV curve of Si cell with and without ARC\")\nplt.show()" }, { - "objectID": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#questions", - "href": "solcore-workshop-2/notebooks/10-perovskite_Si_rt.html#questions", - "title": "Section 10: Perovskite-Si tandem cell with pyramidal surfaces", + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#conclusions", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#conclusions", + "title": "Section 5a: Planar Si solar cell using DA", + "section": "Conclusions", + "text": "Conclusions\nWe see that the cell with an ARC has a significantly higher \\(J_{sc}\\), and a slightly higher \\(V_{oc}\\), than the bare Si cell. In reality, most Si cells have a textured surface rather than a planar surface with an ARC; this will be discussed later in the course.\nOverall, some things we can take away from the examples in this script:\n\nThe Beer-Lambert law is a very simple way to calculate absorption in a cell, but won’t take into account important effects such as front-surface reflection or the effects of anti-reflection coatings.\nUsing the transfer-matrix method (TMM), we can account for front surface reflection and interference effects which make e.g. ARCs effective. In the simple situation of a thick cell without any front surface layers, it is equivalent to simply calculating the reflection with the Fresnel equations and assuming Beer-Lambert absorption in the cell.\nAdding a simple, one-layer ARC can significantly reduce front-surface reflection for a single-junction cell, leading to improved short-circuit current. To correctly account for interference in this layer, which is what causes its anti-reflective properties, we most use the transfer-matrix method (TMM) optical solver." + }, + { + "objectID": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#questions", + "href": "solcore-workshop-2/notebooks/5a-simple_Si_cell.html#questions", + "title": "Section 5a: Planar Si solar cell using DA", "section": "Questions", - "text": "Questions\n\nWhy do you think the total absorption is slightly lower in the incoherent calculation?\nEven though the layers on top of the Si are not very thick compared to the wavelength, and they are the first thing encountered by the light, why might it make sense to treat them incoherently?\nCan you improve the current-matching (at least in terms of limiting currents) between the perovskite and the Si?" + "text": "Questions\n\nWhich parameters could we change which would affect the EQE and/or IV of the cell?\nWhy can’t we just use the Fresnel equations to calculate the effect of an anti-reflection coating?" }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html", + "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html", + "title": "Section 6b: Optimizing an ARC", "section": "", - "text": "The structure in this example is based on that of the previous example (9a), but with the planar bottom Si cell replaced by a Si cell with a pyramidal texture, bonded to the III-V top cells with a low-index epoxy/glass layer.\nWe could use the angular redistribution matrix method as in the previous example - however, because in this example we only need to use TMM and ray-tracing (RT), we can use the ray-tracing method with integrated RT directly (this is generally faster, because we do not need to calculate the behaviour of the surfaces for every angle of incidence)." + "text": "In the previous example, we introduced a simple one-layer anti-reflection coating (ARC); ARCs are a standard feature of all high-efficiency solar cells. But how do you find out the right thickness for the anti-reflection coating layer(s) (or the right dimensions for a light-trapping grating, or some other structure in your cell)? This is where optimization comes in. Here, we will look at a very simple ‘brute-force’ optimization for a single or double-layer ARC.\nimport numpy as np\nimport os\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\nfrom solcore.solar_cell import Layer, SolarCell\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom solcore.light_source import LightSource\nfrom solcore.absorption_calculator import search_db, download_db\nfrom solcore.absorption_calculator import calculate_rat\nfrom solcore.state import State\n\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.options import default_options\nimport seaborn as sns" }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#setting-up", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#setting-up", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#setting-up", + "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#setting-up", + "title": "Section 6b: Optimizing an ARC", "section": "Setting up", - "text": "Setting up\nWe load relevant packages and define materials, the same as in the previous example.\n\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer\nfrom solcore.light_source import LightSource\nfrom rayflare.ray_tracing import rt_structure\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.textures import planar_surface, regular_pyramids\nfrom rayflare.options import default_options\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# download_db()\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nTa2O5_pageid = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0];\nSU8_pageid = search_db(\"SU8\")[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nepoxy = material(\"BK7\")()\n\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nTa2O5 = material(str(Ta2O5_pageid), nk_db=True)();\nSU8 = material(str(SU8_pageid), nk_db=True)();\nAg = material(str(Ag_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")\nAlGaAs = material(\"AlGaAs\")\n\nAir = material(\"Air\")()\n\nGaAs = material(\"GaAs\")\n\nSi = material(\"Si\")\n\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n234 main MgF2 Rodriguez-de_Marcos main/MgF2/Rodriguez-de Marcos.yml 1 1 0.0299919 2.00146 960\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n475 main Ta2O5 Rodriguez-de_Marcos main/Ta2O5/Rodriguez-de Marcos.yml 1 1 0.0294938 1.51429 212\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n2 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2835 other negative_tone_photoresists Microchem_SU8_2000 other/resists/Microchem SU-8 2000.yml 1 0 0.32 0.8 200\n2836 other negative_tone_photoresists Microchem_SU8_3000 other/resists/Microchem SU-8 3000.yml 1 0 0.32 1.7 200\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2 main Ag Jiang main/Ag/Jiang.yml 1 1 0.3 2.0 1701\n\n\nWe define the layers we will need, as before. We specify the thickness of the silicon (280 \\(\\mu\\)m) and epoxy (1 mm) at the top:\n\nd_Si = 280e-6 # thickness of Si wafer\nd_epoxy = 1e-6 # thickness of epoxy. In reality, the epoxy is much thicker, but the exact thickness doesn't matter \n # because the material is transparent and we will treat it incoherently.\n\nGaInP_total_thickness = 350e-9\nGaAs_total_thickness = 1200e-9\n\nARC = [Layer(110e-9, MgF2), Layer(65e-9, Ta2O5)]\n\nGaInP_junction = [Layer(20e-9, window), Layer(GaInP_total_thickness, GaInP(In=0.50))]\n\n# 100 nm TJ\ntunnel_1 = [Layer(100e-9, AlGaAs(Al=0.8)), Layer(20e-9, GaInP(In=0.5))]\n\nGaAs_junction = [Layer(20e-9, GaInP(In=0.5)), Layer(GaAs_total_thickness, GaAs()), Layer(70e-9, AlGaAs(Al=0.8))]\n\nspacer_ARC = [Layer(80e-9, Ta2O5)]" - }, - { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-cell-layers", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-cell-layers", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Defining the cell layers", - "text": "Defining the cell layers\nThere are three interfaces in the cell which will define the structure to simulate:\n\nthe III-V/epoxy interface, where the epoxy itself will be treated as a bulk layer in the simulation\nthe epoxy/Si interface, where the Si has a pyramidal texture (the Si itself is another bulk layer in the simulation).\nthe rear surface of the cell, where the Si again has a pyramidal texture (and we assume there is a silver back mirror behind the cell)\n\nThese 3 interfaces are defined here, using the pre-defined textures for a planar surface or regular pyramids:\n\nfront_layers = ARC + GaInP_junction + tunnel_1 + GaAs_junction + spacer_ARC\n\nfront_surf = planar_surface(interface_layers = front_layers, prof_layers=np.arange(1, len(front_layers)+1))\n\nSi_front = regular_pyramids(elevation_angle=50, upright=True)\n\nSi_back = regular_pyramids(elevation_angle=50, upright=False)\n\nNow we set relevant options for the solver. We set the number of rays to trace at each wavelength (more rays will make the result less noisy, but increase computation time) and whether to calculate the absorption profile in the bulk layers (no, in this case). The randomize_surface options determines whether the ray keeps track of its positions in the unit cell while travelling between surfaces; we set this to False to mimic random pyramids.\n\noptions = default_options()\n\nwl = np.arange(300, 1201, 10) * 1e-9\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl, output_units=\"photon_flux_per_m\")\n\noptions.wavelength = wl\noptions.project_name = \"III_V_Si_cell\"\n\n# options for ray-tracing\noptions.randomize_surface = True\noptions.n_rays = 1000\noptions.bulk_profile = False" - }, - { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-structures", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#defining-the-structures", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Defining the structures", - "text": "Defining the structures\nFinally, we define the ray-tracing structure we will use, using the interfaces, bulk materials, and options set above. Because we want to calculate the reflection/absorption/transmission probabilities at the front surface using TMM, we set the use_TMM argument to True. We also define a completely planar cell with the same layer thicknesses etc. to compare and evaluate the effect of the textures Si surfaces.\n\noptical_structure = rt_structure(\n textures=[front_surf, Si_front, Si_back],\n materials=[epoxy, Si()],\n widths=[d_epoxy, d_Si],\n incidence=Air,\n transmission=Ag,\n options=options,\n use_TMM=True,\n save_location=\"current\", # lookup table save location\n overwrite=True, # whether to overwrite any previously existing results, if found\n)\n\n# options for TMM\noptions.coherent = False\noptions.coherency_list = len(front_layers)*['c'] + ['i']*2\n\nplanar_optical_structure = tmm_structure(\n layer_stack = front_layers + [Layer(d_epoxy, epoxy), Layer(d_Si, Si())],\n incidence=Air,\n transmission=Ag,\n)\n\nINFO: Pre-computing TMM lookup table(s)\n\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/MgF2/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded.\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaterial main/Ta2O5/Rodriguez-de Marcos.yml loaded." + "text": "Setting up\nWe set some options, as in previous examples, setting the wavelengths and defining the incident spectrum. We are going to do a partially coherent calculation, treating the ARC as a coherent layer and the thick Si layer as incoherent (no thin-film interference).\n\nopts = State()\n\nwavelengths = np.linspace(300, 1200, 800)*1e-9\n\nAM15g = LightSource(source_type=\"standard\", version=\"AM1.5g\", output_units=\"photon_flux_per_m\")\nspectrum = AM15g.spectrum(wavelengths)[1]\nnormalised_spectrum = spectrum/np.max(spectrum)\n\nopts.wavelength = wavelengths\nopts.coherency_list = ['c', 'i']\nopts.optics_method = 'TMM'\nopts.position = 100e-6\nopts.no_back_reflection = False\n\nSi = material(\"Si\")()\nSiN = material(\"Si3N4\")()\nAg = material(\"Ag\")()\nAir = material(\"Air\")()" }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#calculations", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#calculations", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Calculations", - "text": "Calculations\nCalculate the R/A/T for the planar reference cell:\n\ntmm_result = planar_optical_structure.calculate(options=options)\n\nGaInP_A_tmm = tmm_result['A_per_layer'][:,3]\nGaAs_A_tmm = tmm_result['A_per_layer'][:,7]\nSi_A_tmm = tmm_result['A_per_layer'][:,len(front_layers)+1]\n\nJmax_GaInP_tmm = q*np.trapz(GaInP_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs_tmm = q*np.trapz(GaAs_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_Si_tmm = q*np.trapz(Si_A_tmm*AM15G.spectrum()[1], x=wl)/10\n\nCalculate the R/A/T for the textured cell:\n\nrt_result = optical_structure.calculate(options=options)\n\nGaInP_absorption_ARC = rt_result['A_per_interface'][0][:,3]\nGaAs_absorption_ARC = rt_result['A_per_interface'][0][:,7]\nSi_absorption_ARC = rt_result['A_per_layer'][:,1]\n\nJmax_GaInP = q*np.trapz(GaInP_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs = q*np.trapz(GaAs_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_Si = q*np.trapz(Si_absorption_ARC*AM15G.spectrum()[1], x=wl)/10" + "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#single-layer-arc", + "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#single-layer-arc", + "title": "Section 6b: Optimizing an ARC", + "section": "Single-layer ARC", + "text": "Single-layer ARC\nHere, we will calculate the behaviour of a single-layer SiN anti-reflection coating on Si while changing the ARC thickness between 0 and 200 nm. We will consider two values to optimize: the mean reflectance mean_R, and the reflectance weighted by the photon flux in an AM1.5G spectrum (weighted_R). The reason for considering the second value is that it is more useful to suppress reflection at wavelengths where there are more photons which could be absorbed by the cell (up to the cell’s bandgap).\nWe will loop through the different ARC thicknesses in d_range, build the structure for each case, and then calculate the reflectance. We then save the mean reflected and weighted mean reflectance in the corresponding arrays. We also plot the reflectance for each 15th loop (this is just so the plot does not get too crowded).\n\n%%capture\n\nd_range = np.linspace(0, 200, 200)\n\nmean_R = np.empty_like(d_range)\nweighted_R = np.empty_like(d_range)\n\ncols = sns.cubehelix_palette(np.ceil(len(d_range)/15))\n\nplt.figure()\njcol = 0\n\nfor i1, d in enumerate(d_range):\n\n struct = SolarCell([Layer(si(d, 'nm'), SiN), Layer(si('120um'), Si)], substrate=Ag)\n solar_cell_solver(struct, task='optics', user_options=opts)\n\n if i1 % 15 == 0:\n plt.plot(wavelengths*1e9, struct.reflected, label=str(np.round(d, 0)), color=cols[jcol])\n jcol += 1\n\n mean_R[i1] = np.mean(struct.reflected)\n weighted_R[i1] = np.mean(struct.reflected*normalised_spectrum)\n\nplt.legend()\nplt.show()\n\nWe now find at which index mean_R and weighted_R are minimised using np.argmin, and use this to print the ARC thickness at which this occurs (rounded to 1 decimal place).\n\nprint('Minimum mean reflection occurs at d = ' + str(np.round(d_range[np.argmin(mean_R)], 1)) + ' nm')\nprint('Minimum weighted reflection occurs at d = ' + str(np.round(d_range[np.argmin(weighted_R)], 1)) + ' nm')\n\nMinimum mean reflection occurs at d = 67.3 nm\nMinimum weighted reflection occurs at d = 74.4 nm\n\n\nWe see that the values of \\(d\\) for the two different ways of optimizing are very similar, but not exactly the same, as we would expect. The minimum in both cases occurs around 70 nm. We can also plot the variation of the mean and weighted \\(R\\) with ARC thickness \\(d\\):\n\nplt.figure()\nplt.plot(d_range, mean_R, label='Mean reflection')\nplt.plot(d_range[np.argmin(mean_R)], np.min(mean_R), 'ok')\nplt.plot(d_range, weighted_R, label='Weighted mean reflection')\nplt.plot(d_range[np.argmin(weighted_R)], np.min(weighted_R), 'ok')\nplt.xlabel('d$_{SiN}$')\nplt.ylabel('(Weighted) mean reflection 300-1200 nm')\nplt.legend()\nplt.show()\n\n\n\n\nNow, to see what the reflectance looks like for the optimized structure, we make new tmm_structures with the optimal values and calculate and plot the reflectance:\n\nstruct_1 = SolarCell([Layer(si(d_range[np.argmin(mean_R)], 'nm'), SiN), Layer(si('120um'), Si)], substrate=Ag)\nsolar_cell_solver(struct_1, task='optics', user_options=opts)\nR_1 = struct_1.reflected\n\nstruct_2 = SolarCell([Layer(si(d_range[np.argmin(weighted_R)], 'nm'), SiN), Layer(si('120um'), Si)], substrate=Ag)\nsolar_cell_solver(struct_2, task='optics', user_options=opts)\nR_2 = struct_2.reflected\n\nplt.figure()\nplt.plot(wavelengths*1e9, R_1, label='Mean R minimum')\nplt.plot(wavelengths*1e9, R_2, label='Weighted R minimum')\nplt.legend()\nplt.xlabel(\"Wavelength (nm)\")\nplt.ylabel(\"R\")\nplt.show()\n\nTreating layer(s) 1 incoherently\nCalculating RAT...\nCalculating absorption profile...\nTreating layer(s) 1 incoherently\nCalculating RAT...\nCalculating absorption profile...\n\n\n\n\n\nWe see that the two reflectance curves are very similar, as expected because the layer thicknesses are very similar." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#plotting-the-results", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#plotting-the-results", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Plotting the results", - "text": "Plotting the results\nFinally, we plot the results; the solid lines show the results for the textured Si cell (calculated using ray-tracing), the dashed lines for the planar cell (calculated using TMM). The maximum possible currents are shown in the plot, with the value in brackets for Si being for the planar cell.\n\nplt.figure(figsize=(6,3))\nplt.plot(wl * 1e9, GaInP_absorption_ARC, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_absorption_ARC, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_absorption_ARC, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, GaInP_A_tmm, \"--k\")\nplt.plot(wl * 1e9, GaAs_A_tmm, \"--b\")\nplt.plot(wl * 1e9, Si_A_tmm, \"--r\")\nplt.plot(wl * 1e9, rt_result['R'], '-', color='grey', label=\"Reflected\")\nplt.plot(wl * 1e9, tmm_result['R'], '--', color='grey')\n\nplt.text(420, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(870, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si))\nplt.text(870, 0.45, r\"({:.1f} mA/cm$^2)$\".format(Jmax_Si_tmm))\n\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.tight_layout()\nplt.show()" + "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#double-layer-arc", + "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#double-layer-arc", + "title": "Section 6b: Optimizing an ARC", + "section": "Double-layer ARC", + "text": "Double-layer ARC\nWe will now consider a similar situation, but for a double-layer MgF\\(_2\\)/Ta\\(_2\\)O\\(_5\\) ARC on GaAs.\nSolcore can directly interface with the database from www.refractiveindex.info, which contains around 3000 sets of data for a large number of different materials. Before the first use, it is necessary to download the database. This only needs to be done once, so you can comment this line out after it’s done:\n\ndownload_db(confirm=True) # only needs to be done once\n\nDatabase file found at /Users/z3533914/.solcore/nk/nk.db\nMaking request to https://refractiveindex.info/download/database/rii-database-2021-07-18.zip\nDownloaded and extracting...\nWrote /var/folders/wh/w5k56r_927j4yp3mh91bggfc0000gq/T/tmp48b25bqt/database from https://refractiveindex.info/download/database/rii-database-2021-07-18.zip\nLOG: 2746,other,PtAl2,Chen : Bad Material YAML File.\n***Wrote SQLite DB on /Users/z3533914/.solcore/nk/nk.db\n\n\nWe search for materials in the refractiveindex.info database, and use only the part of the solar spectrum relevant for absorption in GaAs (in this case, there is no benefit to reducing absorption above the GaAs bandgap around 900 nm). We will only consider the weighted mean \\(R\\) in this case. Since all the layers in the structure are relatively thin compared to the wavelengths of light, we do a coherent calculation.\n\n%%capture\n\npageid_MgF2 = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0]\npageid_Ta2O5 = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0]\n\nGaAs = material(\"GaAs\")()\nMgF2 = material(str(pageid_MgF2), nk_db=True)()\nTa2O5 = material(str(pageid_Ta2O5), nk_db=True)()\n\nMgF2_thickness = np.linspace(50, 100, 20)\nTa2O5_thickness = np.linspace(30, 80, 20)\n\nweighted_R_matrix = np.zeros((len(MgF2_thickness), len(Ta2O5_thickness)))\n\nwavelengths_GaAs = wavelengths[wavelengths < 900e-9]\nnormalised_spectrum_GaAs = normalised_spectrum[wavelengths < 900e-9]\n\nopts.coherency_list = None\nopts.wavelength = wavelengths_GaAs\nopts.position = 20e-6\n\nWe now have two thicknesses to loop through; otherwise, the procedure is similar to the single-layer ARC example.\n\n%%capture\n\nfor i1, d_MgF2 in enumerate(MgF2_thickness):\n for j1, d_Ta2O5 in enumerate(Ta2O5_thickness):\n struct = SolarCell([Layer(si(d_MgF2, 'nm'), MgF2), Layer(si(d_Ta2O5, 'nm'), Ta2O5),\n Layer(si('20um'), GaAs)],\n substrate=Ag)\n solar_cell_solver(struct, 'optics', opts)\n R = struct.reflected\n\n weighted_R_matrix[i1, j1] = np.mean(R * normalised_spectrum_GaAs)\n\n# find the row and column indices of the minimum weighted R value\nri, ci = np.unravel_index(weighted_R_matrix.argmin(), weighted_R_matrix.shape)\n\nWe plot the total absorption (\\(1-R\\)) in the structure with the optimized ARC, and print the thicknesses of MgF\\(_2\\) and Ta\\(_2\\)O\\(_5\\) at which this occurs:\n\nplt.figure()\nplt.imshow(1-weighted_R_matrix, extent=[min(Ta2O5_thickness), max(Ta2O5_thickness),\n min(MgF2_thickness), max(MgF2_thickness)],\n origin='lower', aspect='equal')\nplt.plot(Ta2O5_thickness[ci], MgF2_thickness[ri], 'xk')\nplt.colorbar()\nplt.xlabel(\"Ta$_2$O$_5$ thickness (nm)\")\nplt.ylabel(\"MgF$_2$ thickness (nm)\")\nplt.show()\n\nprint(\"Minimum reflection occurs at MgF2 / Ta2O5 thicknesses of %.1f / %.1f nm \"\n % (MgF2_thickness[ri], Ta2O5_thickness[ci]))\n\n\n\n\nMinimum reflection occurs at MgF2 / Ta2O5 thicknesses of 73.7 / 53.7 nm \n\n\nFor these two examples, where we are only trying to optimize one and two parameters respectively across a relatively small range, using a method (TMM) which executes quickly, brute force searching is possible. However, as we introduce more parameters, a wider parameter space, and slower simulation methods, it may no longer be computationally tractable; in that case, using for example differential evolution or other types of numerical optimization may be more appropriate (see this example)." }, { - "objectID": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#questionschallenges", - "href": "solcore-workshop-2/notebooks/9b-GaInP_GaAs_Si_pyramids.html#questionschallenges", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Questions/challenges", - "text": "Questions/challenges\n\nDoes it make sense to do a ray-tracing calculation for short wavelengths? For this structure, can you speed up the calculation and avoid the random noise at short wavelengths?\nHow much current is lost to parasitic absorption in e.g. tunnel junctions, window layers etc.?\nHow can we reduce reflection at the epoxy interfaces?\nIf the epoxy/glass layer is much thicker than the relevant incident wavelengths, and not absorbing, does the exact thickness matter in the simulation?\nWhat happens if only the rear surface is textured? Would a structure without the front texture have other advantages?\nWhy does the Si have lower absorption/limiting current in this structure compared to the previous example?\n\nNow we can also use RayFlare’s optical results to run an electrical simulation in Solcore. To use the depletion approximation (DA) or drift-diffusion (PDD) solvers, we need the front surface reflectivity, and a depth-dependent absorption/generation profile. While so far we have been plotting total absorption per layer, RayFlare can calculate depth-dependent profiles too.\n\nfrom solcore.solar_cell import SolarCell, Junction\nfrom solcore.solar_cell_solver import solar_cell_solver\nfrom rayflare.utilities import make_absorption_function\nfrom solcore.state import State\n\noptions = State(options) # convert to Solcore options object so Solcore will recognise it\nV = np.linspace(-3, 0, 100)\n\noptions.bulk_profile = True\noptions.depth_spacing = 1e-9\noptions.depth_spacing_bulk = 10e-9\noptions.optics_method = 'external'\noptions.voltages = V\noptions.internal_voltages = np.linspace(-4, 1, 200)\noptions.light_iv = True\noptions.mpp = True\noptions.light_source = AM15G\noptions.recalculate_absorption = True\n\nprofile_data = optical_structure.calculate_profile(options)\n\ndepths, external_optics_func = make_absorption_function(profile_data, optical_structure, options)\n\noptions.position = depths\n\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\nINFO: Calculating next wavelength...\n\n\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\nWARNING: The RCWA solver will not be available because an S4 installation has not been found.\n\n\nPreviously, we defined RayFlare rt_structure and tmm_structure objects to do the optical calculation. For the cell calculation, we need a Solcore SolarCell object, which needs different information (such as doping levels) to perform the electrical calculation.\n\nGaInP_emitter_thickness = 100e-9\nGaAs_emitter_thickness = 200e-9\nSi_emitter_thickness = 1e-6\n\nGaInP_base_thickness = GaInP_total_thickness - GaInP_emitter_thickness\nGaAs_base_thickness = GaAs_total_thickness - GaAs_emitter_thickness\nSi_base_thickness = d_Si - Si_emitter_thickness\n\nGaInP_junction = Junction([\n Layer(20e-9, material(\"AlInP\")(Al=0.52), Nd=si(\"1e18cm-3\"), role=\"window\"), # window\n Layer(GaInP_emitter_thickness, GaInP(In=0.50, Nd=si(\"1e18cm-3\"), hole_diffusion_length=si(\"200nm\")), role=\"emitter\"), # emitter\n Layer(GaInP_base_thickness, GaInP(In=0.50, Na=si(\"1e17cm-3\"), electron_diffusion_length=si(\"300nm\")), role=\"base\"), # base\n ], kind=\"DA\") # TJ\n\nGaAs_junction = Junction([\n Layer(20e-9, GaInP(In=0.5, Nd=si(\"1e18cm-3\")), role=\"window\"), # window\n Layer(GaAs_emitter_thickness, GaAs(Nd=si(\"1e18cm-3\"), hole_diffusion_length=si(\"250nm\")), role=\"emitter\"), # emitter\n Layer(GaAs_base_thickness, GaAs(Na=si(\"9e16cm-3\"), electron_diffusion_length=si(\"1000nm\")), role=\"base\"), # basee\n Layer(70e-9, AlGaAs(Al=0.8, Na=si(\"4e18cm-3\")), role=\"bsf\") # BSF\n ], kind=\"DA\")\n\nSi_junction = Junction([\n Layer(Si_emitter_thickness, Si(Nd=si(\"1e19cm-3\"), hole_diffusion_length=si(\"1000nm\")), role=\"emitter\"),\n Layer(Si_base_thickness, Si(Na=si(\"1e16cm-3\"), electron_diffusion_length=si(\"250um\")), role=\"base\")],\n kind=\"DA\")\n\nsolar_cell = SolarCell(\n ARC + [GaInP_junction] + tunnel_1 + [GaAs_junction] + spacer_ARC + [Layer(d_epoxy, epoxy)] + [Si_junction],\n external_reflected=rt_result[\"R\"],\n external_absorbed=external_optics_func)\n\n\nsolar_cell_solver(solar_cell, 'iv', options)\n\nplt.figure(2)\nplt.plot(-V, -solar_cell.iv['IV'][1]/10, 'k', linewidth=3, label='3J cell')\nplt.plot(-V, solar_cell(0).iv(V)/10, 'b', label='InGaP sub-cell')\nplt.plot(-V, solar_cell(1).iv(V)/10, 'g', label='GaAs sub-cell')\nplt.plot(-V, solar_cell(2).iv(V)/10, 'r', label='Si sub-cell')\nplt.text(1.5, 5,f'Jsc= {abs(solar_cell.iv.Isc/10):.2f} mA.cm' + r'$^{-2}$')\nplt.text(1.5, 4,f'Voc= {abs(solar_cell.iv.Voc):.2f} V')\nplt.text(1.5, 3,f'FF= {solar_cell.iv.FF*100:.2f} %')\nplt.text(1.5, 2,f'Eta= {solar_cell.iv.Eta*100:.2f} %')\n\nplt.legend()\nplt.ylim(-10, 15)\nplt.xlim(0, 3)\nplt.ylabel('Current (mA/cm$^2$)')\nplt.xlabel('Voltage (V)')\nplt.show()\n\nINFO: Solving optics of the solar cell...\n\n\nSolving IV of the junctions...\nSolving IV of the tunnel junctions...\nSolving IV of the total solar cell...\n\n\n\n\n\n\nV\n\narray([-3. , -2.96969697, -2.93939394, -2.90909091, -2.87878788,\n -2.84848485, -2.81818182, -2.78787879, -2.75757576, -2.72727273,\n -2.6969697 , -2.66666667, -2.63636364, -2.60606061, -2.57575758,\n -2.54545455, -2.51515152, -2.48484848, -2.45454545, -2.42424242,\n -2.39393939, -2.36363636, -2.33333333, -2.3030303 , -2.27272727,\n -2.24242424, -2.21212121, -2.18181818, -2.15151515, -2.12121212,\n -2.09090909, -2.06060606, -2.03030303, -2. , -1.96969697,\n -1.93939394, -1.90909091, -1.87878788, -1.84848485, -1.81818182,\n -1.78787879, -1.75757576, -1.72727273, -1.6969697 , -1.66666667,\n -1.63636364, -1.60606061, -1.57575758, -1.54545455, -1.51515152,\n -1.48484848, -1.45454545, -1.42424242, -1.39393939, -1.36363636,\n -1.33333333, -1.3030303 , -1.27272727, -1.24242424, -1.21212121,\n -1.18181818, -1.15151515, -1.12121212, -1.09090909, -1.06060606,\n -1.03030303, -1. , -0.96969697, -0.93939394, -0.90909091,\n -0.87878788, -0.84848485, -0.81818182, -0.78787879, -0.75757576,\n -0.72727273, -0.6969697 , -0.66666667, -0.63636364, -0.60606061,\n -0.57575758, -0.54545455, -0.51515152, -0.48484848, -0.45454545,\n -0.42424242, -0.39393939, -0.36363636, -0.33333333, -0.3030303 ,\n -0.27272727, -0.24242424, -0.21212121, -0.18181818, -0.15151515,\n -0.12121212, -0.09090909, -0.06060606, -0.03030303, 0. ])\n\n\n\n\nsolar_cell_solver(solar_cell, 'qe', options)\n\nplt.figure(1)\nplt.plot(wl * 1e9, solar_cell(0).eqe(wl) * 100, 'b', label='GaInP QE')\nplt.plot(wl * 1e9, solar_cell(1).eqe(wl) * 100, 'g', label='GaAs QE')\nplt.plot(wl * 1e9, solar_cell(2).eqe(wl) * 100, 'r', label='Si QE')\nplt.fill_between(wl * 1e9, GaInP_absorption_ARC * 100, 0, alpha=0.3,\n label='GaInP Abs.', color='b')\nplt.fill_between(wl * 1e9, GaAs_absorption_ARC * 100, 0, alpha=0.3,\n label='GaAs Abs.', color='g')\nplt.fill_between(wl * 1e9, Si_absorption_ARC * 100, 0, alpha=0.3,\n label='Ge Abs.', color='r')\n\nplt.plot(wl*1e9, 100*(1-solar_cell.reflected), '--k', label=\"100 - Reflectivity\")\nplt.legend()\nplt.ylim(0, 100)\nplt.ylabel('EQE (%)')\nplt.xlabel('Wavelength (nm)')\nplt.show()\n\nINFO: Solving optics of the solar cell...\n\n\nSolving QE of the solar cell..." + "objectID": "solcore-workshop-2/notebooks/6b-arc_optimization.html#questions", + "href": "solcore-workshop-2/notebooks/6b-arc_optimization.html#questions", + "title": "Section 6b: Optimizing an ARC", + "section": "Questions", + "text": "Questions\n\nApart from varying the thickness of the layers, what else could we change?\nHow do we know where to start when designing an ARC (layer thickness/material)?" }, { - "objectID": "solcore-workshop/workshop2023.html", - "href": "solcore-workshop/workshop2023.html", - "title": "Solcore Workshop 2023 (SKKU)", + "objectID": "solcore-workshop-2/schedule.html", + "href": "solcore-workshop-2/schedule.html", + "title": "Schedule", "section": "", - "text": "Click here to view all the slides.\nOutline:\nDay 1:\n\nIntroduction to Solcore & computer modelling (lecture)\nIntegration for limiting current, limiting voltage model\nShockley-Queisser efficiency limit and detailed balance (DB) junction model (lecture)\n\nDay 2:\n\nIntroduction to drift-diffusion junction model, depletion approximation (lecture) & spectral irradiance\nThe depletion approximation: Si cell and GaAs cell\nOptical modelling using the transfer-matrix model (TMM):\n\nTMM introduction\nOptimizing an anti-reflection coating\n\nPlanar III-V on Si tandem solar cell\n\nDay 3:\n\nOptical absorption in textured Si: ray-tracing for pyramid textures, rigorous coupled-wave analysis (RCWA) for nano-scale gratings\nIII-V/Si cells with light-trapping structures:\n\nPlanar III-V wafer-bonded to silicon with planar front using e.g. epoxy\nPlanar III-V bonded to textured silicon with diffraction grating on rear\n\nConformal perovskite on silicon tandem cells" + "text": "Day 1 (Wednesday 22/11)\n\nDay 2 (Thursday 23/11)\n\nDay 3 (Friday 24/11)\n\n\n\n\nThemes:\nIntroduction, efficiency limits & fitting data\n\nJunction models & planar optics\n\nAdvanced light-trapping structures\n\n\n1.00 - 1.30\nIntroduction to computer modelling & Solcore\n1.00 - 1.30\nIntroduction to different junction models\n1.00 - 1.20\nIntroduction to RayFlare & different optical methods\n\n\n1.30 - 2.15\nLimiting current & voltage models\n1.30 - 2.00\nPlanar Si cell using depletion approximation junction\n1.20 - 2.00\nEffect of diffraction grating (RCWA) and ray-tracing (RT) on a silicon wafer\n\n\n2.15 - 2.45\nBreak\n2.00 - 2.45\nIntroduction to the transfer-matrix method: interference and anti-reflection coatings\n2.00 - 2.30\nGaInP/GaAs/Si triple-junction cell with rear diffraction grating\n\n\n2.45 - 3.30\nShockley-Queisser efficiency limit\n2.45 - 3.15\nBreak\n2.30 - 3.00\nBreak\n\n\n3.30 - 4.00\nChanging irradiance spectra\n3.00 - 3.45\nPlanar Si cell using drift-diffusion junction\n3.00 - 3.45\nEpoxy-bonded GaInP/GaAs//Si triple-junction cell with pyramidally textured silicon\n\n\n4.00 - 4.15\nBreak\n3.45 - 4.15\nBreak\n3.45 - 4.30\nPerovskite on silicon tandem cell with pyramidcal texturing\n\n\n4.15 - 5.00\nTwo-diode model fits to experimental data\n4.15 - 5.00\nOptical model of a planar III-V on Si tandem cell\n4.30 - 5.00\nUsing the Katana HPC" }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html", + "title": "Section 6a: Basic cell optics", "section": "", - "text": "The structure in this example is based on that of the previous example (9a), but with the planar bottom Si cell replaced by a Si cell with a pyramidal texture, bonded to the III-V top cells with a low-index epoxy/glass layer.\nWe could use the angular redistribution matrix method as in the previous example - however, because in this example we only need to use TMM and ray-tracing (RT), we can use the ray-tracing method with integrated RT directly (this is generally faster, because we do not need to calculate the behaviour of the surfaces for every angle of incidence)." + "text": "In this script, we will build on the TMM model from example 1(a) and look at the effects of interference.\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom solcore import material, si\nfrom solcore.solar_cell import Layer\nfrom solcore.absorption_calculator import calculate_rat, OptiStack\nimport seaborn as sns" }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#setting-up", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#setting-up", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#setting-up", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#setting-up", + "title": "Section 6a: Basic cell optics", "section": "Setting up", - "text": "Setting up\nWe load relevant packages and define materials, the same as in the previous example.\n\nfrom solcore import material, si\nfrom solcore.absorption_calculator import search_db, download_db\nimport os\nfrom solcore.structure import Layer\nfrom solcore.light_source import LightSource\nfrom rayflare.ray_tracing import rt_structure\nfrom rayflare.transfer_matrix_method import tmm_structure\nfrom rayflare.textures import planar_surface, regular_pyramids\nfrom rayflare.options import default_options\nfrom solcore.constants import q\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# download_db()\n\n\nMgF2_pageid = search_db(os.path.join(\"MgF2\", \"Rodriguez-de Marcos\"))[0][0];\nTa2O5_pageid = search_db(os.path.join(\"Ta2O5\", \"Rodriguez-de Marcos\"))[0][0];\nSU8_pageid = search_db(\"SU8\")[0][0];\nAg_pageid = search_db(os.path.join(\"Ag\", \"Jiang\"))[0][0];\n\nepoxy = material(\"BK7\")()\n\nMgF2 = material(str(MgF2_pageid), nk_db=True)();\nTa2O5 = material(str(Ta2O5_pageid), nk_db=True)();\nSU8 = material(str(SU8_pageid), nk_db=True)();\nAg = material(str(Ag_pageid), nk_db=True)();\n\nwindow = material(\"AlInP\")(Al=0.52)\nGaInP = material(\"GaInP\")\nAlGaAs = material(\"AlGaAs\")\n\nAir = material(\"Air\")()\n\nGaAs = material(\"GaAs\")\n\nSi = material(\"Si\")\n\nAl2O3 = material(\"Al2O3P\")()\nAl = material(\"Al\")()\n\nDatabase file found at /Users/phoebe/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n234 main MgF2 Rodriguez-de_Marcos main/MgF2/Rodriguez-de Marcos.yml 1 1 0.0299919 2.00146 960\nDatabase file found at /Users/phoebe/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n475 main Ta2O5 Rodriguez-de_Marcos main/Ta2O5/Rodriguez-de Marcos.yml 1 1 0.0294938 1.51429 212\nDatabase file found at /Users/phoebe/.solcore/nk/nk.db\n2 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2835 other negative_tone_photoresists Microchem_SU8_2000 other/resists/Microchem SU-8 2000.yml 1 0 0.32 0.8 200\n2836 other negative_tone_photoresists Microchem_SU8_3000 other/resists/Microchem SU-8 3000.yml 1 0 0.32 1.7 200\nDatabase file found at /Users/phoebe/.solcore/nk/nk.db\n1 results found.\npageid shelf book page filepath hasrefractive hasextinction rangeMin rangeMax points\n2 main Ag Jiang main/Ag/Jiang.yml 1 1 0.3 2.0 1701\n\n\nWe define the layers we will need, as before. We specify the thickness of the silicon (280 \\(\\mu\\)m) and epoxy (1 mm) at the top:\n\nd_Si = 280e-6 # thickness of Si wafer\nd_epoxy = 1e-3 # thickness of epoxy\n\nARC = [\n Layer(110e-9, MgF2),\n Layer(65e-9, Ta2O5),\n]\n\nGaInP_junction = [\n Layer(17e-9, window),\n Layer(400e-9, GaInP(In=0.50)),\n Layer(100e-9, AlGaAs(Al=0.8))]\n\n# 100 nm TJ\ntunnel_1 = [\n Layer(80e-9, AlGaAs(Al=0.8)),\n Layer(20e-9, GaInP(In=0.5)),\n]\n\nGaAs_junction = [\n Layer(17e-9, GaInP(In=0.5), role=\"window\"),\n Layer(1050e-9, GaAs()),\n Layer(70e-9, AlGaAs(Al=0.8), role=\"bsf\")]\n\nspacer_ARC = [\n Layer(80e-9, Ta2O5),\n]" + "text": "Setting up\nFirst, let’s define some materials:\n\nSi = material(\"Si\")\nSiN = material(\"Si3N4\")()\nAg = material(\"Ag\")()\n\nNote the second set of brackets (or lack thereof). The Solcore material system essentially operates in two stages; we first call the material function with the name of the material we want to use, for example Si = material(“Si”), which creates a general Python class corresponding to that material. We then call this class to specify further details, such as the temperature, doping level, or alloy composition (where relavant). This happens below when defining Si_n and Si_p; both are use the Si class defined above, and adding further details to the material. For the definitions of SiN and Ag above, we do both steps in a single line, hence the two sets of brackets.\n\nSi_n = Si(Nd=si(\"1e21cm-3\"), hole_diffusion_length=si(\"10um\"))\nSi_p = Si(Na=si(\"1e16cm-3\"), electron_diffusion_length=si(\"400um\"))\n\nTo look at the effect of interference in the Si layer at different thicknesses, we make a list of thicknesses to test (evenly spaced on a log scale from 400 nm to 300 um):\n\nSi_thicknesses = np.linspace(np.log(0.4e-6), np.log(300e-6), 8)\nSi_thicknesses = np.exp(Si_thicknesses)\n\nwavelengths = si(np.linspace(300, 1200, 400), \"nm\")\n\noptions = {\n \"recalculate_absorption\": True,\n \"optics_method\": \"TMM\",\n \"wavelength\": wavelengths\n }\n\nMake a color palette using the seaborn package to make the plots look nicer\n\ncolors = sns.color_palette('rocket', n_colors=len(Si_thicknesses))\ncolors.reverse()\n\ncreate an ARC layer:\n\nARC_layer = Layer(width=si('75nm'), material=SiN)" }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-cell-layers", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-cell-layers", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Defining the cell layers", - "text": "Defining the cell layers\nThere are three interfaces in the cell which will define the structure to simulate:\n\nthe III-V/epoxy interface, where the epoxy itself will be treated as a bulk layer in the simulation\nthe epoxy/Si interface, where the Si has a pyramidal texture (the Si itself is another bulk layer in the simulation).\nthe rear surface of the cell, where the Si again has a pyramidal texture (and we assume there is a silver back mirror behind the cell)\n\nThese 3 interfaces are defined here, using the pre-defined textures for a planar surface or regular pyramids:\n\nfront_layers = ARC + GaInP_junction + tunnel_1 + GaAs_junction + spacer_ARC\n\nfront_surf = planar_surface(\n interface_layers = front_layers\n)\n\nSi_front = regular_pyramids(\n elevation_angle=50,\n upright=True\n)\n\nSi_back = regular_pyramids(\n elevation_angle=50,\n upright=False\n)\n\nfixed h 0.5958767962971049\nfixed h 0.5958767962971049\n\n\nNow we set relevant options for the solver. We set the number of rays to trace at each wavelength (more rays will make the result less noisy, but increase computation time) and whether to calculate the absorption profile in the bulk layers (no, in this case). The randomize_surface options determines whether the ray keeps track of its positions in the unit cell while travelling between surfaces; we set this to False to mimic random pyramids.\n\noptions = default_options()\n\nwl = np.arange(300, 1201, 10) * 1e-9\nAM15G = LightSource(source_type=\"standard\", version=\"AM1.5g\", x=wl,\n output_units=\"photon_flux_per_m\")\n\noptions.wavelengths = wl\noptions.project_name = \"III_V_Si_cell\"\n\n# options for ray-tracing\noptions.randomize_surface = True\noptions.n_rays = 1000\noptions.bulk_profile = False\noptions.theta_in = 45*np.pi/180" + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-si-thickness", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-si-thickness", + "title": "Section 6a: Basic cell optics", + "section": "Effect of Si thickness", + "text": "Effect of Si thickness\nNow we are going to loop through the different Si thicknesses generated above, and create a simple solar cell-like structure. Because we will only do an optical calculation, we don’t need to define a junction and can just make a simple stack of layers.\nWe then calculate reflection, absorption and transmission (RAT) for two different situations: 1. a fully coherent stack 2. assuming the silicon layer is incoherent. This means that light which enters the Si layer cannot interfere with itself, but light in the ARC layer can still show interference. In very thick layers (much thicker than the wavelength of light being considered) this is likely to be more physically accurate because real light does not have infinite coherence length; i.e. if you measured wavelength-dependent transmission or reflection of a Si wafer hundreds of microns thick you would not expect to see interference fringes.\nPLOT 1\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p) # silicon layer\n solar_cell = OptiStack([ARC_layer, base_layer]) # OptiStack (optical stack) to feed into calculate_rat function\n\n # Coherent calculation:\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False) # coherent calculation\n # For historical reasons, Solcore's default setting is to ignore reflection at the back of the cell (i.e. at the\n # interface between the final material in the stack and the substrate). Hence we need to tell the calculate_rat\n # function NOT to ignore this reflection (no_back_reflection=False).\n\n # Calculation assuming no interference in the silicon (\"incoherent\"):\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i']) # partially coherent: ARC is coherent, Si is not\n\n # Plot the results:\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1], label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(1) Absorption in Si with varying thickness\")\nplt.show()\n\n\n\n\nWe can see that the coherent calculations (solid lines) show clear interference fringes which depend on the Si thickness. The incoherent calculations do not have these fringes and seem to lie around the average of the interference fringes. For both sets of calculations, we see increasing absorption as the Si gets thicker, as expected." }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-structures", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#defining-the-structures", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Defining the structures", - "text": "Defining the structures\nFinally, we define the ray-tracing structure we will use, using the interfaces, bulk materials, and options set above. Because we want to calculate the reflection/absorption/transmission probabilities at the front surface using TMM, we set the use_TMM argument to True. We also define a completely planar cell with the same layer thicknesses etc. to compare and evaluate the effect of the textures Si surfaces.\n\nsolar_cell = rt_structure(\n textures=[front_surf, Si_front, Si_back],\n materials=[epoxy, Si()],\n widths=[d_epoxy, d_Si],\n incidence=Air,\n transmission=Ag,\n options=options,\n use_TMM=True,\n save_location=\"current\", # lookup table save location\n overwrite=True, # whether to overwrite any previously existing results, if found\n)\n\n# options for TMM\noptions.coherent = False\noptions.coherency_list = len(front_layers)*['c'] + ['i']*2\n\nsolar_cell_planar = tmm_structure(\n layer_stack = front_layers + [Layer(d_epoxy, epoxy), Layer(d_Si, Si())],\n incidence=Air,\n transmission=Ag,\n)\n\nPre-computing TMM lookup table(s)" + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-reflective-substrate", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-reflective-substrate", + "title": "Section 6a: Basic cell optics", + "section": "Effect of reflective substrate", + "text": "Effect of reflective substrate\nNow we repeat the calculation, but with an Ag substrate under the Si. Previously, we did not specify the substrate and so it was assumed by Solcore to be air (\\(n\\) = 1, \\(\\kappa\\) = 0).\nPLOT 2\n\nplt.figure()\n\nfor i1, Si_t in enumerate(Si_thicknesses):\n\n base_layer = Layer(width=Si_t, material=Si_p)\n\n # As before, but now we specify the substrate to be silver:\n solar_cell = OptiStack([ARC_layer, base_layer], substrate=Ag)\n\n RAT_c = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False)\n RAT_i = calculate_rat(solar_cell, wavelengths*1e9, no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n plt.plot(wavelengths*1e9, RAT_c[\"A\"], color=colors[i1],\n label=str(round(Si_t*1e6, 1)), alpha=0.7)\n plt.plot(wavelengths*1e9, RAT_i[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"Thickness ($\\mu$m)\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(2) Absorption in Si with varying thickness (Ag substrate)\")\nplt.show()\n\n\n\n\nWe see that the interference fringes get more prominent in the coherent calculation, due to higher reflection at the rear Si/Ag surface compared to Ag/Air. We also see a slightly boosted absorption at long wavelengths at all thicknesses, again due to improved reflection at the rear surface" }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#calculations", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#calculations", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Calculations", - "text": "Calculations\nCalculate the R/A/T for the planar reference cell:\n\ntmm_result = solar_cell_planar.calculate(options=options)\n\nGaInP_A_tmm = tmm_result['A_per_layer'][:,3]\nGaAs_A_tmm = tmm_result['A_per_layer'][:,8]\nSi_A_tmm = tmm_result['A_per_layer'][:,len(front_layers)+1]\n\nJmax_GaInP_tmm = q*np.trapz(GaInP_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs_tmm = q*np.trapz(GaAs_A_tmm*AM15G.spectrum()[1], x=wl)/10\nJmax_Si_tmm = q*np.trapz(Si_A_tmm*AM15G.spectrum()[1], x=wl)/10\n\nCalculate the R/A/T for the textured cell:\n\nrt_result = solar_cell.calculate(options=options)\n\nGaInP_absorption_ARC = rt_result['A_per_interface'][0][:,3]\nGaAs_absorption_ARC = rt_result['A_per_interface'][0][:,8]\nSi_absorption_ARC = rt_result['A_per_layer'][:,1]\n\nJmax_GaInP = q*np.trapz(GaInP_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_GaAs = q*np.trapz(GaAs_absorption_ARC*AM15G.spectrum()[1], x=wl)/10\nJmax_Si = q*np.trapz(Si_absorption_ARC*AM15G.spectrum()[1], x=wl)/10" + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-polarization-and-angle-of-incidence", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#effect-of-polarization-and-angle-of-incidence", + "title": "Section 6a: Basic cell optics", + "section": "Effect of polarization and angle of incidence", + "text": "Effect of polarization and angle of incidence\nFinally, we look at the effect of incidence angle and polarization of the light hitting the cell.\nPLOT 3\n\nangles = [0, 30, 60, 70, 80, 89] # angles in degrees\n\nARC_layer = Layer(width=si('75nm'), material=SiN)\nbase_layer = Layer(width=si(\"100um\"), material=Si_p)\n\ncolors = sns.cubehelix_palette(n_colors=len(angles))\n\nplt.figure()\n\nfor i1, theta in enumerate(angles):\n\n solar_cell = OptiStack([ARC_layer, base_layer])\n\n RAT_s = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='s',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n RAT_p = calculate_rat(solar_cell, wavelengths*1e9, angle=theta,\n pol='p',\n no_back_reflection=False,\n coherent=False, coherency_list=['c', 'i'])\n\n plt.plot(wavelengths*1e9, RAT_s[\"A\"], color=colors[i1], label=str(round(theta)))\n plt.plot(wavelengths*1e9, RAT_p[\"A\"], '--', color=colors[i1])\n\nplt.legend(title=r\"$\\theta (^\\circ)$\")\nplt.xlim(300, 1300)\nplt.ylim(0, 1.02)\nplt.ylabel(\"Absorption\")\nplt.title(\"(3) Absorption in Si with varying angle of incidence\")\nplt.show()\n\n\n\n\nFor normal incidence (\\(\\theta = 0^\\circ\\)), s (solid lines) and p (dashed lines) polarization are equivalent. As the incidence angle increases, in general absorption is higher for p-polarized light (due to lower reflection). Usually, sunlight is modelled as unpolarized light, which computationally is usually done by averaging the results for s and p-polarized light." }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#plotting-the-results", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#plotting-the-results", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Plotting the results", - "text": "Plotting the results\nFinally, we plot the results; the solid lines show the results for the textured Si cell (calculated using ray-tracing), the dashed lines for the planar cell (calculated using TMM). The maximum possible currents are shown in the plot, with the value in brackets for Si being for the planar cell.\n\nplt.figure(figsize=(6,3))\nplt.plot(wl * 1e9, GaInP_absorption_ARC, \"-k\", label=\"GaInP\")\nplt.plot(wl * 1e9, GaAs_absorption_ARC, \"-b\", label=\"GaAs\")\nplt.plot(wl * 1e9, Si_absorption_ARC, \"-r\", label=\"Si\")\nplt.plot(wl * 1e9, GaInP_A_tmm, \"--k\")\nplt.plot(wl * 1e9, GaAs_A_tmm, \"--b\")\nplt.plot(wl * 1e9, Si_A_tmm, \"--r\")\nplt.plot(wl * 1e9, rt_result['R'], '-', color='grey', label=\"Reflected\")\nplt.plot(wl * 1e9, tmm_result['R'], '--', color='grey')\n\nplt.text(420, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaInP))\nplt.text(670, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_GaAs))\nplt.text(870, 0.55, r\"{:.1f} mA/cm$^2$\".format(Jmax_Si))\nplt.text(870, 0.45, r\"({:.1f} mA/cm$^2)$\".format(Jmax_Si_tmm))\n\nplt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\nplt.tight_layout()\nplt.show()" + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#conclusions", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#conclusions", + "title": "Section 6a: Basic cell optics", + "section": "Conclusions", + "text": "Conclusions\nWe have now seen some effects of interference in layers of different thicknesses, and seen the effect of adding a highly reflective substrate. So we already have two strategies for light-trapping/improving the absorption in a solar cell: adding an anti-reflection coating (in example 1a), to reduce front-surface reflection and get more light into the cell, and adding a highly reflective layer at the back, to reduce loss through the back of the cell and keep light trapped in the cell." }, { - "objectID": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#questionschallenges", - "href": "solcore-workshop/notebooks/9b-GaInP_GaAs_Si_pyramids_new.html#questionschallenges", - "title": "Section 9b: Planar III-V epoxy-bonded to textured Si", - "section": "Questions/challenges", - "text": "Questions/challenges\n\nDoes it make sense to do a ray-tracing calculation for short wavelengths? For this structure, can you speed up the calculation and avoid the random noise at short wavelengths?\nHow much current is lost to parasitic absorption in e.g. tunnel junctions, window layers etc.?\nHow can we reduce reflection at the epoxy interfaces?\nIf the epoxy/glass layer is much thicker than the relevant incident wavelengths, and not absorbing, does the exact thickness matter in the simulation?\nWhat happens if only the rear surface is textured? Would a structure without the front texture have other advantages?\nWhy does the Si have lower absorption/limiting current in this structure compared to the previous example?" + "objectID": "solcore-workshop/notebooks/6a-TMM_introduction.html#questions", + "href": "solcore-workshop/notebooks/6a-TMM_introduction.html#questions", + "title": "Section 6a: Basic cell optics", + "section": "Questions", + "text": "Questions\n\nWhy are the interference fringes stronger when adding a silver back mirror, compared to having air behind the Si?\nWe modelled s and p-polarized light - how do we normally model unpolarized light?" }, { "objectID": "solcore-workshop/notebooks/2-Efficiency_limits.html", diff --git a/docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt.html b/docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt.html index 6cef005..408b9ed 100644 --- a/docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt.html +++ b/docs/solcore-workshop-2/notebooks/10-perovskite_Si_rt.html @@ -147,7 +147,11 @@

On this page

@@ -173,7 +177,7 @@

Section 10: Perovskite-Si tandem cell with pyramidal surfaces<

This example shows how you can simulate a perovskite-Si tandem cell with pyramidal surface textures, where the perovskite and other surface layers are assumed to be deposited conformally (i.e., also in a pyramid shape) on top of the Si. The perovskite optical constants are from this paper, while the structure is based on this paper We will calculate total reflection, transmission and absorption per layer as well as the wavelength-dependent absorption profiles in the perovskite and Si, which can be used in e.g. device simulations. We will look at the effect of treating the layers deposited on Si (including the perovskite) coherently or incoherently.

First, import relevant packages and RayFlare functions:

-
+
import numpy as np
 import os
 
@@ -190,244 +194,392 @@ 

Section 10: Perovskite-Si tandem cell with pyramidal surfaces< import seaborn as sns from cycler import cycler

+
+
WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+

Now we set some relevant options. We will scan across 20 x 20 surface points of the pyramid unit cell between 300 and 1200 nm, for unpolarized, normally-incident light. The randomize_surface option is set to True to prevent correlation between the incident position on the front and rear pyramids. The n_jobs option is set to -1, which means that all available cores will be used. If you want to use all but one core, change this to -2 etc. We also need to provide a project_name to save the lookup tables which will be calculated using TMM to use during ray-tracing.

-
-
wavelengths = np.linspace(300, 1200, 40) * 1e-9
-
-AM15G = LightSource(source_type="standard", version="AM1.5g", x=wavelengths,
-                    output_units="photon_flux_per_m")
-
-options = default_options()
-options.wavelength = wavelengths
-options.nx = 20
-options.ny = options.nx
-options.n_rays = 4 * options.nx**2
-options.depth_spacing = 1e-9
-options.pol = "u"
-options.I_thresh = 1e-3
-options.project_name = "perovskite_Si_rt"
-options.randomize_surface = True
-options.n_jobs = -1 # use all cores; to use all but one, change to -2 etc.
+
+
wavelengths = np.linspace(300, 1200, 40) * 1e-9
+
+AM15G = LightSource(source_type="standard", version="AM1.5g", x=wavelengths,
+                    output_units="photon_flux_per_m")
+
+options = default_options()
+options.wavelength = wavelengths
+options.nx = 20
+options.ny = options.nx
+options.n_rays = 4 * options.nx**2
+options.depth_spacing = 1e-9
+options.pol = "u"
+options.I_thresh = 1e-3
+options.project_name = "perovskite_Si_rt"
+options.randomize_surface = True
+options.n_jobs = -1 # use all cores; to use all but one, change to -2 etc.
+
+

Adding custom materials

We define our materials. Note that some of these are custom materials added to the database; we only need to do this once. We then define the front layer stack (i.e. all the materials which are on top of the Si, excluding Si itself, which will be the ‘bulk’ material) and the rear layer stack. Layer stacks are always defined starting with the layer closest to the top of the cell.

-
-
# Can comment out this block after running once to add materials to the database
-from solcore.material_system import create_new_material
-
-create_new_material("Perovskite_CsBr_1p6eV", "data/CsBr10p_1to2_n_shifted.txt",
-                    "data/CsBr10p_1to2_k_shifted.txt")
-create_new_material("ITO_lowdoping", "data/model_back_ito_n.txt",
-                    "data/model_back_ito_k.txt")
-create_new_material("aSi_i", "data/model_i_a_silicon_n.txt",
-                    "data/model_i_a_silicon_k.txt")
-create_new_material("aSi_p", "data/model_p_a_silicon_n.txt",
-                    "data/model_p_a_silicon_k.txt")
-create_new_material("aSi_n", "data/model_n_a_silicon_n.txt",
-                    "data/model_n_a_silicon_k.txt")
-create_new_material("C60", "data/C60_Ren_n.txt",
-                    "data/C60_Ren_k.txt")
-create_new_material("IZO", "data/IZO_Ballif_rO2_10pcnt_n.txt",
-                    "data/IZO_Ballif_rO2_10pcnt_k.txt")
-# Comment out until here
-
-
-
# download_db()
+
+
# Can comment out this block after running once to add materials to the database
+from solcore.material_system import create_new_material
+
+create_new_material("Perovskite_CsBr_1p6eV", "data/CsBr10p_1to2_n_shifted.txt",
+                    "data/CsBr10p_1to2_k_shifted.txt")
+create_new_material("ITO_lowdoping", "data/model_back_ito_n.txt",
+                    "data/model_back_ito_k.txt")
+create_new_material("aSi_i", "data/model_i_a_silicon_n.txt",
+                    "data/model_i_a_silicon_k.txt")
+create_new_material("aSi_p", "data/model_p_a_silicon_n.txt",
+                    "data/model_p_a_silicon_k.txt")
+create_new_material("aSi_n", "data/model_n_a_silicon_n.txt",
+                    "data/model_n_a_silicon_k.txt")
+create_new_material("C60", "data/C60_Ren_n.txt",
+                    "data/C60_Ren_k.txt")
+create_new_material("IZO", "data/IZO_Ballif_rO2_10pcnt_n.txt",
+                    "data/IZO_Ballif_rO2_10pcnt_k.txt")
+# Comment out until here
-
-
MgF2_pageid = search_db(os.path.join("MgF2", "Rodriguez-de Marcos"))[0][0];
-Ag_pageid = search_db(os.path.join("Ag", "Jiang"))[0][0];
-
-Si = material("Si")()
-Air = material("Air")()
-MgF2 = material(str(MgF2_pageid), nk_db=True)()
-ITO_back = material("ITO_lowdoping")()
-Perovskite = material("Perovskite_CsBr_1p6eV")()
-Ag = material(str(Ag_pageid), nk_db=True)()
-aSi_i = material("aSi_i")()
-aSi_p = material("aSi_p")()
-aSi_n = material("aSi_n")()
-LiF = material("LiF")()
-IZO = material("IZO")()
-C60 = material("C60")()
-
-# stack based on doi:10.1038/s41563-018-0115-4
-front_materials = [
-    Layer(100e-9, MgF2),
-    Layer(110e-9, IZO),
-    Layer(15e-9, C60),
-    Layer(1e-9, LiF),
-    Layer(440e-9, Perovskite),
-    Layer(6.5e-9, aSi_n),
-    Layer(6.5e-9, aSi_i),
-]
-
-back_materials = [Layer(6.5e-9, aSi_i), Layer(6.5e-9, aSi_p), Layer(240e-9, ITO_back)]
+
+
# download_db()
-

Now we define our front and back surfaces, including interface_layers. We will use regular pyramids for both the front and back surface; these pyramids point out on both sides, but since the direction of the pyramids is defined relative to the front surface, we must set upright=True for the top surface and upright=False for the rear surface. We also gives the surfaces a name (used to save the lookup table data) and ask RayFlare to calculate the absorption profile in the 5th layer, which is the perovskite.

-
-
triangle_surf = regular_pyramids(
-    elevation_angle=55,
-    upright=True,
-    size=1,
-    interface_layers=front_materials,
-    name="coh_front",
-    prof_layers=[5],
-)
-
-triangle_surf_back = regular_pyramids(
-    elevation_angle=55,
-    upright=False,
-    size=1,
-    interface_layers=back_materials,
-    name="Si_back",
-    coherency_list=["i"] * len(back_materials),
-)
+
+
MgF2_pageid = search_db(os.path.join("MgF2", "Rodriguez-de Marcos"))[0][0];
+Ag_pageid = search_db(os.path.join("Ag", "Jiang"))[0][0];
+
+Si = material("Si")()
+Air = material("Air")()
+MgF2 = material(str(MgF2_pageid), nk_db=True)()
+ITO_back = material("ITO_lowdoping")()
+Perovskite = material("Perovskite_CsBr_1p6eV")()
+Ag = material(str(Ag_pageid), nk_db=True)()
+aSi_i = material("aSi_i")()
+aSi_p = material("aSi_p")()
+aSi_n = material("aSi_n")()
+LiF = material("LiF")()
+IZO = material("IZO")()
+C60 = material("C60")()
+
+# stack based on doi:10.1038/s41563-018-0115-4
+front_materials = [
+    Layer(100e-9, MgF2),
+    Layer(110e-9, IZO),
+    Layer(15e-9, C60),
+    Layer(1e-9, LiF),
+    Layer(440e-9, Perovskite),
+    Layer(6.5e-9, aSi_n),
+    Layer(6.5e-9, aSi_i),
+]
+
+back_materials = [Layer(6.5e-9, aSi_i), Layer(6.5e-9, aSi_p), Layer(240e-9, ITO_back)]
+
+
Database file found at /Users/z3533914/.solcore/nk/nk.db
+1 results found.
+pageid  shelf   book    page    filepath    hasrefractive   hasextinction   rangeMin    rangeMax    points
+234 main    MgF2    Rodriguez-de_Marcos main/MgF2/Rodriguez-de Marcos.yml   1   1   0.0299919   2.00146 960
+Database file found at /Users/z3533914/.solcore/nk/nk.db
+1 results found.
+pageid  shelf   book    page    filepath    hasrefractive   hasextinction   rangeMin    rangeMax    points
+2   main    Ag  Jiang   main/Ag/Jiang.yml   1   1   0.3 2.0 1701
-

Now we make our ray-tracing structure by combining the front and back surfaces, specifying the material in between (Si) and setting its width to 260 microns. In order to use the TMM lookuptables to calculate reflection/transmission/absorption probabilities we must also set use_TMM=True.

-
-
rtstr_coh = rt_structure(
-    textures=[triangle_surf, triangle_surf_back],
-    materials=[Si],
-    widths=[260e-6],
-    incidence=Air,
-    transmission=Ag,
-    use_TMM=True,
-    options=options,
-    overwrite=True,
-    save_location="current",
-)
-
-# calculate:
-result_coh = rtstr_coh.calculate(options)
-

Now we define the same front surface and structure again, except now we will treat all the layers incoherently (i.e. no thin-film interference) in the TMM.

-
+
+
+

Defining the interfaces and structure

+

Now we define our front and back surfaces, including interface_layers. We will use regular pyramids for both the front and back surface; these pyramids point out on both sides, but since the direction of the pyramids is defined relative to the front surface, we must set upright=True for the top surface and upright=False for the rear surface. We also gives the surfaces a name (used to save the lookup table data) and ask RayFlare to calculate the absorption profile in the 5th layer, which is the perovskite.

+
triangle_surf = regular_pyramids(
     elevation_angle=55,
     upright=True,
     size=1,
     interface_layers=front_materials,
-    coherency_list=["i"] * len(front_materials),
-    name="inc_front",
-    prof_layers=[5],
-)
-
-rtstr_inc = rt_structure(
-    textures=[triangle_surf, triangle_surf_back],
-    materials=[Si],
-    widths=[260e-6],
-    incidence=Air,
-    transmission=Ag,
-    use_TMM=True,
-    options=options,
-    overwrite=True,
-    save_location="current",
-)
-
-result_inc = rtstr_inc.calculate(options)
+ name="coh_front", + prof_layers=[5], +) + +triangle_surf_back = regular_pyramids( + elevation_angle=55, + upright=False, + size=1, + interface_layers=back_materials, + name="Si_back", + coherency_list=["i"] * len(back_materials), +)
+
+

Now we make our ray-tracing structure by combining the front and back surfaces, specifying the material in between (Si) and setting its width to 260 microns. In order to use the TMM lookuptables to calculate reflection/transmission/absorption probabilities we must also set use_TMM=True.

+
+
%%capture
+
+rtstr_coh = rt_structure(
+    textures=[triangle_surf, triangle_surf_back],
+    materials=[Si],
+    widths=[260e-6],
+    incidence=Air,
+    transmission=Ag,
+    use_TMM=True,
+    options=options,
+    overwrite=True,
+    save_location="current",
+)
+
+# calculate:
+result_coh = rtstr_coh.calculate(options)
+
+
INFO: Pre-computing TMM lookup table(s)
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+
+
+
Database file found at /Users/z3533914/.solcore/nk/nk.db
+Material main/MgF2/Rodriguez-de Marcos.yml loaded.
+Database file found at /Users/z3533914/.solcore/nk/nk.db
+Material main/MgF2/Rodriguez-de Marcos.yml loaded.
+Database file found at /Users/z3533914/.solcore/nk/nk.db
+Material main/Ag/Jiang.yml loaded.
+Database file found at /Users/z3533914/.solcore/nk/nk.db
+Material main/Ag/Jiang.yml loaded.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+
+
+ +
+

Incoherent calculation

+

Now we define the same front surface and structure again, except now we will treat all the layers incoherently (i.e. no thin-film interference) in the TMM.

+
+
%%capture
+
+triangle_surf = regular_pyramids(
+    elevation_angle=55,
+    upright=True,
+    size=1,
+    interface_layers=front_materials,
+    coherency_list=["i"] * len(front_materials),
+    name="inc_front",
+    prof_layers=[5],
+)
+
+rtstr_inc = rt_structure(
+    textures=[triangle_surf, triangle_surf_back],
+    materials=[Si],
+    widths=[260e-6],
+    incidence=Air,
+    transmission=Ag,
+    use_TMM=True,
+    options=options,
+    overwrite=True,
+    save_location="current",
+)
+
+result_inc = rtstr_inc.calculate(options)
+
+
INFO: Pre-computing TMM lookup table(s)
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+INFO: Calculating next wavelength...
+

Now we plot the results for reflection, transmission, and absorption per layer for both the coherent and incoherent cases.

-
-
pal = sns.color_palette("husl", n_colors=len(front_materials) + len(back_materials) + 2)
-# create a colour palette
-
-cols = cycler("color", pal)
-# set this as the default colour palette in matplotlib
-
-params = {
-    "axes.prop_cycle": cols,
-}
-
-plt.rcParams.update(params)
-
-fig = plt.figure(figsize=(8, 3.7))
-plt.subplot(1, 1, 1)
-plt.plot(wavelengths * 1e9, result_coh["R"], "-ko", label="R")
-plt.plot(wavelengths * 1e9, result_coh["T"], mfc="none", label="T")
-plt.plot(wavelengths * 1e9, result_coh["A_per_layer"][:, 0], "-o", label='Si')
-plt.plot(wavelengths * 1e9, result_coh["A_per_interface"][0], "-o",
-         label=[None, "IZO", "C60", None, "Perovskite", None, None])
-plt.plot(wavelengths * 1e9, result_coh["A_per_interface"][1], "-o",
-         label=[None, None, "ITO"])
-
-plt.plot(wavelengths * 1e9, result_inc["R"], "--ko", mfc="none")
-plt.plot(wavelengths * 1e9, result_inc["T"], mfc="none")
-plt.plot(wavelengths * 1e9, result_inc["A_per_layer"][:, 0], "--o", mfc="none")
-plt.plot(wavelengths * 1e9, result_inc["A_per_interface"][0], "--o", mfc="none")
-plt.plot(wavelengths * 1e9, result_inc["A_per_interface"][1], "--o", mfc="none")
-
-plt.plot([300, 301], [0, 0], "-k", label="coherent")
-plt.plot([300, 301], [0, 0], "--k", label="incoherent")
-plt.xlabel("Wavelength (nm)")
-plt.ylabel("R / A / T")
-plt.ylim(0, 1)
-plt.xlim(300, 1200)
-plt.legend(bbox_to_anchor=(1.05, 1))
-plt.tight_layout()
-plt.show()
+
+
pal = sns.color_palette("husl", n_colors=len(front_materials) + len(back_materials) + 2)
+# create a colour palette
+
+cols = cycler("color", pal)
+# set this as the default colour palette in matplotlib
+
+params = {
+    "axes.prop_cycle": cols,
+}
+
+plt.rcParams.update(params)
+
+fig = plt.figure(figsize=(8, 3.7))
+plt.subplot(1, 1, 1)
+plt.plot(wavelengths * 1e9, result_coh["R"], "-ko", label="R")
+plt.plot(wavelengths * 1e9, result_coh["T"], mfc="none", label="T")
+plt.plot(wavelengths * 1e9, result_coh["A_per_layer"][:, 0], "-o", label='Si')
+plt.plot(wavelengths * 1e9, result_coh["A_per_interface"][0], "-o",
+         label=[None, "IZO", "C60", None, "Perovskite", None, None])
+plt.plot(wavelengths * 1e9, result_coh["A_per_interface"][1], "-o",
+         label=[None, None, "ITO"])
+
+plt.plot(wavelengths * 1e9, result_inc["R"], "--ko", mfc="none")
+plt.plot(wavelengths * 1e9, result_inc["T"], mfc="none")
+plt.plot(wavelengths * 1e9, result_inc["A_per_layer"][:, 0], "--o", mfc="none")
+plt.plot(wavelengths * 1e9, result_inc["A_per_interface"][0], "--o", mfc="none")
+plt.plot(wavelengths * 1e9, result_inc["A_per_interface"][1], "--o", mfc="none")
+
+plt.plot([300, 301], [0, 0], "-k", label="coherent")
+plt.plot([300, 301], [0, 0], "--k", label="incoherent")
+plt.xlabel("Wavelength (nm)")
+plt.ylabel("R / A / T")
+plt.ylim(0, 1)
+plt.xlim(300, 1200)
+plt.legend(bbox_to_anchor=(1.05, 1))
+plt.tight_layout()
+plt.show()
+
+

+

Calculate and print the limiting short-circuit current per junction:

-
-
Jmax_Pero_coh = q*np.trapz(result_coh["A_per_interface"][0][:,4]*AM15G.spectrum()[1],
-                                                        x=wavelengths)/10
-Jmax_Si_coh = q*np.trapz(result_coh["A_per_layer"][:, 0]*AM15G.spectrum()[1],
-                     x=wavelengths)/10
-
-print("Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:"
-      ".2f}".format(Jmax_Pero_coh, Jmax_Si_coh))
-
-Jmax_Pero_inc = q*np.trapz(result_inc["A_per_interface"][0][:,4]*AM15G.spectrum()[1],
-                                                        x=wavelengths)/10
-Jmax_Si_inc = q*np.trapz(result_inc["A_per_layer"][:, 0]*AM15G.spectrum()[1],
-                     x=wavelengths)/10
-
-print("Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:"
-      ".2f}".format(Jmax_Pero_inc, Jmax_Si_inc))
+
+
Jmax_Pero_coh = q*np.trapz(result_coh["A_per_interface"][0][:,4]*AM15G.spectrum()[1],
+                                                        x=wavelengths)/10
+Jmax_Si_coh = q*np.trapz(result_coh["A_per_layer"][:, 0]*AM15G.spectrum()[1],
+                     x=wavelengths)/10
+
+print("Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:"
+      ".2f}".format(Jmax_Pero_coh, Jmax_Si_coh))
+
+Jmax_Pero_inc = q*np.trapz(result_inc["A_per_interface"][0][:,4]*AM15G.spectrum()[1],
+                                                        x=wavelengths)/10
+Jmax_Si_inc = q*np.trapz(result_inc["A_per_layer"][:, 0]*AM15G.spectrum()[1],
+                     x=wavelengths)/10
+
+print("Limiting short-circuit currents in coherent calculation (mA/cm2): {:.2f} / {:"
+      ".2f}".format(Jmax_Pero_inc, Jmax_Si_inc))
+
+
Limiting short-circuit currents in coherent calculation (mA/cm2): 19.27 / 21.47
+Limiting short-circuit currents in coherent calculation (mA/cm2): 18.67 / 20.98
+
+
+
+

Absorption profiles

We can also plot the absorption profiles, for wavelengths up to 800 nm, in the perovskite (since we asked the solver to calculate the profile in the perovskite layer above).

-
-
wl_Eg = wavelengths < 800e-9
-
-pal = sns.cubehelix_palette(sum(wl_Eg), reverse=True)
-cols = cycler("color", pal)
-params = {
-    "axes.prop_cycle": cols,
-}
-plt.rcParams.update(params)
-
-pos = np.arange(0, rtstr_coh.interface_layer_widths[0][4], options.depth_spacing*1e9)
-
-fig, (ax1, ax2) = plt.subplots(1,2)
-ax1.plot(pos, result_coh["interface_profiles"][0][wl_Eg].T)
-ax1.set_ylim(0, 0.02)
-ax1.set_xlabel("z (nm)")
-ax1.set_ylabel("a(z)")
-ax1.set_title("Coherent")
-ax2.plot(pos, result_inc["interface_profiles"][0][wl_Eg].T)
-ax2.set_ylim(0, 0.02)
-ax2.yaxis.set_ticklabels([])
-ax2.set_xlabel("z (nm)")
-ax2.set_title("Incoherent")
-plt.show()
+
+
wl_Eg = wavelengths < 800e-9
+
+pal = sns.cubehelix_palette(sum(wl_Eg), reverse=True)
+cols = cycler("color", pal)
+params = {
+    "axes.prop_cycle": cols,
+}
+plt.rcParams.update(params)
+
+pos = np.arange(0, rtstr_coh.interface_layer_widths[0][4], options.depth_spacing*1e9)
+
+fig, (ax1, ax2) = plt.subplots(1,2)
+ax1.plot(pos, result_coh["interface_profiles"][0][wl_Eg].T)
+ax1.set_ylim(0, 0.02)
+ax1.set_xlabel("z (nm)")
+ax1.set_ylabel("a(z)")
+ax1.set_title("Coherent")
+ax2.plot(pos, result_inc["interface_profiles"][0][wl_Eg].T)
+ax2.set_ylim(0, 0.02)
+ax2.yaxis.set_ticklabels([])
+ax2.set_xlabel("z (nm)")
+ax2.set_title("Incoherent")
+plt.show()
+
+

+

We see that, as expected, the coherent case shows interference fringes while the incoherent case does not. We can also plot the absorption profile in the Si (> 800 nm):

-
-
pos_bulk = pos = np.arange(0, rtstr_coh.widths[0]*1e6, options.depth_spacing_bulk*1e6)
-
-fig, (ax1, ax2) = plt.subplots(1,2)
-ax1.semilogy(pos, result_coh["profile"][~wl_Eg].T)
-ax1.set_ylim(1e-8, 0.00015)
-ax1.set_xlabel("z (um)")
-ax1.set_ylabel("a(z)")
-ax1.set_title("Coherent")
-ax2.semilogy(pos, result_inc["profile"][~wl_Eg].T)
-ax2.set_ylim(1e-8, 0.00015)
-ax2.yaxis.set_ticklabels([])
-ax2.set_xlabel("z (um)")
-ax2.set_title("Incoherent")
-plt.show()
+
+
pos_bulk = pos = np.arange(0, rtstr_coh.widths[0]*1e6, options.depth_spacing_bulk*1e6)
+
+fig, (ax1, ax2) = plt.subplots(1,2)
+ax1.semilogy(pos, result_coh["profile"][~wl_Eg].T)
+ax1.set_ylim(1e-8, 0.00015)
+ax1.set_xlabel("z (um)")
+ax1.set_ylabel("a(z)")
+ax1.set_title("Coherent")
+ax2.semilogy(pos, result_inc["profile"][~wl_Eg].T)
+ax2.set_ylim(1e-8, 0.00015)
+ax2.yaxis.set_ticklabels([])
+ax2.set_xlabel("z (um)")
+ax2.set_title("Incoherent")
+plt.show()
+
+

+
+

Questions

@@ -335,226 +377,283 @@

The

To do this, a model is required for the recombination processes between the conduction and valance bands. The most fundamental (and inescapable) recombination mechanism is the radiative process. In section 3 we will derive a limit to Shockley’s diode equation \(J=J_0 e^{\frac{V}{kT}}\) for the radiative limit, that being a diode where all current flows are linked to an optical process, either absorption or recombination.

In the radiative limit and an abrupt band-edge at band-gap energy \(E_g\) it can be shown that \(J_0\) is approximated by \(J_0=q \frac{2 \pi}{c^2 h^3} kT \left(E_g^2+2 E_g k T+2 k^2 T^2\right) e^{\frac{-E_g}{k T}}\)

We can now plot a chart of \(J_0\) as a function of band-gap energy using this expression:

-
-
# Define some physical constants:
-q = 1.60217662E-19  # electronic charge [C]
-k = 1.38064852E-23/q   # Boltzmann constant [eV/K]
-h = 6.62607004E-34/q  # Planck constant expressed in [eV.s]
-c = 299792458  # Speed of light [m.s^-1]
-
-t = 300  # Perform the calculation for a solar cell at 300K.
-
-# Define a function to return J0 implementing the expression above
-def getJ0(eg):
-    return k*t*q*(2*np.pi/(c**2*h**3))*(eg**2+2*eg*k*t+2*k**2*t**2)*np.exp(-eg/(k*t))
-
-eg = np.linspace(0.5,2.5,100)
-j0 = np.vectorize(getJ0)(eg)
-
-plt.figure()
-plt.title('The radiative limit to $J_0$ plotted as a function of band-gap energy Eg')
-plt.plot(eg,j0,label='J0')  # Divide by 10 to convert from A.m^-2 to mA.cm^-2
-plt.xlim(0.2, 2.5)
-plt.xlabel('Band Gap energy (eV)')
-plt.ylabel('$J_{0}$ ($A.m^{-2}$)')
-plt.yscale("log")
-plt.legend()
+
+
# Define some physical constants:
+q = 1.60217662E-19  # electronic charge [C]
+k = 1.38064852E-23/q   # Boltzmann constant [eV/K]
+h = 6.62607004E-34/q  # Planck constant expressed in [eV.s]
+c = 299792458  # Speed of light [m.s^-1]
+
+t = 300  # Perform the calculation for a solar cell at 300K.
+
+# Define a function to return J0 implementing the expression above
+def getJ0(eg):
+    return k*t*q*(2*np.pi/(c**2*h**3))*(eg**2+2*eg*k*t+2*k**2*t**2)*np.exp(-eg/(k*t))
+
+eg = np.linspace(0.5,2.5,100)
+j0 = np.vectorize(getJ0)(eg)
+
+plt.figure()
+plt.title('The radiative limit to $J_0$ plotted as a function of band-gap energy Eg')
+plt.plot(eg,j0,label='J0')  # Divide by 10 to convert from A.m^-2 to mA.cm^-2
+plt.xlim(0.2, 2.5)
+plt.xlabel('Band Gap energy (eV)')
+plt.ylabel('$J_{0}$ ($A.m^{-2}$)')
+plt.yscale("log")
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x177f1ccd0>
+
+
+

+

Let’s obtain J0 for GaAs and InGaP, two common III-V materials that are used in tandem solar cells: evaluate getJ0() for Eg=1.42 and Eg=1.88

-
-
getJ0(1.42)
+
+
getJ0(1.42)
+
+
1.195457897843886e-17
+
+
+
+
getJ0(1.88)
+
+
3.888154629395649e-25
-
-
getJ0(1.88)

Calculating the IV curve

We are now able to calculate the limiting efficiency for a solar cell using the simple Shockley diode expression \(J(V)=J_{s c}-J_0\left(e^{\frac{q V}{k T}}-1\right)\). Let’s plot the IV curve for a band-gap of 1.42eV

-
-
def getJ(v,eg):
-    return getJsc(eg) - getJ0(eg)*(np.exp(v/(k*t)) - 1)
-
-eg = 1.42
-v = np.linspace(0,1.2,100)
-j = np.vectorize(getJ)(v,eg)
-
-plt.figure(3)
-plt.title('Limiting Efficiency IV curve for Eg=1.42eV (GaAs)')
-plt.plot(v,j/10)  #convert to mA.cm^-2
-plt.xlim(0.2, 1.2)
-plt.ylim(0,35)
-plt.xlabel('Voltage (V)')
-plt.ylabel('Current ($mA.cm^{-2}$)')
+
+
def getJ(v,eg):
+    return getJsc(eg) - getJ0(eg)*(np.exp(v/(k*t)) - 1)
+
+eg = 1.42
+v = np.linspace(0,1.2,100)
+j = np.vectorize(getJ)(v,eg)
+
+plt.figure(3)
+plt.title('Limiting Efficiency IV curve for Eg=1.42eV (GaAs)')
+plt.plot(v,j/10)  #convert to mA.cm^-2
+plt.xlim(0.2, 1.2)
+plt.ylim(0,35)
+plt.xlabel('Voltage (V)')
+plt.ylabel('Current ($mA.cm^{-2}$)')
+
+
Text(0, 0.5, 'Current ($mA.cm^{-2}$)')
+
+
+

+

Calculating the electrical power curve and finding the maximum power

-
-
plt.figure()
-plt.title('Limiting Efficiency power curve for $E_g$ = 1.42 eV (GaAs)')
-plt.plot(v,v*j)
-plt.xlim(0.2, 1.2)
-plt.ylim(0,350)
-plt.xlabel('Voltage (V)')
-plt.ylabel('Power ($W.m^{-2}$)')
+
+
plt.figure()
+plt.title('Limiting Efficiency power curve for $E_g$ = 1.42 eV (GaAs)')
+plt.plot(v,v*j)
+plt.xlim(0.2, 1.2)
+plt.ylim(0,350)
+plt.xlabel('Voltage (V)')
+plt.ylabel('Power ($W.m^{-2}$)')
+
+
Text(0, 0.5, 'Power ($W.m^{-2}$)')
+
+
+

+

Define a function to find the maximum power point of the curve above:

-
-
def getPmax(eg):
-    v = np.linspace(0,eg-0.1,500)
-    p = v*np.vectorize(getJ)(v,eg)
-    return (np.amax(p))  # The amax command returns the maximum value in the array p
+
+
def getPmax(eg):
+    v = np.linspace(0,eg-0.1,500)
+    p = v*np.vectorize(getJ)(v,eg)
+    return (np.amax(p))  # The amax command returns the maximum value in the array p

Test it out on the curve above

-
-
getPmax(1.42)
+
+
getPmax(1.42)
+
+
331.6412760959975
+

Plotting the Shockley-Queisser efficiency limit graph:

Finally we can calculate the Shockley-Queisser efficiency limit for AM1.5G

-
-
eg = np.linspace(0.5,2.5,100)
-p = np.vectorize(getPmax)(eg)
-
-plt.figure(3)
-plt.title('Limiting Shockley-Queisser Efficiency Curve')
-plt.plot(eg, p/b, label='AM1.5G')  # Remember b is the integrated power of the
-# incident sunlight
-plt.xlim(0.2, 2.5)
-plt.xlabel('Band Gap energy (eV)')
-plt.ylabel('Efficiency (%)')
-plt.legend()
+
+
eg = np.linspace(0.5,2.5,100)
+p = np.vectorize(getPmax)(eg)
+
+plt.figure(3)
+plt.title('Limiting Shockley-Queisser Efficiency Curve')
+plt.plot(eg, p/b, label='AM1.5G')  # Remember b is the integrated power of the
+# incident sunlight
+plt.xlim(0.2, 2.5)
+plt.xlabel('Band Gap energy (eV)')
+plt.ylabel('Efficiency (%)')
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x298214750>
+
+
+

+

An easier way – using Solcore!

The Solcore library has all the functions we have written above built into it. We worked through this example step by step, but we can calculate the same result using the code below. First let’s calculate an IV curve for a Shockley-Queisser solar cell with a band-gap of 1.42eV:

-
-
import numpy as np
-import matplotlib.pyplot as plt
-from solcore.light_source import LightSource
-from solcore.solar_cell import SolarCell
-from solcore.solar_cell_solver import solar_cell_solver
-from solcore.structure import Junction
-
-# Load the AM1.5G solar spectrum
-wl = np.linspace(300, 4000, 4000) * 1e-9    # wl contains the x-coordinate in wavelength
-am15g = LightSource(source_type='standard', x=wl, version='AM1.5g')
-
-eg = 1.42
-V = np.linspace(0, 1.3, 500)
-db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1) #
-# detailed-balance junction (Shockley-Queisser limit)
-
-my_solar_cell = SolarCell([db_junction], T=300, R_series=0)
-
-solar_cell_solver(my_solar_cell, 'iv',
-                      user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True,
-                                    'internal_voltages': np.linspace(0, 1.3, 400), 'wavelength': wl,
-                                    'mpp': True, 'light_source': am15g})
-
-plt.figure()
-plt.title('Limiting Efficiency IV curve for $E_g$ = 1.42eV')
-plt.plot(V, my_solar_cell.iv.IV[1], 'k')
-plt.ylim(0, 350)
-plt.xlim(0, 1.2)
-plt.text(0.1,300,f'Jsc: {my_solar_cell.iv.Isc:.2f}')
-plt.text(0.1,280,f'Voc: {my_solar_cell.iv.Voc:.2f}')
-plt.text(0.1,260,f'Pmax: {my_solar_cell.iv.Pmpp:.2f}')
-plt.xlabel('Voltage (V)')
-plt.ylabel('Current (A/m$^2$)')
-plt.show()
+
+
import numpy as np
+import matplotlib.pyplot as plt
+from solcore.light_source import LightSource
+from solcore.solar_cell import SolarCell
+from solcore.solar_cell_solver import solar_cell_solver
+from solcore.structure import Junction
+
+# Load the AM1.5G solar spectrum
+wl = np.linspace(300, 4000, 4000) * 1e-9    # wl contains the x-coordinate in wavelength
+am15g = LightSource(source_type='standard', x=wl, version='AM1.5g')
+
+eg = 1.42
+V = np.linspace(0, 1.3, 500)
+db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1) #
+# detailed-balance junction (Shockley-Queisser limit)
+
+my_solar_cell = SolarCell([db_junction], T=300, R_series=0)
+
+solar_cell_solver(my_solar_cell, 'iv',
+                      user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True,
+                                    'internal_voltages': np.linspace(0, 1.3, 400), 'wavelength': wl,
+                                    'mpp': True, 'light_source': am15g})
+
+plt.figure()
+plt.title('Limiting Efficiency IV curve for $E_g$ = 1.42eV')
+plt.plot(V, my_solar_cell.iv.IV[1], 'k')
+plt.ylim(0, 350)
+plt.xlim(0, 1.2)
+plt.text(0.1,300,f'Jsc: {my_solar_cell.iv.Isc:.2f}')
+plt.text(0.1,280,f'Voc: {my_solar_cell.iv.Voc:.2f}')
+plt.text(0.1,260,f'Pmax: {my_solar_cell.iv.Pmpp:.2f}')
+plt.xlabel('Voltage (V)')
+plt.ylabel('Current (A/m$^2$)')
+plt.show()
+
+
/Users/z3533914/.pyenv/versions/3.11.5/lib/python3.11/site-packages/solcore/registries.py:73: UserWarning: Optics solver 'RCWA' will not be available. An installation of S4 has not been found.
+  warn(
+
+
+
Solving IV of the junctions...
+Solving IV of the tunnel junctions...
+Solving IV of the total solar cell...
+
+
+

+

The Shockley-Queisser efficiency calculation can now be performed over a range of band-gap energies. To do this, we make a function that calculates the maximum power Pmax as a function of band-gap energy.

-
-
%%capture
-# A command that prevents the screen from filling up with unnecessary working
-
-# Function that returns the maximum power for a Shockley-Queisser solar cell with band-gap Eg
-def getPmax(eg):
-    V = np.linspace(0, eg-0.1, 500)
-    db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)
-    my_solar_cell = SolarCell([db_junction], T=300, R_series=0)
-
-    solar_cell_solver(my_solar_cell, 'iv',
-                      user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,
-                                    'mpp': True, 'light_source': am15g})
-    return(my_solar_cell.iv.Pmpp)
-
-# Define the range of band-gaps to perform the calculation over
-eg=np.linspace(0.5,2.5,100)
-# Perform the claculation for all values of eg
-p=np.vectorize(getPmax)(eg)
+
+
%%capture
+# A command that prevents the screen from filling up with unnecessary working
+
+# Function that returns the maximum power for a Shockley-Queisser solar cell with band-gap Eg
+def getPmax(eg):
+    V = np.linspace(0, eg-0.1, 500)
+    db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)
+    my_solar_cell = SolarCell([db_junction], T=300, R_series=0)
+
+    solar_cell_solver(my_solar_cell, 'iv',
+                      user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,
+                                    'mpp': True, 'light_source': am15g})
+    return(my_solar_cell.iv.Pmpp)
+
+# Define the range of band-gaps to perform the calculation over
+eg=np.linspace(0.5,2.5,100)
+# Perform the claculation for all values of eg
+p=np.vectorize(getPmax)(eg)

Now let’s plot the result:

-
-
plt.figure()  # Plot the results calculated above:
-plt.title('Shockley-Queisser Limiting Efficiency for Unconentrated Sunlight')
-plt.plot(eg, p/am15g.power_density,label='AM1.5G')
-plt.xlim(0.5, 2.5)
-plt.xlabel('Band Gap energy (eV)')
-plt.ylabel('Efficiency (%)')
-plt.legend()
+
+
plt.figure()  # Plot the results calculated above:
+plt.title('Shockley-Queisser Limiting Efficiency for Unconentrated Sunlight')
+plt.plot(eg, p/am15g.power_density,label='AM1.5G')
+plt.xlim(0.5, 2.5)
+plt.xlabel('Band Gap energy (eV)')
+plt.ylabel('Efficiency (%)')
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x2981fe210>
+
+
+

+

Effect of solar concentration on a Shockley-Queisser Solar Cell

In a Trivich-Flinn model for a solar cell, concentrated sunlight is only expected to increase the current of a solar cell, not the voltage. In that model the current would increase in proportion with the concentration so the efficiency of the solar cell would be unchanged.

In the Shockley-Queisser model, concentrated sunlight increased both the current and the voltage of the solar cell which, in the absence of series resistance losses, leads to an increase in the efficiency of the solar cell. Here we calculate the Shockley-Queisser efficiency at different solar concentrations under the direct solar spectrum AM1.5D:

-
-
%%capture
-
-# Set up a series of AM1.5D solar spectra at different concentrations
-wl = np.linspace(300, 4000, 4000) * 1e-9    #wl contains the x-ordinate in wavelength
-am15d1x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=1)
-am15d30x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=30)
-am15d1000x = LightSource(source_type='standard', x=wl, version='AM1.5d',
-                         concentration=1000)
-
-#Define a function to find Pmax for a particular band-gap energy and solar spectrum
-def getPmax(eg,spectrum):
-    V = np.linspace(0, eg-0.1, 500)
-    db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)
-    my_solar_cell = SolarCell([db_junction], T=300, R_series=0)
-
-    solar_cell_solver(my_solar_cell, 'iv',
-                      user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,
-                                    'mpp': True, 'light_source': spectrum})
-    return my_solar_cell.iv.Pmpp
-
-# Evaluate the Pmax function for band-gaps spanning 0.8 to 1.6eV and concentrations 1x,30x,1000x
-eg = np.linspace(0.8,1.6,100)
-p1x = np.vectorize(getPmax)(eg, am15d1x)
-p30x = np.vectorize(getPmax)(eg, am15d30x)
-p1000x = np.vectorize(getPmax)(eg, am15d1000x)
-
-
-
# Setup a figure for dual y-axes
-fig, ax = plt.subplots(1)
-
-# Plot the SQ curves
-colors = sns.color_palette('husl', n_colors=3)
-ax.plot(eg, 100*p1x/am15d1x.power_density,label='$\eta$ @ AM1.5d 1x', color=colors[0])
-ax.axvline(eg[np.argmax(p1x)], color=colors[0])
-
-ax.plot(eg, 100*p30x/am15d30x.power_density,label='$\eta$ @ AM1.5d 30x', color=colors[1])
-ax.axvline(eg[np.argmax(p30x)], color=colors[1])
-
-ax.plot(eg, 100*p1000x/am15d1000x.power_density,label='$\eta$ @ AM1.5d 1000x', color=colors[2])
-ax.axvline(eg[np.argmax(p1000x)], color=colors[2])
-
-# Define the second y-axis and plot the photon flux in units of eV
-ax2 = ax.twinx()
-ax2.plot(eg, am15d1x.spectrum(x=eg, output_units="photon_flux_per_ev")[1],
-         '--', color='grey', label="AM1.5d")
-
-ax.set_xlim(0.8, 1.6)
-ax.set_xlabel('Band Gap energy (eV)')
-ax.set_ylabel('Efficiency (%)')
-ax2.set_ylabel(r'Photon flux (s$^{-1}$ m$^{-2}$ eV$^{-1}$)')
-ax.legend()
-ax2.legend()
+
+
%%capture
+
+# Set up a series of AM1.5D solar spectra at different concentrations
+wl = np.linspace(300, 4000, 4000) * 1e-9    #wl contains the x-ordinate in wavelength
+am15d1x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=1)
+am15d30x = LightSource(source_type='standard', x=wl, version='AM1.5d', concentration=30)
+am15d1000x = LightSource(source_type='standard', x=wl, version='AM1.5d',
+                         concentration=1000)
+
+#Define a function to find Pmax for a particular band-gap energy and solar spectrum
+def getPmax(eg,spectrum):
+    V = np.linspace(0, eg-0.1, 500)
+    db_junction = Junction(kind='DB', T=300, Eg=eg, A=1, R_shunt=np.inf, n=1)
+    my_solar_cell = SolarCell([db_junction], T=300, R_series=0)
+
+    solar_cell_solver(my_solar_cell, 'iv',
+                      user_options={'T_ambient': 300, 'db_mode': 'top_hat', 'voltages': V, 'light_iv': True, 'wavelength': wl,
+                                    'mpp': True, 'light_source': spectrum})
+    return my_solar_cell.iv.Pmpp
+
+# Evaluate the Pmax function for band-gaps spanning 0.8 to 1.6eV and concentrations 1x,30x,1000x
+eg = np.linspace(0.8,1.6,100)
+p1x = np.vectorize(getPmax)(eg, am15d1x)
+p30x = np.vectorize(getPmax)(eg, am15d30x)
+p1000x = np.vectorize(getPmax)(eg, am15d1000x)
+
+
+
# Setup a figure for dual y-axes
+fig, ax = plt.subplots(1)
+
+# Plot the SQ curves
+colors = sns.color_palette('husl', n_colors=3)
+ax.plot(eg, 100*p1x/am15d1x.power_density,label='$\eta$ @ AM1.5d 1x', color=colors[0])
+ax.axvline(eg[np.argmax(p1x)], color=colors[0])
+
+ax.plot(eg, 100*p30x/am15d30x.power_density,label='$\eta$ @ AM1.5d 30x', color=colors[1])
+ax.axvline(eg[np.argmax(p30x)], color=colors[1])
+
+ax.plot(eg, 100*p1000x/am15d1000x.power_density,label='$\eta$ @ AM1.5d 1000x', color=colors[2])
+ax.axvline(eg[np.argmax(p1000x)], color=colors[2])
+
+# Define the second y-axis and plot the photon flux in units of eV
+ax2 = ax.twinx()
+ax2.plot(eg, am15d1x.spectrum(x=eg, output_units="photon_flux_per_ev")[1],
+         '--', color='grey', label="AM1.5d")
+
+ax.set_xlim(0.8, 1.6)
+ax.set_xlabel('Band Gap energy (eV)')
+ax.set_ylabel('Efficiency (%)')
+ax2.set_ylabel(r'Photon flux (s$^{-1}$ m$^{-2}$ eV$^{-1}$)')
+ax.legend()
+ax2.legend()
+
+
<matplotlib.legend.Legend at 0x2bf13f050>
+
+
+

+

The maximum band-gap energy moves to lower energies with increaseing solar concentration. This arises since although the current increases with increasing solar concentration, the cell voltage also increases which means the optimal effiicency is obtained at lower band-gaps. However, the drop in band-gap energy is modest owing to a strong atmospheric absorption feature at 1.1um which serves to pin the optimum bandgap around 1.12eV.

diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-10-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-10-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..81fdf384f4fae8efba1efd0fdda7a3668fd33644 GIT binary patch literal 31976 zcmZ_01yq%L^ewtUN;;&aLjZ6J^_FLGcBJFN z84h)CqPs#Rv`I@Tro8kWrYUSj8-CVStCu=edr#OGk3|IBEv^3Aa8H>`p*1wSZsKE9 zc+#J9i~a#TF7r98I{9(04`SDBrmkK7GVbwqS(03V6pNIMjBHd<$`Y5Em6es8fPe-5 zDXKQagKz7Ub}2@~ANw0rifA-i-=TsOewb|>8}Z*S8S{q24-3XDS>T80YAOO2?pnSF z4e!)b_OeF?w<5s~Q>_y-h89bnw4xqs94RTC7Rt^X(DI&D-~M zbhmo78B7T@C#&oz*vT(%%{1|Nzob4s*=`y7_(+|GhUO+~60@u<1FGC>{jP}f6wUGR zv4FTZuJ&%r?9aXP*`@$$@))cPF{kenVm!ywss>>Z+Bevf)OtlmU&{Z?H*@6B-27Qh zA#Gat{KX4FhcRB{Jt89`%d4v+YHP)3f-iy|+StT0Y$uNv-yq-m3X;Vbo9x7tixny{6Wluq}DwI&+8c;e#Y-4?rv;^@VRot>Qx zYn>U!K0M%A7_yDZkJ!vrPw7l}!XWKE2lJtp#=#h*kVY9am73HR$=_&%AD<9YKi-W)dCuW28EgMBtIM%-B63EENkdl)>x${P-Od)@|qg1ik z)!l75*BUAyC>R%s+vjq9X{X72$kJNzpBK$A{I|Oa5|~>`r7# zoSK@lT>q9Tc&X+5mA*ksO8Az*7;InX5QBIOP=;3T38E`YEa~TX%Q&a=$;; zqq+HTYB9K);s=Wiijkpxekdd%C1nXKP~w-*n_&7xvrF0YLghGjlJzKnu^6zV+P&^9qa!^g)r zQDLPTQ`R;-;GM$vV5f&Ecy6XCplIN}LDip}=eu#F$=q;LngaeJcR;{?gbP-X(xm&_ zH{v(aKHYC+1N6-rwKiv(=o=auXoMcB6`n}A|H3m3KJ${0kT4%BF)FXE?KxN<--Qcp z1z#5Ze){z3V5N=L(b3UdhD&qXP>$;EX68&|Kge!4yvxcKDl8Q zE`jAxw(`#3zdcoU!=#jy5fDn*BqV5-zrE2rk;%=?&4L(;3~t7M{l@9uSAO4%v%f=) zejfW<(VX3~RAj(Yz3DRB%zyx5FHkC66M-IC$S0I4l~`o#xmrB8g@=qvpkl+VWKSh(?z>pZBNx#4%U0vj4nd- zH$pK(E-kn*US+431$$i7bM4M+QWPHYUn~Vud;$XOd-v|Ob#*DLsjKUm+$+>CIuC}c zh>4o79FWs9$ulUv`y?f0Ts@JWlT!tyy|6Fxb@;5VuCAbz;HF`@dFa~i6Kn!3RD1Yk zijh|Vi}B)EJUqpg>$h`tS)`LZFv_hthjv zg5`aFKDEi=zbUQ6@!sCsYMPn`{qnv$?@%`-JXfCCo5Ep>Xz*IcH!?CR^1G(>_6n+T zzZwq@kM!!*tKq7NjD+AVtRH&(`vtYT4dIo~!-pap)n_q3k_tj?M zXm=6j^u}lAdd-E6ycHaacDU8CHz;UmxKN~)mX@#@;qTwGD{v>{%lhw=!ZzuDJv&-V zgwaDNEb`O3h^%q^k)58e&4m>Z5MZ%0*T&JpHQ?&zcKyKP)59;%EosBT!bZn}kBv0% z+_{@^aXPyV^TbBA`^*O2hX)c-(S1r*f_3lR{M{|%DDh!$h9{$HcmIUwdH~kW-jAxm6*|BXXLhb1d3yD`&bBFZl$L=L~xF_@*K{(xUZEz_3 z_$>A(q%do1YyN&G8=EMedmqdpV#3MkNEdYwubSR4Dx}02q~x z$*ukyurg{PfdPiq)k(aTa8nd@IXT=!LdRTN*jJyO-y&`c=+TRejEs)yX$CkxzU!s6 z`hTXUr!AbFO+RdNl2ap_0L!757nwXZHn#KUPX~nla^GD`lons?>guY+;5&uf4}Yu9 zLZhO3)c@{QIrUWX^71}=^(xQ*_3PIqV{)CHo#;*6W{ZwU`zCwSh{{Tj3f|Ti>MXG0 zxqSC@x4t9!;$Usmu-cvyvQtDy6v<+7S#x`S=3{)oS=Ic%_pGr(Ah%0At9l>s%qr3TxPTN*4CE&pIqJRYvW~Q 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 B(d7UD literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-11-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-11-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fc22e30b3852401a7851a6a0a030ef6b4d8514c4 GIT binary patch literal 29461 zcmb5W2{@MR_CEX&Df2Azm}Dl(EJH|!NJwTPO3IvBrbnibBq8%GlFW04A~MT7&tt}n z|8;Bc-`@NC_V4)q-+S~P@9}bXKlgoI>ssqv=XtIt=(d_70WJ+L3WXxLsU)w7LSfpW zP#E9NorRxZwDwfPe?%Q_=sMi7wQz7Yv3r10HF0?Q*w*2(l_`_c13P;w+b36eMR*0c znI1YgJhd0&H|1rtT;8vY zJlECQKE_$!ZA1A!W{u;1Ihl_Ze2M0mRnWW~6n!f_Id&$%>GE3d5YKYokMCa+Us!3I zTHmyOaxY!eoP*b=bTZ7CCGJzOZ`=DZM#DJ;ZbJU2v$Y4?5}Ojgvl5SXh$xO_&ws<>lElxTld{u)XxBBOxJ)kS~123crrzptOVE%9A$A zh9Q3~S+@m#OLCJOPZWO35@huC6%I;PSufGbroS|XDfX3oVosa}E8QGawm4HY6 z`P7aQp}n>S%|jPNzrMSAhpqVeM*p_a_b^83Fd5&ob%TR6g0c9QFJCrQ%$DU`3QXGU zA}_)CVHKa=)X$A48mnUQlS@jrPcSRD3FM; zDbBV!XrVhJ#c`=mVX6Nu4XdJ~N8eSx<80oBzFznR2Fhc9OTfA&G%5Yh&$pWyWuDn~ZYHUBpM!(r=Sjz%G)ANZfxE0!UGYxuF%IGekZjlpjPAK+?n zQoN6k-`HRJC`XK?U*kz{)*R*^A5X7uV6ZU}$k;bH*D%|dNG-S=M0RO?Zz{Z@y`Avt z)vFgo?NaM12GkR!2>AFup0$x+Y)jmn>oBYLJ6}*#1l3AhfU&# z{R(VnlpOXOVPBGqm$#{vuLfUTU7aIZ`Lk8`*>I_Sj>xE}&@L~>boIorB)LFL zR8u%35k$91Lx9Qt*24PMR<5ACf@4< zL0?C}vEhY%kNhREg952XL+vzTiJpIEs9MYgACFa6DUZTJBIhS4D2ON?CxD+VocY}h zL)rdYeiKaOqaU=sVHOpoPV_n!9sF$NyF2PegnAVpAL?@kN0vRxr;8Uh>~9Eh;9tO_BuZfjM6s&Q8*dUcHaA^sSiPe)iEWVKeh3=~*)Bs9Ka zmNT}r46HdhTI0WVt@)ksBmTz&{D%-y>$|%jpScRr5bzq5n}4qQM#iq^~;lymwz_r z8d_WNN}i0!%F1GD-nrBH(WvI^u2Fo9q3d~@p)ZZ%Yn8s(c$Bpr9Yk=-20mLw$#m~n z5*_fgwzYlr#yE5P_HAz}BX<%>*R9%6+G_=lOWLrgIFyu>j(R6P~#uKR7H{cswsgFwFOu(QR3vw5)96$F(s(?VLvBWjR~3rIsu`Joy$k-E5av zY#oR0$<1{am^6$}O!&ZhnGBaciyj^NY(*yKyc*)|?M;($;!|H=&q?(YqDn+etnYHT zj31@(XytQR)hHTj>dPqN1h3;i$}3Y%p=5CEx4k;vi{5!^Z%+oX%SmtzqCzH3^Stxw zaF%d`?}o&|a?#zsWN7|9)0*S{CEYX8W9MEHJf-Z78~&be#G%Oi$j~6oBrB)dgo0{OoYRxOg1M!TGL(?64ELtC?L+) zFH5$CB`1GuW8<&L@I1B8Q~kXNGm2Phe?BG9BJ+pupUvqgb#3cJap!#0b&==4Q>*jJ zpPS4J^$0Oq$4Lj|GX~_J2n%e9f6&bGd%ig<`MG9)$0*9k^UnqyeP zg?PB!5%0#08^l-`Ltkv6zi0maz37gY73O}2apPru9DmONVt^K*+ zfE-}d1;w6*1Se->(T&Xux0;OSm)7$`Kufwj$+^vaMbsm$!y*SN1>7M8(_ z|K~}MBX$4P_$J+qVm%&0IuY-mKW~>-R4ffuI4rzqX7sA;D%id!y|nM9F*fFAX6tn_ zXk;);hEj>UNb7cbaZrF8+3UT85b7}s7b3L1aj;7c(uT#{*V28e-`s~ zfBg8-2y16zV-vbMQo+j0+deMgW#9#A0>4b(aOt@|L43gAg>p|Jha(*P6T-@q;{y@< zS$qiz34Y^R6t_Wn&xhn1foikuje@aH$;m87Rzyv=6Sq^ogf!8q8(jE3lDQ=4Iq-?! zA)c3yPf=T2J1s^#=Z2aZA-s2X74hOnoBv$s^7y<~cT8^vNmodoAG@*$;5gOS`kW!C zo_}2Hjd2baH+zdl%H0JC@s5atkMGpjsIV}^;t6Yya!eZP>$B0)%OrL9pvkQR#EE^JJZzt^!>2gW{(s9U?Fn z&zyZfteEHi9q0WmD+CeP41Vq``4M-GC_g{H1=b9TDZfcQmVUXzc|t-$$5o@{xG z&kIv-#`Dg`fIThwzdkBbw z0;n~!NyV$r|6Rnp+;-rS+I#f&Qa@}xVOCZaF_w&%?zYTo(|hO8EZ)uJbd&h_c#{VY z?yd-mc^ykk+lj)~TQBbd5{>puRaRCmFl#2%uX3e;t#$eR?NVojv+eS5*`1S`?m<|b ztgaJnKBH>9 zn9|O1VeIzK&Q7nVl%!;p;gP7gI6%JqE{YjpD9N_-Vox%g7{Zyy2+Vk=$`8{I_V$cV zj*p@T0WX?7c|v&W)-C;N_cCQhFPj|oo$_Ntp{BJef&Itb>7jL-3qBAC%q%RJWA2*- z5Q@f6o)}sU^$~A>yF<&MC+sboRNJjC9SXJl?!lS2adAWA$0z&JpQE{SwD*llWRtEx zeai2&Jm3=&g74vGZO!Sqzi=rf8sXPQ;_3{2Atg~n9;pGOUpq@R0qN_aDYyhzZ`1WCcetdPF z^V+D0+fJ@bH#t4M!NM9m2 zjjHd#$DHxLB3O3s;J~ae_ul&N-}Ng)B@yr6hn&G7 z9N$?P+Fo^Qdn+(dU~&f9fy&CtS8v~<;aBr~cRa@d@O&Muaua}p)&>DXK|!HgW_Qtb zd-3i4aG8=0- zJ~efQmX?-IqyGqa2r*~q&$_Z$~1!us!;g*Crg3n+|v zCf9E@eq7ZJ%Nbbbi(}UQUKFwd`sK?PB_+;jbFF=s+yE-lOzn-DO*#-s%&cTtW2juJzc~-0ZMgY^f zdT3-g_xAU30Yu3{X!`Z$=;)MD$TL0_F4(qI=CrOT9*cQF+Q)kIXo=GUxij>$I-yf81C^O-HVy2TF5$t)z6cEsHGc5m zB0i&(zKHwY)4Xna3W|#;VrcQWw#{s9jjT%H!SFs-{#MTOkbEmW*B(!n@O+lKuCGtK zprnLqwj+`6b#(MynlI`92@Z1s98QaW=zQo0E$?|LDXABEd3nY*HavTKd*`662r8cx zXDz&;KG<0ytE{TR#>2x)f-+tYNbgbA5t_N?!NS5qJ=7O0SWTcDZ~+LB&i;tI^ib%X za$??-SYh*{%v*pP1rzp%J-@>4CbgFGcK>?ixbIV1Dw1S7R{g@?-~T7{;1io2(o}}e zXDI5rx<0l4S`t&wHk;r51(jp)OHn|3hIIEsp%+zERe)si->phpeq1PiGE(k3mldQ! ztTMl>$1w?6Uqs*PUWTnmpuIk|21 zA9g@Cp-wK|Xce7@4>{TsB=4_?x)60odh%Jvsl)Mn>g=otV6%E}60dW!$8WBMB=*Db zu>SI3FWbkEjahdx z*8A?;B1?RiLGD-2bA|wax`^|C#(jy9I&QK)UbnY1WSdjv^SP+VK2P10Df!I|q`QV| zWA47Wx!k}cU}0g6!|Bc1v1s6lP1;<5iqZ%>pQN2bLPo~wnh-c4`VY>{e%e~#$*>5} zE=zpU?7+7PUgVy(E_^y6>%QHqW7>=mc-fR45jl;}(*avxG}p1mS*x1Yh0-f_y_rE-* z*5ZslZfwX#KAHU81Ll~R7@Rz9JSwUfO3Fo}{*Oksw>=U1Q%-5;r}Z6?r{mr-4VR;pIikNSsL8=yweA&hPrrZv{=;n! zU|0;YB*n#P0U)xZAzLU3sB~s##2j+-3!E2 zRDqCuf@y(vZIOQ+6T=GSMJ!%znL|~9Hzox*FrG5{DPGuX^M=xA^2>1Efvj7Fm~FOp$lT(cd8+U*?}s8}?3>uwaz zwdI=Uo9u%nwtQJRcOJ3)l3j&!*9=VSwim1{3I(SDs9ay5*;uY!qq42sI1AwdTU!Vq zgp=wzF$qbrJe+P|6A2;O032R)de1(!yd2WjrlO^#Rf`;P5dwBHEE!^PdHXwBT3FG_ z{`K{;ql)m3DqSNL&Jl0koCUV+vvsfXvWRMWZZ1BwIC9Nl^d?qT_ZB2CKdFg3@zjF% z%GR(Ksnn(VVdHx5zwyzL0v`JgM|q7XCNVLZgoK0wKq)mf(qZ)C?1myF1+P*Ro?WiE z(EnSxF-%5Y{)g`4$K1$bQBwy^Pn$!IW)cy(06ny+;v+%s>6ZD`*E+^KO>80eV!h)p zU;7#cTl}L(kLG_#8sB2TPliu zKIZrO?0{jxr}0GvdGl;ImcJzPIHsOF$j{vDO@)Yn^H?8w@z$1&T^XH>jEs_sijb3h zR3i@;b$n4CsZq!8=I@DoW-}cz1s4~H*es`6t?i_@9HN>$o}@Qdxm0aLaZE|= zu8oVGSW5Hp5$WZ9`5t;~ps)Y*`0%+|(-kX;&&r|oD$LDe3@ZVueE5FBBS%&CW+_A_ za+AXA3_TFKO?8rXJ(-wd;*-t(;l`bBqR`@rzWvS#jY+K~>!aNsA3jAMr)Z$j?}D{w zao-;}7d)KG=el(15(hc1xuvC!bw_)9Ku%6hVREd*YD9{{oUx5hN5lTqwtykOPD{b= zW6A{G4cf>q+hF=oH2U}!dsN-`dX?8Y9tmHJ|8)X}9K`4+Cnt%CiH+OtnRV&5XhgmG zX8x9XfMjSEUlvD^YnX$h!B1F`_^9>4yn{rKvb?+_6{MfyNByRdrIb`v8{doCL$tr7 zzG8u<&-=FilT$cLYDI7AVEy``{Q>o|RBX_Uv_Wk|PRV*FmhgL@ei*n_zjSAM^YuG>xQLlN_OaGi!I~beTv!caI>D zcP%6kcwxBe)KX(lbj37mDxOhO z!>~>+58|U2)|9B7 z`6q@=ryG3E;(lKCn3wzU*1H1OR2Zj&E~;;NcjZ2J#|T1yHMOuf3)~pg`}*NwI=kna zV_R0TA?zQ3#|GX5zz~rBWa44dBi)PZb?Q_Fv*UMB*Vn#q z%B!vh6NdG%Tw-O3{PO#^U20mIOvWS8IhNKLJBQ@~5=hZ^N24Zp;{5elUroMb!mfGW zA@jB5GO{#Zl&@4CI538+PO&>d0=Ws?63^m#w!i<4P&dZ3(jyDz{&T6NEJ}?(>IJ#? zX0gJIT5(V+)B_ABG%MJ*>=~>tvLpvYOzu?tVIHtD|Txn@(Xi~l@eapJcF)b)BF&G-C7X)z?WzMXlr-#eP$SAL*9!pw6E^kEGyygNpTb@wM@utUIcLHs%s?eezYx9<#-&~UOyoc#4HPfWa8eJ7Xdh{B}iDU zuLEPLoc4)?ETT}N)Mxz?4lna!OzVIP+nGy(xCM)4p7Y}md7LBwREk+Sx&3#bbjK7z zu6KM@_v8>IqI-Y*u?0y}u2L;ghV4rv$7ZU%Gx&GR^skD+WGW~qELS0F*74%{-t)l} z-8(*Iagl`%{r4Vnx?}?ONtKE8*S~r5yr!n+tH?-9l+vwRa>~lMf`Wo56ku503MZbv zk4E7=Jz8zCS8&qO(vW5qo%M~pEK6@9?%o*zw}+Of>unQ{-WG_F^xKY+h*Fb~bT-`l zy~Db(vC%7aBE-#&FCZX*^3KfU;5MqJyLa#2?VMiSLR0L+qoX*sL~=eO_VKyRU+BFZ zHr&-=-}p3YsS9hq8dWYL3FyqUSCc#UBmLiJMNPiEzB>Yi?(k#OGnNz-YF*Y?@o;K` zfnP_-Zcdnlq}PYMWNcWB~~;f4^$ z=8fag&CH*RUy-oE^7g0G$Qu;bGg*3%Qo)-?p>!#{usb|F$>F%)P=hPJ%7)D+y|%zT zbj!V_Ej2{dM~O?PS`m6l`!Jv(X7ltWJaph2IOD%pYNq4D9us&H9DBaY`s^ld z)cv;HukF$g8{?fZ*?Ng}=(+L*NpzY1P^Yxirw-hV=PIu|*nLsZ?le$2Tt3&wP>DNg z76;i97e46h{Hk@Z!R8r~$tglOi(Z~ejlr~$w_WBEPH%#3%&gdR{i^bn+_$Ms_mf5o zZnqSk=wEG;KMLsfB0mkpccSnx3QSSo_#KUL9>-ld$3U3(^vH=i;dqPxD&5V$nN0|m zHzdtLY(jPrZn>Y%R-I7b%WoGri!dA$rgUF zO{|M+3*M4=m;$LeWZzejP7(IkB{PhE3e9I?t=5T831~DzK1oK-w!1NT0yXYhY-VlDcjp{=s z9n0l=#OKBccQ~r=`@~#jn~-*EpGeTYbb1Z4SE_AL+Tx7p(D&rTFj0NSZvrf(#b4ys zS0GiFB@1?n4b$GA?qldq{o>{7g1he~cDLL^3^!;=d1p=$6&t)%1R7952YbG7w{pryNlUNY08piFtDhHdT<= zBQv(judPtut;3n}Ft*}tt_vzquK68eE57{p+6DUf+-F7WyzKcm<=c{k z&S4T2lagrMg}qc!A<_|FekXk)#jOI~w6<$xj{hW%jH6TQG(c7Gk-L~bvI@)m=0QR| ziG8IE-%V}gYm~)`UB^*?r9zDYKp2B`dV=gxVjrCro3w#J46xja&#v#i_mLR9xYlSLD%lCFnB zkb3<`;gZXKcSB35qvG;I=&D(6Qrh7VF~|dJgAfT(-+k(FMT@puP@1%TA1gS~KRvHX zY?0jmWEJM;=dH)WLql&s(qUm`1r`_|9ux})hxO7WP+|1)0)VfK*0Hc)2O_w@xDGSq zf&eDa5aeeG>CXAfc4|c_YUL=FBNc#oeyCdb<*K%EpH9ux2xCWzYz~`KrGV+ zt=4}p3%^};Hs}VV>&!3A%Mn)2o zlc(B7wax%ZA!}-yTz4cf;N}dZ37xnTKJb&mgcbi*(2vQkn=?TkXOVMdwzf0Uz0dJf zXyvNHN2S`%oRZTVqMG`P!tVL==fLVdefBJ?XLWM&1yD}D2h`$D+^|;s55AM<-Y+2p z9T{%@Z*;~-XV2tvn(k)$iuyC1KN`=LHPWaYA984)xcaO6GO<`=Sm&$hm6k78-QkP| zZ&2vlfJ~?Oc$)&VQRB)lNBCb7OMRTZB*Ig-+}-&{ak8~%k**?Hp=)`k1=?ttq}xp5 z6~Ck1fBpLP)X|aRGKI!e(I@@}MKbsG#Ap9Zsz{>y)h2tI=vb|s{NMZgW4n8JkWf)& z*aEOd2M5btzwV9xhNek`Gh%;CU*M>Q8vOFaf9t;UdQW!4-i`>-E*XiiA`(c-%23*0 zynaoNx~`{3gH-y62n-ZpzpfKDL@AWVW8x1+(0Bepo?DUhecWSY0gM`|d`}M(1(x&-30far9F0T}1SBc?beCw@WQOdSlLPxd_d{?MGZ4?}qi*BCb1CoPr`0l}$( z*PHg^C_~0CdnBp%{9Xr9*4rWh>Ko2$r|B6VDt{(6vZc*ry)Ilmw6nO>I|)DP2QuYE z67RB|<~tNrTS_(X87?%8;##cXN@N6_FbB zBGIF_)sU4p=Y&tv2p#-&e`4qt##_MxNh}Oq66f>X{qzkhU3N&AlE4+6avVR%UBo|M zlS-IBbIV@Tv*LB20GDS&P>4HnNwEujPz%%4{+EWZ=f0ht-)Lg}odrx(S+24fp4Ke{ zG@&r)#)=ggj;^%zq(J%Ye9uXZst9J4)URhd(GPWlBp4{cieYUSP_A%i^NXp!>5Z^ zR0oSkbGK$^XHQCk*tbF?c{za+?^=fOLVgj)$8jEIG@1snyb6mc(q61~9cA1Ma6XIr zN>?3lGx6f2g-I;Zey4^aS0KxNqfT=D&*$TUVj(#@1q`GknP`2EymKTs0G*!H7nSMD!!*KCh!>%l4KJWja^2T`*4TBaxO3#e;y*(G`{>*^u8Yp+nsW!;zl}+ia z{r(*n+7$#%fN)EwsMs91bMJpx)`4HYge}}zZUXT;Mpxl^GKrH%2%m&dGp^+uZgTRf z>Mw`ZC~Fj-fXZ4>T%6aHf13l;F>KV&heE_yKF%4J1O>q<@$Gn}@L!pi|4A>id(2@V za`M>fQctx77B)7l)zwvC?7(TG7;TcAk}|Qda2|wrkawrxX9~1l;A8<|^k=?-IJe&C zbHJA=EXARZGt?{kkZlTgux}c16O(s$BRv^>M)MB$l)O-RcazEvdBKeh83zZ4;L%3kxZS!@Tq#GG=S@}j)Fa73G^9dL9*CANwWA7)nn0NTOR(-VYJ zOw_!C*uOgbtEFqO5l{y1iYcysoNbQ}CSg_3D&xQ`^_st%(m8*^%gOm7FfcGRtdJ}= z(uj9@eCEex4(9<$q;w-+ooC3IaR_$2suK5v)ps za?segn}~N$R~HSs4Pv?N{SR1BH+9MSTY$5z?^?r|iIG0Sl3T3;+pQ_+{Xe8g9^0Y< zxdzO6A9}4PCMPwsMj9Kjp&>oHOGZxaw=vZ`70Bp$y~1f_>xQwbt5^U&H6~y!d}=|g ziHV7MpyZ1^xbJ^?kp5`3q}surT(F$8J=XPBRM8j-;M9m)-Mc{KBQqU_u&9E5`wcmeDtkG)G^-l(1 zD^R4ns|x`OVA()j2gKQzZxD?5UWA1y>}T6#tgJ3uw7q3EwPvyA&dXaJOE#Zq$$$0D zTUGH2zfTDVb24RHs;x9BICX(4)3GAL!;@1{!ACIx9RyYga5hoG>DJEG#qjbvVOP_O zMVkLe8f39TR9_C+M)6LkD!=5yj376t@xZaadU2vHl%?fCEmumpS^LlSSFI0_yrSCG1SrFBd^hjI3+H zr?p`o$=F5f zCz28$6RdTf9SbD#0TA>g`ir%%>5+KG#FZIA^$1&noX3b@|D3^S}cZHRrT(_VpX zh9TdmCJc{?7xAq$%}1g$Z%QoAyfB#XnV+x@t|TR3_wpo9JaLLf-tT6nGqaAqeu%pC z5xHC-A>wP7kd*8!vQ!8EbPD_g^iN7?^PaTj%FBl)|ATi=vUYyxh&ehM_41EVB9w7i zq)98z)?wc5RAj7!jto4Pa(_KJJ^+ICD_uw+o1jBNAXi~4gwpsUPQe&n13{-JEG#LX z{sOnX-2p@XsMdnHEmZ`S&AcZ?5KONUd(YHfT~UWru-DO&5n`jrYp@ccLHY>b#$As8 z%q`JtT7!NI4uaddy642j#S5p1HRvye#ZHKfsLa+C&gI)`u|vVX%jGg0Krs9Su1D>%e}#y`~y3);m7|5>6di)kuN8CzF`? zeb$_LUUrW+Xo8@AmtayBQiFKhvXU`RS`e3&Zr-dbcUhokjAh^<6C>P{yB&qCVC z5V$c8cGncGt*z6XfT30fK-9+?U+^ql`u$_>r&2i=%(PD#$I}PMR4ZZp1LGjZAff2! z^mDG!i#eQw(sI>WBr9@qrd3|c`5u5&=R2g4S70OxPr<1XfOgWW&2!ihvD8`#r@Dn))Q@Oi$>0_c{{nbratbqFhqrt{mGY)9mz70=tu34wpj%lPZtmufnKc^zCh%~v`k?qnU+`{M!0x~~K78pL||OqMi)ZOfskA^(rh zgF$Vg)oXY@;)?9Er&Wsx2ePgka#GGuA36QQKfWS8|&nB+{F|feYfM2oj8rcnb zqDwKY#8RKQ`c!v)v!Mk!)<6qzkv*NaL%7AvSgYI28Miq?qEqz#gILLy{7n7-6g;lD zhS}B}QIcI!6LPJA#7(d?3K0F(xul=}sBi48xE z^dPhzB@qr6!f8%=S`EcZXy zy18+WI8sW-|7c2EmeZB&r5e$1XI>?cQp^V?I?~AiSufp(*I@p5D1PX>E8}Hic;7;7$NN zJrhf|nlD~iMuICYtov2aG=eC&w3%S?38X}r&3M?e`ThR_QgKrF0B#a-TD}0d^wEkL zIP^KVxqE8zjpnLS(3!5*;iq61dXh=CGRn;wDW8%W=|DsSekji-Lm>6}9he*eV1l}Y zQR?+}1H83J!T~T#OIJ`xFY@$5(=NCnKNT?^Gd+f>i!@EEHeLCi5Ya)7LeD0Yd%+qD zFgVzWmr^ITLS;ed#Id}8{DwGUf=0h(d!ZZ0!s28}AxkS6hRdJ}@sg{^kB*8WBgefF zEz2b?9@pV@ktND9{gv6ql;nq<+Y`}%5FQTNgxvc>t1UT)2YfHW@&r9xPwEAq2qXAG z6w;!O;=p+J|K@G3M_DklWPfa~JWZ;QAZ45)&PGYy`Wo={5mJAtQ|tWSgOG^WfM#a= zy^c2%2Z|rXbheX#x203s00Y(a|AEr7jyXX?ygc94bXI(pplN>eNofYf`hI(n%gj&| z2iIIm6*|*NFv;g+g_hqK^{J>x0F0C7=H}zm-=a7Gru+Jy+22_~1`m2G5L6GIz)EE| zUEK?&rlu$qn3w)xk3#$|rj5AJ$@IIuZ@T^O?N!h_e{?F$sQoi-Lr>|gBC={D;&a7{ zkH|;zYB!g{r=reKC3SC9in3(q*7*-Zo-A}&&;-i(0y7~A35IuEHifAX4f^t#Avt1i zbwd66w(VvOm%#8HmgEzw^`yIHhn_sZ$fAMAt%F7g7RbM(u_^2_Uc>XYk1_FkV+2+2}}_0C7x?~of${K2)r>6kn^Ke;!wOE zEUo|BDuMG}(=m0R=R8o~ZYr%_`5JbkC-?8N<%=~oHX;WA){5VDRKm>J z_BRk{#1RWzrFX*ot4sHygGYlIYeb&?hu%sd zZFCm3=Ty*)po7MCO%TeuE;X)PJE2vSXJf`K!zW28p9(HGZSyrZh_7panOeLO2Qr#006s0){Dm9coC}~06MJz?>>LmZ)L_~6PCzI1+Hlj z2Li$F)wG!K*E3_%G#<7$+vxN3%iT#?Cjo>y^|Akj6eNYF9Bo=3@{g{}$+OHE^SrZ9 zl$+KT{-C_qNen>gxdt*hfTma}uu?q_qXS6^;d+cZXwVD35*R2huj&wLfo6@T8T!M< z@;w|hX|K3AIqShJ3^D(*X&ye_+Qfvtx$BbK#8i+}fl$oUc%#0b{KfIMP=vXSh!EcU zX|14e7Lq+@6__ZQ&tc}~IWaTy;4^Z}UM8U5U5f_+ zzR{o_{>4OXJsP9QN!awyc?rSqdL53L>so}k>lTOS!OFEZnDL@T}$ zq_##Re(MUGCAl$Z8Bezsd0-JV&h%8gS{f?hBV>?3pC@BS%w%AQmQzy;6DR@^Cn9uy z;>F0sF5^nHj%L`mM8?Ls8iN_gPi)zBI(blRr~$R}`@G(|Do6nyevxMq{u8$Sc)Wa<<*c;HXk zl(_B^8lhx2&w(#C z_p8o;#x|9++G*Ia2|>aB(J)ZkcBI@Nnf=)N-O2|}!1I8bVJfSktBdr{pFbkbt8`#7 z4)#3SpV;m>c=)CYt^$of64^k4zf}^jD2 zLzw=(d(=D2zkL1tuu?NJQowQuWYj$D9#jNCMmBB#$WQYfdk^`ngMhhz@;aDaPwaC3 zIeB@nyDoDKluZfO5B>E~wV%BS_xd05>At0&3BZwOS48NvBb!RkBe4Ji+OvFod{Dq~ zzvv7X5dQtwUs;{#^Sq=TYz{IJ z0#pLx&|O*z27gICjLV~t5#h;6(_Et(2AB&FE;YKWy#=jc(5)X$t%a9Ckj1dPe=+&e zZi9CiA#9%@C%pCjEe26I3@{#s^3KWO0-x&BgB_crgTFX7PiX=ApXQbXUgUU<7(9-+ zpIbLwtVnFn5enymG!{s>|3Iw&ixjvhoS&M?_OMtF_%b1WVG@na=>_vppnI9WHq%px zVcc>~Y#1}Wb6dN;S&%fS5varezkoH1aTYpku%6RM!JMf=BAm?2hzRlWrgf!M6CR{- zaZN!1AShGECgGrbHQutH24h{J?U>Y2Hy!AhBy@E6Zf*x>x4A&j1P7d7K)~VW|@^EPKtFJ8QO`g{83 z>o;%ep#w!CTPPo=6x_Uef~x+MC!-#Oabcrggu5*aHtU`8!diK4;1kihra8=NY0=gW z9~)lm-gf)k z^hms&Y1N$&DSGd+s^=#-LqnM(w5W?;9e@WP8HaIkb4!5kJrTpY_8-*Yk2SS5$wqh*moQWS&bKQ?cBr zT9+{=M4Wsx+a&4rE|d8*mCLSv9Ccmd0T%>SAR)c=vPLY{X=V>qCC17Xb)i^WlO&2q zxs(()fHUQxr7gnqp}K}WuYJ2H-<_`70DvOSR0}M-$q>#KL@Oa56Ltd;d&4k?Y|D2n zum&X~k$!=Kge11KHeYRko&h~-a~E-vniw%OWNhgC#KHk%QapP_ zRybH3?u5QX%*5huT#sYvy*H{?K9G6u?j$q=tM=DvqNM5KtN@lNf1pR#q`PrWsOJdm z{qdy}zJc_LrQd#;M4TqV96_uso!}ahm>a_=SyG26dan9|;&5?_wHw@G* zlAwGeH@9U%B0n!hoYxOI`Q6M&N5|Y4^yoX{ShErGlSS}6Lc_V&G4f$KVWDzg*1T9) z3S+MMtPk)xJs7!1EI!zHPH3k5DLQs;aM@%3RYS?1&MG7U=b?g-tSo|}>ieZ;2bD7a zq;|k(GVpFIaG(&aLU?+?O-cQg0`NI2Y&|@q>QDIbiD*#2^Lv@+{zzlY?tA({+;_R` z-KBt)AzZ{o4LoI|hh|d#FI5|R7HDUA^R8*2Y6%wu`0Do?{$Y6oqUo>Zt>gfdIa-NS zVaK6v^^ec|s%bC)9rllsFW$;oxqqfAet7zOL5cX>LXS}7sTeE&V=nqgp41t*KD7{s06WB^28yZ%WLPj+;V(}k_Tkyb%1ss034w3s zerQ}lWN4uLFVSAS+P>AC%S?}f%JHgtQNR~I;bc_?I%&vh5D4G0z!f#5UGb0p8w8}h zbId@!!igY z@unQao3UqSXDGyw_dSQKt2GG}ltL#xufLw9f(a!tgr;3iu7E};yM)r9#Q?r61_3oO zF;w8d^@Y($E!Qz%$ARwk0mlYRw%ky@2_p|IF|9~%oW*#^Bl1<-WBnDT66@`mpH`)5jxTH;0R&%#8m<6_CbyUibk%)^UZ zhbfZ{FtF>l@CHD0*Wc`7qIVq!PGez8gc6d1I^Cv+hlhbyz(B!>&{I1*n0!4nq9)O} zHU1xXDWal%5-6DDTzxLcLB6pL%+BlMGJbx3wId_+z-5WU_v#3$I5-G_et>{vuqA_y zDAy1fQ+)weU(g||Re>0WFQoumZ$r9j+@d%&lDKlY+X`Tq;e=*{3?LK2HD^dmhAfq= zfhnVfiQS+j8tOYxhA<-5Tg^yI8;nMulUGn+f$x%m$;NYpgbL8vcwQ*hBe1ny+Ow_OF)dhrt*a8#_BqPaxAdxSbd@ry6N!_#&noFm;CdkeZ4meR6mOnKibN{wEka zb_Xd z0ORSm^wic~2R7Guyw(Q+yoZN}*(;X+A{1*z3xbd=ultT`ee{aQdVA?8jN7bt|9Tt} zs$Bb5%DHR8?t~J+Mj%$sasDWbl-5J_BKRlFx&pSipvRxQ+_s(;H4cYv#Ke7!U0VfTZ-bhuk4F_NO%}B=wYF`TKZq34e_4t2v zYQrg31EkXm_YkrpkOounQo(|rbc-~ z4CWeCP{Q|Bfa<{s-y-4*-2=chxvwz9)HD2+YubhNE8fYqn*?CWAvA2ep`?Y`{(urp zE_xzS)kjKTJ}B-GA^5*hYgt$t-UDTEi`J`od*}hed5mQ2GkvzbUuYIV0@RdEm;ZaM zo6l~5>eN6ne7PBzp1tjwYXk`b17s)e$(PzF*gZZ3GsuG4n-3HnIF|>%V;ZUL%I%?f zQQnS$`4eR@##5rZ`AVIXnhMEm$*#9s9=JTva(2JkO9k#@x?2^Y0$g6;IH?}!%)~}a zFY-O86xTA-xx+ey@%(jzMnyjgt*Y2vcO@qC@@d7l{?OijbwI$DpJCUjQ8LfF|4U-s zq)o=N-30CBhdpf|h(ayKq)nsNmh2}wammG*7Gwg2=ct36C?S7*GV)aS5rlU8D}@mRzMVdyL8MHeE8mgLT%yp%z?S z|8Rbe|JiOXWLYJ35QC@L{`)jRrP+CzQ4ckXM4Y2A3Kb-@i5(lnuX+es#kM4OY6XlXoE@J48o4BvQ$(V(Gbs5hi&C`e(@P?W6@sU6>A0GsD$Z(^Siw z-#OpT!`Swcmi@Y4BTw`Jt9Bi6yjMQB{ou{by&+qm&{kVU> zBmFmt6ZzirO4R$rVUffSFOwz`T=AqXD6w?t0a6)3)TE?v5R$)UA9nd(Or z;}@zDl@;e(4DS2yxs?P$Ar;4| zE#F*I$)Ddfzw|}rLI^A6I>K&@P3ERgt7Me6{u;+X-;>3ooaHE%D#@-XG zaC#!@#S<+);D(L|t`$S1n!c`_?ci~Kx5SEaSh8jn^2woD-D;l!CE?p}gb&i%s@r

?VmHnm>`en~!W_U@**x)d|AtAEJ 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-14-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-14-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f76d53b64993ecdc98b5a8751272f4100cf955a3 GIT binary patch literal 22656 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-15-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-15-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a3d823864075d2192f314841995f9d23706ff4 GIT binary patch literal 30705 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

ActY=%jeGnL1Lc+ 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

xS%#$+*c3+l&PB~U*9 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 S>3B-PFEtg-{V7T&p8pSRUsgl_ literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-6-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-6-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bbba8e7d8814df3210798a4fd6e98c78fb56a577 GIT binary patch literal 38286 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

!s7hcRDP;TH57OgXO7L=t(m8ab~_thsyjV1 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-9-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-9-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcdfd7badb0ae52bf1f45800c20ddf90c565455 GIT binary patch literal 27489 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/4-Spectral2.html b/docs/solcore-workshop-2/notebooks/4-Spectral2.html index 9842902..0d38bb3 100644 --- a/docs/solcore-workshop-2/notebooks/4-Spectral2.html +++ b/docs/solcore-workshop-2/notebooks/4-Spectral2.html @@ -192,7 +192,7 @@

Section 4: Calculating Spectral Irradiance using SPCTRAL 2

All the inputs are numeric other than the aod_model whose options are: ‘rural’, ‘urban’, ‘maritime’ and ‘tropospheric’.

Comparison between SPCTRAL2 with default parameters and AM1.5G

-
+
import numpy as np
 import matplotlib.pyplot as plt
 from solcore.light_source import LightSource
@@ -211,44 +211,65 @@ 

plt.xlabel('Wavelength (nm)') plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)') plt.legend()

+
+
WARNING: The RCWA solver will not be available because an S4 installation has not been found.
+
+
+
<matplotlib.legend.Legend at 0x12ee06f50>
+
+
+

+

Adjusting the precipitable water value

The default SPCTRAL2 parameters results in almost no atmospheric absorption. This suggests the precipitable water column thickness is much too low, the default is 0.00142 cm. Let’s increase that value to 1cm to roughly match AM1.5G:

-
-
spc2pc = LightSource(source_type='SPECTRAL2', precipwater=1.0, x=wl * 1e9)
-
-plt.figure()
-plt.title('Comparions between SPCTRAL2 defaults, 1cm precipitable water & AM1.5G')
-plt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')
-plt.plot(*spc2default.spectrum(wl*1e9), label='SPC-default')
-plt.plot(*spc2pc.spectrum(wl*1e9), label='PC water')
-
-plt.xlim(300, 3000)
-plt.xlabel('Wavelength (nm)')
-plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
-plt.legend()
+
+
spc2pc = LightSource(source_type='SPECTRAL2', precipwater=1.0, x=wl * 1e9)
+
+plt.figure()
+plt.title('Comparions between SPCTRAL2 defaults, 1cm precipitable water & AM1.5G')
+plt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')
+plt.plot(*spc2default.spectrum(wl*1e9), label='SPC-default')
+plt.plot(*spc2pc.spectrum(wl*1e9), label='PC water')
+
+plt.xlim(300, 3000)
+plt.xlabel('Wavelength (nm)')
+plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x12ef7a890>
+
+
+

+

Atmospheric Turbidity

The short wavelength is attenuated which is likely due to a high level of aerosol loading in the default spectrum. To address this atmospheric turbidity can be reduced to around 0.05.

-
-
spc2high = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2, x=wl * 1e9)
-spc2med = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.1, x=wl * 1e9)
-spc2low = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.05, x=wl * 1e9)
-
-plt.figure()
-plt.title('Spectral Irradiance Plotted for Different Aersol Models')
-plt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')
-plt.plot(*spc2high.spectrum(wl*1e9), label='Turbidity = 0.2')
-plt.plot(*spc2med.spectrum(wl*1e9), label='Turbidity = 0.1')
-plt.plot(*spc2low.spectrum(wl*1e9), label='Turbidity = 0.05')
-plt.xlim(300, 3000)
-plt.xlabel('Wavelength (nm)')
-plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
-plt.legend()
+
+
spc2high = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2, x=wl * 1e9)
+spc2med = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.1, x=wl * 1e9)
+spc2low = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.05, x=wl * 1e9)
+
+plt.figure()
+plt.title('Spectral Irradiance Plotted for Different Aersol Models')
+plt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')
+plt.plot(*spc2high.spectrum(wl*1e9), label='Turbidity = 0.2')
+plt.plot(*spc2med.spectrum(wl*1e9), label='Turbidity = 0.1')
+plt.plot(*spc2low.spectrum(wl*1e9), label='Turbidity = 0.05')
+plt.xlim(300, 3000)
+plt.xlabel('Wavelength (nm)')
+plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x12f727450>
+
+
+

+
@@ -256,45 +277,57 @@

Variation wi

Several standard aerosol models are implemented in SPCTRAL 2 that were established by Shettle & Fenn.

Shettle, E. P., and R. W. Fenn, “Models of the Atmospheric Aerosol and Their Optical Properties, II Proceedings of the Advisory Group for Aerospace Reseach and Development Conference No . 183, Optical Propagation in the Atmosphere, 1975, pp. 2.1-2.16. Presented at the Electromagnetic Wave Propagation Panel Symposium, Lyngby, Denmark; 27-31 October 1975.

Here we plot some of them with a turbidity of 0.2 to emphasise the different spectral behaviour:

-
-
spc2rural = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,
-                        aod_model='rural', x=wl * 1e9)
-spc2marit = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,
-                        aod_model='maritime', x=wl * 1e9)
-spc2tropo = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,
-                        aod_model='tropospheric', x=wl * 1e9)
-
-plt.figure(1)
-plt.title('Spectral Irradiance Plotted for Different Aersol Models')
-plt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')
-plt.plot(*spc2rural.spectrum(wl*1e9), label='rural')
-plt.plot(*spc2marit.spectrum(wl*1e9), label='maritime')
-plt.plot(*spc2tropo.spectrum(wl*1e9), label='tropospheric')
-plt.xlim(300, 3000)
-plt.xlabel('Wavelength (nm)')
-plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
-plt.legend()
+
+
spc2rural = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,
+                        aod_model='rural', x=wl * 1e9)
+spc2marit = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,
+                        aod_model='maritime', x=wl * 1e9)
+spc2tropo = LightSource(source_type='SPECTRAL2', precipwater=1.0, turbidity=0.2,
+                        aod_model='tropospheric', x=wl * 1e9)
+
+plt.figure(1)
+plt.title('Spectral Irradiance Plotted for Different Aersol Models')
+plt.plot(*am15g.spectrum(wl*1e9), label='AM1.5G')
+plt.plot(*spc2rural.spectrum(wl*1e9), label='rural')
+plt.plot(*spc2marit.spectrum(wl*1e9), label='maritime')
+plt.plot(*spc2tropo.spectrum(wl*1e9), label='tropospheric')
+plt.xlim(300, 3000)
+plt.xlabel('Wavelength (nm)')
+plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x12f7769d0>
+
+
+

+

Changing the time of day

One of the most common uses for a spectral irradiance model such as SPCTRAL2 is to calculate how a particular solar cell technology behaves under varying spectral conditions during the day. This is particularly important whan working with series connected tandem solar cells where the current matching condition will vary according to the incident spectrum. Here we plot the spectral irradiance at 12pm, 2pm, 3pm, 4pm, 5pm, 6pm and 7pm. Note the strong relative loss in short-wavelength light relative to the infrared as the air-mass increases throughout the afternoon.

-
-
import datetime
-
-plt.figure(1)
-plt.title('Spectral Irradiance plotted from 12pm-7pm')
-hours=[12, 14, 15, 16, 17, 18, 19]
-
-for h in hours:
-    spc2 = LightSource(source_type='SPECTRAL2', dateAndTime=datetime.datetime(2011, 6, 30, h, 00),
-                       precipwater=1.0, turbidity=0.05, x=wl * 1e9)
-    plt.plot(*spc2.spectrum(wl*1e9), label='hour '+ str(h))
-
-plt.xlim(300, 3000)
-plt.xlabel('Wavelength (nm)')
-plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
-plt.legend()
+
+
import datetime
+
+plt.figure(1)
+plt.title('Spectral Irradiance plotted from 12pm-7pm')
+hours=[12, 14, 15, 16, 17, 18, 19]
+
+for h in hours:
+    spc2 = LightSource(source_type='SPECTRAL2', dateAndTime=datetime.datetime(2011, 6, 30, h, 00),
+                       precipwater=1.0, turbidity=0.05, x=wl * 1e9)
+    plt.plot(*spc2.spectrum(wl*1e9), label='hour '+ str(h))
+
+plt.xlim(300, 3000)
+plt.xlabel('Wavelength (nm)')
+plt.ylabel('Power density (Wm$^{-2}$nm$^{-1}$)')
+plt.legend()
+
+
<matplotlib.legend.Legend at 0x12f8a5d10>
+
+
+

+
diff --git a/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-2-output-3.png b/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-2-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..80cb2ed43d54a23e3970263466dbed52e2875e54 GIT binary patch literal 47885 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 JAxIfM|1aX&YWM&E literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-3-output-2.png b/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-3-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..13b677532fe3d104a8c9003e8e8dbadbe28dbb35 GIT binary patch literal 59155 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

R6 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 ab`JkKdv*PiCoAYk0Je;@V_aRTsQM4c+T+v! literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-4-output-2.png b/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-4-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..950138093993c6f48743ad11db64ce60681260e4 GIT binary patch literal 63950 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

OiE`KC%b{UKhD0PpZEh1!zMA#L)3`Tc|Z5g^_ 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-5-output-2.png b/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-5-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c4813a3d753b0046b0be1f2a40d3531be0771b4a GIT binary patch literal 60946 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-6-output-2.png b/docs/solcore-workshop-2/notebooks/4-Spectral2_files/figure-html/cell-6-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..67669625a8a58a495e28b3b34d3bd0ddafade9a6 GIT binary patch literal 74301 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 5a: Planar Si solar cell using DA

QD$?1QeZXTbvjmS|> zVHuOCg)Tir=*v;~eMsrn*V8Kjz&vSU;=(&rf?x%dxn{T`DZ$*Co86xH0Yks6J;r|z zx!(iShp11e{Wwu53NhvE&6^9rpcrX#6$%+6gmV{LJ3C)Mx7K*#a8Er8Ch%uq*NcLP z=mhyNVGFhCV+f>FQ0>B%cix^*))&~M0gTwvTzG2Fkk<0$Vo;tC@de>`xPc1EJ=T{)+t@ zgsV*O$8eB!h0g(-0zsU3L-#vkRE?{omdCLA(NMpEWXBHzaEb=dJK_sh$a1=x4~8i%4*9oEYs zUez3@yBm=D&Om}n18b?~(CFxB877UGwW$+pZpsg^O6N`|1|!5id<2{2JkHUM)sM;8 zG@$;x`BJp!f{=b2=cZt+B#PODl;}Lnx)7MFm6{Ut0B1t_H=}ecviEo|%=gpLGD5&2 z2@sZUNlS~AnwlCpIbe%{Er>x++K4NMe~~FTpz-7lA${Grc{7aQrz59!%YbD(EPKU{ zwFCt4QK#7>{y?51t%UA8GkGy`;hPVSM}V~oa+<$K8r?JtWdbF9*%v4egNzHwVot#U z!3pLAs2l|bH7a|b%Mvae38mO9n96k?ixD~5gNkzU&PXwlBVKgAmY?tG^=qZN`Z^%j zXhi&cMYa}VLkW)mOpNY>9XsDFW$D%AlHxq33707pe+)FpxHcvR)uz& z`FkA7dA5+DR)l>bEMWu)a^>)W`W{AIyEZKVYSB{A<3J;=%1K8IASeaV72<>=<52)o zRp&HASq4E(JV&q*eS~amc|y%1dM{Kn?{E!f!EoKF8JHFUH;^K6gGUGo-sox6a3YYy z9{5NS0~L@AQ4fmXM*=7yJHMsh0{L11 zgiB=36H;Vdq{cA2@Wp!wVK(GRI}PMsgh*P@iR%Tu-6|w&K4|1{q`b%NJ%k#PDR_Jn zU2J1(V3J>j8&qNjlo0l3O^y>{BM5?fkVi~Ikp;K!IE^ncP6PSK2C)+ONk~Gag#n%z zed3Qdx3v|-#>U2>kf_m66Yh$k z`;8CugLzD5ns}j9AR`k%>tKDh;N;?C4?95)$o%#iQmTjj)vJ$nvbO0RK1q{bL%IuL zeF($W2$+5oLoAh{W56uPILxI;&>D=>@wc+J-kR!(Jk<}!6|>@^OoG-LVb)x1){sqa zviHv<^Bj=#mSC_E7GDYQMHt@46N!-s+sqfG+CSP8>K+ U`DRC8{4TXg$B>@B-s;T%0rUB5Hvj+t literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-18-output-2.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-18-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb17327b901c136d5da40c7b642a2c880b7f52a GIT binary patch literal 32237 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 HrWgMg;#m$o literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-19-output-3.png b/docs/solcore-workshop-2/notebooks/2-Efficiency_limits_files/figure-html/cell-19-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..477e46824b69d60b7c71a175b49a851f28c8c50d GIT binary patch literal 25205 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 LQCU6 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

In this first set of examples, we will look at simple planar Si solar cell.

In this script, we will look at the difference between Beer-Lambert absorption calculations, using the Fresnel equations for front-surface reflection, and using the transfer-matrix model.

First, lets import some very commonly-used Python packages:

-
+
import numpy as np
 import matplotlib.pyplot as plt

Numpy is a Python library which adds supports for multi-dimensional data arrays and matrices, so it is very useful for storing and handling data. You will probably use it in every Solcore script you write. Here, it is imported under the alias ‘np’, which you will see used below. matplotlib is used for making plots, and is imported under the alias ‘plt’. Both the ‘np’ and ‘plt’ aliases are extremely commonly used in Python programming.

Now, let’s import some things from Solcore (which will be explained as we use them):

-
+
from solcore import material, si
 from solcore.solar_cell import SolarCell, Layer, Junction
 from solcore.solar_cell_solver import solar_cell_solver
@@ -200,36 +200,36 @@ 

Section 5a: Planar Si solar cell using DA

Defining materials

To define our solar cell, we first want to define some materials. Then we want to organise those materials into Layers, organise those layers into a Junction (or multiple Junctions, for a multi-junction cell, as we will see later), and then finally define a SolarCell with that Junction.

First, let’s define a silicon material. Silicon, along with many other semiconductors, dielectrics, and metals common in solar cells, is included in Solcore’s database:

-
+
Si = material("Si")

This creates an instance of the Si material. However, to use this in a solar cell we need to do specify some more information, specifically the doping level and the minority carrier diffusion length. The ‘si’ function comes in handy here to convert all quantities to base units e.g. m, m\(^{-3}\)

-
-
Si_n = Si(Nd=si("1e21cm-3"), hole_diffusion_length=si("10um"))
-Si_p = Si(Na=si("1e16cm-3"), electron_diffusion_length=si("400um"))
+
+
Si_p = Si(Na=si("1e21cm-3"), electron_diffusion_length=si("4um"))
+Si_n = Si(Nd=si("1e16cm-3"), hole_diffusion_length=si("200um"))

Defining layers

Now we define the emitter and base layers we will have in the solar cell; we specify their thickness, the material they are made of and the role they play within the cell (emitter or base). We create a junction which is a total of 200 \(\mu\)m thick, with a 1 \(\mu\)m junction depth.

-
-
emitter_layer = Layer(width=si("1um"), material=Si_n, role='emitter')
-base_layer = Layer(width=si("199um"), material=Si_p, role='base')
+
+
emitter_layer = Layer(width=si("1um"), material=Si_p, role='emitter')
+base_layer = Layer(width=si("199um"), material=Si_n, role='base')

Now we create the p-n junction using the layers defined above. We set kind=“DA” to tell Solcore to use the Depletion Approximation in the calculation:

-
+
Si_junction = Junction([emitter_layer, base_layer], kind="DA")

Setting user options

Wavelengths we want to use in the calculations; wavelengths between 300 and 1200 nm, at 200 evenly spaced intervals:

-
+
wavelengths = si(np.linspace(300, 1200, 200), "nm")

Note that here and above in defining the layers and materials we have used the “si()” function multiple times: you can use this to automatically convert quantities in other units to base SI units (e.g. nanometres to metres).

Now we specify some options for running the calculation. Initially we will use the Beer-Lambert absorption law (\(I(z) = I_0 e^{-\alpha*z}\)) to calculate the optics of the cell (“BL”). We set the wavelengths we want to use, and we set “recalculate_absorption” to True so that further down in the script when we try different optics methods, Solcore knows we want to re-calculate the optics of the cell rather than re-using previous results. We can specify the options in a Python format called a dictionary:

-
+
options = {
     "recalculate_absorption": True,
     "optics_method": "BL",
@@ -240,144 +240,186 @@ 

Setting user options<

Running cell simulations

Define the solar cell; in this case it is very simple and we just have a single junction:

-
+
solar_cell = SolarCell([Si_junction])

Now we use solar_cell_solver to calculate the QE of the cell; we can ask solar_cell_solver to calculate ‘qe’, ‘optics’ or ‘iv’.

-
+
solar_cell_solver(solar_cell, 'qe', options)
+
+
Solving QE of the solar cell...
+

PLOT 1: plotting the QE in the Si junction, as well as the fraction of light absorbed in the junction and reflected. Because we are using the Beer-Lambert absorption law and we did not specify external reflectance, the reflectance = 0 over the whole wavelength range.

-
-
plt.figure()
-plt.plot(wavelengths*1e9, 100*solar_cell[0].eqe(wavelengths), 'k-', label="EQE")
-plt.plot(wavelengths*1e9, 100*solar_cell[0].layer_absorption, label='Absorptance (A)')
-plt.plot(wavelengths*1e9, 100*solar_cell.reflected, label='Reflectance (R)')
-plt.legend()
-plt.xlabel("Wavelength (nm)")
-plt.ylabel("QE/Absorptance (%)")
-plt.title("(1) QE of Si cell - Beer-Lambert absorption")
-plt.show()
+
+
plt.figure()
+plt.plot(wavelengths*1e9, 100*solar_cell[0].eqe(wavelengths), 'k-', label="EQE")
+plt.plot(wavelengths*1e9, 100*solar_cell[0].layer_absorption, label='Absorptance (A)')
+plt.plot(wavelengths*1e9, 100*solar_cell.reflected, label='Reflectance (R)')
+plt.legend()
+plt.xlabel("Wavelength (nm)")
+plt.ylabel("QE/Absorptance (%)")
+plt.title("(1) QE of Si cell - Beer-Lambert absorption")
+plt.show()
+
+

+

Adding front-surface reflection: Fresnel

Now, to make this calculation a bit more realistic, there are a few things we could do. We could load some measured front surface reflectance from a file, or we could calculate the reflectance. To calculate the reflectance, there are many approaches we could take; we are going to explore two of them here.

If we assume the silicon is infinitely thick (or at least much thicker than the wavelengths of light we care about) then the reflectance will approach the reflectivity of a simple air/Si interface. We can calculate what this is using the Fresnel equation for reflectivity.

-
-
def calculate_R_Fresnel(incidence_n, transmission_n, wl):
-    # return a function that gives the value of R (at normal incidence) at the input wavelengths
-
-    Rs = np.abs((incidence_n - transmission_n)/(incidence_n + transmission_n))**2
-
-    return interp1d(wl, Rs)
+
+
def calculate_R_Fresnel(incidence_n, transmission_n, wl):
+    # return a function that gives the value of R (at normal incidence) at the input wavelengths
+
+    Rs = np.abs((incidence_n - transmission_n)/(incidence_n + transmission_n))**2
+
+    return interp1d(wl, Rs)

The transmission_n is the complex reflective index of Si at our wavelengths for the transmission medium (Si), which we can extract easily from the Si material object in Solcore. The incidence_n = 1 (air). Note that the function above is specifically for normal incidence.

-
-
trns_n = Si_n.n(wavelengths) + 1j*Si_n.k(wavelengths)
-reflectivity_fn = calculate_R_Fresnel(1, trns_n, wavelengths)
+
+
trns_n = Si_n.n(wavelengths) + 1j*Si_n.k(wavelengths)
+reflectivity_fn = calculate_R_Fresnel(1, trns_n, wavelengths)

We define the solar cell again, with the same layers but now supplying the function for the externally-calculated reflectivity, and calculate the optics (reflection, absorption, transmission) again:

-
-
solar_cell_fresnel = SolarCell([Si_junction], reflectivity=reflectivity_fn)
-
-solar_cell_solver(solar_cell_fresnel, 'optics', options)
+
+
solar_cell_fresnel = SolarCell([Si_junction], reflectivity=reflectivity_fn)
+
+solar_cell_solver(solar_cell_fresnel, 'optics', options)

Adding front surface reflection: TMM

Finally, we do the same again but now instead of supplying the external reflectivity we ask set the optics_method to “TMM” (Transfer Matrix Method), to correctly calculate reflection at the front surface. We will learn more about the transfer matrix method later.

-
-
Si_junction = Junction([emitter_layer, base_layer], kind="DA")
-
-solar_cell_TMM = SolarCell([Si_junction])
+
+
Si_junction = Junction([emitter_layer, base_layer], kind="DA")
+
+solar_cell_TMM = SolarCell([Si_junction])

Set some more options for the cell calculation:

-
-
options["optics_method"] = "TMM"
-voltages = np.linspace(-1.1, 1.1, 100)
-options["light_iv"] = True
-options["mpp"] = True
-options["voltages"] = voltages
-options["internal_voltages"] = voltages
+
+
options["optics_method"] = "TMM"
+voltages = np.linspace(-1.1, 1.1, 100)
+options["light_iv"] = True
+options["mpp"] = True
+options["voltages"] = voltages
+options["internal_voltages"] = voltages

we calculate the QE and the IV (we set the light_iv option to True; if we don’t do this, Solcore just calculates the dark IV). We also ask Solcore to find the maximum power point (mpp) so we can get the efficiency. Note that the sign convention used by Solcore means that an n-on-p cell with have a negative open-circuit voltage.

-
-
solar_cell_solver(solar_cell_TMM, 'iv', options)
-solar_cell_solver(solar_cell_TMM, 'qe', options)
+
+
solar_cell_solver(solar_cell_TMM, 'iv', options)
+solar_cell_solver(solar_cell_TMM, 'qe', options)
+
+
Treating layer(s) 1 incoherently
+Calculating RAT...
+Calculating absorption profile...
+Solving IV of the junctions...
+Solving IV of the tunnel junctions...
+Solving IV of the total solar cell...
+Treating layer(s) 1 incoherently
+Calculating RAT...
+Calculating absorption profile...
+Solving QE of the solar cell...
+

PLOT 2: here we plot the reflection, transmission, and absorption calculated with the Fresnel equation defined above, and with the TMM solver in Solcore, showing that for this simple situation (no anti-reflection coating, thick Si junction) they are exactly equivalent.

-
-
plt.figure()
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, color='firebrick', label = "R (TMM)")
-plt.plot(wavelengths*1e9, 100*solar_cell_fresnel.reflected, '--', color='orangered', label = "R (Fresnel)")
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM.absorbed, color='dimgrey', label = "A (TMM)")
-plt.plot(wavelengths*1e9, 100*solar_cell_fresnel.absorbed, '--', color='lightgrey', label = "A (Fresnel)")
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, color='blue', label = "T (TMM)")
-plt.plot(wavelengths*1e9, 100*solar_cell_fresnel.transmitted, '--', color='dodgerblue', label = "T (Fresnel)")
-plt.ylim(0, 100)
-plt.legend()
-plt.title("(2) Optics of Si cell - Fresnel/TMM")
-plt.show()
+
+
plt.figure()
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, color='firebrick', label = "R (TMM)")
+plt.plot(wavelengths*1e9, 100*solar_cell_fresnel.reflected, '--', color='orangered', label = "R (Fresnel)")
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM.absorbed, color='dimgrey', label = "A (TMM)")
+plt.plot(wavelengths*1e9, 100*solar_cell_fresnel.absorbed, '--', color='lightgrey', label = "A (Fresnel)")
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, color='blue', label = "T (TMM)")
+plt.plot(wavelengths*1e9, 100*solar_cell_fresnel.transmitted, '--', color='dodgerblue', label = "T (Fresnel)")
+plt.ylim(0, 100)
+plt.legend()
+plt.title("(2) Optics of Si cell - Fresnel/TMM")
+plt.show()
+
+

+

PLOT 3: As above for the TMM calculation, plotting the EQE as well, which will be slightly lower than the absorption because not all the carriers are collected. Comparing to plot (1), we can see we now have lower absorption due to the inclusion of front surface reflection, which is ~ 30% or more over the wavelength range of interest for a bare Si surface.

-
-
plt.figure()
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].eqe(wavelengths), 'k-', label="EQE")
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].layer_absorption, label='A')
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, label="R")
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, label="T")
-plt.title("(3) QE of Si cell (no ARC) - TMM")
-plt.legend()
-plt.xlabel("Wavelength (nm)")
-plt.ylabel("QE/Absorptance (%)")
-plt.ylim(0, 100)
-plt.show()
+
+
plt.figure()
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].eqe(wavelengths), 'k-', label="EQE")
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM[0].layer_absorption, label='A')
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM.reflected, label="R")
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM.transmitted, label="T")
+plt.title("(3) QE of Si cell (no ARC) - TMM")
+plt.legend()
+plt.xlabel("Wavelength (nm)")
+plt.ylabel("QE/Absorptance (%)")
+plt.ylim(0, 100)
+plt.show()
+
+

+

Adding an ARC

The reflectance of bare Si is very high. Let’s try adding a simple anti-reflection coating (ARC), a single layer of silicon nitride (Si\(_3\)N\(_4\)):

-
-
SiN = material("Si3N4")()
-
-Si_junction = Junction([emitter_layer, base_layer], kind="DA")
-
-solar_cell_TMM_ARC = SolarCell([Layer(width=si(75, "nm"), material=SiN), Si_junction])
-
-solar_cell_solver(solar_cell_TMM_ARC, 'qe', options)
-solar_cell_solver(solar_cell_TMM_ARC, 'iv', options)
+
+
SiN = material("Si3N4")()
+
+Si_junction = Junction([emitter_layer, base_layer], kind="DA")
+
+solar_cell_TMM_ARC = SolarCell([Layer(width=si(75, "nm"), material=SiN), Si_junction])
+
+solar_cell_solver(solar_cell_TMM_ARC, 'qe', options)
+solar_cell_solver(solar_cell_TMM_ARC, 'iv', options)
+
+
Treating layer(s) 2 incoherently
+Calculating RAT...
+Calculating absorption profile...
+Solving QE of the solar cell...
+Treating layer(s) 2 incoherently
+Calculating RAT...
+Calculating absorption profile...
+Solving IV of the junctions...
+Solving IV of the tunnel junctions...
+Solving IV of the total solar cell...
+

PLOT 4: Absorption, EQE, reflection and transmission for the cell with a simple one-layer ARC. We see the reflection is significantly reduced from the previous plot leading to higher absorption/EQE.

-
-
plt.figure()
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].eqe(wavelengths), 'k-', label="EQE")
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].layer_absorption, label='A')
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.reflected, label="R")
-plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.transmitted, label="T")
-plt.legend()
-plt.title("(4) QE of Si cell (ARC) - TMM")
-plt.xlabel("Wavelength (nm)")
-plt.ylabel("QE/Absorptance (%)")
-plt.ylim(0, 100)
-plt.show()
+
+
plt.figure()
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].eqe(wavelengths), 'k-', label="EQE")
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC[1].layer_absorption, label='A')
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.reflected, label="R")
+plt.plot(wavelengths*1e9, 100*solar_cell_TMM_ARC.transmitted, label="T")
+plt.legend()
+plt.title("(4) QE of Si cell (ARC) - TMM")
+plt.xlabel("Wavelength (nm)")
+plt.ylabel("QE/Absorptance (%)")
+plt.ylim(0, 100)
+plt.show()
+
+

+

PLOT 5: Compare the IV curves of the cells with and without an ARC. The efficiency is also shown on the plot. Note that because we didn’t specify a light source, Solcore will assume we want to use AM1.5G; in later examples we will set the light source used for light IV simulations explicitly.

-
-
plt.figure()
-plt.plot(-voltages, solar_cell_TMM[0].iv(voltages)/10, label="No ARC")
-plt.plot(-voltages, solar_cell_TMM_ARC[1].iv(voltages)/10, label="75 nm SiN")
-plt.text(0.5, 1.02*abs(solar_cell_TMM.iv["Isc"])/10, str(round(solar_cell_TMM.iv["Eta"]*100,
-                                                      1)) + ' %')
-plt.text(0.5, 1.02*abs(solar_cell_TMM_ARC.iv["Isc"])/10, str(round(solar_cell_TMM_ARC
-                                                          .iv["Eta"]*100, 1)) + ' %')
-plt.ylim(0, 38)
-plt.xlim(-0.8, 0.8)
-plt.legend()
-plt.xlabel("V (V)")
-plt.ylabel(r"J (mA/cm$^2$)")
-plt.title("(5) IV curve of Si cell with and without ARC")
-plt.show()
+
+
plt.figure()
+plt.plot(voltages, -solar_cell_TMM[0].iv(voltages)/10, label="No ARC")
+plt.plot(voltages, -solar_cell_TMM_ARC[1].iv(voltages)/10, label="75 nm SiN")
+plt.text(0.5, 1.02*abs(solar_cell_TMM.iv["Isc"])/10, str(round(solar_cell_TMM.iv["Eta"]*100,
+                                                      1)) + ' %')
+plt.text(0.5, 1.02*abs(solar_cell_TMM_ARC.iv["Isc"])/10, str(round(solar_cell_TMM_ARC
+                                                          .iv["Eta"]*100, 1)) + ' %')
+plt.ylim(0, 38)
+plt.xlim(-0.8, 0.8)
+plt.legend()
+plt.xlabel("V (V)")
+plt.ylabel(r"J (mA/cm$^2$)")
+plt.title("(5) IV curve of Si cell with and without ARC")
+plt.show()
+
+

+
diff --git a/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-12-output-1.png b/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-12-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6105fa6f9744f08be0f2c18ac9d1348bd4bb32 GIT binary patch literal 35583 zcma&OcRZKv|2O`QjBI6ZN{S+-l38e}l$DXPl4#g7ip)qVG!a7fie#@)l&m7j2q9#I zQ1N>nUEllu-T&S9=kd87*Q1Nx@AEv)<9NNE>vi5Zp>>d%fscVgp)emlq@hEhP$^O< ztLo`#@n4KCKTO2G_Bii1bk?;y=j>+gXhk_@?reY2&iSH^g@~(_qmzx@T>9U?AZ_PpEz_E@P6;2f#{Q6z6NSQRPX1YyqWa8+LJ7HeSYw}_d-V7h zH+K$wewwN0C8K4#*Q(Krt`VK(^1R{C5+bJ^61?fyUK_53y|)vti|HqA5{%4hKasSW zzAS(e|Lo3ft);)q!HRi_IgF1lHY_T?S2=6_<8Aq=*RkD2ZU;8{vx$g_iAg>iESB~O z4h~L{mmOzgXV)&O%Td?R&=}&YVPR)ykGjC5h(GCN{a=1~yY5?445P5H@Zh&^wxtuT zNk_Dc9IeitJi{%Ac;^t^P+h z)~qc5QXO4R(@z(Pcw_(T$CtI4ehkTfO#V#Q3l~cd735$3!ngCn$95N99D@X``2lA508BtBjR1gKGIxPJ>M*H_S`v(PkB~+ z%0IGBmo&$#({*-rRlj~s{~_I=eqnlmU0B$(&+_%zJSw{b2M+KlU)DaEVd!gD@s|t# z?7I4UV)so!#TU&lii(OB{{HH1dFf!;+1Xjy-7P>qz-JY;{rC3GnIH5XZLZ*mt=JnU$gn#^7No(OTzwj2JE$7kJ{T)N>Gu2HA`$Ku$V{wDM zeG`SfO&xx}d#+5z+x3=jlap&dW}e6uDA@YCAxf$x^Hiai@`iMS>;p-fQ6l#nO_w_C zCwt0d-F}z|C^*w!`ut*R-o(<}*ff^<>G3Bjh9$01sY z@J*6JN;mi0h6V>$CLOuY#>4Z#F2=DtMB#f!HY-0r|Ha<&ze$ eYfB;lhPKe}2AS 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 I+72iG2VZ^(mjD0& literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-19-output-1.png b/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-19-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a5db5615d5e046c8c5697cf81d3fab47664bb4f5 GIT binary patch literal 38043 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-20-output-1.png b/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-20-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7df74cba495d74cd64b357cb63e2adbfbc4366ac GIT binary patch literal 41508 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-22-output-1.png b/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-22-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..26aa54a8baa931974431eebad9e840828d6da63f GIT binary patch literal 48000 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 H^MCypn)>ux literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-23-output-1.png b/docs/solcore-workshop-2/notebooks/5a-simple_Si_cell_files/figure-html/cell-23-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..85e65613d72747fb4f2101f558a651baa5e08392 GIT binary patch literal 26994 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%0A&FmmxDcaNMJyj!B;)6JZYx3kxVI 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 literal 0 HcmV?d00001 diff --git a/docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD.html b/docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD.html index 0362211..67ed7b1 100644 --- a/docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD.html +++ b/docs/solcore-workshop-2/notebooks/5b-Si_cell_PDD.html @@ -142,11 +142,21 @@