Note
Go to the end to download the full example code or to run this example in your browser via Binder.
Dielectric patch array#
Transmission spectrum.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
from scipy.constants import c, e, h
import nannos as nn
Results are compared to the reference [Tikhodeev2002].
eps_quartz = 2.132
eps_active = 3.97
N = 2**7
period = 0.68
l_patch = 0.8 * period
Define the lattice
Define the slab layer with a square patch
epsilon = lattice.ones() * eps_quartz
square = lattice.square(center=(0.5 * period, 0.5 * period), width=l_patch)
epsilon[square] = eps_active
slab = lattice.Layer("Slab", thickness=0.12)
slab.epsilon = epsilon
cmap = ListedColormap(["#dddddd", "#73a0e8"])
plt.figure(figsize=(3, 2.5))
im = slab.plot(cmap=cmap)
cbar = plt.colorbar(im[0], ticks=[eps_quartz, eps_active])
plt.xlabel(r"$x$ ($\mu$m)")
plt.ylabel(r"$y$ ($\mu$m)")
plt.title(r"$\varepsilon$")
plt.axis("scaled")
plt.tight_layout()
plt.show()

Define the simulation
sup = lattice.Layer("Superstrate", epsilon=1)
sub = lattice.Layer("Substrate", epsilon=eps_quartz)
stack = [sup, slab, sub]
def compute_transmission(fev):
w = h * c / e / (fev * 1e-6)
pw = nn.PlaneWave(wavelength=w, angles=(0, 0, 90))
sim = nn.Simulation(stack, pw, 100, formulation="original")
R, T = sim.diffraction_efficiencies()
print(f"f = {fev}eV")
print("T = ", T)
return T
freqsev = np.linspace(1, 2.6, 101)
fev_adapted, transmission = nn.adaptive_sampler(
compute_transmission, freqsev, max_bend=10, max_x_rel=0.001, max_df=0.005
)
f = 1.0eV
T = 0.8750798414796573
f = 1.016eV
T = 0.8733086223140755
f = 1.032eV
T = 0.8715383631793288
f = 1.048eV
T = 0.8697632452161164
f = 1.064eV
T = 0.867975364363031
f = 1.08eV
T = 0.8661639185691205
f = 1.096eV
T = 0.8643139580601612
f = 1.112eV
T = 0.8624043894850121
f = 1.1280000000000001eV
T = 0.8604046400838733
f = 1.1440000000000001eV
T = 0.8582687627131114
f = 1.16eV
T = 0.8559242630674374
f = 1.176eV
T = 0.8532489085078226
f = 1.192eV
T = 0.8500162551486131
f = 1.208eV
T = 0.8457424321117255
f = 1.224eV
T = 0.8391067025346498
f = 1.24eV
T = 0.8237634300182893
f = 1.256eV
T = 0.8386779297361365
f = 1.272eV
T = 0.858807763416476
f = 1.288eV
T = 0.8636751296187557
f = 1.304eV
T = 0.8657239751848157
f = 1.32eV
T = 0.866753192235804
f = 1.336eV
T = 0.8673049000582149
f = 1.3519999999999999eV
T = 0.8676023288070087
f = 1.3679999999999999eV
T = 0.8677556356825791
f = 1.384eV
T = 0.8678260788590791
f = 1.4eV
T = 0.867850752765487
f = 1.416eV
T = 0.867853604598765
f = 1.432eV
T = 0.8678508873425382
f = 1.448eV
T = 0.8678540863103472
f = 1.464eV
T = 0.8678715939640218
f = 1.48eV
T = 0.8679097202856498
f = 1.496eV
T = 0.867973330358146
f = 1.512eV
T = 0.8680662633974685
f = 1.528eV
T = 0.8681916195246079
f = 1.544eV
T = 0.8683519654283142
f = 1.56eV
T = 0.8685494917004618
f = 1.576eV
T = 0.8687861459780993
f = 1.592eV
T = 0.8690637648599789
f = 1.608eV
T = 0.8693842359783034
f = 1.624eV
T = 0.8697497500218302
f = 1.6400000000000001eV
T = 0.870163286579073
f = 1.6560000000000001eV
T = 0.8706297494237216
f = 1.6720000000000002eV
T = 0.8711592140740528
f = 1.6880000000000002eV
T = 0.8717790347907777
f = 1.704eV
T = 0.8726033789586849
f = 1.72eV
T = 0.8749303101689946
f = 1.736eV
T = 0.8752091086741897
f = 1.752eV
T = 0.8740181012646789
f = 1.768eV
T = 0.8748855705530786
f = 1.784eV
T = 0.8761956741227054
f = 1.8eV
T = 0.8772752161166502
f = 1.816eV
T = 0.8784981407096407
f = 1.832eV
T = 0.8783193204583521
f = 1.8479999999999999eV
T = 0.8791314363808601
f = 1.8639999999999999eV
T = 0.8803321548944216
f = 1.88eV
T = 0.8816844652984457
f = 1.896eV
T = 0.8831262937824178
f = 1.912eV
T = 0.884630640267338
f = 1.928eV
T = 0.8861822333849334
f = 1.944eV
T = 0.8877707163615731
f = 1.96eV
T = 0.8893880420072297
f = 1.976eV
T = 0.8910272821706142
f = 1.992eV
T = 0.8926819992532341
f = 2.008eV
T = 0.894345864750498
f = 2.024eV
T = 0.8960123897023832
f = 2.04eV
T = 0.8976747001143655
f = 2.056eV
T = 0.8993253177034733
f = 2.072eV
T = 0.9009559161569065
f = 2.088eV
T = 0.9025570236568877
f = 2.104eV
T = 0.9041176360673845
f = 2.12eV
T = 0.905624691173517
f = 2.136eV
T = 0.9070623292829219
f = 2.152eV
T = 0.9084108220304943
f = 2.168eV
T = 0.9096449750081104
f = 2.184eV
T = 0.9107316723219686
f = 2.2eV
T = 0.911625973525634
f = 2.216eV
T = 0.9122646683665357
f = 2.232eV
T = 0.9125551512430036
f = 2.248eV
T = 0.912355182995193
f = 2.2640000000000002eV
T = 0.9114336793410732
f = 2.2800000000000002eV
T = 0.9093886409693738
f = 2.2960000000000003eV
T = 0.9054580357168549
f = 2.3120000000000003eV
T = 0.898027645891608
f = 2.3280000000000003eV
T = 0.8831396572552432
f = 2.3440000000000003eV
T = 0.8491994955129837
f = 2.3600000000000003eV
T = 0.7635709886609967
f = 2.3760000000000003eV
T = 0.7584567496139017
f = 2.3920000000000003eV
T = 0.9124831849670405
f = 2.408eV
T = 0.9472430348192948
f = 2.424eV
T = 0.9525365054953082
f = 2.44eV
T = 0.946587145518857
f = 2.456eV
T = 0.7412617636861611
f = 2.472eV
T = 0.9639128776982585
f = 2.488eV
T = 0.963213637001514
f = 2.504eV
T = 0.9625908360098724
f = 2.52eV
T = 0.9632183768380183
f = 2.536eV
T = 0.9638868276185961
f = 2.552eV
T = 0.9652453162011072
f = 2.568eV
T = 0.9650345106442313
f = 2.584eV
T = 0.9650926772357337
f = 2.6eV
T = 0.9652127678832617
f = 1.216eV
T = 0.842878585169563
f = 1.232eV
T = 0.8336026432436954
f = 1.248eV
T = 0.7837331290593984
f = 1.28eV
T = 0.8618339609449105
f = 1.296eV
T = 0.8648868907819689
f = 1.312eV
T = 0.8663202608944403
f = 1.712eV
T = 0.873279554397553
f = 1.728eV
T = 0.8882146185141868
f = 1.744eV
T = 0.8738705943543533
f = 1.76eV
T = 0.8743181340505742
f = 1.776eV
T = 0.8756338213489676
f = 1.824eV
T = 0.8787597228461601
f = 1.8559999999999999eV
T = 0.8797059517126282
f = 2.2720000000000002eV
T = 0.9105873147535171
f = 2.2880000000000003eV
T = 0.9077303861140446
f = 2.3040000000000003eV
T = 0.9023418573246619
f = 2.3200000000000003eV
T = 0.8919461925042347
f = 2.3360000000000003eV
T = 0.8699183521015492
f = 2.3520000000000003eV
T = 0.8155893166818003
f = 2.3680000000000003eV
T = 0.7153337600487714
f = 2.3840000000000003eV
T = 0.8556882895074394
f = 2.416eV
T = 0.9514215369225769
f = 2.432eV
T = 0.9513811712493278
f = 2.448eV
T = 0.9263879638708585
f = 2.464eV
T = 0.9575863177373304
f = 2.48eV
T = 0.9638122666273465
f = 2.544eV
T = 0.9666385977220817
f = 2.56eV
T = 0.9650219553682997
f = 1.228eV
T = 0.8366596015649689
f = 1.236eV
T = 0.8295699219384002
f = 1.244eV
T = 0.8138594679113682
f = 1.252eV
T = 0.8180195246027357
f = 1.264eV
T = 0.8530967050691939
f = 1.284eV
T = 0.862857259365845
f = 1.292eV
T = 0.8643397263927776
f = 1.716eV
T = 0.8738552175580667
f = 1.724eV
T = 0.8777889940327097
f = 1.732eV
T = 0.881667020844857
f = 1.74eV
T = 0.8740767096821047
f = 1.748eV
T = 0.8739035028594005
f = 2.3240000000000003eV
T = 0.8879662472807294
f = 2.3320000000000003eV
T = 0.8772302140410541
f = 2.3400000000000003eV
T = 0.8607699705810263
f = 2.3480000000000003eV
T = 0.8344419195438247
f = 2.3560000000000003eV
T = 0.7918638033139909
f = 2.3720000000000003eV
T = 0.7217260878368359
f = 2.3800000000000003eV
T = 0.8095009420160926
f = 2.3880000000000003eV
T = 0.8896614477468667
f = 2.4000000000000004eV
T = 0.9369536974663453
f = 2.42eV
T = 0.9522731948212328
f = 2.436eV
T = 0.9496810879189852
f = 2.444eV
T = 0.9405550658490183
f = 2.452eV
T = 0.878282652107667
f = 2.46eV
T = 0.9252157493644285
f = 2.468eV
T = 0.9628398924617434
f = 2.476eV
T = 0.9640038365299941
f = 2.528eV
T = 0.9634404320359006
f = 2.548eV
T = 0.9656956601055315
f = 2.556eV
T = 0.9650776959993594
f = 1.238eV
T = 0.8269715864139306
f = 1.242eV
T = 0.8196171289469701
f = 1.246eV
T = 0.8047294942662901
f = 1.25eV
T = 0.7925021808831089
f = 1.254eV
T = 0.8308281807399274
f = 1.26eV
T = 0.8478708494845196
f = 1.268eV
T = 0.856464072161878
f = 1.276eV
T = 0.8605261679804402
f = 1.722eV
T = 0.8759522900864166
f = 1.726eV
T = 0.8814806420706617
f = 1.73eV
T = 0.8896384699870465
f = 1.738eV
T = 0.8744263865675012
f = 2.3640000000000003eV
T = 0.7344930580830479
f = 2.3740000000000006eV
T = 0.7369171494729477
f = 2.3900000000000006eV
T = 0.9022704535971087
f = 2.3960000000000004eV
T = 0.9273378337045726
f = 2.412eV
T = 0.9498349608534657
f = 2.428eV
T = 0.9522587846043584
f = 2.4379999999999997eV
T = 0.9483686244525545
f = 2.442eV
T = 0.9441138079826891
f = 2.4459999999999997eV
T = 0.9351643086980228
f = 2.45eV
T = 0.9105996722446116
f = 2.4539999999999997eV
T = 0.8068868013608353
f = 2.458eV
T = 0.8535677107138085
f = 2.4619999999999997eV
T = 0.9489040580393503
f = 2.466eV
T = 0.9612079442051998
f = 2.4699999999999998eV
T = 0.9635896315856947
f = 2.54eV
T = 0.9653315057983389
f = 1.245eV
T = 0.809924127403597
f = 1.2469999999999999eV
T = 0.7972016418487229
f = 1.249eV
T = 0.7637016225848319
f = 1.251eV
T = 0.8078820107264396
f = 1.2530000000000001eV
T = 0.8253062730436805
f = 1.255eV
T = 0.8351695551755702
f = 1.258eV
T = 0.8440082674293666
f = 1.262eV
T = 0.8507997891292813
f = 1.266eV
T = 0.8549453070957934
f = 1.27eV
T = 0.8577329209102156
f = 1.7229999999999999eV
T = 0.8767241639779295
f = 1.725eV
T = 0.8793007948680458
f = 1.7269999999999999eV
T = 0.8845378583853837
f = 1.729eV
T = 0.89075781253601
f = 1.7309999999999999eV
T = 0.8856439129243923
f = 1.734eV
T = 0.8770604200833938
f = 2.3660000000000005eV
T = 0.7226947284435299
f = 2.37eV
T = 0.7145325028051304
f = 2.3980000000000006eV
T = 0.9326652271568002
f = 2.404eV
T = 0.9431942238265549
f = 2.4139999999999997eV
T = 0.9507336212483545
f = 2.418eV
T = 0.9519275978640535
f = 2.434eV
T = 0.9506577161568976
f = 2.441eV
T = 0.9454561432306485
f = 2.445eV
T = 0.9381582585674197
f = 2.447eV
T = 0.9313522398554033
f = 2.449eV
T = 0.9197502740591199
f = 2.453eV
T = 0.849234473166307
f = 2.457eV
T = 0.7884725694263232
f = 2.461eV
T = 0.9401540892032649
f = 2.463eV
T = 0.9542294853247218
f = 2.465eV
T = 0.9597639596296362
f = 2.469eV
T = 0.9632880167636708
f = 2.532eV
T = 0.9635703403388883
f = 2.5460000000000003eV
T = 0.9661319241251227
f = 1.733eV
T = 0.8788550629193883
f = 1.7349999999999999eV
T = 0.8759307715741131
f = 1.737eV
T = 0.8747385613914024
f = 2.365eV
T = 0.728176595145861
f = 2.369eV
T = 0.7139973968125333
f = 2.3710000000000004eV
T = 0.7170898239180592
f = 2.373eV
T = 0.7283892865065487
f = 2.4059999999999997eV
T = 0.9454384420187285
f = 2.41eV
T = 0.9486877073573515
f = 2.451eV
T = 0.8975471710364487
f = 2.455eV
T = 0.7579412492487222
f = 2.459eV
T = 0.8989414162983718
f = 2.467eV
T = 0.9621800536482665
f = 2.5380000000000003eV
T = 0.9643477684883914
f = 2.542eV
T = 0.9665132321638416
f = 2.362eV
T = 0.7486560100869828
f = 2.3670000000000004eV
T = 0.7183206747796558
Figure 4 from [Tikhodeev2002].
plt.figure()
plt.plot(fev_adapted * 1000, transmission, c="#be4c83")
plt.ylim(0.4, 1)
plt.xlabel("frequency (meV)")
plt.ylabel("Transmissivity")
plt.tight_layout()

Plot the fields at the resonant frequency of 2456meV
fev = 2.456
w = h * c / e / (fev * 1e-6) # /1000
pw = nn.PlaneWave(wavelength=w, angles=(0, 0, 90))
sim = nn.Simulation(stack, pw, 151, formulation="tangent")
E, H = sim.get_field_grid("Superstrate", shape=(N, N))
Ex, Ey, Ez = E[:, :, :, 0]
Hx, Hy, Hz = H[:, :, :, 0]
nE2 = np.abs(Ex) ** 2 + np.abs(Ey) ** 2 # + np.abs(Ez)**2
nH2 = np.abs(Hx) ** 2 + np.abs(Hy) ** 2 # + np.abs(Hz)**2
Electric field
extent = [0, period, 0, period]
x, y = np.linspace(0, period, N), np.linspace(0, period, N)
plt.figure()
plt.imshow(epsilon.real, cmap="Greys", origin="lower", extent=extent)
plt.imshow(nE2, alpha=0.9, origin="lower", extent=extent)
plt.colorbar()
s = 3
plt.quiver(x[::s], y[::s], Ex[::s, ::s].real, Ey[::s, ::s].real, color="w")
plt.xlabel(r"$x$ ($\mu$m)")
plt.ylabel(r"$y$ ($\mu$m)")
plt.title("$E$")
plt.tight_layout()
plt.show()

Magnetic field
plt.figure()
plt.imshow(epsilon.real, cmap="Greys", origin="lower", extent=extent)
plt.imshow(nH2, alpha=0.9, origin="lower", extent=extent)
plt.colorbar()
plt.quiver(x[::s], y[::s], Hx[::s, ::s].real, Hy[::s, ::s].real, color="w")
plt.xlabel(r"$x$ ($\mu$m)")
plt.ylabel(r"$y$ ($\mu$m)")
plt.title("$H$")
plt.tight_layout()
plt.show()

Total running time of the script: (0 minutes 58.076 seconds)
Estimated memory usage: 642 MB