LCML - Strip waveguide PCell | lcml_wg_strip_1550_pcell


This PCell strip waveguide model is built by using the primitive Straight Waveguide element and the simulation data that is generated from MODE Solutions.

Example Test File

strip_waveguide_pcell.icp (185.1 KB)

User Guide

lcml_wg_strip_1550_pcell (wgs)

LCML: strip waveguide PCell.


Name Type
opt_1 Optical Signal
opt_2 Optical Signal


Name Default value Default unit Range
wg_length 10 um [0, 10000]
wg_width 0.5 um [0.3, 3]

Model Development

MODE Solutions

1.In MODE Solutions, add two rectangles and set their names to “Si” and “Oxide”, then set their geometry and properties according to the following table.

Si Oxide
x (μm) 0 0
x span (μm) 0.5 8
y (μm) 0 0
y span (μm) 0.22 3
z (μm) 0 0
z span (μm) 0.6 0.6
Material Si (Silicon) - Palik SiO2 (Glass) - Palik

2.Add an FDE solver of “2D Z normal” with the follow geometry and set all of the boundaries to be “metal” boundary condition.

3.Open the script file strip_waveguide_pcell.lsf in this MODE project file and run. The script file can be found in the LCML_resource folder in the download page.

4.The script commands will sweep through the width of the waveguide and record the corresponding detailed simulation results to a .ldf file.


1.In INTERCONNECT, create a compound element.

2.Add two bidirectional optical ports to the compound element, and add two new properties “wg_length” and “wg_width” both with “Type” of “Distance” and “Kind” of “Number”. Set the “model” of the compound element to be “lcml_wg_strip_1550_pcell” and the “prefix” of it to be “wgs”.

3.Expand the compound element, drag and drop a Straight Waveguide element to it and connect the corresponding ports and relays.

4.Copy the following script commands to the setup script of the compound element.


# load data from the ldf file
filename = %local path%+"/lib_data/waveguide_strip/strip_waveguide_pcell.ldf";
NN = length(WG_WIDTH);

neff_TE = interp(NEFF(1:NN,1), WG_WIDTH, wg_width);
neff_TM = interp(NEFF(1:NN,2), WG_WIDTH, wg_width);
ng_TE = interp(NG(1:NN,1), WG_WIDTH, wg_width);
ng_TM = interp(NG(1:NN,2), WG_WIDTH, wg_width);
disp_TE = interp(DISP(1:NN,1), WG_WIDTH, wg_width);
disp_TM = interp(DISP(1:NN,2), WG_WIDTH, wg_width);

# The waveguide loss values are only valid for 0.5 um and 3 um wide waveguides (i.e., the only two waveguides that we have experimentally measured).
# For the loss of other waveguide widths, we simply take linear interpolations based on the two experimental data points.
temp_width = [0.5e-6, 3e-6];
measured_loss_TE = [300, 10];
measured_loss_TM = [200, 10];
loss_TE = interp(measured_loss_TE, temp_width, wg_width);
loss_TM = interp(measured_loss_TM, temp_width, wg_width);

setnamed('WGD_1','frequency', central_f);
setnamed('WGD_1','orthogonal identifier 1', 1);
setnamed('WGD_1','label 1', 'TE');
setnamed('WGD_1','loss 1', loss_TE);
setnamed('WGD_1','effective index 1',neff_TE);
setnamed('WGD_1','group index 1',ng_TE);
setnamed('WGD_1','dispersion 1',disp_TE);
setnamed('WGD_1','orthogonal identifier 2', 2);
setnamed('WGD_1','label 2', 'TM');
setnamed('WGD_1','loss 2', loss_TM); 
setnamed('WGD_1','effective index 2',neff_TM);
setnamed('WGD_1','group index 2',ng_TM);
setnamed('WGD_1','dispersion 2',disp_TM);

The group index and effective index versus waveguide width plots are shown below.

5.Set icon for the compound element.


Download the simulation file strip_waveguide_pcell.icp from the top of this page. In this simulation file, the compact model of the PCell strip waveguide is connected to and measured by an Optical Network Analyzer (ONA). Click on the “run” button and the ONA will be populated with measurement data. To view the simulation results, user can right click on the results and select “Visualize”.

Getting Started
Lumerical Compact Model Library (LCML)
LCML - Strip waveguide bend | lcml_bend_strip_1550

I have a question about how to set the strip waveguide when multiple wavelengths need to be considered,
for example in a cascaded MZI filter. The effective index and other parameters are wavelength dependent. I don’t know how to change this model. Could you please help me solve this problem?


Hi @lishifeng,

The model has wavelength dependency. The effective index and group index are defined for the specific frequency, and the wavelength dependency is based on the following equation:

and the model will use the calculated effective index and group index for the corresponding frequency automatically.


If the working wavelength range is very large, for example 1260-1340nm, is this model still accurate?

Besides, can we build a compact strip waveguide model which is wavelength dependent?


Hi @lishifeng,

The accuracy of the model will depend on your MODE simulation. If you want to simulate the model in a large wavelength range, you should start with a MODE simulation with a large wavelength range and take the values (neff, ng and so on) to the model in INTERCONNECT. But one thing to take a note is that, the Straight Waveguide model in INTERCONNECT does linear interpolation on the frequency dependency, so if the wavelength range is too large and the values changing in regard to frequency changing is not linear any more, the model won’t be accurate until that point. In this case, I will recommend you to use the MODE Waveguide element in INTERCONNECT to build the model. The MODE Waveguide element can directly load in the simulation result from MODE Solutions and the wavelength dependency will always be accurate as long as there is enough frequency points. Here is the model:


Thank you very much. I will try as you suggested.