Много теории
.pdfAppendix B. Pyxis code for universal grating coupler design
//$message($format("%4.5f",nTM1));
ne=0.45*nTM+0.55*nTM1; $message($format("%4.5f",ne));
}
//...// end of calculating neff
//Start of grating drawing
local period=-1*wl/(sin(rad(incident_angle))*1-ne); local duty_cycle=0;
$message($format("%4.5f",period)); if (pl==1)
{
duty_cycle=period*0.5; $message($format("%4.5f",duty_cycle));
}
else
{
duty_cycle=period*0.45; $message($format("%4.5f",duty_cycle));
}
local segnum=75; //segment number of one grating curve local seg_points = segnum+1;
local arc_vec = $create_vector(2*seg_points+2); local i = 0;
local j = 0; local x_r=0; local y_r=0; local x_l=0; local y_l=0;
107
Appendix B. Pyxis code for universal grating coupler design
local m1_x=0; local m1_y=0; local m2_x=0; local m2_y=0; local nf=1.44;
local e=nf*sin(rad(incident_angle))/ne; local gc_number=$round(21/period); local angle_e=62;
local N=$round(18*(1+e)*ne/wl)+1; local gap=period-duty_cycle;
for(j=0;j<gc_number;j=j+1)
{
for(i=0;i<seg_points;i=i+1)
{
x_r=(N*wl/(ne*(1-e*cos(rad(180-angle_e/2+angle_e/segnum*i))))+ j*period)*cos(rad(180-angle_e/2+angle_e/segnum*i)); y_r=(N*wl/(ne*(1-e*cos(rad(180-angle_e/2+angle_e/segnum*i))))+ j*period)*sin(rad(180-angle_e/2+angle_e/segnum*i));
arc_vec[i] = [x_r,y_r];
m1_x=(N*wl/(ne*(1-e*cos(rad(180+angle_e/2))))+ duty_cycle/2+j*period)*cos(rad(180+angle_e/2)); m1_y=(N*wl/(ne*(1-e*cos(rad(180+angle_e/2))))+ duty_cycle/2+j*period)*sin(rad(180+angle_e/2))-0.1; arc_vec[seg_points] = [m1_x,m1_y];
x_l=(N*wl/(ne*(1-e*cos(rad(180+angle_e/2-angle_e/segnum*i))))+ gap+j*period)*cos(rad(180+angle_e/2-angle_e/segnum*i)); y_l=(N*wl/(ne*(1-e*cos(rad(180+angle_e/2-angle_e/segnum*i))))+ gap+j*period)*sin(rad(180+angle_e/2-angle_e/segnum*i));
arc_vec[seg_points+i+1] = [x_l,y_l];
108
Appendix B. Pyxis code for universal grating coupler design
m2_x=(N*wl/(ne*(1-e*cos(rad(180+angle_e/2-angle_e/segnum*i))))+ gap/2+j*period)*cos(rad(180+angle_e/2-angle_e/segnum*i)); m2_y=(N*wl/(ne*(1-e*cos(rad(180+angle_e/2-angle_e/segnum*i))))+
gap/2+j*period)*sin(rad(180+angle_e/2-angle_e/segnum*i))+0.1; arc_vec[2*seg_points+1] = [m2_x,m2_y];
}
angle_e = angle_e-0.7; $add_shape(arc_vec,'SiEtch1');
}
$add_shape([[-40,13.5],[0,1/2*wg_width],[0,-1/2*wg_width],[-40,-13.5]],'Si'); //$unselect_all(@nofilter);
$add_shape([[-1, -wg_width/2], [0, wg_width/2]], "Si", @internal);
//Restore original user settings $set_selectable_types(@replace, (selectable_types_orig[0]==void)? []:selectable_types_orig[0],selectable_types_orig[1]); $set_selectable_layers(@replace, selectable_layers_orig); $set_autoselect(autoselect_orig);
}
function EBeam_UGC_double_parameters( layer:optional number {default=1}, wl:optional number {default=1.55}, etch_depth:optional number {default=0.07}, Si_thickness:optional number {default=0.22},incident_angle:optional number {default=20},wg_width:optional number {default=0.5},n_cladding:optional number
{default=1.44},pl:optional number {default=1})
{ return [ ["wl",$g(wl)],["etch_depth",$g(etch_depth)],["Si_thickness", $g(Si_thickness)],["incident_angle",$g(incident_angle)], ["wg_width",$g(wg_width)],["n_cladding",$g(n_cladding)],["pl",$g(pl)] ]; }
109