LCML - Ring resonator with thermal tuning | lcml_ring_tunable_1550



This thermally tunable ring resonator model is built based on component-level simulation results. Note that this model is designed for demonstration purposes. Several component-level simulations will be launched from INTERCONNECT through Lumerical automation API in order to demonstrate the complete workflow. All the associated files can be found in the LCML_resource folder in the lcml_ring_tunable_1550 sub-folder from the download page.

Example Test File

thermally_tunable_ring_resonator.icp (788.7 KB)

User Guide

lcml_ring_tunable_1550 (rr)

LCML: ring resonator with thermal control.


Name Type
ele_t1 Electrical Signal
ele_t2 Electrical Signal
opt_in Optical Signal
opt_thru Optical Signal
opt_drop Optical Signal
opt_add Optical Signal


Name Default value Default unit Range
process foundry_A -- [foundry_A, foundry_B]


Name Default value Default unit Range
radius 10 um*
*std. unit is m
[5, 100]
wg_width 0.5 um*
*std. unit is m
[0.4, 0.8]
coupling_gap 0.2 um*
*std. unit is m
[0, 0.5]
coupling_length 0 um*
*std. unit is m
[0, 20]
hangover_length 20 um*
*std. unit is m
[5, 100]

Model Development

The subcircuit of the thermally tunable ring resonator is shown below:

Element Representation
WG_Hangover_X (1-4) Straight waveguides between ports and coupling regions
WG_Passive_X (1-2) Bend waveguides in the ring
Coupler_X (1-2) Directional coupler
Thermal_Tuning_X (1-2) Thermal tuning

The input parameters of the ring are listed in the table below:

Name Kind Type Value (default) Unit Category
process NonQuantity ComboChoice foundry_A Process
radius Distance Number 10 μm Ring
wg_width Distance Number 0.5 μm Ring
coupling_gap Distance Number 0.2 μm Ring
coupling_length Distance Number 0 μm Ring
hangover_length Distance Number 20 μm Ring

Description of the input parameters

The “process” parameter is created to describe the information regarding the fabrication process, e.g., silicon thickness, etch depth, doping, etc. In this example, the element supports two foundry processes, namely foundry_A and foundry_B, and their information are summarized in the table below. Internally, these information are stored in two script files: foundry_A.lsf and foundry_B.lsf in the LCML Destination folder (…/lib_data/ring_thermal/). Users can edit these files to define the specific foundry process that they will use.

Parameter foundry_A foundry_B
Silicon full height 220 nm 250 nm
Silicon slab height 70 nm 90 nm
N doping concentration 5e+17 cm^-3 5e+17 cm^-3
P doping concentration 7e+17 cm^-3 7e+17 cm^-3

“radius”: radius of the ring
“wg_width”: width of the rib waveguide.
“coupling_gap”: gap between the straight waveguide and the ring
“coupling_length”: length of the coupling waveguides in parallel
“hangover_length”: distance between the port and the coupling region

Model details and parameter extraction

This ring element is a PCell. As the ring property changes, the model will automatically detect if the required data exist. If not, the model will:

  • Launch the component simulation tools
  • Build the simulation based on template files
  • Run the simulation
  • Extract the required information
  • Update the internal element properties

The complete workflow is controlled by scripts. Specifically, we use the [Lumerical automation API] ( to drive the component tools from INTERCONNECT. The top-level setup scripts of the compound element are shown below.

# Process definition
process_filename = %local path% + '/lib_data/ring_thermal/' + process + '.lsf';

# Hangover waveguide
lsf_filename = %local path% + '/lib_data/ring_thermal/rib_waveguide_passive_straight.lsf';
set("frequency", f);
set("effective index 1", neff);
set("loss 1", loss);
set("group index 1", ng);
set("dispersion 1", disp);

# Couplers
lsf_filename = %local path% + '/lib_data/ring_thermal/coupler.lsf';
set("load from file", 1);
set("s parameters filename", s_filename);

# Passive waveguides (bend) in the ring
lsf_filename = %local path% + '/lib_data/ring_thermal/rib_waveguide_passive_bend.lsf';
set("frequency", f);
set("effective index 1", neff);
set("loss 1", loss);
set("group index 1", ng);
set("dispersion 1", disp);

# Thermal tuning

In this particular example, the template project files and script files are located in the LCML installation folder (…/lib/ring_thermal). Two sets of pre-existing data are also provided for the model:

  • process=foundry_A, wg_width=0.5 um, radius=5 um, coupler_gap=0.2 um, coupler_length=0 (default)
  • process=foundry_B, wg_width=0.4 um, radius=7.5 um, coupler_gap=0.1 um, coupler_length=2 um

The straight and bend waveguides are based on the primitive Straight Waveguide model. Check the project file rib_waveguide.lms and associated script files rib_waveguide_passive_bend.lsf and rib_waveguide_passive_straight.lsf in MODE Solutions.

Directional couplers

The directional couplers are based on the primitive Optical N port S-Parameter element. Check the project file coupler.fsp and associated script files coupler.lsf, write_s_parameters.lsf, and scale_s_parameters.lsf in FDTD Solutions. Note that only the amplitudes of the S parameters are extracted to represent the coupling coefficient. The optical delay of the directional coupler are represented by the waveguide elements.

Thermal tuning

The thermal tuning is described by the Optical Modulator Measured elements, using the same effective index table as in the Thermally tunable waveguide element.


Download the simulation file thermally_tunable_ring_resonator.icp from the top of this page. In this simulation file, the thermally tunable ring resonator is measured by an Optical Network Analyzer (ONA). The figure below plots the through port spectra at driving voltage of 0 V and 1.2 V, respectively.

Change some of the ring properties. The element will automatically launch several simulations in MODE Solutions and FDTD Solutions.

Optimization - Large ring
Transmission higher than 1
Optimization - Large ring
Ring Resonator Coating Problem
Lumerical Compact Model Library (LCML)
Best approach for simulating large ring resonators

Hi @gwang,
Thanks for sharing this.
Would you please elaborate more on the purpose of the process definition script block?

And what are the main differences between this LCML example and the steps of building a CML component I used here?
Steps of Creating a Compact model for a Taper Waveguide

Are there some updates making the steps more systematic?


Hi @aya_zaki,

Thanks for asking, they are very good questions :slight_smile:

The process script contains the foundry/fabrication process specifications, e.g. the waveguide width and height, so that different process results in different component structure hence different performance of the model. If one set of process requires new structures and simulations, the corresponding component-level simulation tools (FDTD, MODE Solutions and/or DEVICE) will be launched, then the simulation results (saved as data files) will be re-load to this model.

Your approach is very similar to what we had in this model (Nice work!!!) except that this model adopt the Lumerical automation API to facilitate and ease the tools integration process. You may have your model developed before we launch this automation API feature. For more information, please check out the following example:

Mach-Zehnder modulator API automation

I hope this helps :slight_smile: I’d love to discuss more with you if you have further questions.


Hi @gwang ,
I see. Thanks, To gain full advantage of the API automation, I will try to develop my model again using it. In fact, though my model works fine, the scripts are long and a bit messy so I prefer to find a new way to do it.

So, now as I was exploring this thermal tuned ring resonator, I have the following questions:

  1. when expanding the model, I am not sure why you used FORK_2 and MIX_1 below.

  2. I get the message the (process_filename.lsf) is not found. Are there any files to download first?
    However, the simulation works fine. Probably, using some default values. I am not quite sure.
    Is this related to installing the LCML in lumerical downloads:



Oh, I figured out what is wrong with the 2nd question.
All the related script files are looked up in this directory:
%local path% + '/lib_data/ring_thermal/
The local path is the same path where the .icp file is saved. I wonder if there is anyway to reset it.

However, the good news is that when you download the LCML from the website and install it, everything works fine and the scripts are found.

So, here is how it works:

  1. Download the LCML from here:
  2. Open Interconnect, right click Design Kits, choose Install
  3. In the window below, the compact model library package is the .cml file, you have just downloaded from Lumerical website. The Destination folder is the place where the elementls (.ice files) and their related simulation files and data (.lsf/ .ldf/ .dat/etc.) are saved.

** If you have a look on the destination folder, here is what you will find.

  1. Back to INTERCONNECT, you should now have a library of different elements there called LCML. One of those elements is our lcml_ring_tunable. Drag and drop it to the Test bench.

The script works fine for this element dragged from the library because for any library element the %local path% is by default the destination path of the library. You can now play around with the process changing it from A to B or you can vary the dimensions as you wish. The necessary simulations will be run automatically using the API.
You wil notice that you cannot expand it unlike the example uploaded here by @gwang .


Hi @aya_zaki,

Thank you for this detailed installation steps!!! I made a short video showing how to install the LCML, please check it out in the following post, (expand the “Installation instructions” section):


Yes, I didn’t see this. Great work!

Still I can’t figure the first point regarding using the fork and the mixer above.
Thanks :slight_smile:


Hi @aya_zaki,

Sorry that I overlooked your first question… The Fork and the Mix are just to convert the voltage to power and then the 0.02 gain is the resistance. We do this to match up the table we have in the modulator, which is neff changing versus power changing.

I hope this could help. Let me know if you have further questions :slight_smile:

Questions about ring modulator model