{ "cells": [ { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from solcore import material, si\n", "from solcore.structure import Layer, Structure\n", "from solcore.absorption_calculator.rigorous_coupled_wave import calculate_rat_rcwa" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "T = 300\n", "# define materials\n", "Air = material(\"Air\")(T=T)\n", "TiO2 = material(\"TiO2\", sopra=True)(T=T) # for the nanoparticles\n", "GaAs = material(\"GaAs\")(T=T)\n", "\n", "# define a flat layer and another with circular discs with the same thickness\n", "Flat = Layer(si('50nm'), TiO2)\n", "NP_layer = Layer(si('50nm'), Air, geometry=[{'type': 'circle', 'mat': TiO2, 'center': (200, 200), 'radius': 50}])\n", "\n", "flat_struct = Structure([Flat])\n", "np_struct = Structure([NP_layer])\n", "\n", "# And the wavelength in which the solve the problem\n", "wl = np.linspace(300, 1000, 150)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'numpy.float64' object is not iterable", "output_type": "error", "traceback": [ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", "\u001B[0;31mTypeError\u001B[0m Traceback (most recent call last)", "\u001B[0;32m\u001B[0m in \u001B[0;36m\u001B[0;34m\u001B[0m\n\u001B[0;32m----> 1\u001B[0;31m rat_flat = calculate_rat_rcwa(flat_struct, size=((400, 0), (0, 400)), orders=10, wavelength=wl,\n\u001B[0m\u001B[1;32m 2\u001B[0m substrate=GaAs)\n\u001B[1;32m 3\u001B[0m rat_np = calculate_rat_rcwa(np_struct, size=((400, 0), (0, 400)), orders=10, wavelength=wl,\n\u001B[1;32m 4\u001B[0m substrate=GaAs)\n", "\u001B[0;32m/usr/local/lib/python3.8/site-packages/solcore-5.6.0-py3.8-macosx-10.15-x86_64.egg/solcore/absorption_calculator/rigorous_coupled_wave.py\u001B[0m in \u001B[0;36mcalculate_rat_rcwa\u001B[0;34m(structure, size, orders, wavelength, theta, phi, pol, substrate)\u001B[0m\n\u001B[1;32m 55\u001B[0m \u001B[0;32mfor\u001B[0m \u001B[0mi\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mwl\u001B[0m \u001B[0;32min\u001B[0m \u001B[0menumerate\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwavelength\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m \u001B[0;31m# set the material values and indices in here\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 56\u001B[0m \u001B[0mS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mSetFrequency\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;36m1\u001B[0m \u001B[0;34m/\u001B[0m \u001B[0mwl\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 57\u001B[0;31m \u001B[0mupdate_epsilon\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstack_OS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mshape_mats_OS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mwl\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 58\u001B[0m \u001B[0mS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mSetExcitationPlanewave\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mtheta\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mphi\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;36m0\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;36m1\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;36m0\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;31m# p-polarization\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 59\u001B[0m \u001B[0mout_p\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mrcwa_rat\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mlen\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mstack_OS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mget_widths\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/usr/local/lib/python3.8/site-packages/solcore-5.6.0-py3.8-macosx-10.15-x86_64.egg/solcore/absorption_calculator/rigorous_coupled_wave.py\u001B[0m in \u001B[0;36mupdate_epsilon\u001B[0;34m(S, stack_OS, shape_mats_OS, wl)\u001B[0m\n\u001B[1;32m 144\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0mupdate_epsilon\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstack_OS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mshape_mats_OS\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mwl\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 145\u001B[0m \u001B[0;32mfor\u001B[0m \u001B[0mi1\u001B[0m \u001B[0;32min\u001B[0m \u001B[0mrange\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mlen\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mstack_OS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mget_widths\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 146\u001B[0;31m \u001B[0mS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mSetMaterial\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m'layer_'\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0mstr\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mi1\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0;36m1\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstack_OS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mget_indices\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0mi1\u001B[0m\u001B[0;34m]\u001B[0m \u001B[0;34m**\u001B[0m \u001B[0;36m2\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 147\u001B[0m \u001B[0;32mfor\u001B[0m \u001B[0mi1\u001B[0m \u001B[0;32min\u001B[0m \u001B[0mrange\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mlen\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mshape_mats_OS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mwidths\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m \u001B[0;31m# initialise the materials needed for all the shapes in S4\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 148\u001B[0m \u001B[0mS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mSetMaterial\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m'shape_mat_'\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0mstr\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mi1\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0;36m1\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mshape_mats_OS\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mget_indices\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0mi1\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0;36m1\u001B[0m\u001B[0;34m]\u001B[0m \u001B[0;34m**\u001B[0m \u001B[0;36m2\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/usr/local/lib/python3.8/site-packages/solcore-5.6.0-py3.8-macosx-10.15-x86_64.egg/solcore/absorption_calculator/transfer_matrix.py\u001B[0m in \u001B[0;36mget_indices\u001B[0;34m(self, wl)\u001B[0m\n\u001B[1;32m 145\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 146\u001B[0m \u001B[0;32mfor\u001B[0m \u001B[0mi\u001B[0m \u001B[0;32min\u001B[0m \u001B[0mrange\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mnum_layers\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 147\u001B[0;31m \u001B[0mout\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mappend\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mn_data\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0mi\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl_m\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mk_data\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0mi\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl_m\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;34m*\u001B[0m \u001B[0;36m1.0j\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 148\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 149\u001B[0m \u001B[0;31m# substrate irrelevant if no_back_reflection = True\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/usr/local/lib/python3.8/site-packages/solcore-5.6.0-py3.8-macosx-10.15-x86_64.egg/solcore/absorption_calculator/transfer_matrix.py\u001B[0m in \u001B[0;36mwrapper\u001B[0;34m(array)\u001B[0m\n\u001B[1;32m 32\u001B[0m \u001B[0;34m@\u001B[0m\u001B[0mwraps\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mfunction\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 33\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0mwrapper\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0marray\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 34\u001B[0;31m \u001B[0;32mreturn\u001B[0m \u001B[0mcached_wrapper\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mtuple\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0marray\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 35\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 36\u001B[0m \u001B[0;31m# copy lru_cache attributes over too\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;31mTypeError\u001B[0m: 'numpy.float64' object is not iterable" ] } ], "source": [ "rat_flat = calculate_rat_rcwa(flat_struct, size=((400, 0), (0, 400)), orders=10, wavelength=wl,\n", " substrate=GaAs, incidence=Air)\n", "rat_np = calculate_rat_rcwa(np_struct, size=((400, 0), (0, 400)), orders=10, wavelength=wl,\n", " substrate=GaAs, incidence=Air)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'rat_flat' is not defined", "output_type": "error", "traceback": [ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", "\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)", "\u001B[0;32m\u001B[0m in \u001B[0;36m\u001B[0;34m\u001B[0m\n\u001B[0;32m----> 1\u001B[0;31m \u001B[0mplt\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mplot\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mrat_flat\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;34m\"R\"\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m'-k'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mlabel\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;34m\"Flat (R)\"\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 2\u001B[0m \u001B[0mplt\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mplot\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mrat_np\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;34m\"R\"\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m'-b'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mlabel\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;34m\"Nanoparticles (R)\"\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 3\u001B[0m \u001B[0mplt\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mplot\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mrat_flat\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;34m\"T\"\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m'--k'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mlabel\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;34m\"Flat (T)\"\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 4\u001B[0m \u001B[0mplt\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mplot\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mwl\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mrat_np\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;34m\"T\"\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m'--b'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mlabel\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;34m\"Nanoparticles (T)\"\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 5\u001B[0m \u001B[0mplt\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mlegend\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;31mNameError\u001B[0m: name 'rat_flat' is not defined" ] } ], "source": [ "plt.plot(wl, rat_flat[\"R\"], '-k', label=\"Flat (R)\")\n", "plt.plot(wl, rat_np[\"R\"], '-b', label=\"Nanoparticles (R)\")\n", "plt.plot(wl, rat_flat[\"T\"], '--k', label=\"Flat (T)\")\n", "plt.plot(wl, rat_np[\"T\"], '--b', label=\"Nanoparticles (T)\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "PyCharm (solcore5)", "language": "python", "name": "pycharm-cadd906b" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }