TAGGED: 1d, 2D, Dielectric, dielectric-waveguide, FDE, lumerical, optimisation, sweep, waveguide
-
-
January 25, 2024 at 8:23 pmMarton AmbrusSubscriber
Hi Everyone,
I'm a university undergraduate student trying to do my final year project. I've been given the wonderful task to design a dielectric slab waveguide made up of 5 layers, but first, just so I can practice I want to do a 3 layer slab waveguide (cladding-core-cladding) in Lumeical.Â
I've tried to ask my supervisor to help me find and understand numerical methods to find appropriate thicknesses for the cladding and core of the waveguide, but he really wants me to use the sweep and optimisation function in Lumerical. I tried to ask him how I should do it in Lumerical, but I just got "I'm not an expert in Lumerical".. even though he used it. So I hope, someone here will be able to help me.
What I would need to do in Lumerical, is to find appropriate thicknesses for the core and cladding so only the first (or a very few number of) TE/TM mode is let through the waveguide.
My main problems/concerns:
I managed to make the structure of the 3 layered dielectric waveguide in lumerical with the appropriate refractive indexes and some not so random thicknesses (from a research paper). But when I try to use the sweep function of Lumerical... I tell Lumerical that sweep graph should show the effective indexes against the core thickness which increases from 0.1um to 5um let's say... and when I press run on the sweep and I see the structure change, when I see the core thickness change and it goes from 0.1um to 5um, the structure has gaps between the core and cladding when the sweep is at the lower thicknesses and when it reaches higher thicknesses, the core goes into the cladding above and below it... essentially blending together.
I haven't managed to figure out if this is how Lumerical sweeps should work, or if I missed out a crucial step that would keep the structure together while the sweep changes the thicknesses.
Could I ask anyone out there, to give me a somewhat detailed description on how I should setup my dielectric sturcture and the sweep function so I could optimise the thickness of the core and claddin to only support one mode? I would really appreciate it!
Kind Regards,
Marton
-
January 26, 2024 at 7:09 pmAmrita PatiAnsys Employee
Hi Marton,
I understand your concern, while making these structures, we have to make sure that if one if the layers is shifted all the other layers will be automatically adjusted. This is not done automatically in Lumerical. Typically, we set up the structures using script to have that adjustment for every iteration of the sweep. I have some sample scripts that I can share but before that I would like to ask a couple of questions to see if there is a simpler approach. Since you are new to Lumerical, you might not want to start with scripting right away.
Here are a couple of questions: 1. For your inital simulation, are you just sweeping the thickness of the core, no other parameters? 2. Are the cladding above and below the core same materials?
If the answer to the two questions is yes, then we can take advantage of the "mesh order" of the core and the cladding, to avoid having to use scripting.Â
Â
Regards,
Amrita -
January 26, 2024 at 7:14 pmMarton AmbrusSubscriber
Hi Amrita,
Yes, I'm only altering the thickness of the core, but if it changing the cladding as well would provide better result, I'm more than happy to take suggestions. And yes again, the cladding material above and below are the same, they have the same refractive indeces.
kind regards,
Marton
-
January 26, 2024 at 7:30 pmMarton AmbrusSubscriber
If you could show me an example of a script that shifts/adjusts the layers, I would appreciate that as well.Â
and again, Thank You for your help! -
January 26, 2024 at 7:33 pmAmrita PatiAnsys Employee
Hi Marton,Â
Thanks for sharing additional information! Starting with the thickness of the core sounds like a good plan to me. The easiest approach to start with here would be to just have one structure, which will be the core. Then you can have a large simulation region to make sure that it would cover the core and still have a few um from the boundaries. For example, let's say for the highest value of thickess the core extends from -2.5 um to 2.5 um. You can make the FDE region to extend from -5 um to 5 um to begin with. I will also ask you to use a mesh override region over the core to make sure that it is properly resolved.Â
You can define the mesh override based on the core, so that even if the core dimensions change in the sweep, the mesh will always cover the core. For example, in the screenshot shown below the structure "WG" is my core:
For the cladding, I would recommend you not to add any geometry but to just use it's index as the background index of the simulation region. This way you won't have to worry about the layers overlapping with each other.Â
For this, you can go to the General Tab of the solver, and change background material to the cladding index as shown below:
Now you won't have to adjust any other thicknesses if you vary the core thickness in the sweep. Because the background index get the lowest priority among all the structures. But what you will effectively have is a core-cladding region, the cladding being the entire background.Â
But if the cladding has a finite thickness on both sides then we will have to rely on scripting, we are not allowed to share files on this platform, so I won't be able to share an entire simulation file, but I can copy and a paste some script. Let me find the script and share here.
Regards,
Amrita -
January 26, 2024 at 7:48 pmMarton AmbrusSubscriber
Thank you for the quick reply! Yes, I think I would need to try the scripting method as well.. because truly the waveguide that I have to simulate has layers (cladding-core-cladding-core-cladding)... It's just my idea was that it would be easier to simulate 3 layers of the 5, and when I'm happy with the design just copy a core-cladding layer below the 3 layers, essentially making the 5 layers. The method you described above seems very good for finding just the core thickness, but unfortunately I need to calculate with the claddings in the structure.
let me attach the research paper that has the design I'm trying to simulate, so you can see better what I'm trying to describe.
-
January 26, 2024 at 7:49 pm
-
January 29, 2024 at 9:38 pmAmrita PatiAnsys Employee
Hi Marton,
Thanks for sharing additional details! The script that I have uses a structure gropu
-
January 29, 2024 at 9:41 pmMarton AmbrusSubscriber
Dear Amrita,
Could you show me an example script where a similar structure is present?
Â
-
January 29, 2024 at 9:55 pmAmrita PatiAnsys Employee
Hi Marton,
My response was cut off:
Thanks for sharing additional details! The script that I have uses a structure group to create 5 layers. Since I can not share the file itself, I will share screenshot and the code. First you can add a structure group to your simulation:
Then you can edit the structure group, and go to the "Properties" tab of the structure group, and add 5 parameters which will be the thickness of each layer as shown below. Please note that the "Type" and the "Unit" of the paramters are accurate. You can change the thickness of each layers depending upon your requirements, I have used alternating layers of thickess 0.1 um and 0.05 um randomly:
Then you can copy the code below and paste it in the "Script" tab of Structure Group.
deleteall;
x_span = 1e-06;
z_span = 1e-06;
d = [d1,d2,d3,d4,d5];
y = matrix(length(d),1);
y(1) = 0e-06;
addrect;
set("x span",x_span);
set("z span",z_span);
set("y",y(1));
set("y span",d(1));
set("name","layer_"+num2str(1));
for (i = 2:1:length(d)){
addrect;
y(i) = y(i-1)+(d(i-1)+d(i))/2;
set("x span",x_span);
set("z span",z_span);
set("y",y(i));
set("y span",d(i));
set("name","layer_"+num2str(i));
}
You can change the code itself to suit you requirements. Note that I haven't changed the default material, you can do it from the Material properties of each rectangle. If you want to change the thickness of each layer you can do that from the "Properties" tab (instead of individual rectangle objects). You will see that if you change the thickness of any layer, the other layers are automatically shifted.ÂPlease let me know if you have any questions or face any issues.
Regards,
Amrita -
January 29, 2024 at 10:00 pmMarton AmbrusSubscriber
I can't thank you enough!
In weeks you are the first constructive help I received.
Unfortunately I can only run lumerical on university campus, as I only have license access there... but tomorrow I shall try to simulate the structure I've showed above, and I will write back if I run into further issues.
Thank You again!
-
January 29, 2024 at 10:07 pmAmrita PatiAnsys Employee
You are welcome, Marton! I am happy to help. Sure, let me know tomorrow. We can also discuss the next steps (sweeps/optimization) once the structure is setup properly.
Regards,
Amrita -
January 30, 2024 at 3:57 pmMarton AmbrusSubscriber
I have set up the simulation, and my question would be:
How do I select individual layers that the script made and change their refractive indeces?
-
January 30, 2024 at 5:28 pmMarton AmbrusSubscriber
Â
I managed to figure out how to change the indexes of each layer within the script, this is how I changed the script you gave me:
deleteall;
x_span = 4e-06;
z_span = 7e-06;
mid_thickness = 3e-06;
d = [Cladding1,Core1,Cladding2,Core2,Cladding3];
cladding_index=1.455067;
core_index=2.682648;
y = matrix(length(d),1);
y(1) = 0e-06;
addrect;
set("x span",x_span);
set("z span",z_span);
set("y",y(1));
set("y span",d(1));
set("name","layer_"+num2str(1));
select("layer_1");
set("index", cladding_index);
for (i = 2:1:length(d)){
addrect;
y(i) = y(i-1)+(d(i-1)+d(i))/2;
set("x span",x_span);
set("z span",z_span);
set("y",y(i));
set("y span",d(i));
set("name","layer_"+num2str(i));
}
select("layer_"+num2str(2));
set("index",core_index);
select("layer_"+num2str(4));
set("index",core_index);
select("layer_"+num2str(3));
set("index",cladding_index);
select("layer_"+num2str(5));
set("index",cladding_index); -
January 30, 2024 at 5:34 pmAmrita PatiAnsys Employee
Hi Marton,
That's great! Let me know if you have any other questions.
Regards,
Amrita -
January 30, 2024 at 5:41 pmMarton AmbrusSubscriber
Dear Amrita,
I would be interested in how the sweep/optimisation can be set up, now that we use this scripting method of simulation.
-
January 30, 2024 at 5:52 pmAmrita PatiAnsys Employee
 We can do a sweep using the Sweep Utility:
Once you edit the sweep to set the parameters for sweep. I would recommend you to have a look at this article to set up the sweep:Â Parameter sweep utility.
In this case the parameters will be the thickness of the layers, whichever layer/layers you would want to sweep. For example, if you just want to sweep d3, you can select it as a parameter as shown below:
Then you can set appropriate ranges for each parameter, add the result that will be saved after each sweep, like the effective index etc.
Regards,
Amrita -
January 31, 2024 at 11:12 amMarton AmbrusSubscriber
Dear Amrita,
May I ask how an FDE could be added to the simulation via the script so the FDE adjusts its size as the layers are sweeped?
I've found an example script to add an FDE but that has a fixed size and won't change, which is the following:
addfde; set("solver type",3);
set("x",0);
set("x span",2e-6);
set("y",0);
set("y span",5e-6);
set("z",0); findmodes;Kind Regards,
Marton
-
January 31, 2024 at 6:30 pmAmrita PatiAnsys Employee
Hi Marton,
Good question. Firstly, since you are looking at slab waveguide I believe you are concerned only about the thickess of the layers in one direction (y-direction here). The other two directions can be considered uniform. So, you can use a 1D FDE solver, something like:Â
setnamed("FDE","solver type","1D Y:Z prop");
For automaticaly adjusting the FDE thickness here is what I have done in the past, although it is not very sophisticated, it works. You can go to the model tab:
Then go to "Setup"-->"Script", then you can paste the following script or something similar as shown below:
y_min = getnamed("structure group::layer_1", "y min")-2e-06;
y_max = getnamed("structure group::layer_5", "y max")+2e-06;
setnamed("FDE","x",0);
setnamed("FDE","y min",y_min);
setnamed("FDE","y max",y_max);Â
Here, what the script does is calculates the minimum (y min) of the first layer and (y max) of the 5th layer, subtracts 2 um from y min and adds 2 um to y max. Then makes them the y_min and y_max of the FDE. So, everytime the layer thickess (d1 through d5) change, the y_min and y_max of FDE will change.Â
Â
Regards,
AmritaÂ
-
February 1, 2024 at 2:34 pmMarton AmbrusSubscriber
Dear Amrita,
I'm trying to do the sweep for the layers, and I haven't done it through the script section... although I'm starting to think I should.Â
When I set up the sweep and for example I tell the software to sweep layer 6 from 1um to 3um and plot the results against the first 5 effective index results.. it does the sweep, but the effective index doesn't change, it stay the same value and hence a straight line for 5 different effective indexes. You may see it on the picture. Also, the thickness of the layer that I select doesn't seem to change/increase throughout the sweep.
I would want to see how an increasing layer of water on the waveguide would increase the effective index.
Should I set up the sweep through the script, and if yes, how would I need to do that?Â
Thank You for your reply in advance!Marton
-
February 1, 2024 at 5:27 pmAmrita PatiAnsys Employee
Hi Marton,
I don't feel that these results are because of using/not using script. We used scripts for the last couple of tasks because we couldn't have changed the layers automatically otherwise. But sweep should work fine without any scripting. What are you using as the result of the sweep? The effective index of a specific mode? Would you also be able to share a screenshot of the overall geometry now that it's all set up?
Regards,
Amrita -
February 1, 2024 at 8:46 pmMarton AmbrusSubscriber
I will send a screenshot of the structure tomorrow when I have access to the software.
Until then, the structure is essentially the same as in the example you showed me. The only differences between the example one and my structure, are the thicknesses and refractive indexes of the structure. The thicknesses of each layers are the following: layer1-2.5um,layer2-1um,layer3-3um,layer4-1um,layer5-2.5um. Layer 2 and layer 4 has the refractive index of: 2.683.
layer 1/3/5 has a refractive index of: 1.455.
-
February 6, 2024 at 9:43 amMarton AmbrusSubscriber
Dear Amrita,
I'm terribly sorry, I didn't have time to open Lumerical...
Unfortunately my issue is still there, when I setup a parameter sweep in this case for the guiding cores (Layer 2 and Layer 4), I want to see how the effective index of the waveguide changes if the RI of the cores are changed. The values for the core RI are 1.8873, 2.05383 and 2.68265. I would want to see how "neff" changes if the RI of the cores are changed simulatenously.. so I don't want to have a mismatch in RI between the cores.
This is how the sweep is currently setup:
The structure group:
The Plot I get:
Kind Regards,
Marton
-
February 6, 2024 at 9:59 amMarton AmbrusSubscriber
I found on of my mistakes.. Lumerical actually wants me to name the parameters and results and then it shows more than just one line..
But even if I do name the parameters and results that I'm comparing to... the sweep results are still not correct. When I run the sweep with the given values the "neff" stays the same throughout the simulation.
On the other hand if I change the RI of the cores manually in the scripts, the neff drastically changes when I have lumerical calculate the modes.
-
February 6, 2024 at 5:35 pmAmrita PatiAnsys Employee
Hi Marton,
I think the change in RIs are not being taken to account in the parameter sweep. I will ask you to add two parameters to the strcture group (let's call them index and index2), which will be the RIs of layer_2 and layer_4. Note that their "Type" is "Number". Then in the "Script" tab of the structure group, add the following lines of code:
setnamed("layer_2","index",index1);
setnamed("layer_4","index",index2);Â
Then go to the Parameter sweep and add index1 and index2 as the parameters of the sweep. The screenshots of the three steps are below:
Â
Let me know if this doesn't help.
Â
Regards,
Amrita -
February 6, 2024 at 5:57 pm
-
February 6, 2024 at 6:02 pmAmrita PatiAnsys Employee
Hi Marton,
You are welcome! I am glad it worked.Â
Could this method be used to sweep the thicknesses of th layers?
Yes, part of the reason for parameterizing the thicknesses at the beginning is so that it can be used directly with the Sweep/Optimization Utility.Â
Regards,
AmritaÂ
-
February 9, 2024 at 5:50 pmMarton AmbrusSubscriber
Hi Amrita,
Just wanted to ask if the optimisation feature in Lumerical, and the script option within that would allow me to optimise the waveguide's certain parameters until the optimisation reaches a real effective index value with no imaginery parts to it.Â
So far, when I run the simulation and it gives me the calculated modes(effective indeces), those have some imaginary part to them which I don't really want.ÂAnd I just wanted to know if there would be a way in the "figure of merit" section to specify a wanted (only real) effective index such as "2.2" and let the optimisation run until it gets there or close to the value.
For your reply, Thank You in Advance!
Marton
-
February 15, 2024 at 10:51 pmMarton AmbrusSubscriber
Dear Amrita,
Just checking if you can still see my question.
-
February 15, 2024 at 11:49 pmAmrita PatiAnsys Employee
Hi Marton,Â
I am sorry, I missed this one. I suppose that you are not using any lossy materials. And the geometry is just a simple slab so there should not be any losses. The imaginary part of the effective index is most likely due to small artificial loss/gain that result from PML boundaries and can be considered numerical artificats. I don’t think if it is a good idea to optimize the device based on the imaginary part of the effective index because it is most likely unphysical. If it was a bent waveguide, then it would have made sense to optimize for low losses.Â
But please feel free to correct me if I am wrong. Like, do any of the materials have an imaginary index? Are you looking at some other waveguide structure, not a slab? Most importantly, what values of imaginary effective index do you see? If it is small 1e-07, 1e-08, we should just ignore it. But if it is much larger then obviously we would have to think about what is the source of this.
Regards,
Amrita -
March 11, 2024 at 1:10 pmMarton AmbrusSubscriber
Dear Amrita,
Back again with my questions... ????
I was thinking about plotting the far-field interference of the waveguide, and the intensity distribution of it as well.
What I'm trying to do is very similar to the Young's double slit experiment, such as the one I've sent a picture of:
Is there a way to plot/Simulate this in Lumerical?
Also, the design of the waveguide changed slightly since we last spoke. I will attach a picture of the new design:
For your help as always, Thank You!
Kind Regards,
Marton
Â
-
March 12, 2024 at 5:22 pmAmrita PatiAnsys Employee
Hi Marton,
You can do far-field projection from FDE, using both GUI and script. After you calculate the modes, you can click on the drop-down menu from the "options" to set the far-field parameters and calculate the far-field projection.Â
I didn't fully get the interference part. What is the interference supposed to be between?Â
Regards,
Amrita -
March 12, 2024 at 5:31 pmMarton AmbrusSubscriber
Dear Amrita,
Thank You for your reply!
Sorry if I confused you.
The interference is meant to be, the interference between the waves coming from the two cores, and constructively interfering with each other. What I'm trying to get to is a similar picture (shown under fringe pattern) as what I've sent in my previous reply. On there where you can see the dark lines/spots between two white lines is where the wave constructively interfered with each other.
Kind Regards,
Marton
-
March 12, 2024 at 5:36 pmAmrita PatiAnsys Employee
Hi Marton,
No worries. Thanks for the clarification. I don’t think you will be able to do that with FDE. FDE just calculates the eigenmodes of a waveguide at a given cross-section. Then you can calculate the far-field projection of each of these modes. For the interference, I believe you would have to propagate the modes a certain distance to see the fringes. This can be done in other solvers like FDTD. But let me double check with my colleagues and get back to you.
Regards,
Amrita -
March 12, 2024 at 5:39 pmMarton AmbrusSubscriber
If you could do that, that would be great!
Thank you very much!
-
March 12, 2024 at 7:04 pmAmrita PatiAnsys Employee
Hi Marton,
I confirmed it with my colleagues. We can not look at interference from FDE as I mentioned, FDE just calculates the modes at a given cross-section. But for looking at the interference you would have to proprgate the modes. You can do this either by using the FDTD solver or the EME solver (which is part of the MODE IDE). Simulating in FDTD will be more straightforward but EME will be fatser. Have you worked with any of these solvers before?
Regards,
Amrita -
March 12, 2024 at 7:50 pmMarton AmbrusSubscriber
Thank You for checking with your colleagues!
Unfortunately I haven't used any of those solvers before. Before you, no one really taught me how to use Lumerical...Â
-
March 12, 2024 at 9:17 pmAmrita PatiAnsys Employee
Hi Marton,Â
You are welcome! These solvers are slightly more complicated to use than FDE, but I am pretty sure you can learn them. If the dimensions, and especially the length of the waveguides are a few microns (only a few times greater than the wavelength), then I will recommend using FDTD. But if these waveguides are extremely long (hundreds of microns), then EME will be more suitable, as FDTD will require a large amount of compute power. Ansys offers short introductory courses on these solvers. You can find them at Ansys Innovation Courses: Ansys Innovation Courses. When you visit the page, you can select the category as "Photonics" to see a list of all availabe courses. From there, you can find both FDTD and EME. These videos are pretty short and easy to understand but I think they will be a food place to get some familiarity with the solvers. The we can discuss setting up your simulation.
Regards,
Amrita
-
- The topic ‘Lumerical help, dielectric slab waveguide’ is closed to new replies.
- Difference between answers in version 2024 and 2017 lumerical mode solution
- Errors Running Ring Modulator Example on Cluster
- Import material .txt file with script
- Trapezoidal ring
- Help for qINTERCONNECT
- Absorption cross-section of AuNR excited by prism-based TIR
- Issues with getting result from interconnent analysis script
- Topology Optimization Error
- How to measure transmission coefficients on a given plane .
- Edge Coupler EME Example Issue
-
1762
-
635
-
599
-
591
-
366
© 2025 Copyright ANSYS, Inc. All rights reserved.