"Science, Faculty of"@en . "Physics and Astronomy, Department of"@en . "DSpace"@en . "UBCV"@en . "Finlay, Eric"@en . "Kucera, Lee"@en . "2012-09-20T21:25:50Z"@en . "2012-01-23"@en . "Dr. Lukas Chrostowski sponsored the project taken on by Lee Kucera and Eric Finlay for their ENPH 479 project course. The project had two primary objectives: to write a Lumerical script that would simulate a physical photonic device and to write a script to systematically test various iterations of the device for optimal properties. Lumerical is an industry program created to simulate electromagnetic wave propagation in different materials and geometries. A Lumerical script is a text file that controls the operation of the Lumerical program automatically.\nThe project was centered on learning how Lumerical works and developing a script to complete actions automatically. The workflow consisted of each student working on the shared script file independently, collaborating when issues arose and going to the project sponsor for advice once intuition and current knowledge had been exhausted. Results at this time are a Lumerical script that exactly recreates the physical layout of the physical photonic device, but whose simulation results do not match the physical device. The simulation results (electromagnetic wave transmission) shows the expected general shape, but offset from where it should be.\nSince the simulated device has so far failed to give results that match the physical device, we are unable to draw conclusions about the final effectiveness of the simulation, potential avenues to improve the photonic device or which configuration is optimal. However, we feel that the program is close to giving the desired result, which will allow the project to move forward.\nThe final recommendation of this project is to continue developing the script to simulate the existing device and simulate variations of this device. If it becomes apparent that the Lumerical software is unable to produce the results from the physical device, the script should be abandoned; this decision can only be made by the project sponsor, drawing on their experience with both the software and the field in general."@en . "https://circle.library.ubc.ca/rest/handle/2429/43247?expand=metadata"@en . "I | P a g e Eric Finlay Lee Kucera Project Sponsors: Dr. Lukas Chrostowski Wei Shi Project 1163 Applied Science 479 Engineering Physics Project Lab The University of British Columbia January 23, 2012 Simulations of Contradirectional Couplers in Rib Waveguides II | P a g e Executive Summary Dr. Lukas Chrostowski sponsored the project taken on by Lee Kucera and Eric Finlay for their ENPH 479 project course. The project had two primary objectives: to write a Lumerical script that would simulate a physical photonic device and to write a script to systematically test various iterations of the device for optimal properties. Lumerical is an industry program created to simulate electromagnetic wave propagation in different materials and geometries. A Lumerical script is a text file that controls the operation of the Lumerical program automatically. The project was centered on learning how Lumerical works and developing a script to complete actions automatically. The workflow consisted of each student working on the shared script file independently, collaborating when issues arose and going to the project sponsor for advice once intuition and current knowledge had been exhausted. Results at this time are a Lumerical script that exactly recreates the physical layout of the physical photonic device, but whose simulation results do not match the physical device. The simulation results (electromagnetic wave transmission) shows the expected general shape, but offset from where it should be. Since the simulated device has so far failed to give results that match the physical device, we are unable to draw conclusions about the final effectiveness of the simulation, potential avenues to improve the photonic device or which configuration is optimal. However, we feel that the program is close to giving the desired result, which will allow the project to move forward. The final recommendation of this project is to continue developing the script to simulate the existing device and simulate variations of this device. If it becomes apparent that the Lumerical software is unable to produce the results from the physical device, the script should be abandoned; this decision can only be made by the project sponsor, drawing on their experience with both the software and the field in general. III | P a g e Table of Contents Executive Summary ................................................................................................................ II Table of Figures ....................................................................................................................... IV Introduction ............................................................................................................................... 1 General Background .......................................................................................................................... 1 SOI Background ................................................................................................................................... 1 SOI Demultiplexers ............................................................................................................................. 2 Current Alternatives .......................................................................................................................... 2 Ring (Racetrack) Resonator Demultiplexers ....................................................................................... 2 Previous Experimental Work ..................................................................................................................... 3 Technical Project Objectives ...................................................................................................................... 4 Project Sponsor Relevance .......................................................................................................................... 4 Report Summary ............................................................................................................................................. 4 Scope .................................................................................................................................................................... 5 Discussion ................................................................................................................................... 6 Theory ..................................................................................................................................................... 6 Methods .................................................................................................................................................. 7 Discussion of Results ...................................................................................................................... 11 Drop Port Results ......................................................................................................................................... 11 Through Port Results ................................................................................................................................. 13 Drop Conjugate Port Results ................................................................................................................... 14 Code Discussion ................................................................................................................................ 15 Code Dependencies ......................................................................................................................... 26 custom_wave_bend.lsf ................................................................................................................................ 26 waveGuide_Hole.lsf ..................................................................................................................................... 26 graphTrans.lsf................................................................................................................................................ 26 Conclusion ................................................................................................................................ 27 Deliverables ............................................................................................................................. 28 Recommendations ................................................................................................................. 29 Appendix A ............................................................................................................................... 30 Works Cited ............................................................................................................................. 33 IV | P a g e Table of Figures Figure 1: Different passive photonic filters (demultiplexers). ..................................................................... 3 Figure 2: Power vs. Wavelength of a multiple mode system ....................................................................... 3 Figure 3:Contradirectional Coupler. Consists of a series of holes between 2 waveguides. ............... 4 Figure 4: Expected Spectral Response from the Contra-directional Coupler ......................................... 4 Figure 5: Reflected Power as a function of Wavelength for a Bragg Grating .......................................... 6 Figure 6: A Bragg Grating resulting in reverse coupling between two waveguides with typical spectrums ............................................................................................................................................................ 7 Figure 7: Experiment results from original prototype, designed and tested by Wei Shi .................... 7 Figure 8: Layout of the Eigenmode solver .......................................................................................................... 8 Figure 9: Calculating the Coupled Wavelength Using Frequency Sweep, the point ............................. 9 Figure 10: Propagator in Orange, Shows Simulation Area ......................................................................... 10 Figure 11: Monitor Graph of Transmission as a Function of Wavelength ............................................ 10 Figure 12: Layout showing Through Port and Drop Conjugate Port ....................................................... 11 Figure 13: Results from two different days, January 20th results use the left y-axis while the January 22nd results use the right y-axis. ........................................................................................... 11 Figure 14: Comparison of transmission before and after the waveguide bend .................................. 12 Figure 15: Through Port Transmission Comparison ..................................................................................... 13 Figure 16: Drop Conjugate Port Comparison .................................................................................................. 14 1 | P a g e Introduction General Background Data transmission can be the limiting factor in certain fields. For example, large data centers, server farms or super computers need to transmit a massive amount of data between chips and other banks and are becoming increasingly dependent on ultra-fast data transfer. While it is possible to still do this with physical electrical connections, high speed optical interconnects are being seen as a promising technology. (Lipson, 2005) Transmitting the data as electrical signals is becoming increasingly less efficient because the characteristics of the electrical connections become less desirable as the length of connection and data transfer speeds increase. If the data is transmitted as fast as possible, the signal becomes heavily attenuated and the data will not make it to the next chip. Either the data transmission speed is slowed so there is an acceptable level of attenuation, or a larger, more powerful electrical line based transmission device would be required to reach data transfer speeds that a single optical connection would be capable of. (A. Biberman, 2010) By replacing conventional electrical lines with integrated optical interconnects, transfer speeds have been shown to reach upwards of 18Gbit/s when using single wavelengths and 50Gbit/s when using multiple wavelengths. (Manipatruni, Chen, & Lipson, 2009) As the ability to better separate out specific wavelengths increases, so does the data transfer rates as multiple wavelengths can be used within a smaller range. This project centers on optimizing a single component of an optical system designed to transmit data at extremely high speeds. The component we are attempting to design and optimize is a countradirectional coupler, which will be used as a wavelength demultiplexer which separates different channels of data being transmitted along a single waveguide. Ultimately, it will be used along with modulators and other optical devices in ultra-fast wavelength division multiplexing and demultiplexing applications. The final goal is to find an optimal design for a photonic device that that will separate desired wavelengths into different data channels. SOI Background Silicon-on-insulator (SOI) circuits are composed of three components; an insulating layer (Silicon dioxide, Sapphire, etc.) on the bottom, a crystalline Silicon layer above it and a final cladding layer on top. The cladding layer can be Silicon oxide, air or any other material with a low refractive index. The high difference in index of refraction (n) between Silicon (~3.5), Silicon dioxide (~1.44) and Air (1.00) allows for optimal transmission of electromagnetic waves. (Wikipedia) Another reason for the use of SOI chips is that silicon fabrication techniques (CMOS) have become increasingly refined over the past couple decades, motivated by increasing computer power and efficiency. Currently, SOI technology is in its infancy and is being explored as an alternative to electrical circuits in a variety of applications. (Analyst: Intel to endorse SOI at 22-nm, 2010) It may 2 | P a g e begin to replace CMOS technology once the fabrication cost decreases. However, it is still the predominate process used in the fabrication of Silicon photonics. (Knight, 2004) In Silicon photonics, the sandwiched crystalline silicon layer is used to fabricate optical waveguides in addition to other passive optical devices such as racetrack resonators or more generally, optical multiplexers and demultiplexers. Because of the aforementioned differences in the index of refraction, and the fact that Silicon is transparent to infrared light with wavelengths above 1100nm, electromagnetic waves are able to propagate in the waveguides on the basis of total internal reflection. (Wikipedia) SOI Demultiplexers SOI chips are being considered as a viable alternative for transmitting high bandwidth data over medium distances currently dominated by more conventional technology. The current technology relies on data being transmitted along metal wires via electrical pulses. The SOI chips are capable of transmitting light pulses and are therefore capable of much higher bandwidth signals with much less noise. (A. Biberman, 2010) These waveguides are capable of propagating electromagnetic waves at a range of wavelengths centered at approximately 1550 \u00C2\u00B5m. As such, they are capable of transmitting light at more than one wavelength at a time. Therefore it is possibly to transmit multiple channels of information along a single waveguide. The motivation behind this project is to design a SOI configuration that will act as a wavelength demultiplexer, i.e. to design a device that that will separate desired wavelengths into different data channels. The characteristics of this demultiplexer will determine the maximum rate of data transmission. The tighter the filter, the more channels could be simultaneously transmitted, the higher the total data transmission rate. Current Alternatives Ring (Racetrack) Resonator Demultiplexers As mentioned before, there exist current Silicon photonics devices capable of filtering input electromagnetic waves as a function of wavelength. This is done via passive photonic devices called ring resonators. These resonators can be designed to have different configurations as shown below in Figure 1. The different configurations are present to increase the coupling between the input waveguide and the ring resonator. 3 | P a g e Figure 1: Different passive photonic filters (demultiplexers). Note that there is no physical connection between the input waveguide and the resonant ring. The electromagnetic wave crosses the barrier by means of the evanescent wave. The racetrack resonant rings are, so far, the most efficient configuration for meeting the necessary multiplex capabilities. However, the aforementioned resonators are unable to filter out a single wavelength due to the fact that within the resonator exist multiple modes. It exhibits periodic band-pass behavior as shown below in Figure 2. This effectively reduces the space that different channels can exist in within a specified range. As the number of available channels is reduced, the benefits of using optical interconnects is diminished. Figure 2: Power vs. Wavelength of a multiple mode system Previous Experimental Work Our project sponsor\u00E2\u0080\u0099s grad student, Wei Shi has designed a preliminary version of the contradirectional coupler that we will be optimizing. The configuration is as shown below in Figure 3. Ideally, the wavelength response of the output would look like Figure 4. In actuality, the reflected spectrum resembles the sinc function, resulting in a band-pass filter that is not tight enough to be used as a viable demultiplexer alternative to resonant racetracks configurations. 4 | P a g e Figure 3:Contradirectional Coupler. Consists of a series of holes between 2 waveguides. Our project is purely motivated by the hope that we can alter the design such that the wavelength response of the contradirectional coupler gives a tighter response and will be able to be used effectively as a demultiplexer. Figure 4: Expected Spectral Response from the Contradirectional Coupler Technical Project Objectives The final goal of the project is to deliver a contradirectional coupler design that eliminates the sinc like response that was apparent in the first physical prototype. To do this there were several milestones: simulate the existing contradirectional coupler using Lumerical scripts, interface the scripts with a GUI to allow for parameter variation and possibly alter the basic shape of the coupler to gain the desired properties. After a photonic device with the desired properties was created, the objectives was to then create fabrication layouts for the most promising simulated device configurations, develop advanced models that include material doping and develop an analytic model of the configuration. Project Sponsor Relevance This project is important to our project sponsor, Dr. Lukas Chrostowski, because a proof of general concept prototype has already been fabricated and tested. Due to the potential applications of this device, as detailed above, he will continue to pursue it. As such, it would be beneficial to have a theoretical model for the device before spending significant amounts of money fabricating and testing broken designs. In short, this project will help our sponsor streamline the design process and make the research process more efficient. Report Summary The following report is written to summarize our accomplishments and the project progress to our professor, Dr. Jon Nakane and our project sponsor, Dr. Lukas Chrostowski. The details of the report should provide insight into potential future directions for the script as well as potential 5 | P a g e pitfalls in the script creation process, should the project sponsor choose to continue this, or similar projects. Scope This report is divided into three sections. The first will describe the theory and method of the project, the second will discuss the results of the simulations performed and the third will give an overview of the code written to facilitate modification in the future. With regards to theoretical aspects of the project, since we did not end up working on an analytical model, there will be very little discussion of Maxwell\u00E2\u0080\u0099s Equations, electromagnetic wave propagation in materials or the mechanisms by which the results come about. All information will be in relation to the actual code written and the latest configuration of the device. The operation of the Lumerical program is considered a black box, and this report discusses manipulating the inputs and observing the outputs of this black box. 6 | P a g e Discussion Theory It has been known for some time, that it is possible to couple two parallel waveguides. This occurs by having them close enough so that the evanescent, exponentially decaying electromagnetic field is transmitted from one waveguide to the other. If the receiving waveguide can support modes of the appropriate frequency, the evanescent field gives rise to propagating-wave modes, thereby connecting (or coupling) the wave from one waveguide to the next. (M. L. Povinelli) An optical Bragg grating is a transparent device with a periodic variation of the refractive index, so that a large reflectivity may be reached in some wavelength range around a certain wavelength which fulfills the Bragg condition where \u00CE\u00BBB is the Bragg wavelength, ne the effective index of refraction, and \u00CE\u009B is the grating period. If this condition is met, the wavenumber of the grating matches the difference of the wavenumbers of the incident and reflected waves (Encyclopedia of Laser Physics and Technology). Other wavelengths are only negligibly affected by the Bragg grating, except for some side lobes in the reflection spectrum (Figure 5). Figure 5: Reflected Power as a function of Wavelength for a Bragg Grating Generally, Bragg Gratings are used within fibers, but Wei Shi, a UBC MiNa Ph.D. student, came up with an idea of coupling two waveguides by having a series of holes between them. Because of the holes, the waveguides moved apart far enough so that they were no longer coupled directly, however the alternating index of refraction of holes/silicon between them acted like a 7 | P a g e Bragg Grating, reflecting only a small range of wavelengths. The result of this was that the waveguides ended up being reversely coupled with Figure 6 showing a simplified diagram. Figure 6: A Bragg Grating resulting in reverse coupling between two waveguides with ideal spectrums Initial testing was done by Wei Shi which resulted in the following spectrum which can be seen below in Figure 7. Because the goal of this project is to simulate similar designs using Lumerical, we will not go into further detail of how this works, but the original paper, \u00E2\u0080\u009CContradirectional couplers in silicon-on-insulator rib waveguides\u00E2\u0080\u009D can be found in Appendix A. Figure 7: Experiment results from original prototype, designed and tested by Wei Shi Methods For this project, all the work is done with Lumerical software with the majority of it being done with their MODE solutions software. The script is a fully automated process which is responsible for laying down all the structures, sources, monitors and simulation regions. 8 | P a g e To run a simulation, there is an order which things need to be done. First, all silicon structures are added to the model. The whole device is made up of various smaller structures, each of which is placed down, resized, than moved into position. Since all structures are placed before any calculations or simulations are done, as well as having a mesh order which implies which structures are \u00E2\u0080\u009Con top\u00E2\u0080\u009D of another, the order in which they are placed does not matter. Once all the structures have been placed, an eigenmode solver is added in the middle of the coupler, perpendicular to the direction of propagation as seen in Figure 8. Figure 8: Layout of the Eigenmode solver The eigenmode solver is used to determine the primary modes of the system which is then used by our (mode) source as well as to calculate the drop port wavelength. After the eigenmode solver finds the first two modes, it is then possible to track a selected mode and run a frequency sweep for it. The information from the eigenmode solver is especially important for this setup. The formula for predicting which wavelength is affected by the coupler is given by where \u00CE\u00BBD is the coupled wavelength and na and nb satisfy the equation 9 | P a g e The frequency sweep calculates and records values for the effective index over a specified range of wavelengths. A frequency sweep is run for both the primary and secondary modes, after which the average is taken. We plot this average against the equation \u00CE\u00BB/2\u00CE\u009B (\u00CE\u00BB is the x axis) and the drop port wavelength, \u00CE\u00BBD is taken as the wavelength at which the two lines cross (Figure 9). Figure 9: Calculating the Coupled Wavelength Using Frequency Sweep, the point Once the frequency sweep is completed and the drop port wavelength calculated, the eigenmode solver is no longer needed. It is deleted and replaced by a propagator, which surrounds the entire area to be simulated. This is shown below in Figure 10. Additionally, the source is updated to use the primary mode. The propagator\u00E2\u0080\u0099s function is to actually carry out the simulation. It is given the geometry of the system, a source (with properties determined by the eigenmode solver described above) and boundary conditions. There are various boundary conditions which can be used, however, in our simulation we only use perfectly matched layer (PML) boundary conditions which are perfectly absorbing in the x and y directions so that there is no reflections back from the edges of the simulation area. Currently we use \u00E2\u0080\u009CMetallic\u00E2\u0080\u009D boundary conditions for the top and bottom. The \u00E2\u0080\u009CMetallic\u00E2\u0080\u009D condition causes any waves that hit the surface to be reflected back. Since the device is quite long and having anything leak outside and be absorbed can cause the output power to virtually zero, these conditions are necessary. The within the propagator region the electromagnetic wave is propagated through the waveguide for a specified amount of time (on the order of picoseconds). At the end of both the through ports and drop ports we have monitors which measure various properties such as transmission, EM field, etc. Since we are mostly interested in seeing how different wavelengths 10 | P a g e are affected by the device, the transmission data of the monitors is the primary data output of the simulation after the propagator has been run. Figure 10: Propagator in Orange, Shows Simulation Area Once the propagator has finished, the script takes the data from the monitors and displays it in a graph like the one shown below in Figure 11. As you can see, this figure does not have a distinct coupling characteristic; it should show low transmission power with a spike centered at 1539 nm with some side lobes. The data shown below corresponds to the monitor (yellow) in the bottom right corner of the simulation area shown in Figure 10. Figure 11: Monitor Graph of Transmission as a Function of Wavelength 11 | P a g e Discussion of Results The results and discussion of results reference the \u00E2\u0080\u009CThrough Port\u00E2\u0080\u009D and the \u00E2\u0080\u009CDrop Conjugate Port\u00E2\u0080\u009D. These are shown below in Figure 12. This is in addition to the \u00E2\u0080\u009CDrop Port\u00E2\u0080\u009D discussed above. Figure 12: Layout showing Through Port and Drop Conjugate Port Drop Port Results Data from the drop port is shown below in Figure 13. These two simulations were identical, but Figure 13: Results from two different days, January 20th results use the left y-axis while the January 22nd results use the right y-axis. 12 | P a g e it can clearly be seen that the results are vastly different. The blue line, indicating results from January 20th has a peak almost an order of magnitude greater than the peak from the simulation run on January 22nd. Interestingly the general shape of the two graphs is similar as can be seen by the overlay. The only major difference is that the January 22nd simulation lacks a distinct peak at 1544 nm. Another interesting point is that although the radius of curvature of the waveguide was chosen outside a range that would interfere with the transmission properties, the curve altered the transmission results as can be seen below in Figure 14. The expected transmission peak for the simulations was 1536 nm. The transmission before the curve shows a peak around this point as well as a peak at 1544nm. The transmission after the curve has lost the peak at 1536nm and kept the peak at 1544nm, which is neither expected nor desired. The shape of the peak of the curved waveguide near 1536nm is approaching the shape expected when compared with the experimental results. There is a distinct peak and side lobes of decreasing intensity on either side. It is possible that the contradirectional coupler is giving the desired results, but these results are being washed out by the secondary structure of the device (the curve). Additionally, there is no experimental data on the behaviour of the coupler outside the range of 1510 to 1530 nm. This opens up the possibility that the peak at 1544nm was Figure 14: Comparison of transmission before and after the waveguide bend 13 | P a g e present in the experimental configuration and the pre-curve transmission characteristics match the desired results closer than originally thought. To address the possibility that the curve is hiding the desired results, further simulations should be run with a larger radius of curvature. Through Port Results The Through Port would ideally resemble the transmission down a uniform, transparent waveguide, with a single wavelength lost. Our results from identical simulations of the Through Port are shown below in Figure 15. Immediately, there are two obvious problems with these results. First, although the simulations were identical, the results do not match. The results from Jan 17th and 22nd match each other but are distinctly different from the results from Jan 20th. Secondly, there is a large amount of non-uniform attenuation across the entire spectrum. This indicates that power is being lost to outside the waveguides, the drop port and the drop conjugate port. None of this is desirable. Figure 15: Through Port Transmission Comparison 14 | P a g e It is important in further development of the script to figure out why identical simulations give such different results. Until this question is answered it will be difficult to trust the results of any one simulation. Drop Conjugate Port Results The drop conjugate port is not supposed to show much response to any given input. It was monitored mainly to get a better feel for what was occurring within the contradirectional coupler. The results from 3 separate, identical simulations is shown below in Figure 16. As can be seen, the results are not the same between simulations. The other important feature to note is that the power being transmitted is much higher than the power output of the Drop port. This is not what is expected since only one wavelength should be coupled across the two waveguides, and this wavelength should be reflected into the Drop port. Figure 16: Drop Conjugate Port Comparison There is too much power being transmitted to the drop conjugate port. This may be caused by the coupled waveguides being too close together or the geometry of the entire layout. It will be 15 | P a g e important in further tests to ensure that the power lost to the drop conjugate port is reduced, as this is an indication that the device is not operating as intended. Code Discussion #[Creates new script, this clears any previous structures, settings and variables] new; #[These are all the design parameters for the device] #[inputLipWidth is the distance between the through port and (right side) edge] inputLipWidth = 1.0e-6; #[inputWaveGuideWidth is the width of the input (through port) waveguide] inputWaveGuideWidth = 400e-9; #[waveGuideGapWidth is the distance between the two waveguides where the holes are] waveGuideGapWidth =600e-9; #[outputWaveGuideWidth is the width of the output (drop port) waveguide] outputWaveGuideWidth = 500e-9; #[outputLipWidth is the distance between the drop port and (left side) edge] outputLipWidth = 1.0e-6; #[totalBaseWidth total thickness of the straight section of the device] totalBaseWidth = inputLipWidth + inputWaveGuideWidth + waveGuideGapWidth + outputWaveGuideWidth + outputLipWidth; #[baseHeight total height of the device] baseHeight = 150e-9; #[waveGuideHeight is the height of the waveguides above the region with the holes] waveGuideHeight = 70e-9; #[waveguide_Radius is the radius of bends on either side of the drop port] waveGuide_Radius = 5e-6; #[straightLength is the length of the straight sections that come after the bends on the drop port side] straightLength = 1.5e-6; #[CPL (Corrugation Period Length)is the distance between the inner edges of two holes] CPL = 290e-9; #[halfWidth is the +/- scanned around the drop port wavelength] halfWidth = 15e-9; #[simTime total simulation time] simTime = 20000e-15; 16 | P a g e #[eigenmodeWavelength is the wavelength the eigenmode solver should search around when finding the primary and secondary modes] eigenmodeWavelength = 1500e-9; #[freqScanWidth is the frequency range scanned when tracking modes and determining wavelength vs. effective index] freqScanWidth = 70e-9; #[monitorPoint represents the number of points used for the monitor data plots for the simulations] monitorPoints = 1000; #[These are for the size and spacing of the holes] #[numHoles is the total number of holes in the coupler] numHoles = 2000; #[h_radius is the radius of the holes] h_radius = 70e-9; #[h_length is the total end to end width of the hole] h_length = 220e-9; #[h_sides is the number of edges used for making each semicircle] h_sides = 10; #[holeWidth is the total width of the hole piece (not the hole itself)] holeWidth = CPL + 2*h_radius; #[runFreq is used to find the modes and calculate the drop port wavelength, do_run will cause the script to start running the simulation after it has finished laying down all the structures. 1 = Run, 0 = Don\u00E2\u0080\u0099t Run] runFreq = 1; do_run = 1; fileName = \"C:\Users\Lee\Desktop\Stuff\Jan20_2012.lms\"; #fileName = \"/Users/ericfinlay/Desktop/Test1.lms\"; #[The following is used to make sure that results don\u00E2\u0080\u0099t get overwritten. If a file of the same name is detected, the program will automatically add a _1 to the filename and increment that if the previous value filename exists as well] for(incr = 0; fileexists(fileName) == 1; incr = incr + 1) { sub = \"_\"+num2str(incr)+\".\"; if (incr == 1) { fileName = replacestring(fileName,\".\",sub); } else { old = \"_\"+num2str(incr-1)+\".\"; fileName = replacestring(fileName,old,sub); } } 17 | P a g e [A more accurate material model is used. These material settings were originally provided by Wei Shi, however because we could not import the material directly, it has to be added in each time.] mymaterial = addmaterial(\"Lorentz\"); setmaterial(mymaterial,\"name\",\"Si (Silicon) - Dispersive & Lossless\"); setmaterial(\"Si (Silicon) - Dispersive & Lossless\",\"Permittivity\", 9.98069208); setmaterial(\"Si (Silicon) - Dispersive & Lossless\",\"Lorentz Permittivity\", 1.742303746); setmaterial(\"Si (Silicon) - Dispersive & Lossless\",\"Lorentz Resonance\", 2.990699139e15); setmaterial(\"Si (Silicon) - Dispersive & Lossless\",\"Lorentz Linewidth\", 100000000); red = [255, 0, 0, 255]; setmaterial(\"Si (Silicon) - Dispersive & Lossless\",\"Color\", red); #[The Si02 base resides under the silicon device. Its size is completely determined by the device parameters at the top.] addrect; set(\"name\", \"Si02_Rect\"); set(\"material\", \"SiO2 (Glass) - Palik\"); set(\"x min\", -3*totalBaseWidth); set(\"x max\", (outputWaveGuideWidth + waveGuide_Radius + straightLength/2)*1.75); set(\"y min\", -(holeWidth*(numHoles+10)/2+7e-6+waveGuide_Radius)); set(\"y max\", (holeWidth*(numHoles+10)/2+7e-6+waveGuide_Radius)); set(\"z min\", -2e-6); set(\"z max\", 0); #[The structure added here is the straight drop port waveguide.] addrect; set(\"name\", \"dropPort_Rect\"); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"x\", outputWaveGuideWidth/2); set(\"x span\", outputWaveGuideWidth); set(\"y min\", -(holeWidth*numHoles/2+4e-6)); set(\"y max\", (holeWidth*numHoles/2+4e-6)); set(\"z min\", 0); set(\"z max\", baseHeight + waveGuideHeight); set(\"override mesh order from material database\", 1); set(\"mesh order\", 4); #[The structure added here is the straight waveguide on the through port side. The coupling occurs between this waveguide and the one added just prior.] addrect; set(\"name\", \"addPort_Rect\"); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); 18 | P a g e set(\"x\", -(waveGuideGapWidth + inputWaveGuideWidth/2)); set(\"x span\", inputWaveGuideWidth); set(\"y min\", -(holeWidth*(numHoles+10)/2+6e-6+waveGuide_Radius)); set(\"y max\", (holeWidth*(numHoles+10)/2+6e-6+waveGuide_Radius)); set(\"z min\", 0); set(\"z max\", baseHeight + waveGuideHeight); set(\"override mesh order from material database\", 1); set(\"mesh order\", 4); #[The structure added here is the bent waveguide attached to the drop port. The bend is on the side where we are most interested in the output.] theta_Start = 180; theta_End = 270; inner_Radius = waveGuide_Radius; outer_Radius = waveGuide_Radius + outputWaveGuideWidth; segs = 10; custom_wave_bend; set(\"name\", \"dropPort_outputBend\"); set(\"z min\", 0); set(\"z max\", baseHeight + waveGuideHeight); set(\"x\", outputWaveGuideWidth + waveGuide_Radius); set(\"y\", -(holeWidth*numHoles/2+4e-6)); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); #[The structure added here is the bent waveguide attached to the drop port. The bend is on the opposite side of where we are most interested in the output.] theta_Start = -90; theta_End = 0; inner_Radius = waveGuide_Radius; outer_Radius = waveGuide_Radius + outputWaveGuideWidth; segs = 10; custom_wave_bend; set(\"name\", \"dropPort_nonOutputBend\"); set(\"z min\", 0); set(\"z max\", baseHeight + waveGuideHeight); set(\"x\", outputWaveGuideWidth + waveGuide_Radius); set(\"y\", (holeWidth*numHoles/2+4e-6)); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); #[The structure added here is the straight waveguide attached after the bend on the drop port side.] addrect; set(\"x span\", straightLength); set(\"y span\", outputWaveGuideWidth); set(\"x\", outputWaveGuideWidth + waveGuide_Radius + straightLength/2); set(\"y\", -(holeWidth*(numHoles)/2+waveGuide_Radius+ 4e-6 +outputWaveGuideWidth/2)); 19 | P a g e set(\"z min\", 0); set(\"z max\", baseHeight + waveGuideHeight); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"name\", \"dropPort_output\"); #[The structure added here is the straight waveguide attached after the bend on the drop port side.] addrect; set(\"x span\", straightLength); set(\"y span\", outputWaveGuideWidth); set(\"x\", outputWaveGuideWidth + waveGuide_Radius + straightLength/2); set(\"y\", (holeWidth*numHoles/2+ waveGuide_Radius + 4e-6 +outputWaveGuideWidth/2)); set(\"z min\", 0); set(\"z max\", baseHeight + waveGuideHeight); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"name\", \"dropPort_nonOutput\"); #[The following is used to get the x location and span of the addPort and dropPort sections. This could probably be removed in future versions as we can replace these with the actual formulas used when calculating the original values] select(\"addPort_Rect\"); addx = get(\"x\"); addx_span = get(\"x span\"); select(\"dropPort_Rect\"); dropx = get(\"x\"); dropx_span = get(\"x span\"); #[The following is used when creating holes, this allows the hole to be centered between the waveguides regardless of their positions and sizes] hole_center = outputLipWidth + outputWaveGuideWidth + waveGuideGapWidth/2; # Set Variables for the hole waveguide x_span = holeWidth; base_width = totalBaseWidth; z_span = baseHeight; # Create Hole Waveguide waveGuide_Hole; set(\"z span\",z_span); set(\"first axis\",\"z\"); set(\"rotation 1\",90); set(\"x\", outputLipWidth + outputWaveGuideWidth); set(\"y\", 0); set(\"z\", baseHeight/2); 20 | P a g e set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"name\", \"hole\"); set(\"override mesh order from material database\", 1); set(\"mesh order\", 3); #[Here we create a structure group and add the hole to it. The structure group is then modified so that it tiles the hole structure along the y axis a preset number of times] addstructuregroup; set(\"name\",\"all_holes\"); select(\"hole\"); addtogroup(\"all_holes\"); select(\"all_holes\"); adduserprop(\"ny\",0,numHoles+1); adduserprop(\"ay\",2,holeWidth); adduserprop(\"center_array\",0,1); set(\"script\",\"select(\\"hole\\"); if (center_array){set(\\"y\\",-ay*(ny/2-0.5));}for (i=0:(ny- 1)){select(\\"hole\\"); copy(0,i*ay,0); set(\\"name\\",\\"hole_copy\\"); if ((i==0)) { delete; }}\"); #[Triangles are added to so the transition from the waveguide to the waveguide + coupling area is less sudden. Unlike the other waveGuides which are premade, triangles are considered polygons which means that they are extruded structures based off three vertices] xTriVec1 = (inputWaveGuideWidth/2 + waveGuideGapWidth); xTriVec2 = -(inputLipWidth + inputWaveGuideWidth/2); addtriangle; set(\"x\", addx); set(\"y\", -(holeWidth*(numHoles)/2)); V=get(\"vertices\"); V(1,1) = 0; V(1,2) = -3.2e-6; V(2,1) = xTriVec2; V(2,2) = 0; V(3,1) = xTriVec1; V(3,2) = 0; set(\"vertices\",V); set(\"z span\", baseHeight); set(\"z\", baseHeight/2); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"name\" , \"Triangle 1\"); set(\"override mesh order from material database\", 1); set(\"mesh order\", 1); xTriVec3 = (outputLipWidth + outputWaveGuideWidth/2); 21 | P a g e xTriVec4 = -(waveGuideGapWidth + outputWaveGuideWidth/2); addtriangle; set(\"x\", dropx); set(\"y\", -(holeWidth*(numHoles)/2)); V=get(\"vertices\"); V(1,1) = 0; V(1,2) = -3.2e-6; V(2,1) = xTriVec3; V(2,2) = 0; V(3,1) = xTriVec4; V(3,2) = 0; set(\"vertices\",V); set(\"z span\", baseHeight); set(\"z\", baseHeight/2); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"name\" , \"Triangle 2\"); set(\"override mesh order from material database\", 1); set(\"mesh order\", 2); addtriangle; set(\"x\", addx); set(\"y\", (holeWidth*(numHoles+2)/2)); V=get(\"vertices\"); V(1,1) = 0; V(1,2) = -3.2e-6; V(2,1) = -xTriVec1; V(2,2) = 0; V(3,1) = -xTriVec2; V(3,2) = 0; set(\"vertices\",V); set(\"z span\", baseHeight); set(\"z\", baseHeight/2); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"first axis\",\"z\"); set(\"rotation 1\",180); set(\"name\" , \"Triangle 3\"); set(\"override mesh order from material database\", 1); set(\"mesh order\", 1); addtriangle; set(\"x\", dropx); set(\"y\", (holeWidth*(numHoles+2)/2)); V=get(\"vertices\"); V(1,1) = 0; V(1,2) = -3.2e-6; V(2,1) = -xTriVec3; V(2,2) = 0; V(3,1) = -xTriVec4; 22 | P a g e V(3,2) = 0; set(\"vertices\",V); set(\"z span\", baseHeight); set(\"z\", baseHeight/2); set(\"material\", \"Si (Silicon) - Dispersive & Lossless\"); set(\"first axis\",\"z\"); set(\"rotation 1\",180); set(\"name\" , \"Triangle 4\"); set(\"override mesh order from material database\", 1); set(\"mesh order\", 2); #[The addpower command adds monitors. Currently there are five monitors added in different places. We have added them to the far end of the through port (opposite end to the source), as well as at both ends of the drop port waveguide, both before and after the curves.] addpower; set(\"monitor type\",\"2D Y-normal\"); set(\"x\",-(waveGuideGapWidth + inputWaveGuideWidth/2)); set(\"y\",(holeWidth*numHoles/2+5.5e-6+waveGuide_Radius)); set(\"z\",(baseHeight + waveGuideHeight)/2); set(\"x span\",inputWaveGuideWidth*1.8); set(\"z span\",(baseHeight + waveGuideHeight)*1.8); set(\"override global monitor settings\", 1); set(\"frequency points\", monitorPoints); select(\"dropPort_nonOutput\"); nDropx = get(\"x\"); nDropy = get(\"y\"); nDropz = get(\"z\"); nDropx_span = get(\"x span\"); nDropz_span = get(\"z span\"); addpower; set(\"monitor type\",\"2D X-normal\"); set(\"x\",nDropx-nDropx_span*(0.40)); set(\"y\",nDropy); set(\"z\",nDropz); set(\"y span\",outputWaveGuideWidth*1.8); set(\"z span\",nDropz_span*1.8); set(\"override global monitor settings\", 1); set(\"frequency points\", monitorPoints); select(\"dropPort_output\"); dropx = get(\"x\"); dropy = get(\"y\"); dropz = get(\"z\"); dropx_span = get(\"x span\"); dropz_span = get(\"z span\"); 23 | P a g e addpower; set(\"monitor type\",\"2D X-normal\"); set(\"x\",nDropx-nDropx_span*(0.40)); set(\"y\",dropy); set(\"z\",dropz); set(\"y span\",outputWaveGuideWidth*1.8); set(\"z span\",dropz_span*1.8); set(\"override global monitor settings\", 1); set(\"frequency points\", monitorPoints); addpower; set(\"monitor type\",\"2D Y-normal\"); set(\"x\", outputWaveGuideWidth/2); set(\"x span\", outputWaveGuideWidth*1.8); set(\"y\", -(holeWidth*numHoles/2+4e-6)); set(\"z\",(baseHeight + waveGuideHeight)/2); set(\"z span\",(baseHeight + waveGuideHeight)*1.8); set(\"override global monitor settings\", 1); set(\"frequency points\", monitorPoints); addpower; set(\"monitor type\",\"2D Y-normal\"); set(\"x\", outputWaveGuideWidth/2); set(\"x span\", outputWaveGuideWidth*1.8); set(\"y\", (holeWidth*numHoles/2+4e-6)); set(\"z\",(baseHeight + waveGuideHeight)/2); set(\"z span\",(baseHeight + waveGuideHeight)*1.8); set(\"override global monitor settings\", 1); set(\"frequency points\", monitorPoints); #[This adds the eigenmode solver which is used for determining the primary and secondary modes of the system along with calculating the drop port wavelength.] addeigenmode; set(\"solver type\", \"2D Y normal\"); set(\"x\",-hole_center + outputLipWidth + outputWaveGuideWidth); set(\"z\", baseHeight*0.75); set(\"x span\", totalBaseWidth+2e-6); set(\"z span\", baseHeight+2e-6); set(\"x min bc\", \"PML\"); set(\"x max bc\", \"PML\"); set(\"z min bc\", \"PML\"); set(\"z max bc\", \"PML\"); set(\"define x mesh by\", \"maximum mesh step\"); set(\"dx\", 10e-9); set(\"define z mesh by\", \"maximum mesh step\"); set(\"dz\", 10e-9); setanalysis(\"number of trial modes\", 2); 24 | P a g e setanalysis(\"wavelength\", eigenmodeWavelength); #[If runFreq is selected, the program will calculate the primary and secondary modes as well as calculate the drop port wavelengths using this information. If the option is not selected, it will default to a pre-calculated value.] if (runFreq == 1) { findmodes; selectmode(2); setanalysis(\"track selected mode\", 1); setanalysis(\"number of points\", 4); setanalysis(\"number of test modes\", 2); setanalysis(\"stop wavelength\", eigenmodeWavelength + freqScanWidth); frequencysweep; f2=getdata(\"frequencysweep\",\"f\"); effIdx2 = abs(getdata(\"frequencysweep\",\"neff\")); selectmode(1); setanalysis(\"track selected mode\", 1); setanalysis(\"number of points\", 4); setanalysis(\"number of test modes\", 2); setanalysis(\"stop wavelength\", eigenmodeWavelength + freqScanWidth); frequencysweep; f1=getdata(\"frequencysweep\",\"f\"); effIdx1 = abs(getdata(\"frequencysweep\",\"neff\")); plot(c/f1,effIdx1,effIdx2,(effIdx1+effIdx2)/2,(c/f1)/(CPL*2), \"Wavelength\",\"Loss/Effective Index\"); legend(\"Effective Index (Primary Mode)\",\"Effective Index (Secondary Mode)\",\"Average\"); avgEffIdx = (effIdx1+effIdx2)/2; last = size(avgEffIdx); last = last(1); L1 = [c/f1(1),avgEffIdx(1); c/f1(last),avgEffIdx(last)]; L2 = [c/f1(1),(c/f1(1))/(CPL*2); c/f1(last),(c/f1(last))/(CPL*2)]; out = lineintersect(L1,L2); lamD = out(1); #lamD = 1455e-9; plot(c/f1,effIdx1,effIdx2,(effIdx1+effIdx2)/2,(c/f1)/(CPL*2),\"Wavelengt h\",\"Loss/Effective Index\"); legend(\"Effective Index (Primary Mode)\",\"Effective Index (Secondary Mode)\",\"Average\",\"Wavelength/2Gamma\"); } else { #Previous Calculation lamD = 1535e-9; 25 | P a g e } #[We display the drop port wavelength then switch back to layout mode from analysis mode and delete the eigenmode solver since it can\u00E2\u0080\u0099t coexist with the propagator] ?lamD; switchtolayout; select(\"MODE\"); delete; #[The propagator is added to simulation covering the entire device with about 1um of distance on each side] addpropagator; set(\"x min\", -1.5*totalBaseWidth); set(\"x max\", nDropx-nDropx_span*(0.35)); set(\"y min\", -(holeWidth*numHoles/2+7e-6+waveGuide_Radius)); set(\"y max\", (holeWidth*numHoles/2+7e-6+waveGuide_Radius)); set(\"z\", 110e-9); set(\"z span\", 350e-9+2e-6); set(\"x min bc\", \"PML\"); set(\"x max bc\", \"PML\"); set(\"y min bc\", \"PML\"); set(\"y max bc\", \"PML\"); set(\"z min bc\", \"Metal\"); set(\"z max bc\", \"Metal\"); set(\"simulation time\", simTime); set(\"mesh accuracy\", 4); propX = get(\"x\"); set(\"x0\",-(waveGuideGapWidth + inputWaveGuideWidth/2)-propX); set(\"y0\",-(holeWidth*numHoles/2+5.5e-6+waveGuide_Radius)+700e-9); #[The source is added to one side of the through port, it uses the primary mode of the system and the pre-calculated wavelength] addmodesource; set(\"injection axis\", \"y-axis\"); set(\"x\",-(waveGuideGapWidth + inputWaveGuideWidth/2)); set(\"y\",-(holeWidth*numHoles/2+5.5e-6+waveGuide_Radius)); set(\"x span\",inputWaveGuideWidth+(2*.5e-6)); set(\"wavelength start\", lamD-halfWidth); set(\"wavelength stop\", lamD+halfWidth); #[If do_run is selected, the script automatically saves the file using the filename which was set in the beginning and automatically starts running the simulation. When complete, it graphs the data] if (do_run == 1) { save(fileName); run; graphTrans; 26 | P a g e } Code Dependencies For the code to run properly there are several other script files that must be included. These are listed below with a brief overview of their function and features. custom_wave_bend.lsf Simply creates a bent waveguide in with the specified radius of curvature between the given angles. The angles are taken such that along the y-axis is 0 degrees, along the x-axis is 90 degrees, negative y-axis is 180 degrees and negative x-axis is 270 degrees. In the present script it is used to make 2 quarter circles. waveGuide_Hole.lsf Creates a rectangular block of material with a hole in the center. The dimensions of the hole are determined by parameters set at the beginning of the script. These holes are the source of the coupling by satisfying the Bragg condition discussed in the theory. graphTrans.lsf This script takes the information gathered by the power monitors and displays it on the screen. An important note with this script is that the sign of the displayed data is dependent on the direction of wave travel. A wave travelling in the negative y-direction will give negative transmission data, which is not useful, if not properly corrected for. The corrections for wave direction are the negative signs that appear in the graphTrans.lsf script. 27 | P a g e Conclusion The primary conclusion of this report is that we were able to create a script using Lumerical that fully automated the setup and simulation of a contradirectional coupler, however using this model we were unable to get our simulated results to full match the experimental results. Although we have not setup parameter sweeps, in its current state it should be straight forward to add them. We found that the simulated results of the Lumerical modeling are sensitive to parameters that are easily overlooked by novice users, which was the primary source of error during script development. An example of this would be if the simulation is using PML boundary conditions, and the simulation area edge is too close to the structure, the boundaries would absorb almost all of the energy causing 98%+ loss in the device. The most significant result of the Lumerical script is the transmission peaks around 1536nm and 1544nm that we found. However, we\u00E2\u0080\u0099ve run the simulations multiple times and while the results are usually reproducible, we sometimes see similar looking peaks but with less power, or slightly different spectrums. Originally it was believed that running the same script will give the same results, but we suspect with a structure this large this is not entirely true and will require further characterization, both to verify the accuracy and reproducibility of our current results. 28 | P a g e Deliverables Below is a list of all the initial deliverables with their current status. Because of the continual non-agreement between our simulations and the experimental results, we were unable to proceed and complete many of the later deliverables. \u00EF\u0083\u0098 Use Lumerical\u00E2\u0080\u0099s MODE Solutions software to recreate the existing contradirectional coupler and compare simulated results to experimental results. This is to be used as a gauge of how accurate the MODE software representation will be. \u00EF\u0082\u00B7 Due to simulation issues, we were unable to get results that matched the experimental results. \u00EF\u0083\u0098 Develop a script that generates different contradirectional coupler configurations in the Lumerical MODE software. \u00EF\u0082\u00B7 The current script is designed to allow for easy customization of the models specifications (i.e. Waveguide widths, number and size of holes, etc.) \u00EF\u0083\u0098 Use the script to find a configuration that gives a band-pass similar to experimental results. \u00EF\u0082\u00B7 Attempted completion of this deliverable was the primary focus of our work. Experimental results were not matched successfully, but results indicate that the simulation is getting closer. \u00EF\u0083\u0098 Port all viable designs to FDTD as well as some intuitively promising designs since the behavior might be different in 3D. \u00EF\u0082\u00B7 Due to issues with getting the MODE simulations to match experimental results, this was not attempted. \u00EF\u0083\u0098 Expand the script to perform lithography traces to create arrays of the most promising contradirectional coupler designs. \u00EF\u0082\u00B7 Due to issues with getting the MODE simulations to match experimental results, this was not attempted. \u00EF\u0083\u0098 Develop scripts to emulate: doping, loss and cladding. \u00EF\u0082\u00B7 Due to issues with getting the MODE simulations to match experimental results, this was not attempted. As it stands, we will transfer all the scripts and results to Dr. Chrostowski and that will be the end of the commitment. 29 | P a g e Recommendations Our recommendations are as follows, not necessarily in order of importance: 1. Continue refining/testing the script until simulation results match experimental results. To reduce time required this could be closely coordinated between a user experienced with the Lumerical scripting language and a user well versed in the optical/physical properties of the system. In theory, this would prevent making simple mistakes on either the model or theory side. After experimental results match simulations: 2. Perform an analysis of the repeatability of the results of the script. Any variation between identical simulations will need to be accounted for before concrete conclusions can be drawn. 3. Test how results vary between MODE and FDTD as well as how results vary when using higher mesh accuracies (we currently use 3 out of 5, with 5 being the maximum). 4. Implement parameter sweep functionality, this can be done one within the script or by combining it with the GUI. 5. Using parameter sweeps, optimize the design. 30 | P a g e Appendix A 31 | P a g e 32 | P a g e 33 | P a g e Works Cited Analyst: Intel to endorse SOI at 22-nm. (2010). Retrieved from EETimes: http://www.eetimes.com/electronics-news/4210354/Analyst--Intel-to-endorse- SOI-at-22-nm-semiconductor A. Biberman, S. M. (2010). First demonstration of long-haul transmission using silicon microring modulators. Optics Express 18 (15), 15544-15552. Encyclopedia of Laser Physics and Technology. (n.d.). Bragg Gratings. Retrieved January 22nd, 2012, from RP Photonics: http://www.rp-photonics.com/bragg_gratings.html Knight, G. T. (2004). Silicon Photonics: an introduction. John Wiley and Sons. Lipson, M. (2005). Guiding, Modulating, and Emitting Light on Silicon -- Challenges and Opportunities. Journal of Lightwave Technology 23 (12), 4222-4238. M. L. Povinelli, M. L. (n.d.). Evanescent-Wave Bonding Between Optical Waveguides . Retrieved January 22nd, 2012, from http://arxiv.org: http://arxiv.org/ftp/physics/papers/0509/0509073.pdf Manipatruni, S., Chen, L., & Lipson, M. (2009). 50 Gbit/s wavelength division multiplexing using silicon microring modulators. Group IV Photonics, 2009. GFP '09. 6th IEEE International Conference on, 244-246. Wikipedia. (n.d.). Silicon. Retrieved January 22nd, 2012, from Wikipedia: http://en.wikipedia.org/wiki/Silicon "@en . "Report"@en . "10.14288/1.0074478"@en . "eng"@en . "Unreviewed"@en . "Vancouver : University of British Columbia Library"@en . "Attribution-NonCommercial-NoDerivatives 4.0 International"@en . "http://creativecommons.org/licenses/by-nc-nd/4.0/"@en . "Undergraduate"@en . "University of British Columbia. APSC 479"@en . "Simulations of contradirectional couplers in rib waveguides"@en . "Text"@en . "http://hdl.handle.net/2429/43247"@en .