Calculates the resulting mode profile of an arbitrary mode after it has propagated through a waveguide for some distance. This is done by decomposing the mode into modes supported by the waveguide. Each supported mode is then propagated through the waveguide. The resulting modes are then added coherently to give the final mode profile. The modes used in this calculation are obtained from one or more FDE simulations.
See the overlap function for more details about overlap and coupling calculations.
Supported Product: MODE
out = propagate(mode, d, n1, n2);
•mode: the name of the monitor containing the mode to propagate
•d: distance to propagate
•n1: minimum index
•n2: maximum index
•out: the name of the resulting dataset created by the propagate command
out = propagate(mode, d, n1, n2, x, y);
Mode alignment can be adjusted before propagate is calculated.
This example is adapted from the polarization_rotator.lsf from polarization rotation. You can download waveguideA.lms and waveguideB.lms from the polarization rotation page.
The following script takes the first mode on the mode list from waveguide A and propagates this mode in waveguide B a distance of L_rotation. It generates a plot of |E|^2 for the mode from waveguide A and the mode after propagation in waveguide B.
# 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");
# 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);
?getdata(mode_L); # to see a list of the available data
f x y z num_modes Ex Ey Ez Hx
Hy Hz accounted_transmission accounted_reflection