/* * WMM * Wave-matching method for mode analysis of dielectric waveguides * Manfred Hammer * University of Twente, Faculty of Mathematical Sciences * P.O. Box 217, 7500AE Enschede, The Netherlands * (2002) */ /* * http://www.math.utwente.nl/~hammer/Wmm_Manual/ */ /* FILES */ // components of the WMM mode solver: // file input / output functions inout.c inout.h // basic vectors, matrices matrix.c matrix.h // handling complex numbers complex.c complex.h // relations concerning the electromagnetic fields for waveguide modes maxweq.c maxweq.h // waveguide definition waveg.c waveg.h // the basic solutions to the Helmholtz wave equation wmmtrif.c wmmtrif.h // spectral discretization procedures wmmgam.c wmmgam.h wmmdisc.c wmmdisc.h // internal global variables wmmglob.h // procedure for setting the lsq-error and normalization matrices wmmpol.c wmmpol.h // some linear algebra routines, old FORTRAN adapted style wmmmat.c wmmmat.h // WMM mode analysis procedures wmm.c wmm.h // WMM-specific procedures for evaluating the mode profile wmmfld.c wmmfld.h // output to MATLAB .m-files, visualization, helper routines for mode.c and wmmarr.c wmmvis.c wmmvis.h // general mode definition, field evaluation mode.c mode.h // arrays of WMM modes, mode interference evaluation wmmarr.c wmmarr.h // WMM coupled mode theory wmmcmt.c wmmcmt.h // summarized include for application programs wmminc.h // application examples, C++ main() programs Apps/strip.c // A raised strip waveguide: semivectorial mode analysis, mode profile plots, handling of Waveguide, WMM_Mode, and WMM_ModeArray objects Apps/bm1.c // Three rib waveguides, a common benchmark problem Apps/bm2.c // A series of rib waveguides with varying etching depth, another benchmark problem Apps/rib.c // A simple rib waveguide, vectorial calculation, various visualization examples Apps/square.c // A square waveguide surrounded by air, fundamental hybrid mode, examples for profile section plots Apps/disp.c // Single raised strip waveguides: dispersion curves, modes and propagation constants for varying width Apps/mmi.c // MMI coupler, 1x2/2x1 power splitter/combiner, animated interference visualization Apps/coup.c // Coupling between two rib waveguides, rigorous calculation, animated interference visualization Apps/cmt.c // Two parallel strips, coupled mode theory, interference intensity plot Apps/smpert.c // Perturbation theory applied to the mode of a single raised strip: absorbing core, magnetooptic core, geometry variations Apps/tephs.c // Nonreciprocal TE - phaseshifter: rib waveguide, polar magnetooptic configuration, compensation wall / domain lattice Apps/tmphs.c // Nonreciprocal TM - phaseshifter, rib waveguide, equatorial magnetooptic configuration, double layer magnetooptic film Apps/polsp.c // Polarization splitter based on radiatively coupled waveguides, coupled mode theory Apps/upcv.c // Unidirectional polarization converter: magnetooptic double layer raised strip waveguides, coupled mode theory model for polarization conversion // compiling makefile.gcc // GNU: g++ makefile.CC // Hewlett Packard: CC makefile.xlC // IBM SP: xlC mo.bat // shell scripts: copy application program to w.c mo // 'make' executable w, w.exe // save executable and source file to // separate production directory P /* COMPILE, RUN */ (1) cp makefile.xxx makefile (2) write an application file 'app.c' including main(), examples: files in folder Apps (3) mkdir P (4) mo app (5) cd P (6) app ... ? // output files: (stderr) // log information: analysis parameters, waveguide structure, mode solver propgress, propagation constants, file input/output .xyf // pairs (x,y) to be viewed as curves .m // MATLAB script files for graphical output, executable by version 5.3.0 (R11) or higher .hvl // series of z values, evaluated on a (x,y)-mesh, with additional information (step sizes, point numbers, geometry, etc.) to be viewed as surface graphics ... adapt writeprofile() in mode.h, mode.c /* * e-mail: m.hammer@math.utwente.nl * Manual: http://www.math.utwente.nl/~hammer/Wmm_Manual/ */ Good Luck !