RP Photonics

Software … powerful tools for your research & development!

deutsch

RP Coating – Advanced Software for
Designing Optical Multilayer Structures

Demo File: Bragg Mirror

With this demo file, containing a custom form, we can conveniently analyze the properties of a Bragg mirror structure, containing some number of layer pairs with quarter-wave thickness.

form for Bragg mirror analysis

By the way, the underlying script code for defining that structure is rather simple:

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

When executing the calculation, we get the following as the first graphical diagram:

reflectivity profile of a Bragg mirror

The next diagram is a color diagram, showing how the reflectivity spectra vary with the angle of incidence for p polarization:

reflectivity profile of a Bragg mirror

Here is the script code producing that diagram:

diagram 2:
 
"Reflectivity for Different Angles of Incidence"
 
[if theta <> 0 then
  ("(for " + pol$ + " polarization, " + str(theta_deg:"°") + ")")
 else
  "(for normal incidence)"]
 
x: lambda_min, lambda_max
"wavelength (nm)", @x
y: -90, +90
"angle of incidence (°)", @y
frame
hx
hy
 
if pol$ = "p" then
  cp: color_I(R_p(x, y * deg))
if pol$ = "s" then
  cp: color_I(R_s(x, y * deg))

Additional diagrams, not shown here, contain plots of the group delay and the group delay dispersion as functions of the wavelength.

The next diagram shows how the optical field intensity varies within the mirror structure:

optical intensities within a Bragg mirror

Next we make a color diagram showing the field penetration at different wavelengths. For better orientation, we also show the layer boundaries:

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

Finally, we want to see how the reflectivity profile evolves during growth of the structure. This requires a little script programming: we need to save the original thickness values and vary them during the plot:

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

When only the first two layers are grown (bottom part), we get a weak but broadband reflection. Further layers increase the reflectivity, but only in a limited bandwidth.

You can see that with a few lines of script code one can create all sorts of diagrams – not only a few types envisaged by the software developer. Of course, you can use the technical support if you need some hints on how to make a new type of diagram.

How the Custom Form is Made

In the following, you see the beginning of the code (contained in the script) which defines the custom form:

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

This is what is needed to define the heading and the first few input fields.

arrow