import numpy as np
import os
# solcore imports
from solcore.structure import Layer
from solcore import material
from solcore import si
from rayflare.structure import Interface, BulkLayer, Structure
from rayflare.matrix_formalism import process_structure, calculate_RAT
from rayflare.utilities import get_savepath
from rayflare.transfer_matrix_method import tmm_structure
from rayflare.angles import theta_summary, make_angle_vector
from rayflare.textures import regular_pyramids
from rayflare.options import default_options
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
from sparse import load_npz
Textured Si: diffraction grating and pyramids
This example is based on Figures 6, 7 and 8 from this paper. This compares three different structures, all based on a 200 micron thick slab of silicon with different surface textures:
- Planar front surface (TMM), crossed grating at rear (RCWA)
- Inverted pyramids on the front surface (RT_Fresnel), planar rear surface (TMM)
- Inverted pyramids on the front surface (RT_Fresnel), crossed grating at rear (RCWA)
The methods which will be used to calculate the redistribution matrices in each case are given in brackets. If case 1 and 2 are calculated first, then case 3 does not require the calculations of any additional matrices, since it will use the rear matrix from (1) and the front matrix from (2).
Setting up
First, importing relevant packages:
Setting options (taking the default options for everything not specified explicitly):
= 8 # same as in Fraunhofer paper
angle_degrees_in
= np.linspace(900, 1200, 20) * 1e-9
wavelengths
= material("Si")()
Si = material("Air")()
Air
= default_options()
options = wavelengths
options.wavelength = angle_degrees_in * np.pi / 180 # incidence angle (polar angle) in radians
options.theta_in = 30
options.n_theta_bins = 0.25
options.c_azimuth = 5e4 # number of rays per wavelength in ray-tracing
options.n_rays = "OPTOS_comparison"
options.project_name # options.orders = 60 # number of RCWA orders to use (more = better convergence, but slower)
= "u" # unpolarized light
options.pol = True
options.only_incidence_angle = "Inkstone"
options.RCWA_method = True options.parallel
Defining the structures
Now, set up the grating basis vectors for the RCWA calculations and define the grating structure. These are squares, rotated by 45 degrees. The halfwidth is calculated based on the area fill factor of the etched pillars given in the paper.
= 1000
x
= ((x, 0), (0, x))
d_vectors = 0.36
area_fill_factor = np.sqrt(area_fill_factor) * 500
hw
= [
back_materials =si("120nm"), material=Si,
Layer(width=[{"type": "rectangle", "mat": Air, "center": (x / 2, x / 2),
geometry"halfwidths": (hw, hw), "angle": 45}],
)]
Now we define the pyramid texture for the front surface in case (2) and (3) and make the four possible different surfaces: planar front and rear, front with pyramids, rear with grating. We specify the method to use to calculate the redistribution matrices in each case and create the bulk layer.
= regular_pyramids(elevation_angle=55, upright=False)
surf
= Interface(
front_surf_pyramids "RT_Fresnel",
=surf,
texture=[],
layers="inv_pyramids_front_" + str(options["n_rays"]),
name
)
= Interface("TMM", layers=[], name="planar_front")
front_surf_planar
= Interface(
back_surf_grating "RCWA",
=back_materials,
layers="crossed_grating_back",
name=d_vectors,
d_vectors=30,
rcwa_orders
)
= Interface("TMM", layers=[], name="planar_back")
back_surf_planar
= BulkLayer(200e-6, Si, name="Si_bulk") bulk_Si
Now we create the different structures and ‘process’ them (this will calculate the relevant matrices if necessary, or do nothing if it finds the matrices have previously been calculated and the files already exist). We don’t need to process the final structure because it will use matrices calculated for SC_fig6
and SC_fig7
.
%%capture
= Structure([front_surf_planar, bulk_Si, back_surf_grating], incidence=Air, transmission=Air)
SC_fig6
= Structure([front_surf_pyramids, bulk_Si, back_surf_planar], incidence=Air, transmission=Air)
SC_fig7
= Structure([front_surf_pyramids, bulk_Si, back_surf_grating], incidence=Air, transmission=Air)
SC_fig8
='current') # if you want to overwrite previous results, add overwrite=Trues
process_structure(SC_fig6, options, save_location='current') process_structure(SC_fig7, options, save_location
INFO: Making matrix for planar surface using TMM for element 0 in structure
INFO: RCWA calculation for element 2 in structure
INFO: RCWA calculation for wavelength = 900.0000000000001 nm
INFO: RCWA calculation for wavelength = 915.7894736842105 nm
INFO: RCWA calculation for wavelength = 931.578947368421 nm
INFO: RCWA calculation for wavelength = 947.3684210526316 nm
INFO: RCWA calculation for wavelength = 963.1578947368421 nm
INFO: RCWA calculation for wavelength = 978.9473684210526 nm
INFO: RCWA calculation for wavelength = 1010.5263157894736 nm
INFO: RCWA calculation for wavelength = 994.7368421052631 nm
INFO: RCWA calculation for wavelength = 1026.3157894736842 nm
INFO: RCWA calculation for wavelength = 1042.1052631578948 nm
INFO: RCWA calculation for wavelength = 1057.8947368421054 nm
INFO: RCWA calculation for wavelength = 1073.6842105263158 nm
INFO: RCWA calculation for wavelength = 1089.4736842105265 nm
INFO: RCWA calculation for wavelength = 1105.2631578947369 nm
INFO: RCWA calculation for wavelength = 1121.0526315789475 nm
INFO: RCWA calculation for wavelength = 1136.842105263158 nm
INFO: RCWA calculation for wavelength = 1152.6315789473683 nm
INFO: RCWA calculation for wavelength = 1168.421052631579 nm
INFO: RCWA calculation for wavelength = 1184.2105263157896 nm
INFO: RCWA calculation for wavelength = 1200.0000000000002 nm
INFO: Ray tracing with Fresnel equations for element 0 in structure
INFO: Calculating matrix only for incidence theta/phi
INFO: RT calculation for wavelength = 900.0000000000001 nm
INFO: RT calculation for wavelength = 915.7894736842105 nm
INFO: RT calculation for wavelength = 947.3684210526316 nm
INFO: RT calculation for wavelength = 963.1578947368421 nm
INFO: RT calculation for wavelength = 931.578947368421 nm
INFO: RT calculation for wavelength = 978.9473684210526 nm
INFO: RT calculation for wavelength = 994.7368421052631 nm
INFO: RT calculation for wavelength = 1010.5263157894736 nm
INFO: RT calculation for wavelength = 1026.3157894736842 nm
INFO: RT calculation for wavelength = 1042.1052631578948 nm
INFO: RT calculation for wavelength = 1057.8947368421054 nm
INFO: RT calculation for wavelength = 1073.6842105263158 nm
INFO: RT calculation for wavelength = 1089.4736842105265 nm
INFO: RT calculation for wavelength = 1105.2631578947369 nm
INFO: RT calculation for wavelength = 1121.0526315789475 nm
INFO: RT calculation for wavelength = 1136.842105263158 nm
INFO: RT calculation for wavelength = 1152.6315789473683 nm
INFO: RT calculation for wavelength = 1168.421052631579 nm
INFO: RT calculation for wavelength = 1184.2105263157896 nm
INFO: RT calculation for wavelength = 1200.0000000000002 nm
INFO: RT calculation for wavelength = 915.7894736842105 nm
INFO: RT calculation for wavelength = 900.0000000000001 nm
INFO: RT calculation for wavelength = 931.578947368421 nm
INFO: RT calculation for wavelength = 947.3684210526316 nm
INFO: RT calculation for wavelength = 963.1578947368421 nm
INFO: RT calculation for wavelength = 994.7368421052631 nm
INFO: RT calculation for wavelength = 978.9473684210526 nm
INFO: RT calculation for wavelength = 1010.5263157894736 nm
INFO: RT calculation for wavelength = 1026.3157894736842 nm
INFO: RT calculation for wavelength = 1042.1052631578948 nm
INFO: RT calculation for wavelength = 1057.8947368421054 nm
INFO: RT calculation for wavelength = 1073.6842105263158 nm
INFO: RT calculation for wavelength = 1089.4736842105265 nm
INFO: RT calculation for wavelength = 1105.2631578947369 nm
INFO: RT calculation for wavelength = 1121.0526315789475 nm
INFO: RT calculation for wavelength = 1136.842105263158 nm
INFO: RT calculation for wavelength = 1152.6315789473683 nm
INFO: RT calculation for wavelength = 1168.421052631579 nm
INFO: RT calculation for wavelength = 1184.2105263157896 nm
INFO: RT calculation for wavelength = 1200.0000000000002 nm
INFO: Making matrix for planar surface using TMM for element 2 in structure
Calculating R/A/T
Then we ask RayFlare to calculate the reflection, transmission and absorption through matrix multiplication, and get the required result out (absorption in the bulk) for each cell. We also load the results from the reference paper to compare them to the ones calculated with RayFlare.
%%capture
= calculate_RAT(SC_fig6, options, save_location='current')
results_fig6 = calculate_RAT(SC_fig7, options, save_location='current')
results_fig7 = calculate_RAT(SC_fig8, options, save_location='current')
results_fig8
= results_fig6[0]
RAT_fig6 = results_fig7[0]
RAT_fig7 = results_fig8[0]
RAT_fig8
= np.loadtxt("data/optos_fig6_sim.csv", delimiter=",")
sim_fig6 = np.loadtxt("data/optos_fig7_sim.csv", delimiter=",")
sim_fig7 = np.loadtxt("data/optos_fig8_sim.csv", delimiter=",") sim_fig8
INFO: After iteration 1: maximum power fraction remaining = 0.3147547844901925
INFO: After iteration 2: maximum power fraction remaining = 0.26488646733006893
INFO: After iteration 3: maximum power fraction remaining = 0.23269554942010684
INFO: After iteration 4: maximum power fraction remaining = 0.20578380258355025
INFO: After iteration 5: maximum power fraction remaining = 0.18307141658083748
INFO: After iteration 6: maximum power fraction remaining = 0.1637219102470247
INFO: After iteration 7: maximum power fraction remaining = 0.14714910204177287
INFO: After iteration 8: maximum power fraction remaining = 0.13288656305286478
INFO: After iteration 9: maximum power fraction remaining = 0.12055930469248763
INFO: After iteration 10: maximum power fraction remaining = 0.10986019881035203
INFO: After iteration 11: maximum power fraction remaining = 0.10053607370251534
INFO: After iteration 12: maximum power fraction remaining = 0.09237713790148333
INFO: After iteration 13: maximum power fraction remaining = 0.08520886687832208
INFO: After iteration 14: maximum power fraction remaining = 0.0788855889948453
INFO: After iteration 15: maximum power fraction remaining = 0.07328535247639956
INFO: After iteration 16: maximum power fraction remaining = 0.06830577741010184
INFO: After iteration 17: maximum power fraction remaining = 0.06386068307843429
INFO: After iteration 18: maximum power fraction remaining = 0.05987733356284154
INFO: After iteration 19: maximum power fraction remaining = 0.05629418057339303
INFO: After iteration 20: maximum power fraction remaining = 0.0530590083118345
INFO: After iteration 21: maximum power fraction remaining = 0.050127404656592524
INFO: After iteration 22: maximum power fraction remaining = 0.047461498045875336
INFO: After iteration 23: maximum power fraction remaining = 0.045028911306820844
INFO: After iteration 24: maximum power fraction remaining = 0.04280189309886298
INFO: After iteration 25: maximum power fraction remaining = 0.04075659515037211
INFO: After iteration 26: maximum power fraction remaining = 0.038872469475235455
INFO: After iteration 27: maximum power fraction remaining = 0.03713176457366855
INFO: After iteration 28: maximum power fraction remaining = 0.03551910349430494
INFO: After iteration 29: maximum power fraction remaining = 0.03402112975551302
INFO: After iteration 30: maximum power fraction remaining = 0.032626209645374105
INFO: After iteration 31: maximum power fraction remaining = 0.03132418146241775
INFO: After iteration 32: maximum power fraction remaining = 0.03010614391856444
INFO: After iteration 33: maximum power fraction remaining = 0.028964277277513318
INFO: After iteration 34: maximum power fraction remaining = 0.027891691906174458
INFO: After iteration 35: maximum power fraction remaining = 0.0268822998215131
INFO: After iteration 36: maximum power fraction remaining = 0.0259307055584597
INFO: After iteration 37: maximum power fraction remaining = 0.025032113296785112
INFO: After iteration 38: maximum power fraction remaining = 0.024182247690420135
INFO: After iteration 39: maximum power fraction remaining = 0.02337728626118793
INFO: After iteration 40: maximum power fraction remaining = 0.022613801566086604
INFO: After iteration 41: maximum power fraction remaining = 0.02188871163585434
INFO: After iteration 42: maximum power fraction remaining = 0.021199237422906875
INFO: After iteration 43: maximum power fraction remaining = 0.020542866197268028
INFO: After iteration 44: maximum power fraction remaining = 0.019917319996684207
INFO: After iteration 45: maximum power fraction remaining = 0.019320528377345426
INFO: After iteration 46: maximum power fraction remaining = 0.018750604829146936
INFO: After iteration 47: maximum power fraction remaining = 0.018205826318019654
INFO: After iteration 48: maximum power fraction remaining = 0.017684615500675037
INFO: After iteration 49: maximum power fraction remaining = 0.017185525226750514
INFO: After iteration 50: maximum power fraction remaining = 0.016707225001959973
INFO: After iteration 51: maximum power fraction remaining = 0.016248489135243467
INFO: After iteration 52: maximum power fraction remaining = 0.015808186334561478
INFO: After iteration 53: maximum power fraction remaining = 0.015385270551136398
INFO: After iteration 54: maximum power fraction remaining = 0.014978772901646063
INFO: After iteration 55: maximum power fraction remaining = 0.014587794522988966
INFO: After iteration 56: maximum power fraction remaining = 0.014211500235496196
INFO: After iteration 57: maximum power fraction remaining = 0.013849112908469175
INFO: After iteration 58: maximum power fraction remaining = 0.013499908437186743
INFO: After iteration 59: maximum power fraction remaining = 0.013163211253478645
INFO: After iteration 60: maximum power fraction remaining = 0.012838390302965243
INFO: After iteration 61: maximum power fraction remaining = 0.012524855431418591
INFO: After iteration 62: maximum power fraction remaining = 0.01222205413066281
INFO: After iteration 63: maximum power fraction remaining = 0.011929468601216221
INFO: After iteration 64: maximum power fraction remaining = 0.011646613094665394
INFO: After iteration 65: maximum power fraction remaining = 0.01137303150370423
INFO: After iteration 66: maximum power fraction remaining = 0.01110829517199786
INFO: After iteration 67: maximum power fraction remaining = 0.010852000899650596
INFO: After iteration 68: maximum power fraction remaining = 0.010603769123160458
INFO: After iteration 69: maximum power fraction remaining = 0.01036324225140776
INFO: After iteration 70: maximum power fraction remaining = 0.010130083141517249
INFO: After iteration 71: maximum power fraction remaining = 0.009903973700407609
INFO: After iteration 1: maximum power fraction remaining = 0.6965599807904936
INFO: After iteration 2: maximum power fraction remaining = 0.563969701000487
INFO: After iteration 3: maximum power fraction remaining = 0.5211473528500719
INFO: After iteration 4: maximum power fraction remaining = 0.45114105474022054
INFO: After iteration 5: maximum power fraction remaining = 0.40800132751185514
INFO: After iteration 6: maximum power fraction remaining = 0.35608655120887633
INFO: After iteration 7: maximum power fraction remaining = 0.3206871884192381
INFO: After iteration 8: maximum power fraction remaining = 0.2818708654979915
INFO: After iteration 9: maximum power fraction remaining = 0.25330222148861653
INFO: After iteration 10: maximum power fraction remaining = 0.22373360840898793
INFO: After iteration 11: maximum power fraction remaining = 0.20072528723530697
INFO: After iteration 12: maximum power fraction remaining = 0.1779254944043747
INFO: After iteration 13: maximum power fraction remaining = 0.15942400813738253
INFO: After iteration 14: maximum power fraction remaining = 0.14166488288482385
INFO: After iteration 15: maximum power fraction remaining = 0.12681463105843302
INFO: After iteration 16: maximum power fraction remaining = 0.1128794594978319
INFO: After iteration 17: maximum power fraction remaining = 0.10097909333367672
INFO: After iteration 18: maximum power fraction remaining = 0.08998681013003268
INFO: After iteration 19: maximum power fraction remaining = 0.08046232125130436
INFO: After iteration 20: maximum power fraction remaining = 0.07175954781299133
INFO: After iteration 21: maximum power fraction remaining = 0.06414362843595126
INFO: After iteration 22: maximum power fraction remaining = 0.0572360500839504
INFO: After iteration 23: maximum power fraction remaining = 0.05115025866725291
INFO: After iteration 24: maximum power fraction remaining = 0.04565809475309618
INFO: After iteration 25: maximum power fraction remaining = 0.04079725496573843
INFO: After iteration 26: maximum power fraction remaining = 0.036425366481773094
INFO: After iteration 27: maximum power fraction remaining = 0.03254416128412682
INFO: After iteration 28: maximum power fraction remaining = 0.029061293271114255
INFO: After iteration 29: maximum power fraction remaining = 0.025962972426405884
INFO: After iteration 30: maximum power fraction remaining = 0.02318687449659121
INFO: After iteration 31: maximum power fraction remaining = 0.02071389272627435
INFO: After iteration 32: maximum power fraction remaining = 0.018500357957723305
INFO: After iteration 33: maximum power fraction remaining = 0.016526703768016418
INFO: After iteration 34: maximum power fraction remaining = 0.014761314059235722
INFO: After iteration 35: maximum power fraction remaining = 0.013186275699979906
INFO: After iteration 36: maximum power fraction remaining = 0.01177807922347749
INFO: After iteration 37: maximum power fraction remaining = 0.010521207682390923
INFO: After iteration 38: maximum power fraction remaining = 0.009397815380879172
INFO: After iteration 1: maximum power fraction remaining = 0.7861249181870045
INFO: After iteration 2: maximum power fraction remaining = 0.6520356106744409
INFO: After iteration 3: maximum power fraction remaining = 0.5537300113761829
INFO: After iteration 4: maximum power fraction remaining = 0.4719955184218194
INFO: After iteration 5: maximum power fraction remaining = 0.40260506877025276
INFO: After iteration 6: maximum power fraction remaining = 0.3436142167213573
INFO: After iteration 7: maximum power fraction remaining = 0.2933042469851944
INFO: After iteration 8: maximum power fraction remaining = 0.25037412561055633
INFO: After iteration 9: maximum power fraction remaining = 0.21373164451848886
INFO: After iteration 10: maximum power fraction remaining = 0.1824531099045743
INFO: After iteration 11: maximum power fraction remaining = 0.15575252719375898
INFO: After iteration 12: maximum power fraction remaining = 0.13295952983662057
INFO: After iteration 13: maximum power fraction remaining = 0.11350215390445287
INFO: After iteration 14: maximum power fraction remaining = 0.09689220636306606
INFO: After iteration 15: maximum power fraction remaining = 0.08271297495981722
INFO: After iteration 16: maximum power fraction remaining = 0.07060873991013421
INFO: After iteration 17: maximum power fraction remaining = 0.06027584285274009
INFO: After iteration 18: maximum power fraction remaining = 0.05145506461255833
INFO: After iteration 19: maximum power fraction remaining = 0.04392512096803368
INFO: After iteration 20: maximum power fraction remaining = 0.03749711076025854
INFO: After iteration 21: maximum power fraction remaining = 0.03200977677504282
INFO: After iteration 22: maximum power fraction remaining = 0.027325460254824067
INFO: After iteration 23: maximum power fraction remaining = 0.023326647466858627
INFO: After iteration 24: maximum power fraction remaining = 0.019913021666735822
INFO: After iteration 25: maximum power fraction remaining = 0.016998946483185937
INFO: After iteration 26: maximum power fraction remaining = 0.014511317588150134
INFO: After iteration 27: maximum power fraction remaining = 0.012387728754539053
INFO: After iteration 28: maximum power fraction remaining = 0.010574906293982545
INFO: After iteration 29: maximum power fraction remaining = 0.009027372599341561
Finally, we use TMM to calculate the absorption in a structure with a planar front and planar rear, as a reference.
= tmm_structure([Layer(si("200um"), Si)], incidence=Air, transmission=Air)
struc = False
options.coherent = ["i"]
options.coherency_list = tmm_structure.calculate(struc, options) RAT
Plotting
Plot everything together, including data from the reference paper for comparison:
= sns.color_palette("hls", 4)
palhf
= plt.figure()
fig 0], sim_fig6[:, 1],
plt.plot(sim_fig6[:, "--", color=palhf[0], label="OPTOS - rear grating (1)")
* 1e9, RAT_fig6["A_bulk"][0],
plt.plot(wavelengths "-o", color=palhf[0], label="RayFlare - rear grating (1)", fillstyle="none")
0], sim_fig7[:, 1],
plt.plot(sim_fig7[:, "--", color=palhf[1], label="OPTOS - front pyramids (2)",)
* 1e9, RAT_fig7["A_bulk"][0],
plt.plot(wavelengths "-o", color=palhf[1], label="RayFlare - front pyramids (2)", fillstyle="none")
0], sim_fig8[:, 1],
plt.plot(sim_fig8[:, "--", color=palhf[2], label="OPTOS - grating + pyramids (3)")
* 1e9, RAT_fig8["A_bulk"][0],
plt.plot(wavelengths "-o", color=palhf[2],label="RayFlare - grating + pyramids (3)", fillstyle="none",)
* 1e9, RAT["A_per_layer"][:, 0], "-k", label="Planar")
plt.plot(wavelengths ="lower left")
plt.legend(loc"Wavelength (nm)")
plt.xlabel("Absorption in Si")
plt.ylabel(900, 1200])
plt.xlim([0, 1])
plt.ylim([ plt.show()
We can see good (qualitative) agreement between the reference values and our calculated values. The default values for the number of rays, RCWA orders, and bins in the angular redistribution matrix in this example are set to be quite low – agreement between the literature values and the values calculated before improves if these are increased (but the calculation takes much longer). The structure with rear grating also behaves identically to the planar TMM reference case at the short wavelengths where front surface reflection dominates the result, as expected. Clearly, the pyramids perform much better overall, giving a large boost in the absorption at long wavelengths and also reducing the reflection significantly at shorter wavelengths. Plotting reflection and transmission emphasises this:
= plt.figure()
fig * 1e9,RAT_fig6["R"][0],
plt.plot(wavelengths "-o", color=palhf[0], label="RayFlare - rear grating (1)", fillstyle="none")
* 1e9, RAT_fig7["R"][0],
plt.plot(wavelengths "-o", color=palhf[1], label="RayFlare - front pyramids (2)", fillstyle="none")
* 1e9, RAT_fig8["R"][0],
plt.plot(wavelengths "-o", color=palhf[2], label="RayFlare - grating + pyramids (3)", fillstyle="none")
* 1e9, RAT_fig6["T"][0], "--o", color=palhf[0])
plt.plot(wavelengths * 1e9, RAT_fig7["T"][0], "--o", color=palhf[1])
plt.plot(wavelengths * 1e9, RAT_fig8["T"][0], "--o", color=palhf[2])
plt.plot(wavelengths
# these are just to create the legend:
-1, 0, "k-o", label="R", fillstyle="none")
plt.plot(-1, 0, "k--o", label="T")
plt.plot(
plt.legend()"Wavelength (nm)")
plt.xlabel("Reflected/transmitted fraction")
plt.ylabel(900, 1200])
plt.xlim([0, 0.6])
plt.ylim([ plt.show()
Redistribution matrices
Plot the redistribution matrix for the rear grating (summed over azimuthal angles) at 1100 nm:
= make_angle_vector(
theta_intv, phi_intv, angle_vector "n_theta_bins"], options["phi_symmetry"], options["c_azimuth"])
options[
= get_savepath(save_location='current', project_name=options.project_name)
path = load_npz(os.path.join(path, SC_fig6[2].name + "frontRT.npz"))
sprs
= 1100e-9
wl_to_plot = np.argmin(np.abs(wavelengths - wl_to_plot))
wl_index
= sprs[wl_index].todense()
full
= theta_summary(full, angle_vector, options["n_theta_bins"], "front")
summat = summat[: options["n_theta_bins"], :]
summat_r = summat_r.rename({ r"$\theta_{in}$": r"$\sin(\theta_{in})$",
summat_r r"$\theta_{out}$": r"$\sin(\theta_{out})$"})
= summat_r.assign_coords({r"$\sin(\theta_{in})$": np.sin(summat_r.coords[r"$\sin(\theta_{in})$"]).data,
summat_r r"$\sin(\theta_{out})$": np.sin(summat_r.coords[r"$\sin(\theta_{out})$"]).data})
= sns.cubehelix_palette(256, start=0.5, rot=-0.9)
palhf
palhf.reverse()= mpl.colors.ListedColormap(palhf)
seamap
= plt.figure()
fig = plt.subplot(111)
ax = summat_r.plot.imshow(ax=ax, cmap=seamap, vmax=0.3)
ax plt.show()
Questions
- If you can add only one of the textures (pyramids or a grating), which one is better? Why?
- Why do the structures with a front-surface texture have high reflection at long wavelengths? The anti-reflection properties of pyramids (treated with ray optics) are mostly independent of the wavelength, so why does apparent reflection increase near the bandgap of Si?
- Can you explain any of the features present in the angular redistribution matrix of the rear grating surface?