############################################# # Scriptfile: polarization_rotator.lsf # # Description: This file calculates the efficiency # of a polarization rotator. This rotator is # composed of a waveguide A, which supports # both a TE and a TM mode. It is coupled to # a waveguide of type B. After an calculated # distance of propagation, the light # propagating in waveguide B is coupled # back to waveguide A. The total rotation # efficiency is calculated. # # # Copyright 2010, Lumerical Solutions, Inc. ############################################# # load waveguide A load("waveguideA"); # calculate the modes nA = findmodes; # copy the TE and TM modes of waveguide A to global d-cards cleardcard; copydcard("mode1","TE_A"); copydcard("mode2","TM_A"); # load waveguide B (the polarization rotation section) load("waveguideB"); # calculate the modes nB = findmodes; # find the indices of the top 2 modes of waveguide B n1 = getdata("mode1","neff"); n2 = getdata("mode2","neff"); lambda_0 = c/getdata("mode1","f"); # expand mode TE_A into the first 2 modes of waveguide B # and propagate 0 distance. This will give coupling # efficiency from TE_A to waveguide B mode_L0 = propagate("TE_A",0,n1,n2); ?"TE mode waveguide A has been decomposed into " + num2str(getdata(mode_L0,"num_modes")) + " modes of waveguide B"; ?" This accounts for " + num2str(getdata(mode_L0,"accounted_transmission")*100) + "% of the incident power"; # estimate the propagation length required to rotate polarization L_rotation = lambda_0/2/real(n1-n2); # propagate by L_rotation mode_L = propagate("TE_A",L_rotation,n1,n2); # test our coupling back into a waveguide of type A olap_TE = overlap(mode_L,"TE_A"); olap_TM = overlap(mode_L,"TM_A"); ?"After propagation of length " + num2str(L_rotation*1e3) + "mm in waveguide B, we couple back to waveguide of type A and find"; ?" "+num2str(olap_TE(2)*100) + "% power coupling to TE mode"; ?" "+num2str(olap_TM(2)*100) + "% power coupling to TM mode"; ?"Total transmission from TE mode to TM mode of waveguide A is: " + num2str(getdata(mode_L,"accounted_transmission")*olap_TM(2)*100) + "%"; ?"Total transmission from TE mode to TE mode of waveguide A is: " + num2str(getdata(mode_L,"accounted_transmission")*olap_TE(2)*100) + "%";