{
"cells": [
{
"cell_type": "markdown",
"id": "ae497630",
"metadata": {},
"source": [
"# Gradient metasurface reflector"
]
},
{
"cell_type": "markdown",
"id": "f0b7cf70",
"metadata": {},
"source": [
"Electromagnetic metamaterials and metasurfaces are artificially engineered structures made of subwavelength resonating unit cells. By utilizing various design principles, they have enabled fascinating electromagnetic phenomena and capabilities such as negative refraction, cloaking, high-NA focusing, and so on. \n",
"\n",
"This notebook demonstrates a near-infrared metasurface reflector consisting of plasmonic antennas. First, we model the unit cell and extract the relationship between a geometric parameter and the corresponding complex reflection coefficient. Then, a super cell consisting of ten antennas is designed to exhibit a linear reflection phase such that the incident light can be diffracted to a particular angle efficiently. By a similar procedure, other beam shaping devices and metalenses can be designed according to different phase profiles. \n",
"\n",
"This example is based on the landmark work [Sun, S.; Yang, K.-Y.; Wang, C.-M.; Juan, T.-K.; Chen, W.T.; Liao, C.Y.; He, Q.; Xiao, S.; Kung, W.-T.; Guo, G.-Y.; et al. High-Efficiency Broadband Anomalous Reflection by Gradient Meta-Surfaces. Nano Lett. 2012, 12, 6223\u20136229](https://pubs.acs.org/doi/abs/10.1021/nl3032668).\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9cdbacb8",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:46.042832Z",
"iopub.status.busy": "2023-03-28T01:36:46.042414Z",
"iopub.status.idle": "2023-03-28T01:36:47.226610Z",
"shell.execute_reply": "2023-03-28T01:36:47.224793Z"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import tidy3d as td\n",
"import tidy3d.web as web\n"
]
},
{
"cell_type": "markdown",
"id": "d2281a3f",
"metadata": {},
"source": [
"## Unit Cell Simulation "
]
},
{
"cell_type": "markdown",
"id": "76f5caab",
"metadata": {},
"source": [
"### Simulation Setup "
]
},
{
"cell_type": "markdown",
"id": "2736c0b1",
"metadata": {},
"source": [
"In the first part of the notebook, we simulate a unit cell that consists of a rectangular gold antenna, a dielectric spacer, and a gold film on glass substrate. The thickness of the gold film is $d_3$=130 nm. The thickness of the spacer is $d_2$ = 50 nm. The thickness and width of the antenna are $d_1$=30 nm and $w$=90 nm. The only parameter we can vary is the length of the antenna $L$. The periodicities in x and y directions are $L_x$=120 nm and $L_y$=300 nm, respectively.\n",
"\n",
"First, define the simulation frequency and wavelength ranges."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fdde66c1",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.232920Z",
"iopub.status.busy": "2023-03-28T01:36:47.232276Z",
"iopub.status.idle": "2023-03-28T01:36:47.259255Z",
"shell.execute_reply": "2023-03-28T01:36:47.258635Z"
}
},
"outputs": [],
"source": [
"lda0 = 0.85 # central wavelength\n",
"freq0 = td.C_0 / lda0 # central frequency\n"
]
},
{
"cell_type": "markdown",
"id": "76c9939e",
"metadata": {},
"source": [
"Define geometric parameters."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "21eecc0a",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.261247Z",
"iopub.status.busy": "2023-03-28T01:36:47.261100Z",
"iopub.status.idle": "2023-03-28T01:36:47.278432Z",
"shell.execute_reply": "2023-03-28T01:36:47.277910Z"
}
},
"outputs": [],
"source": [
"Lx = 0.12 # unit cell size in x direction\n",
"Ly = 0.3 # unit cell size in y direction\n",
"d1 = 0.03 # antenna thickness\n",
"d2 = 0.05 # spacer thickness\n",
"d3 = 0.13 # gold layer thickness\n",
"w = 0.09 # antenna width\n",
"inf_eff = 1e2 # effective infinity\n"
]
},
{
"cell_type": "markdown",
"id": "7683ef7c",
"metadata": {},
"source": [
"Three materials will be defined in this model: gold for the antennas and the back plate, magnesium fluoride for the spacer, and silica for the substrate. Magnesium fluoride and silica will be modeled as lossless and non-dispersive dielectrics while gold will be modeled as a dispersive medium. \n",
"\n",
"More specifically, magnesium fluoride has a permittivity of 1.892 and silica has a permittivity of 2.25. For gold, we use one option from the Tidy3D's built-in [Material Library](../material_library.html). More specifically, we use the evaporated gold data from [Olmon et al](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.86.235147). There are other options for gold, as well as other common materials, in the [Material Library](../material_library.html?highlight=material%20library)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "bc841987",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.280729Z",
"iopub.status.busy": "2023-03-28T01:36:47.280564Z",
"iopub.status.idle": "2023-03-28T01:36:47.297932Z",
"shell.execute_reply": "2023-03-28T01:36:47.297395Z"
}
},
"outputs": [],
"source": [
"# define MgF2 material for the spacer layer\n",
"mgf2 = td.Medium(permittivity=1.892)\n",
"\n",
"# using material library gold refractive index\n",
"au = td.material_library[\"Au\"][\"Olmon2012evaporated\"]\n",
"\n",
"# define SiO2 material for the substrate\n",
"sio2 = td.Medium(permittivity=2.25)\n"
]
},
{
"cell_type": "markdown",
"id": "c8fc4946",
"metadata": {},
"source": [
"Construct the substrate, gold film, spacer, and antenna structures. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3a0ec4b0",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.300294Z",
"iopub.status.busy": "2023-03-28T01:36:47.300158Z",
"iopub.status.idle": "2023-03-28T01:36:47.319151Z",
"shell.execute_reply": "2023-03-28T01:36:47.318619Z"
}
},
"outputs": [],
"source": [
"# define SiO2 substrate\n",
"sub = td.Structure(\n",
" geometry=td.Box.from_bounds(\n",
" rmin=(-inf_eff, -inf_eff, -inf_eff), rmax=(inf_eff, inf_eff, -d3)\n",
" ),\n",
" medium=sio2,\n",
")\n",
"\n",
"# define gold layer\n",
"gold_layer = td.Structure(\n",
" geometry=td.Box.from_bounds(\n",
" rmin=(-inf_eff, -inf_eff, -d3), rmax=(inf_eff, inf_eff, 0)\n",
" ),\n",
" medium=au,\n",
")\n",
"\n",
"# define MgF2 spacer layer\n",
"spacer = td.Structure(\n",
" geometry=td.Box.from_bounds(\n",
" rmin=(-inf_eff, -inf_eff, 0), rmax=(inf_eff, inf_eff, d2)\n",
" ),\n",
" medium=mgf2,\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "499e1fd9",
"metadata": {},
"source": [
"Define a linearly polarized [PlaneWave](../_autosummary/tidy3d.PlaneWave.html) as the excitation source. The polarization is chosen to be in the y direction. Also define a [DiffractionMonitor](../_autosummary/tidy3d.DiffractionMonitor.html) on the reflection side to extract the complex reflection coefficient."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "2e992653",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.321477Z",
"iopub.status.busy": "2023-03-28T01:36:47.321306Z",
"iopub.status.idle": "2023-03-28T01:36:47.339187Z",
"shell.execute_reply": "2023-03-28T01:36:47.338654Z"
}
},
"outputs": [],
"source": [
"fwidth = freq0 / 10 # width of the gaussian pulse\n",
"\n",
"# define a plane wave excitation source\n",
"plane_wave = td.PlaneWave(\n",
" source_time=td.GaussianPulse(freq0=freq0, fwidth=fwidth),\n",
" size=(td.inf, td.inf, 0),\n",
" center=(0, 0, 0.3 * lda0),\n",
" direction=\"-\",\n",
" pol_angle=np.pi / 2, # polarization is set to y direction\n",
")\n",
"\n",
"# define a diffraction monitor to calculate the reflection coefficient\n",
"monitor_r = td.DiffractionMonitor(\n",
" center=[0, 0, 0.6 * lda0], size=[td.inf, td.inf, 0], freqs=[freq0], name=\"R\"\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "8a4fc1d4",
"metadata": {},
"source": [
"To perform a parameter sweep over antenna length, it is convenient to define a function that builds the simulation with a given antenna length $L$. Later, this function will be called repeatedly to construct a simulation batch for parameter sweep."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "b5dd0601",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.341534Z",
"iopub.status.busy": "2023-03-28T01:36:47.341398Z",
"iopub.status.idle": "2023-03-28T01:36:47.361451Z",
"shell.execute_reply": "2023-03-28T01:36:47.360899Z"
}
},
"outputs": [],
"source": [
"Lz = 1.5 * lda0 # simulation domain size in z direction\n",
"sim_size = [Lx, Ly, Lz]\n",
"\n",
"run_time = 3e-13 # simulation run time\n",
"\n",
"boundary_spec = td.BoundarySpec(\n",
" x=td.Boundary.periodic(),\n",
" y=td.Boundary.periodic(),\n",
" z=td.Boundary(minus=td.PML(), plus=td.PML()),\n",
")\n",
"\n",
"# define a function to build simulation given antenna length L\n",
"def make_sim(L):\n",
" # define the gold antenna\n",
" antenna = td.Structure(\n",
" geometry=td.Box.from_bounds(\n",
" rmin=(-w / 2, -L / 2, d2), rmax=(w / 2, L / 2, d2 + d1)\n",
" ),\n",
" medium=au,\n",
" )\n",
" unit_cell = [sub, gold_layer, spacer, antenna]\n",
"\n",
" # set up simulation\n",
" sim = td.Simulation(\n",
" size=sim_size,\n",
" grid_spec=td.GridSpec.auto(min_steps_per_wvl=20, wavelength=lda0),\n",
" structures=unit_cell,\n",
" sources=[plane_wave],\n",
" monitors=[monitor_r],\n",
" run_time=run_time,\n",
" boundary_spec=boundary_spec, # pml is applied to z direction. x and y directions are periodic\n",
" )\n",
" return sim\n"
]
},
{
"cell_type": "markdown",
"id": "a757a540",
"metadata": {},
"source": [
"To ensure the simulation setup is correct, let's test a specific case where the antenna length is 150 nm and visualize the simulation. From the plot, the geometry, source, and monitor all seem to be correctly defined. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "ff6989af",
"metadata": {
"execution": {
"iopub.execute_input": "2023-03-28T01:36:47.363799Z",
"iopub.status.busy": "2023-03-28T01:36:47.363662Z",
"iopub.status.idle": "2023-03-28T01:36:47.668451Z",
"shell.execute_reply": "2023-03-28T01:36:47.667955Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"