| |||
Convention for coordinate system, polarization, units
All Metric routines rely on a representation of the 2-D problems in a Cartesian coordinate system with axes x and z. As suggested by the figure below, occasionally these directions are referred to as "horizontal" (z) and "vertical" (x). The structure under investigation and all optical fields are assumed to be constant along the direction y perpendicular to the computational x-z-plane. For the description of 2-D waveguides and the associated modes, the z-axis takes the role of the direction of light propagation, the "longitudinal" direction, while the x-axis is oriented along the "transverse" direction. In the context of the scattering problems, the distinction between the roles of the axes becomes irrelevant.
The propagation of continuous optical electromagnetic waves in linear
isotropic dielectric structures is considered. The vacuum wavelength
Relevant source files: gengwed.h, gengwed.cpp.
Multilayer slab waveguide objects
Waveguide objects represent a 1-D piecewise constant refractive index profile. The waveguide cross section, the x-axis, is to be divided into an array of intervals with constant refractive index, where the bottom and top intervals are unbounded. Since the specification of permittivity or refractive index levels is always related to optical oscillations at a definite frequency, the value of the vacuum wavelength is made part of the waveguide container.
The information on the number of layers, the layer boundaries, the refractive index values, and the vacuum wavelength constitute a Waveguide object as defined in structure.h, structure.cpp. See matrix.h and matrix.cpp for the definition of Dvectors used for the boundary locations and refractive indices.
Among the members of a Waveguide-object are:
nx | The number of inner layers in the division of the cross section axis. | |
hx | The x-positions of the layer boundaries, a Dvector(nx+1). | |
lambda | The vacuum wavelength of the light propagating in this waveguide. | |
n | The array of refractive index values, a Dvector(nx+2). | |
eps | Functions which return permittivity values, for positions specified by a layer index or by an x-coordinate. | |
layer | Returns the layer boundaries (an Interval object, also declared in structure.h) for a given x-coordinate or a layer index. | |
layeridx | Returns the index of a layer that corresponds to a given x-coordinate. | |
plot | Generate a .m-script that produces a plot of the refractive index profile when executed in MATLAB; for purposes of inspecting a waveguide specification. See the section on visualization of structural information. |
Note the following points:
The Waveguide constructors take one of the sets {}, {nx}, or {nx, hx, lambda, n} as arguments, where the remaining information must be directly assigned. See one of the example files (e.g. tlwg.cpp) for an actual waveguide definition.
Class:
Waveguide.
Relevant source files:
structure.h,
structure.cpp.
Sequences of waveguide segments
The BEP and QUEP Helmholtz solvers operate on sequences of multilayer slab waveguides as containers for the geometrical and material specification of the scattering problems. Sequences of z-homogeneous waveguide segments are combined into SegWgStruct objects, as defined in structure.h and structure.cpp. The ingredients are an array of 1-D (x-dependent) refractive index profiles, i.e. Waveguides, and the accompanying z-positions of the vertical interfaces between the segments.
The SegWgStruct objects provide the following methods / members:
nz | The number of inner segments in the sequence. | |
hz | The z-positions of the segment interfaces, a Dvector(nz+1). | |
() | Integer subscript operators, range 0, ..., nz+1: Access to the individual Waveguides in the sequence. | |
init | Initialize all segments with the same Waveguide profile. | |
segidx | The segment index corresponding to a given z-coordinate. | |
segment | The boundaries of a segment corresponding to a given z-coordinate or segment index. | |
n | A function that returns the local refractive index, given a pair of x-z-coordinates. | |
lambda | The vacuum wavelength, assuming that it is unique in all Waveguides. | |
defaultwindow | Determines a default window around the "inner" structure, e.g. for plotting purposes. | |
plot | Generate a .m-script that produces a plot of the refractive index profile when executed in MATLAB; for purposes of inspecting a structure specification. See the section on visualization of structural information. |
Note that, in contrast to the waveguide container, here numbers of inner segments of less than 1 are allowed: SegWgStruct(-1) defines a z-homogeneous waveguide (with hz not to be accessed, used only as a means to enable the plot routines for mode arrays). SegWgStruct(0) is a structure with a single vertical interface, e.g. a waveguide facet.
Two SegWgStruct-constructors take one of the sets {}, {nz} as arguments; the waveguides and z-positions have to be assigned individually. As an example, in the driver files sgrat.cpp and defcav.cpp the structure definition as an array of pieces of waveguides is quite intuitive. A third SegWgStruct-constructor converts a a Circuit object (see below) into a SegWgStruct.
Class:
SegWgStruct.
Relevant source files:
structure.h,
structure.cpp.
Rectangular optical circuits
In some cases the arrangement of the structural data for a scattering problem in the particular form of sequences of waveguides appears to be rather cumbersome. Where appropriate, Circuit objects can be used for a specification of the material and geometrical information. A Circuit as defined in structure.h, structure.cpp combines a matrix of refractive index values, two arrays of positions of horizontal and vertical interfaces, and the vacuum wavelength.
Since the Circuits are - so far - only meant to provide an alternative way of constructing the SegWgStructs, only basic members and methods are provided:
nx | The number of inner layers in the rectangular division. | |
hx | The x-positions of the horizontal layer interfaces, a Dvector(nx+1). | |
nz | The number of inner slices in the rectangular division. | |
hz | The z-positions of the vertical slice interfaces, a Dvector(nz+1). | |
lambda | The vacuum wavelength for the scattering problem. | |
n | Refractive index values for the rectangular patches, a Dmatrix(nx+2, nz+2). | |
plot | Generate a .m-script that produces a plot of the refractive index profile when executed in MATLAB; for purposes of inspecting a structure specification. See the section on visualization of structural information. |
Class:
Circuit.
Relevant source files:
structure.h,
structure.cpp.