# Inserting higher order modes into grating coupler from PDK

#1

Hello all.
I am interested in inserting higher modes to my waveguide. The grating coupler from the PDK is for fumdamental mode only. Do I need to design the layout for my GC for higher order modes or there is another solution?

#2

I don’t think you have to re-design your layout for the GC if it already supports higher order modes. But you do have to re-run your simulation to get the s-parameters for all the modes you want and then load the data into INTERCONNECT for a new grating coupler compact model. In this case you could use the Optical N Port S-Parameter element as the base, and there are some newly added examples for inter-mode interaction in the Implementation Details section, which could help to give you some ideas on how to use this element.

I hope this could help Let me know if you have any difficulties on implementing this.

#3

I am working with the EBeam_SiPIC_PDK for generating a layout in KLayout. The problem is the GC available in the EBeam_SiPIC_PDK supports only fundamental mode. So I have to design my GC in 3D FDTD simulation and generate s parameters for different modes. Am I right?

#4

In that case, I guess you have to re-design the GC in FDTD and get the new s-parameters. There are some grating coupler examples online, 2D and 3D, which could be helpful: Grating coupler 2D-FDTD, Grating coupler 3D-FDTD.

The s-parameters, even though for different modes, need to be contained in one file. It follows the format of:

[# ports on the left, # ports on the right]
("output port name","mode label",mode ID (out),"input port name",mode ID (in),"input type")
(# rows, # columns)
f abs(S) angle(S)
...


The definition of the port positions (the first row) is optional while the others are required. The input & output modes are defined by the mode ID, which is the order of the mode. Here is a piece of script which writes a 3 by 3 s-parameter to a text file, presume that you have the S-matrix defined somewhere before:

if(fileexists(txtfilename)) { rm(txtfilename); }
format short;
for (iii=1:3) {
for (jjj=1:3) {
text='("port ';
text=text + num2str(iii) + '","TE",1,';
text=text + '"port ';
text=text + num2str(jjj) + '",1,"transmission")';
write(txtfilename,text);
matrix_size="("+num2str(length(T.f))+",3)";
write(txtfilename,matrix_size);
name = "S"+num2str(iii)+num2str(jjj);
temp = "temp=[T.f, abs(" + name + "),unwrap(angle(" + name + "))];";
eval(temp);
format long;
write(txtfilename,num2str(temp));
format short;
}
}


You could use it as a sample to generate your s-parameter file.

I hope this could help. Let me know if you have any difficulties reading this

#5

Thank you for your detailed response. I will try and let you know.