RP Photonics logo
RP Photonics
Modeling & Design Software
Technical consulting services on lasers, nonlinear optics, fiber optics etc.
Profit from the knowledge and experience of a top expert!
Powerful simulation and design software.
Make computer models in order to get a comprehensive understanding of your devices!
Success comes from understanding – be it in science or in industrial development.
The famous Encyclopedia of Laser Physics and Technology – available online for free!
The ideal place for finding suppliers for many photonics products.
Advertisers: Make sure to have your products displayed here!
powerful tools for efficient laser development and laser science
This page gives you an overview on our software products.
RP Fiber Calculator is a convenient tool for calculations on optical fibers.
RP Fiber Power is an extremely flexible tool for designing and optimizing fiber devices.
RP Resonator is a particularly flexible tool for laser resonator design.
RP ProPulse can simulate the pulse evolution e.g. in mode-locked lasers and sync-pumped OPOs.
RP Coating is a particularly flexible design tool for dielectric multilayer systems.
RP Q-switch can simulate the power evolution in Q-switched lasers.
Most of our software products support a powerful script language, which gives you an extraordinary degree of flexibility.
Here you learn about software license conditions, updates and upgrades, etc.
Competent technical support is a key quality associated with software from RP Photonics.
RP Photonics has distributors in various countries.
The RP Photonics Software News keep you updated on our developments and give the users additional interesting hints.
Here you can make inquiries e.g. concerning technical details, prices and quotations.
en | de

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
  * (material1$), l/4 at l_Bragg
  * (material2$), l/4 at l_Bragg
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:"°") + ")")
  "(for normal incidence)"]
x: lambda_min, lambda_max
"wavelength (nm)", @x
y: -90, +90
"angle of incidence (°)", @y
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:"°"))
  "normal incidence"]
x: lambda_min, lambda_max
"wavelength (nm)", @x
y: -500, get_d(0) + 1000
"depth in the mirror structure (nm)", @y
! 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
      setcolor(color_I((y - CS_y1) / ((CS_y2 - CS_y1))));
      line(x1 + i * y, x2 + i * y);
! set_dir(1)
cp: color_I((if pol$ = "s" then
    T_s(x, theta)
    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 }
    for j := 2 to nolayers() do
      line(CS_x1 + i * get_z(j), CS_x2 + i * get_z(j))
"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
; Save thickness values in an array:
N := nolayers()
defarray d[1, N]
  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 }
    global N, d[];
    var d_tot;
    d_tot := 0;
    for j := 1 to N do
      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);
d_l := -1 { last d value set }
R_g(l, d) := { reflectivity for a total growth thickness d }
    global d_l;
    if d <> d_l then
      d_l := d;
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.