Note
Click here 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()
Out:
/builds/nannos/nannos.gitlab.io/nannos/examples/basic/plot_square_patch.py:66: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
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="tangent")
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
)
Out:
f = 1.0eV
T = 0.8763573475487096
f = 1.016eV
T = 0.8745734500761891
f = 1.032eV
T = 0.8727862721920352
f = 1.048eV
T = 0.8709894694829157
f = 1.064eV
T = 0.869174482649001
f = 1.08eV
T = 0.8673296774622902
f = 1.096eV
T = 0.8654390250829623
f = 1.112eV
T = 0.863479999375891
f = 1.1280000000000001eV
T = 0.8614200718559646
f = 1.1440000000000001eV
T = 0.8592105368251087
f = 1.16eV
T = 0.8567748511579182
f = 1.176eV
T = 0.8539845400360581
f = 1.192eV
T = 0.8506029247686978
f = 1.208eV
T = 0.8461280538158397
f = 1.224eV
T = 0.8392054272719622
f = 1.24eV
T = 0.8234777337033451
f = 1.256eV
T = 0.8345608816478124
f = 1.272eV
T = 0.857985735823554
f = 1.288eV
T = 0.8641642330176261
f = 1.304eV
T = 0.8668720551585912
f = 1.32eV
T = 0.868290763450592
f = 1.336eV
T = 0.8690965480494522
f = 1.3519999999999999eV
T = 0.869570637087707
f = 1.3679999999999999eV
T = 0.8698520792159475
f = 1.384eV
T = 0.8700180389832369
f = 1.4eV
T = 0.8701150473709078
f = 1.416eV
T = 0.870172984169046
f = 1.432eV
T = 0.8702120092007168
f = 1.448eV
T = 0.8702462801803703
f = 1.464eV
T = 0.8702860763683793
f = 1.48eV
T = 0.8703390759907387
f = 1.496eV
T = 0.8704111592113619
f = 1.512eV
T = 0.870506933139187
f = 1.528eV
T = 0.8706300884891754
f = 1.544eV
T = 0.8707836524512601
f = 1.56eV
T = 0.8709701784871412
f = 1.576eV
T = 0.8711919019495612
f = 1.592eV
T = 0.8714508871984116
f = 1.608eV
T = 0.8717491985282289
f = 1.624eV
T = 0.8720891528806355
f = 1.6400000000000001eV
T = 0.8724737888427845
f = 1.6560000000000001eV
T = 0.8729079297488245
f = 1.6720000000000002eV
T = 0.8734011297841244
f = 1.6880000000000002eV
T = 0.8739781945821639
f = 1.704eV
T = 0.8747353370692675
f = 1.72eV
T = 0.8765695621555224
f = 1.736eV
T = 0.8782920933457795
f = 1.752eV
T = 0.8759459275295977
f = 1.768eV
T = 0.876799094120978
f = 1.784eV
T = 0.8781099240130701
f = 1.8eV
T = 0.8791295229109282
f = 1.816eV
T = 0.8802726284924655
f = 1.832eV
T = 0.8799589344127459
f = 1.8479999999999999eV
T = 0.8806710381175468
f = 1.8639999999999999eV
T = 0.8817832988105532
f = 1.88eV
T = 0.883053339516268
f = 1.896eV
T = 0.8844168788958029
f = 1.912eV
T = 0.885845668719605
f = 1.928eV
T = 0.8873236142502255
f = 1.944eV
T = 0.8888397587412522
f = 1.96eV
T = 0.8903855831150048
f = 1.976eV
T = 0.891953762742501
f = 1.992eV
T = 0.8935375059836631
f = 2.008eV
T = 0.8951301495692153
f = 2.024eV
T = 0.8967248707907977
f = 2.04eV
T = 0.8983144467458077
f = 2.056eV
T = 0.8998910190952762
f = 2.072eV
T = 0.9014458329741177
f = 2.088eV
T = 0.9029689192759625
f = 2.104eV
T = 0.9044486829426549
f = 2.12eV
T = 0.9058713454046329
f = 2.136eV
T = 0.9072201634734776
f = 2.152eV
T = 0.9084743024143063
f = 2.168eV
T = 0.9096071632344243
f = 2.184eV
T = 0.9105838250607482
f = 2.2eV
T = 0.9113570049839635
f = 2.216eV
T = 0.9118604363161276
f = 2.232eV
T = 0.9119975430148182
f = 2.248eV
T = 0.9116210730873193
f = 2.2640000000000002eV
T = 0.9104942143379171
f = 2.2800000000000002eV
T = 0.9082107675952104
f = 2.2960000000000003eV
T = 0.904015968779463
f = 2.3120000000000003eV
T = 0.8963572679341534
f = 2.3280000000000003eV
T = 0.8815967955048893
f = 2.3440000000000003eV
T = 0.8498173319139668
f = 2.3600000000000003eV
T = 0.7746066907444944
f = 2.3760000000000003eV
T = 0.727194174848154
f = 2.3920000000000003eV
T = 0.8867353978374427
f = 2.408eV
T = 0.940769894543138
f = 2.424eV
T = 0.9511772977333558
f = 2.44eV
T = 0.9471655801750444
f = 2.456eV
T = 0.7459698696231409
f = 2.472eV
T = 0.9644642623557571
f = 2.488eV
T = 0.9637909838045451
f = 2.504eV
T = 0.9632710389714207
f = 2.52eV
T = 0.9639731811457448
f = 2.536eV
T = 0.9644781739810988
f = 2.552eV
T = 0.9673384416086891
f = 2.568eV
T = 0.9656535751444485
f = 2.584eV
T = 0.9655445856145862
f = 2.6eV
T = 0.9656006404905648
f = 1.216eV
T = 0.8431344783047869
f = 1.232eV
T = 0.833511336544991
f = 1.248eV
T = 0.7848409621650492
f = 1.264eV
T = 0.8510270177449347
f = 1.28eV
T = 0.8617948408072996
f = 1.296eV
T = 0.8657533724905875
f = 1.312eV
T = 0.8676856465671907
f = 1.328eV
T = 0.8687478008417904
f = 1.712eV
T = 0.875324376770733
f = 1.744eV
T = 0.8758558702097662
f = 1.76eV
T = 0.8762193926787433
f = 1.776eV
T = 0.8775658045344404
f = 2.2720000000000002eV
T = 0.9095328170817408
f = 2.2880000000000003eV
T = 0.9064220476743716
f = 2.3040000000000003eV
T = 0.9007720916711454
f = 2.3200000000000003eV
T = 0.8902493179454782
f = 2.3360000000000003eV
T = 0.8689561137806091
f = 2.3520000000000003eV
T = 0.8199787426225121
f = 2.3680000000000003eV
T = 0.722938045557598
f = 2.3840000000000003eV
T = 0.8128442267072626
f = 2.416eV
T = 0.9482734352943324
f = 2.432eV
T = 0.9510935059629159
f = 2.448eV
T = 0.9289589881011435
f = 2.464eV
T = 0.9578123885329644
f = 2.48eV
T = 0.9643883711889998
f = 2.544eV
T = 0.9652891701728347
f = 2.56eV
T = 0.9658545685360891
f = 2.576eV
T = 0.9656530771110717
f = 1.228eV
T = 0.8366674250160292
f = 1.236eV
T = 0.8293749352507084
f = 1.244eV
T = 0.8135879735265789
f = 1.252eV
T = 0.8131791475024859
f = 1.26eV
T = 0.8448890441748819
f = 1.268eV
T = 0.8550961576804968
f = 1.276eV
T = 0.8601370614993411
f = 1.284eV
T = 0.8631060001056323
f = 1.292eV
T = 0.8650321840260895
f = 1.3eV
T = 0.8663590033663995
f = 1.716eV
T = 0.8757886353699078
f = 1.728eV
T = 0.8843566662555142
f = 1.748eV
T = 0.875848360281772
f = 2.3320000000000003eV
T = 0.875899470647856
f = 2.3400000000000003eV
T = 0.8604157822629281
f = 2.3480000000000003eV
T = 0.8365713101127261
f = 2.3560000000000003eV
T = 0.7993739529308782
f = 2.3720000000000003eV
T = 0.7125671663938217
f = 2.3800000000000003eV
T = 0.7655684110703007
f = 2.4000000000000004eV
T = 0.9239266441575652
f = 2.42eV
T = 0.9501474693513156
f = 2.428eV
T = 0.9514915847787616
f = 2.436eV
T = 0.9498171764645049
f = 2.444eV
T = 0.941754964561885
f = 2.452eV
T = 0.8863061127666251
f = 2.46eV
T = 0.9226084005254812
f = 2.468eV
T = 0.9633406412473926
f = 2.476eV
T = 0.9645721431640463
f = 2.548eV
T = 0.9673603778780426
f = 2.556eV
T = 0.9662563380500397
f = 2.564eV
T = 0.965706222933628
f = 1.238eV
T = 0.8267272187765573
f = 1.242eV
T = 0.8193110248378898
f = 1.246eV
T = 0.8046644958007244
f = 1.25eV
T = 0.7894896517794636
f = 1.258eV
T = 0.8404802302494688
f = 1.262eV
T = 0.848303682318675
f = 1.266eV
T = 0.8532492472009225
f = 1.724eV
T = 0.8783191835480049
f = 1.732eV
T = 0.890087220145239
f = 1.74eV
T = 0.8762196664712387
f = 2.3640000000000003eV
T = 0.7472716509322267
f = 2.3740000000000006eV
T = 0.7164199432415099
f = 2.378eV
T = 0.7441637987464942
f = 2.3960000000000004eV
T = 0.9089127865058195
f = 2.412eV
T = 0.9452935525202141
f = 2.4219999999999997eV
T = 0.9507570235386716
f = 2.434eV
T = 0.9505850798842453
f = 2.4379999999999997eV
T = 0.9487170360056778
f = 2.442eV
T = 0.9449625671220457
f = 2.4459999999999997eV
T = 0.9368773148231964
f = 2.45eV
T = 0.9148414314942015
f = 2.4539999999999997eV
T = 0.8226912178159055
f = 2.458eV
T = 0.8442891701987537
f = 2.4619999999999997eV
T = 0.9485139025269731
f = 2.466eV
T = 0.9616331756342194
f = 2.4699999999999998eV
T = 0.9641237902794849
f = 2.54eV
T = 0.9646896142964584
f = 2.55eV
T = 0.9679267966210361
f = 1.245eV
T = 0.8097188097877484
f = 1.2469999999999999eV
T = 0.797446407021098
f = 1.249eV
T = 0.7653305982406667
f = 1.251eV
T = 0.8034547445683445
f = 1.254eV
T = 0.8261625194150206
f = 1.722eV
T = 0.8772356250985313
f = 1.726eV
T = 0.8803043307016885
f = 1.734eV
T = 0.8820938662183452
f = 1.738eV
T = 0.8768257589772742
f = 1.742eV
T = 0.8759593646184474
f = 2.37eV
T = 0.715181882697197
f = 2.373eV
T = 0.7136308544732224
f = 2.3770000000000002eV
T = 0.7349954203370173
f = 2.3880000000000003eV
T = 0.8549610177362315
f = 2.3980000000000006eV
T = 0.9171621496913744
f = 2.404eV
T = 0.9340069883859206
f = 2.4139999999999997eV
T = 0.9469442141536328
f = 2.418eV
T = 0.9493288761194865
f = 2.441eV
T = 0.946162758860863
f = 2.445eV
T = 0.9395866150442451
f = 2.447eV
T = 0.9334323040702703
f = 2.449eV
T = 0.9230039433955718
f = 2.453eV
T = 0.8607326542525303
f = 2.457eV
T = 0.779513527487626
f = 2.461eV
T = 0.9390100625061545
f = 2.463eV
T = 0.9542372105141192
f = 2.465eV
T = 0.9601148831989326
f = 2.469eV
T = 0.9638084916952887
f = 2.5460000000000003eV
T = 0.9660925645026723
f = 1.2530000000000001eV
T = 0.8204624094017039
f = 1.255eV
T = 0.8307624201524358
f = 1.725eV
T = 0.8791484626437197
f = 1.7269999999999999eV
T = 0.8819609309927613
f = 1.73eV
T = 0.8912151769655693
f = 1.7349999999999999eV
T = 0.8797426542907338
f = 1.737eV
T = 0.8773936477413259
f = 1.7389999999999999eV
T = 0.8764594002933807
f = 2.3660000000000005eV
T = 0.734160021899475
f = 2.3710000000000004eV
T = 0.7131344069927041
f = 2.3750000000000004eV
T = 0.7209588264230402
f = 2.394eV
T = 0.898878427002921
f = 2.4059999999999997eV
T = 0.9377249943540401
f = 2.41eV
T = 0.9432608817095932
f = 2.451eV
T = 0.903275220945894
f = 2.455eV
T = 0.7744817697532148
f = 2.459eV
T = 0.8935907385240178
f = 2.467eV
T = 0.9626512568155807
f = 1.729eV
T = 0.8876460674275289
f = 1.7309999999999999eV
T = 0.8926687962485812
f = 1.733eV
T = 0.8856966975691982
f = 2.369eV
T = 0.7185199786330944
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()
Out:
/builds/nannos/nannos.gitlab.io/nannos/examples/basic/plot_square_patch.py:134: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
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()
Out:
/builds/nannos/nannos.gitlab.io/nannos/examples/basic/plot_square_patch.py:148: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
plt.show()
Total running time of the script: ( 0 minutes 45.701 seconds)
Estimated memory usage: 10 MB