TAGGED: -waveguide, bending
-
-
May 22, 2025 at 2:37 pm
Edward Krock
SubscriberHi there,
Â
I'm trying to generate smooth bends using the waveguide structure. However it seems to be extremely inconsistant.
I have a Lumerical script to generate a ring resonator, and a waveguide coupler. It seems capable of reliably generating the requested structure, but appears to break down for large rings and reverts to making straight waveguides.
Â
And a 100 um "ring".
Any idea why larger rings might be problem?
-
May 22, 2025 at 2:39 pm
Edward Krock
SubscriberIf it helps, the code is copy pasted below.
switchtolayout;
deleteall;
###Parameters defining waveguide shape##
#Quick notes
#Distances in meters!
#Time in seconds!
Â
#break;
#Coupling region Parameters
SectorAngle=10;#Defines the full arc of the pulley in both directions
#away from the ring at this angle
Â
#Combined Properties
gap=800e-9;#Waveguide-Ring Gap
height=400e-9;#Waveguide heights
base_width=1600e-9;#Waveguide width
Â
Â
Sidewall=60;
Cladding=0;#Set 0 for no cladding, 1 for cladding
Â
TFLN_Height=600e-9-height;
Â
#Ring Properties
Â
radius=100e-6;#Radius of Ring
Ring_height=height;#Waveguide heights
Ring_width=base_width;#Waveguide width
Â
###Parameters defining simulation##
#Distances between structure and BCs
x_sep=5e-6;
y_sep=10e-6;
z_sep=1e-6;
time=5000e-15;
Â
Â
#Bezier coefficients for ideal ring
#https://spencermortensen.com/articles/bezier-circle/
BezierA=1.00005519;
BezierB=0.55342686;
BezierC=0.99873585;
Â
#Defining arc with Bezzier
#https://stackoverflow.com/questions/734076/how-to-best-approximate-a-geometrical-arc-with-a-bezier-curve
SectorAngle2=SectorAngle;
SectorAngle=SectorAngle*(pi/180);
Â
#Start and end points of circle
point=radius+gap+base_width/2+Ring_width/2;
Â
x1=0;
y1=point;
Â
x4=point*sin(SectorAngle);
y4=point*cos(SectorAngle);
Â
xc=0;
yc=0;
Â
ax = x1 - xc;
ay = y1 - yc;
bx = x4 - xc;
by = y4 - yc;
q1 = ax * ax + ay * ay;
q2 = q1 + ax * bx + ay * by;
k2 = (4/3) * (ax * by - ay * bx) / (sqrt(2 * q1 * q2) + q2);
x2 = xc + ax - k2 * ay;
y2 = yc + ay + k2 * ax;
x3 = xc + bx + k2 * by;
y3 = yc + by - k2 * bx;
Â
Â
Â
Â
##Start Building Structure and Simulation!##
#This is for the ring resonator
Â
#Adds bus waveguide
Â
addwaveguide;
set("name","+bus coupling");
set("poles",[x1, y1 ;x2, y2; x3, y3 ;x4, y4 ]);
set("base angle",Sidewall);
set("base height",height);
set("base width",base_width);
set("x",0);
set("y",0);
Â
Â
Â
addwaveguide;
set("name","-bus coupling");
set("poles",[-x1, y1 ;-x2, y2; -x3, y3 ;-x4, y4 ]);
set("base angle",Sidewall);
set("base height",height);
set("base width",base_width);
set("x",0);
set("y",0);
Â
xc2=(2*radius+2*gap+base_width+Ring_width)*sin(SectorAngle);
yc2=(2*radius+2*gap+base_width+Ring_width)*cos(SectorAngle);
Â
addwaveguide;
#?set();
set("name","+bus transition");
set("first axis","y");
set("rotation 1",180);
set("second axis","x");
set("rotation 2",180);
set("name","+bus transition");
set("poles",[x1, y1 ;x2, y2; x3, y3 ;x4, y4 ]);set("base angle",Sidewall);
set("base height",height);
set("base width",base_width);
set("x",xc2);
set("y",yc2);
addwaveguide;
#?set();
set("name","-bus transition");
set("first axis","y");
set("rotation 1",180);
set("second axis","x");
set("rotation 2",180);
set("poles",[-x1, y1 ;-x2, y2; -x3, y3 ;-x4, y4 ]);
set("base angle",Sidewall);
set("base height",height);
set("base width",base_width);
set("x",-xc2);
set("y",yc2);
Â
addwaveguide;
#?set();
set("name","+bus straight");
set("poles",[xc2, yc2;(xc2)*20, yc2 ]);
set("base angle",Sidewall);
set("base height",height);
set("base width",base_width);
set("x",0);
set("y",-(radius+gap+base_width/2+Ring_width/2));
Â
addwaveguide;
#?set();
set("name","-bus straight");
set("poles",[-xc2, yc2;-(xc2)*20, yc2 ]);
set("base angle",Sidewall);
set("base height",height);
set("base width",base_width);
set("x",0);
set("y",-(radius+gap+base_width/2+Ring_width/2));
Â
Â
Â
Â
#This is for the ring resonator
addwaveguide;
set("name","ring");
set("poles",[0, radius*BezierA ; radius*BezierB, radius*BezierC; radius*BezierC, radius*BezierB ;radius*BezierA,0]);
set("base angle",Sidewall);
set("base height",Ring_height);
set("base width",Ring_width);
set("x",0);
set("y",0);
Â
copy;
#?set();
set("first axis","z");
set("rotation 1",90);
Â
copy;
#?set();
set("first axis","z");
set("rotation 1",180);
Â
copy;
#?set();
set("first axis","z");
set("rotation 1",270);
Â
-
May 23, 2025 at 2:44 pm
Kirill
Ansys EmployeeDear Edward,
I’ve checked your script, and it works fine on my end. Thank you for sharing it, this really helps speed up the process.
You can control rendering accuracy by right-clicking the object > Edit object > Graphical rendering tab > adjusting the detail slider. However, this setting should not affect the view that much.
While the rendered geometry may appear misleading, you can get a more accurate view of the structure using a Refractive index monitor. You can even use the preview option before running the simulation. Hopefully, the actual structure is unaffected.
I ran my tests using 2025 R1.3 on Windows. If you’re using an older version, I recommend upgrading and testing again.Best regards,
Kirill -
May 23, 2025 at 8:41 pm
Edward Krock
SubscriberHi Kirill,
It seemed that for my 2023 version the problem is more than graphical, the refractive index monitor also shows this issue, but you were right! It was the version, I have been stubornly sticking to a 2023 version, updating fixed it!Â
Kind regards,
Edward
-
May 26, 2025 at 2:11 am
Kirill
Ansys EmployeeHi Edward,
Thanks for the confirmation. I'm glad the upgrade helped!
Best regards,
Kirill
-
- You must be logged in to reply to this topic.
-
3145
-
1007
-
935
-
858
-
792
© 2025 Copyright ANSYS, Inc. All rights reserved.