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: Dual-wavelength Anti-reflection Coating

Here, we design an anti-reflection coating for two different wavelengths: 1064 nm and 532 nm. As we have no idea for an initial design, we only specify minimum and maximum values for the layer thickness:

d_units: nm
l_units: nm
beam from superstrate
substrate: BK7
for j := 1 to 3 do
* TiO2, d_min = 10, d_max = l / 2 at 1000
* SiO2, d_min = 10, d_max = l / 2 at 1000
superstrate: air

Then we define a figure-of-merit function describing the design goal:

FOM() := 1e6 * sum(d := -6 to +6 step 2, R(532 + d)^2 + R(1064 + d)^2)

That function would return 0 if the structure has zero reflectivity for some range of wavelengths around 1064 nm and 532 nm. Any unwanted reflectivities lead to positive “penalties”.

We can then automatically optimize the coating, using the Monte-Carlo technique:

optimize coating for minimum of FOM(),
  ytol = 1e-4, mctrials = 10000, nobest = 50

Here, 10 000 randomly chosen designs are tested, and the 50 best results are further optimized. The very best end result is finally chosen. The larger number of trials is necessary, because in most cases the local optimization leads to a not satisfactory local optimum. On an ordinary PC, this whole procedure takes only about half a minute.

Next, we make a diagram showing the reflectivity profile. The obtained layer thickness values of our thin-film design are also displayed:

diagram 1:
"Reflectivity Profile"
["Merit value: ", FOM():d3]
x: 400, 1200
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
legpos 600, 200
f: 100 * R(x), color = red, width = 3
; display the layers:
["Layer ", j, ": ", get_d(j):f1:"nm":8r],
  650, (CS_y2 - 0.06 * (CS_y2 - CS_y1) * j), font = Courier,
  for j := 1 to nolayers()

When executing the script, we get the following:

reflectivity profile of a dual-wavelength anti-reflection coating

A second diagram is made for checking the fabrication tolerances of the obtained design. We modify the layer thickness values by adding random deviations with a certain standard deviation and plot the reflectivity spectra for all these versions:

diagram 2:
"Test for Fabrication Tolerance"
stddev := 1e-2
["Standard deviation of layer thickness values: ", 100 * stddev:d3:np:"%"]
; coordinate system:
x: 400, 1200
"wavelength (nm)", @x
y: 0, 10
"reflectivity (%)", @y
; Save layer data
defarray d[1, nolayers()]
calc for j := 1 to nolayers() do d[j] := get_d(j)
N := 100  { number of trials }
! FOM_sum := 0
; Plot reflectivity for randomly modified designs:
f: 100 * R(x),
  color = red,
      for j := 1 to nolayers() do
        set_d(j, d[j] * (1 + rnd(-stddev)));  { randomly modified layers }
      inc(FOM_sum, FOM());
  for t := 1 to N
! FOM_av := FOM_sum / N
["Average FOM: ", FOM_av:d3]
! for j := 1 to nolayers() do set_d(j, d[j])
  { restore the original design }
test for fabrication tolerances of a dielectric coating

There are other designs which have a similar performance when fabricated exactly, but are much more sensitive to fabrication errors. Therefore, it is essential to do such tests before spending money and time on fabricating a coating.

It would not be difficult, of course, to test for the influences of systematic errors as well.