RP Coating – das Software-Werkzeug für das Design optischer Vielschichtstrukturen
Überblick | Anwendung | Modell | Benutzung | Demos | Versionen |
Beispiel: Bragg-Spiegel
Mit dieser Demo-Datei, die ein Formular enthält, können wir auf einfache Weise die Eigenschaften eines Bragg-Spiegels analysieren. Eine solche Struktur enthält eine Anzahl von Schichten mit der optischen Dichte von jeweils einer Viertelwellenlänge.
Übrigens ist der verwendete Skript-Code für die Definition dieser Struktur ziemlich einfach:
beam from superstrate substrate: (material_s$) for j := 1 to N_Bragg do begin * (material1$), l/4 at l_Bragg * (material2$), l/4 at l_Bragg end superstrate: air
Wenn wir die Berechnug ausführen, erhalten wir als Erstes das folgende Diagramm:
Ein zweites Diagramm ist ein Farbdiagramm, welches die Reflektivitätsspektren für einen variablen Einfallswinkel mit p-Polarisation zeigt:
Hier ist der Skript-Code für dieses Diagramm:
diagram 2: "Reflectivity for Different Angles of Incidence" "(for p polarization)" x: 600, 1400 "wavelength (nm)", @x y: -90, +90 "angle of incidence (°)", @y frame hx hy cp: color_I(R_p(x, y * deg))
Das nächste Diagramm zeigt, wie die optische Feldintensität innerhalb der Spiegelstruktur variiert:
Als Nächstes erzeugen wir ein weiteres Farbdiagramm für das Eindringen der optischen Intensität bei verschiedenen Wellenlängen. Für eine bessere Orientierung zeigen wir auch die Grenzflächen zwischen den Schichten an:
diagram 6: "Field Penetration" [if theta <> 0 then (pol$ + " polarization, " + str(theta_deg:"°")) else "normal incidence"] x: lambda_min, lambda_max "wavelength (nm)", @x y: -500, get_d(0) + 1000 "depth in the mirror structure (nm)", @y frame ! begin var x1, x2; x1 := CS_x2 + 0.02 * ((CS_x2 - CS_x1)); x2 := CS_x2 + 0.04 * ((CS_x2 - CS_x1)); for y := CS_y1 to CS_y2 step ((CS_y2 - CS_y1)) / 500 do begin setcolor(color_I((y - CS_y1) / ((CS_y2 - CS_y1)))); line(x1 + i * y, x2 + i * y); end; setcolor(black); end ! set_dir(1) cp: color_I((if pol$ = "s" then T_s(x, theta) else T_p(x, theta); E2(y) / 4)) { color plot } ; Show the layer boundaries: ! begin line(CS_x1, CS_x2); { zero line } line(CS_x1 + i * d_tot, CS_x2 + i * d_tot); { other boundary } setcolor(lightgray); for j := 2 to nolayers() do line(CS_x1 + i * get_z(j), CS_x2 + i * get_z(j)) end "substrate", 150, (-200)c "superstrate", 150, (d_tot + 200)c
Schließlich möchten wir sehen, wie sich das Reflektivitätsprofil während des Wachstums der Struktur entwickelt. Dies benötigt ein wenig Skriptprogrammierung: Wir müssen die ursprünglichen Schichtdicken speichern und sie dann während des Plots variieren:
diagram 7: "Development of Reflectivity During Fabrication" "for normal incidence" x: lambda_min, lambda_max "wavelength (nm)", @x, color = labelgray y: 0, get_d(0) "thickness (nm)", @y, color = labelgray frame ; Save thickness values in an array: N := nolayers() defarray d[1, N] calc for j := 1 to N do d[j] := get_d(j) set_d_g(d) := { set the layers for growth up to a total thickness d } begin global N, d[]; var d_tot; d_tot := 0; for j := 1 to N do begin var d_j; d_j := minr(d[j], d - d_tot); { thickness of the layer } set_d(j, d_j); inc(d_tot, d_j); end; end d_l := -1 { last d value set } R_g(l, d) := { reflectivity for a total growth thickness d } begin global d_l; if d <> d_l then begin set_d_g(d); d_l := d; end; R(l); end cp: color_I(R_g(x, y)) ; Indicate layer boundaries: f: get_z(j), color = gray, style = dashed, for j := 2 to N
Wenn erst die ersten beiden Schichten gewachsen sind, erhalten wir eine schwache und breitbandige Reflexion. Weitere Schichtpaare erhöhen die Reflektivität, aber nur in einer begrenzten Bandbreite.
Sie sehen, dass man mit ein paar Zeilen Skriptcode alle Arten von Diagrammen erzeugen kann – nicht nur solche, die der Entwickler vorgesehen hat. Natürlich können Sie den technischen Support einsetzen, wenn Sie Hilfe bei der Erstellung neuer Arten von Diagrammen benötigen.
Wie wurde das Formular erzeugt?
Hier sehen Sie den Anfang des Codes (im Skript), welcher das Formular definiert:
Custom form: -------------------------------------------------------------- $font: "Arial", bold, size = 20 Bragg Mirror $font: "Courier New", size = 11, space = 2.1 $def pwidth := 505 $box "Inputs", size = (pwidth, 0): Substrate material: ################## $input (combobox: "BK7", "CaF2", "diamond", "fsilica", "sapphire_o", "sapphire_e", "SF5", "SF8", "SF10", "SF11", "ZERODUR") material_s$ Material 1: ################## $input (combobox: "SiO2", "TiO2", "HfO2", "ZrO2") material1$ Material 2: ################## $input (combobox: "SiO2", "TiO2", "HfO2", "ZrO2") material2$ Bragg wavelength: ############# $input l_Bragg_m:d6:"(n)m", min = 100e-9, max = 10e-6 Number of layer pairs: ############# $input N_Bragg:f0, min = 0, max = 1000
Dies wird also gebraucht, um die Überschrift und die ersten Eingabefelder zu definieren.