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.