Software … leistungsfähige Tools für Ihre Forschung & Entwicklung!

RP Coating – das Software-Werkzeug für das Design optischer Vielschichtstrukturen

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.

form for Bragg mirror analysis

Ü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:

reflectivity profile of a Bragg mirror

Ein zweites Diagramm ist ein Farbdiagramm, welches die Reflektivitätsspektren für einen variablen Einfallswinkel mit p-Polarisation zeigt:

reflectivity profile of a Bragg mirror

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:

optical intensities within a Bragg mirror

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
optical intensities within a Bragg mirror

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
reflectivity evolution of a Bragg mirror during growth

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.