Geometry encoding
A BEP or QUEP solution of a scattering problem starts with a specification of
the geometrical and material information, as explained in the section on
structure definition.
Depending on the type of problem it can be advantageous to view the structure
as a sequence of
Waveguide
s and to fill a SegWgStruct
accordingly.
The driver files sgrat.cpp or defcav.cpp give examples.
Here the value of the vacuum wavelength is included in the Waveguide
objects that eventually constitute the SegWgStruct
.
Alternatively a specification of the problems as a rectangular array of
refractive index values, accompanied by
x and zpositions of interfaces, can be convenient.
This information needs
to be entered into a Circuit
object which also receives the
wavelength parameter; the drivers
sqrres.cpp or
pcwg.cpp
can serve as examples.
Conversion between objects of both types is facilitated by
a SegWgStruct
constructor that accepts a Circuit
, and
by the circuit
method of the SegWgStruct
, which
returns the corresponding Circuit
.
Relevant source files: structure.h, structure.cpp.
Spectral discretization
As the next step, field containers BepField
, QuepField
need to be created on which the solvers
operate. As detailed in the paragraphs on
spectral discretization
of the section on mode analysis procedures,
the optical fields are expanded into bidirectional versions of modes
attributed to the local vertical (BEP) or vertical and horizontal (QUEP)
refractive index profiles of the multilayer stacks
that constitute the structure. The corresponding discretization procedures
are invoked automatically by specific constructor versions of
BepField
and QuepField
objects. According to the
declarations in
bepfld.h and
quepfld.h, these require the following
arguments:
rc 
the structure specification in the form of SegWgStruct or
Circuit objects,

p 
the Polarization , either TE or TM ,

wx 
an Interval (cf. structure.h)
that defines the vertical computational window; the principal components of
the basis modes on the individual slices satisfy Dirichlet boundary conditions on the endpoints of this
interval,

Mx 
the number of expansion terms per vertical slice, order (+1) of the highest order fields included in the local expansions, 
wz 
an Interval (cf. structure.h)
that defines the horizontal computational window; the principal components of
the basis modes associated with the individual layers satisfy Dirichlet
boundary conditions on the endpoints of this interval (QuepField only),

Mz 
the number of expansion terms per horizontal layer, order (+1) of the highest
order fields included in the local expansions (QuepField only),

quiet 
(optional): if quiet = 1 , suppress the logoutput.

Concerning the choice of the computational window, the following issues should be observed (see figures):
A proper choice of the numbers of expansion terms is related to the computational window extension:
Mx
, Mz
(cf. the examples),
necessarily strongly structure dependent:
10: too small, 50150: adequate, 500: too large.
As an alternative to the above constructor methods, only the data
on the structure and the computational window can be specified by simpler
constructor variants, followed by a manual spectral discretization
(method discretize
).
BepField
s and QuepField
s can be copied and assigned.
For BepField
s, subscript operators permit to access the expansion
bases on given slices, returning ModeArray
objects.
Within QuepField
objects, fields are handled internally as two
BepField
s associated with the horizontal slice sequence and
with the vertical layer stack. Subscripting to the
QuepField
data members h
and v
gives access to the quadridirectional expansion bases.
Classes:
BepField
,
QuepField
.
Relevant source files:
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp.
Input specification
The specification of the external influx completes the definition of the
scattering problems. In the present context this amounts to
prescribing the amplitudes of inwards traveling waves on the outermost
slices (BEP), or on the outermost slices and layers (QUEP), respectively.
Initially, the amplitudes of all incoming waves are set to zero by the
spectral discretization procedures. The field containers
BepField
, QuepField
provide
methods input
to specify incoming fields. Several variants are
vailable, see
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp
for the corresponding declarations / definitions.
The methods accept the following arguments (partly alternatives):
bdr 
An identifier for the boundary on which the influx is specified (cf.
the figures above, declarations in
structure.h):

o 
The index of an incoming Mode in the
spectral discretization on the input slice.
In case that the ModeArray s are used unaltered, as set up by the
automatic spectral discretization procedures, the integer corresponds
directly to the order of the input mode (exception: degenerate modes).

m 
A Mode object that represents an incoming (guided) wave.
Expansion coefficients on the input slice / layer are determined by evaluating
suitable overlap integrals between m and the respective
basis modes. m can, but does not have to be a valid modal solution
for the refractive index profile of the input slice / layer.
sqrres.cpp gives an
example, where a mode profile of a different Waveguide
has to be provided to select a channel in a composite structure with
two distant, numerically decoupled, cores.

A 
A Complex input field amplitude. In case the specified input modes
are normalized, as set up by the modesolver routines,
A ^{2} is directly the optical input power. For the
present linear, timeharmonic problems, specific relations between
amplitude and phase of input fields may become relevant, if interference
phenomena for multiple incident waves are studied.

gb 
A Gaussianbeam object, paraxial representation of a beam that
is moderately tilted versus the normal of the input interface; see the
declaration in gengwed.h for details.
The examples
bcross.cpp,
bspread.cpp
show how localized influx from homogeneous space can be encoded.

The input
variants work additive: multimodal influx with
specific phase relations, or interference of waves coming in from different
sides
(QUEP, cf. e.g. the driver bcross.cpp)
can be modeled by calling the input
methods repeatedly with
differing arguments.
Alternatively, entire vectors of amplitudes for the modes in the
outermost (and also inner) slices of a SegWgStuct
can be prescribed
by means of the
setf
, setb
methods of the BepField
container,
see the sources bepfld.h,
bepfld.cpp for details. Through the h
and
v
data members of QuepField
s, these methods also become
available for QUEP simulations.
Classes:
BepField
,
QuepField
.
Relevant source files:
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp;
gengwed.h,
gengwed.cpp.
Solution by bi or quadridirectional eigenmode expansion
Once the specification of the structure, of the computational setting, and
of the input fields has been completed, the quasianalytical Helmholtz solvers
are invoked by calls to the simulation methods provided by the
BepField
and QuepField
containers, according to the
declarations / definitions in
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp:
bepsim 
BEP, solution by bidirectional eigenmode propagation. No arguments are required. Be aware of the limitations introduced by the Dirichlet boundary conditions for the BEP setting. (Variants of this method exist that accept further arguments, partly for reasons of backward compatibility, and partly for purposes of the implementation of the QUEP solver.) Details of the implemented algorithms are distributed over the journal articles Optical and Quantum Electronics 33 (4/5), 413431 (2001) and Optical and Quantum Electronics 34 (5), 541557 (2002). 
quepsim ,
quepsim_s

QUEP, solution by quadridirectional eigenmode propagation. Details of the
procedures are given in the
paper
Optics Communications 235 (46), 285303 (2004).
The quepsim method can be invoked without any arguments.
If alternatively a single double argument is supplied, the method
checks whether the total relative power balance is violated by not more than
that value (integer return value). The latter variant
can be used e.g. to automatically supervise a series of simulations with
varying parameters.
quepsim_s serves for the same purpose: The method repeats the
analysis with a slightly modified computational setting (i.e. slightly
shifted artificial boundaries, cf. the remarks on the
spectral discretization). Singularities related
(probably ...) to accidental matching of wave vector components of some
basis modes are thus avoided. One should try this variant, if all of a sudden
irregularities appear in the results of an otherwise reasonable parameter scan.
The quepsim_s method accepts the number of trials, a level for
the violation of the power balance, and a maximum value for the modification
of the boundary positions as arguments. Standard values are used if
quepsim_s is invoked without arguments.

Several of the driver files can serve as examples for the execution of the QUEP solver.
Classes:
BepField
,
QuepField
.
Relevant source files:
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp.
Field access, output amplitudes, power transmission
Upon successful completion, the solver routines above fill in the coefficients
of all elements in the bidirectional or quadridirectional field expansions.
The BepField
or QuepField
containers thus represent
the quasianalytical, necessarily approximate solutions of the frequency
domain scattering problems. Access to the solutions is provided
by methods of these objects, as declared / defined in
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp:
field

The  in general complex valued  optical electromagnetic field associated
with the solution, computed quasianalytically by evaluation of the local modal
expansion. Arguments are identifiers
EX ,
EY ,
EZ ,
HX ,
HY ,
HZ ,
and
SX ,
SZ that select the components of the electric and magnetic fields, and
the two components of the Poynting vector that are relevant for the present
planar simulations. Further a pair of coordinates x, z
specifies the location where the field is evaluated. For QuepField
objects, additional variants exist that permit to evaluate the field
on a regular rectangular grid, or on lines across the computational domain.
Note that the methods return zero values for certain combinations of arguments,
due to the splitting into TE / TM solutions, and due to
the shapes of the computational domains.

endens

The energy density of the optical electromagnetic field at a specified x, z position. 
Aout

The complex amplitude of an outgoing mode on a specific border of the
computational region. Arguments are an identifier for the border,
and alternatively an integer mode order/index or a mode object
(in that case a suitable overlap integral is computed), as described
for the variants of the input method.

Pout ,
Pgout

Optical output power in a specified exterior region.
When only a border identifier is supplied as an argument, the methods return
the total outwards flowing optical power (Pout , guided and nonguided
parts), or the guided output power only (Pgout , sum of the powers
associated with all (orthogonal) guided modes on the respective slice).
If one supplies in addition an integer mode order/index or a mode object,
the power associated with that particular outwards traveling mode is evaluated.

Pin

The total (guided and nonguided) optical power sent into the computational region across a specified border, used mainly for test purposes, i.e. for computing/checking the power balance. 
locModAmp locModPow

Local "modal probing": The methods project the directional version of a
given mode on the field expansion at a specified zposition, and return
the amplitude, or power, respectively, that is associated
with that mode at the given position (BepField s only).
Note that the amplitudes of the modes that belong to the local
basis can be retrieved via the entries of the amplitude vectors
f and b of BepField s).

Beyond the local properties and output amplitudes / powers, in particular the shapes of the 2D fields are helpful for an interpretation of the solutions. See the section(s) on visualization of interference fields for comments on routines for viewing and for preparing plots and animations of field shapes.
Classes:
BepField
,
QuepField
.
Relevant source files:
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp.
Waves at oblique angles of incidence: vectorial QUEP simulations
An extension of the Metric core modules; elaborate documentation is not available. Still the routines might be useful by means of the corresponding example programs.
The procedures detailed above concern traditional 2D problems, where both the structure under investigation and the
solution sought are supposed to be constant along one coordinate axis (y). One can weaken these restrictions by
looking for solutions that are varying strictly harmonically along that yaxis, with a wavenumber
ky
. One obtains a vectorial problem,
on a 2D domain, governed by equations that are formally identical to those for the modes of channel waveguides
with 2D cross sections. For a structure with an access slab, oriented, say, in the yzplane, this permits
to model the incidence of semiguided waves that come in with some angle of incidence theta
in the yzplane.
The direction of propagation of these outofplane guided, inplane infinite plane waves then dictates
the global wavenumber ky
. Respective parameters can be supplied to the
BepField
and QuepField
constructors.
The implemented scheme for vectorial quadridirectional eigenmode propagation (vQUEP) then proceeds similar
to the scalar case, but including properly rotated basis modes of both TE and TM polarization into
the spectral discretization.
Solver details:
Optics Communications 338, 447456 (2015).
Classes:
BepField
,
QuepField
.
Examples:
vfacet.cpp,
kink.cpp,
step.cpp.
Relevant source files:
bepfld.h,
bepfld.cpp,
quepfld.h,
quepfld.cpp.
Incidence of semiguided beams: bundles of vQUEP solutions
An extension of the Metric core modules; elaborate documentation is not available. Still the routines might be useful by means of the corresponding example programs.
Oblique incidence of semiguided, laterally confined beams on the yhomogeneous
structures can be modeled by considering superpositions of the above vQUEP solutions.
The constructors of objects of class Bundle
accept the parameters for
a Gaussian beam profile, centered at a principal angle of incidence. Their
solve
method then initiates vQUEP simulations for a series
of equidistant wavenumbers ky
over a range that covers
the relevant part of the angular spectrum of the incident beam.
Field data is being accumulated
for an array of predefined View
s, and guided modal output power is being stored
for an array of predefined Port
s, for evaluation and inspection of
the full 3D field.
Classes:
Bundle
,
View
,
Port
.
Examples:
vfacbundle.cpp,
kinkbundle.cpp.
Relevant source files:
bundle.h,
bundle.cpp.