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

lattice = nn.Lattice(([period, 0], [0, period]), discretization=(N, N))

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()
$\varepsilon$

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 square patch

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()
$E$

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()
$H$

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

Gallery generated by Sphinx-Gallery