Photonic crystal slab#

Metasurface with holes.

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

import nannos as nn

We will study a benchmark of hole in a dielectric surface similar to those studied in [Fan2002].

Define the lattice

lattice = nn.Lattice([[1.0, 0], [0, 1.0]], discretization=(2**9, 2**9))

Define the layers

sup = lattice.Layer("Superstrate", epsilon=1)
ms = lattice.Layer("Metasurface", thickness=0.5)
sub = lattice.Layer("Substrate", epsilon=1)

Define the pattern and add it to the metasurface layer

ms.epsilon = lattice.ones() * 12.0
circ = lattice.circle(center=(0.5, 0.5), radius=0.2)
ms.epsilon[circ] = 1

Visualize the permittivity

plt.figure()
cmap = mpl.colors.ListedColormap(["#ffe7c2", "#232a4e"])
bounds = [1, 12]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
ims = ms.plot(cmap=cmap, ax=plt.gca())
plt.axis("scaled")
plt.colorbar(ims[0], ticks=bounds)
plt.xlabel("$x$")
plt.ylabel("$y$")
plt.title(r"permittitivity $\varepsilon(x,y)$")
plt.tight_layout()
plt.show()
permittitivity $\varepsilon(x,y)$

Define the incident plane wave

pw = nn.PlaneWave(wavelength=1 / 1.4, angles=(0, 0, 0))

Define the simulation

stack = [sup, ms, sub]
sim = nn.Simulation(stack, pw, nh=100)

Compute diffraction efficiencies

Compute diffraction efficiencies per order

Ri, Ti = sim.diffraction_efficiencies(orders=True)
nmax = 5

prop_orders = Ri > 1e-12

print("Ri = ", Ri[prop_orders])
print("Ti = ", Ti[prop_orders])
print("R = ", R)
print("T = ", T)
print("R+T = ", R + T)
Ri =  [0.02689579 0.01781021 0.01781021 0.43614092 0.02689579]
Ti =  [0.02366262 0.01156003 0.01156003 0.40400177 0.02366262]
R =  0.5255529342260288
T =  0.47444706577397305
R+T =  1.0000000000000018

Plot

fig, (axR, axT) = plt.subplots(1, 2, figsize=(4, 2))
labels = [f"({g[0]},{g[1]})" for g in (sim.harmonics[:, prop_orders]).T]
axR.bar(range(nmax), Ri[prop_orders], color=["#e69049"])
axR.set_xticks(range(nmax))
axR.set_xticklabels(labels=labels)
axR.set_xlabel("order")
axR.set_ylabel("reflection $R_{i,j}$")
axR.annotate(
    r"$R = \sum_i\,\sum_j\, R_{i,j}=$" + f"{sum(Ri[prop_orders]):0.4f}",
    (0.5, 0.9),
    xycoords="axes fraction",
)

axT.bar(range(nmax), Ti[prop_orders], color=["#4a77ba"])
axT.set_xticks(range(nmax))
axT.set_xticklabels(labels=labels)
axT.set_xlabel("order")
axT.set_ylabel("transmission $T_{i,j}$")
axT.annotate(
    r"$T =\sum_i\,\sum_j\, T_{i,j}=$" + f"{sum(Ti[prop_orders]):0.4f}",
    (0.5, 0.9),
    xycoords="axes fraction",
)
plt.suptitle(f"Diffraction efficiencies: $R+T=${sum(Ri[prop_orders] + Ti[prop_orders]):0.4f}")
plt.tight_layout()
plt.show()
Diffraction efficiencies: $R+T=$1.0000

Fig 12 (c) from [Fan2002].

def compute_transmission(fn):
    pw = nn.PlaneWave(wavelength=1 / fn, angles=(0, 0, 0))
    sim = nn.Simulation(stack, pw, 100)
    R, T = sim.diffraction_efficiencies()
    print(f"f = {fn} (normalized)")
    print("T = ", T)
    return T


freqs_norma = np.linspace(0.25, 0.6, 100)
freqs_adapted, transmission = nn.adaptive_sampler(
    compute_transmission,
    freqs_norma,
)


plt.figure()
plt.plot(freqs_adapted, transmission, c="#be4c83")
plt.xlim(freqs_norma[0], freqs_norma[-1])
plt.ylim(0, 1)
plt.xlabel(r"frequency ($2\pi c / a$)")
plt.ylabel("Transmission")
plt.tight_layout()
plot hole
f = 0.25 (normalized)
T =  0.5871769954230991
f = 0.25353535353535356 (normalized)
T =  0.6127114048067605
f = 0.25707070707070706 (normalized)
T =  0.6397742448919715
f = 0.2606060606060606 (normalized)
T =  0.6682915971742371
f = 0.2641414141414141 (normalized)
T =  0.6981339912261201
f = 0.2676767676767677 (normalized)
T =  0.7291034540111193
f = 0.27121212121212124 (normalized)
T =  0.7609202977021771
f = 0.27474747474747474 (normalized)
T =  0.7932109710790245
f = 0.2782828282828283 (normalized)
T =  0.8254988935998049
f = 0.2818181818181818 (normalized)
T =  0.8572007710494861
f = 0.28535353535353536 (normalized)
T =  0.8876312892711941
f = 0.28888888888888886 (normalized)
T =  0.9160190597315353
f = 0.2924242424242424 (normalized)
T =  0.941535981518519
f = 0.295959595959596 (normalized)
T =  0.9633405904476833
f = 0.2994949494949495 (normalized)
T =  0.9806334964446082
f = 0.30303030303030304 (normalized)
T =  0.9927200164792829
f = 0.30656565656565654 (normalized)
T =  0.9990723232834904
f = 0.3101010101010101 (normalized)
T =  0.9993818119993897
f = 0.3136363636363636 (normalized)
T =  0.9935927797983397
f = 0.31717171717171716 (normalized)
T =  0.981911211918889
f = 0.3207070707070707 (normalized)
T =  0.9647869524753503
f = 0.3242424242424242 (normalized)
T =  0.942872579664478
f = 0.3277777777777778 (normalized)
T =  0.9169664379765944
f = 0.33131313131313134 (normalized)
T =  0.8879494165777505
f = 0.33484848484848484 (normalized)
T =  0.8567249036441443
f = 0.3383838383838384 (normalized)
T =  0.8241693979994151
f = 0.3419191919191919 (normalized)
T =  0.7910985213761464
f = 0.34545454545454546 (normalized)
T =  0.7582507389776973
f = 0.34898989898989896 (normalized)
T =  0.7262899225642958
f = 0.3525252525252525 (normalized)
T =  0.6958289506392599
f = 0.3560606060606061 (normalized)
T =  0.6674815940091879
f = 0.3595959595959596 (normalized)
T =  0.6419638910047348
f = 0.36313131313131314 (normalized)
T =  0.6203051632381211
f = 0.36666666666666664 (normalized)
T =  0.604353173442791
f = 0.3702020202020202 (normalized)
T =  0.5982443206164098
f = 0.3737373737373737 (normalized)
T =  0.6140718049660142
f = 0.37727272727272726 (normalized)
T =  0.7070360917222266
f = 0.3808080808080808 (normalized)
T =  0.5606113982965808
f = 0.3843434343434343 (normalized)
T =  0.19219542508047463
f = 0.3878787878787879 (normalized)
T =  0.2776103455526691
f = 0.39141414141414144 (normalized)
T =  0.29591420578274624
f = 0.39494949494949494 (normalized)
T =  0.294536422828759
f = 0.39848484848484844 (normalized)
T =  0.2832518340317022
f = 0.402020202020202 (normalized)
T =  0.26282012209161726
f = 0.40555555555555556 (normalized)
T =  0.2262594024232541
f = 0.40909090909090906 (normalized)
T =  0.13915732809113374
f = 0.4126262626262626 (normalized)
T =  0.6120190950013136
f = 0.4161616161616162 (normalized)
T =  0.5306604288004388
f = 0.4196969696969697 (normalized)
T =  0.41267288345341424
f = 0.4232323232323232 (normalized)
T =  0.37064030318477376
f = 0.4267676767676768 (normalized)
T =  0.3480448173986073
f = 0.4303030303030303 (normalized)
T =  0.33347468601919084
f = 0.4338383838383838 (normalized)
T =  0.32317042487058334
f = 0.43737373737373736 (normalized)
T =  0.31553900611224184
f = 0.4409090909090909 (normalized)
T =  0.30979225635679436
f = 0.4444444444444444 (normalized)
T =  0.3054976988313542
f = 0.447979797979798 (normalized)
T =  0.3024008721651832
f = 0.45151515151515154 (normalized)
T =  0.3003455402617787
f = 0.45505050505050504 (normalized)
T =  0.29923438228639393
f = 0.45858585858585854 (normalized)
T =  0.29900825823682003
f = 0.4621212121212121 (normalized)
T =  0.2996347399215022
f = 0.46565656565656566 (normalized)
T =  0.30110159626718214
f = 0.46919191919191916 (normalized)
T =  0.3034130782711389
f = 0.4727272727272727 (normalized)
T =  0.3065878126138371
f = 0.4762626262626263 (normalized)
T =  0.31065747512691483
f = 0.4797979797979798 (normalized)
T =  0.31566529434847806
f = 0.4833333333333333 (normalized)
T =  0.3216625009401561
f = 0.4868686868686869 (normalized)
T =  0.3286976742088135
f = 0.4904040404040404 (normalized)
T =  0.33678308365847
f = 0.4939393939393939 (normalized)
T =  0.3457790155199414
f = 0.49747474747474746 (normalized)
T =  0.35491609328671514
f = 0.501010101010101 (normalized)
T =  0.35986977435694467
f = 0.5045454545454545 (normalized)
T =  0.286492940818246
f = 0.5080808080808081 (normalized)
T =  0.4823425282154085
f = 0.5116161616161616 (normalized)
T =  0.4924842958832685
f = 0.5151515151515151 (normalized)
T =  0.5433840623043663
f = 0.5186868686868686 (normalized)
T =  0.6468899018461723
f = 0.5222222222222221 (normalized)
T =  0.8888740203167251
f = 0.5257575757575758 (normalized)
T =  0.39899449362100603
f = 0.5292929292929293 (normalized)
T =  0.024336861768265328
f = 0.5328282828282829 (normalized)
T =  0.10000592162386975
f = 0.5363636363636364 (normalized)
T =  0.07007086559751842
f = 0.5398989898989899 (normalized)
T =  0.33705772644810167
f = 0.5434343434343434 (normalized)
T =  0.8421352324109362
f = 0.5469696969696969 (normalized)
T =  0.7055844894301805
f = 0.5505050505050505 (normalized)
T =  0.6833101068337794
f = 0.554040404040404 (normalized)
T =  0.6940404245552573
f = 0.5575757575757576 (normalized)
T =  0.7184230399653374
f = 0.5611111111111111 (normalized)
T =  0.7498154939251779
f = 0.5646464646464646 (normalized)
T =  0.7850997838538125
f = 0.5681818181818181 (normalized)
T =  0.8222992583075569
f = 0.5717171717171716 (normalized)
T =  0.859783979128788
f = 0.5752525252525252 (normalized)
T =  0.8959690636966252
f = 0.5787878787878787 (normalized)
T =  0.9292125956991864
f = 0.5823232323232324 (normalized)
T =  0.9578207136846908
f = 0.5858585858585859 (normalized)
T =  0.9801232109557205
f = 0.5893939393939394 (normalized)
T =  0.9945939623390305
f = 0.5929292929292929 (normalized)
T =  0.9999858948058039
f = 0.5964646464646464 (normalized)
T =  0.9954428166730152
f = 0.6 (normalized)
T =  0.980547750157667
f = 0.37550505050505045 (normalized)
T =  0.6422751427019229
f = 0.37904040404040407 (normalized)
T =  0.8746179191979829
f = 0.38611111111111107 (normalized)
T =  0.2505279450513679
f = 0.3896464646464647 (normalized)
T =  0.2905249674282038
f = 0.4037878787878788 (normalized)
T =  0.24752526999830504
f = 0.4108585858585858 (normalized)
T =  0.03403613566881598
f = 0.4143939393939394 (normalized)
T =  0.7362427632797985
f = 0.42146464646464643 (normalized)
T =  0.38779450224905004
f = 0.49924242424242427 (normalized)
T =  0.3586124826235981
f = 0.5063131313131313 (normalized)
T =  0.5720382224156355
f = 0.5133838383838384 (normalized)
T =  0.5134913358947846
f = 0.5169191919191919 (normalized)
T =  0.5854679438714999
f = 0.5204545454545454 (normalized)
T =  0.7415878112613403
f = 0.523989898989899 (normalized)
T =  0.9920637788859177
f = 0.531060606060606 (normalized)
T =  0.07203741413486243
f = 0.5381313131313131 (normalized)
T =  0.004924185312261304
f = 0.5416666666666666 (normalized)
T =  0.9964957065439366
f = 0.5452020202020201 (normalized)
T =  0.7479809307026805
f = 0.5487373737373737 (normalized)
T =  0.6879413253464435
f = 0.3763888888888889 (normalized)
T =  0.6677203725163667
f = 0.37815656565656564 (normalized)
T =  0.770281133198274
f = 0.38257575757575757 (normalized)
T =  0.05778525642029464
f = 0.3869949494949495 (normalized)
T =  0.26652064265681014
f = 0.4073232323232323 (normalized)
T =  0.19414626426245968
f = 0.41174242424242424 (normalized)
T =  0.01121212821578019
f = 0.413510101010101 (normalized)
T =  0.9588348527682906
f = 0.41792929292929293 (normalized)
T =  0.4528982735939234
f = 0.5027777777777778 (normalized)
T =  0.352519870327023
f = 0.5071969696969697 (normalized)
T =  0.49979581508455273
f = 0.5098484848484849 (normalized)
T =  0.4800435703397931
f = 0.5178030303030303 (normalized)
T =  0.6130961310457381
f = 0.519570707070707 (normalized)
T =  0.688841329741303
f = 0.5213383838383838 (normalized)
T =  0.80804379367347
f = 0.5231060606060606 (normalized)
T =  0.9712916887011703
f = 0.5275252525252525 (normalized)
T =  0.009357592205275175
f = 0.5345959595959596 (normalized)
T =  0.10194853353498189
f = 0.5390151515151516 (normalized)
T =  0.02894326835927376
f = 0.5407828282828282 (normalized)
T =  0.8743753145985081
f = 0.5425505050505051 (normalized)
T =  0.9208016480483511
f = 0.5443181818181817 (normalized)
T =  0.7859645754431445
f = 0.5460858585858586 (normalized)
T =  0.7225117902763728
f = 0.3777146464646465 (normalized)
T =  0.7347561942063054
f = 0.37859848484848485 (normalized)
T =  0.8161176693167246
f = 0.37992424242424244 (normalized)
T =  0.9980264765670972
f = 0.3816919191919192 (normalized)
T =  0.005722699085133605
f = 0.38345959595959594 (normalized)
T =  0.13842413907123274
f = 0.3852272727272727 (normalized)
T =  0.2271633153852391
f = 0.4082070707070707 (normalized)
T =  0.17080529450992124
f = 0.40997474747474744 (normalized)
T =  0.09466771883883707
f = 0.411300505050505 (normalized)
T =  0.005453530403958015
f = 0.41306818181818183 (normalized)
T =  0.9771548039708358
f = 0.4139520202020202 (normalized)
T =  0.8391308654104095
f = 0.4152777777777778 (normalized)
T =  0.604713667404062
f = 0.41704545454545455 (normalized)
T =  0.48439090250088784
f = 0.4188131313131313 (normalized)
T =  0.43005489896820337
f = 0.5036616161616161 (normalized)
T =  0.3372400595697133
f = 0.505429292929293 (normalized)
T =  0.08279924215505761
f = 0.507638888888889 (normalized)
T =  0.4883993583824314
f = 0.5235479797979798 (normalized)
T =  0.99707310296406
f = 0.5248737373737373 (normalized)
T =  0.8011552478753738
f = 0.5266414141414142 (normalized)
T =  0.10706549548312608
f = 0.5284090909090908 (normalized)
T =  0.003118475891052664
f = 0.5372474747474747 (normalized)
T =  0.038566715960589734
f = 0.5385732323232324 (normalized)
T =  0.000942469956866858
f = 0.540340909090909 (normalized)
T =  0.6302686912297829
f = 0.5412247474747474 (normalized)
T =  0.9853500471916701
f = 0.5421085858585859 (normalized)
T =  0.9642865803402628
f = 0.5447601010101009 (normalized)
T =  0.7650909815618236
f = 0.38036616161616166 (normalized)
T =  0.9278162484827592
f = 0.3821338383838384 (normalized)
T =  0.014295425440349905
f = 0.38301767676767673 (normalized)
T =  0.1015327563868952
f = 0.38390151515151516 (normalized)
T =  0.16825019537562239
f = 0.3847853535353535 (normalized)
T =  0.21149560904080225
f = 0.4121843434343434 (normalized)
T =  0.16140822389732254
f = 0.41284722222222225 (normalized)
T =  0.8490751144278883
f = 0.4137310606060606 (normalized)
T =  0.8997061981755764
f = 0.4148358585858586 (normalized)
T =  0.6603651969382699
f = 0.415719696969697 (normalized)
T =  0.5629234916044763
f = 0.41660353535353534 (normalized)
T =  0.5051016977846589
f = 0.5041035353535352 (normalized)
T =  0.3203230069296638
f = 0.5049873737373738 (normalized)
T =  0.19964347528775975
f = 0.5067550505050504 (normalized)
T =  0.5219944666445373
f = 0.5226641414141413 (normalized)
T =  0.9319463803864882
f = 0.5244318181818182 (normalized)
T =  0.9327263507620817
f = 0.5253156565656565 (normalized)
T =  0.607906852867492
f = 0.526199494949495 (normalized)
T =  0.2247779376144768
f = 0.5279671717171717 (normalized)
T =  0.00015180527598808842
f = 0.5394570707070707 (normalized)
T =  0.12716443135422412
f = 0.5410037878787878 (normalized)
T =  0.9461737538802856
f = 0.541445707070707 (normalized)
T =  0.9994265222676414
f = 0.3794823232323232 (normalized)
T =  0.9437635404696024
f = 0.3801452020202021 (normalized)
T =  0.9909240447880282
f = 0.38125 (normalized)
T =  0.14666227009703595
f = 0.41152146464646466 (normalized)
T =  2.1291413141310198e-05
f = 0.412405303030303 (normalized)
T =  0.35258010235104276
f = 0.4132891414141414 (normalized)
T =  0.9975694732684144
f = 0.5047664141414141 (normalized)
T =  0.2547700045752986
f = 0.5058712121212121 (normalized)
T =  0.7362801443613369
f = 0.5069760101010101 (normalized)
T =  0.5089497098198197
f = 0.5242108585858586 (normalized)
T =  0.9706828547574783
f = 0.5246527777777777 (normalized)
T =  0.8762395517810959
f = 0.5250946969696969 (normalized)
T =  0.7099931960741498
f = 0.5259785353535353 (normalized)
T =  0.3053676908504883
f = 0.5270833333333333 (normalized)
T =  0.040357514870204225
f = 0.5392361111111111 (normalized)
T =  0.06623771442339534
f = 0.5396780303030303 (normalized)
T =  0.21706904854712625
f = 0.5405618686868686 (normalized)
T =  0.767026193103496
f = 0.3797032828282828 (normalized)
T =  0.9765523265578748
f = 0.38058712121212124 (normalized)
T =  0.7819896036864303
f = 0.38147095959595956 (normalized)
T =  0.045921433868989725
f = 0.38191287878787883 (normalized)
T =  0.0011485472412955506
f = 0.4119633838383838 (normalized)
T =  0.05606638121677981
f = 0.5056502525252525 (normalized)
T =  0.9784311810526801
f = 0.5060921717171717 (normalized)
T =  0.6257693718256697
f = 0.5065340909090909 (normalized)
T =  0.5413660384547626
f = 0.5268623737373738 (normalized)
T =  0.06824499393815252
f = 0.5273042929292929 (normalized)
T =  0.021358217324746315
f = 0.3810290404040404 (normalized)
T =  0.3255195343350059
f = 0.5052083333333334 (normalized)
T =  0.0921482603397701
f = 0.5264204545454546 (normalized)
T =  0.1587694037366112

Total running time of the script: (1 minutes 1.890 seconds)

Estimated memory usage: 642 MB

Gallery generated by Sphinx-Gallery