step_index.se | a few modes of a round step-index fiber |
| analyzed in Ref. [2] |
cookie.se | the fundamental mode of a cookie-shaped |
| dielectric fiber made of silica. |
mcphedran.se | the fundamental mode of a holey fiber |
| model analyzed in Ref. [5] |
realistic.se | the fundamental mode of a realistic holey |
| fiber analyzed in Ref. [6] |
touching.se | a few modes of two touching round step-index |
| fibers analyzed in Ref. [1]. |
nanowire.se | a surface plasmon-polariton on a round |
| silver nanowire analyzed in Ref. [1]. |
sensor.se | the fundamental mode of a holey fiber proposed |
| as a sensor in Ref.[7]. |
almost_circular.se | all the modes of an almost-circular |
| (elliptical) step-index fiber analyzed
in Ref. [1]. |
make_step_index.m | create the geometry used in step_index.se |
make_cookie.m | create the geometry used in cookie.se |
make_mcphedran.m | create the geometry used in mcphedran.se |
make_realistic.m | create the geometry used in realistic.se |
| (requires the file realistic_curves.mat). |
make_touching.m | create the geometry used in touching.se |
make_nanowire.m | create the geometry used in nanowire.se |
make_sensor.m | create the geometry used in sensor.se |
| (requires the file sensor_curves.mat). |
make_almost_circular.m | create the geometry used in almost_circular.se |
length | Length of the curve in meters |
iCurve | Index to the curve in the curveArray |
cs | Cubic Spline structure (see Spline Toolbox) |
max_x, min_x | Maximum and minimum values of the |
max_y, min_y | curve relative to its center |
param | list of parameters (see primitive function below) |
tag | name of the curve. Can be: ('circle', 'ellipse', |
| 'cookie', 'super_ellipse', 'spline') |
xc, yc | Curve center coordinates |
curve = PRIMITIVE(shape, ...) |
Creates a curve object centered at the origin. |
Argument shape is either 'circle', 'ellipse', |
'cookie', or 'super_ellipse' . |
When shape is 'circle', the next argument is the radius. |
When shape is 'ellipse', the arguments are the X-semi-axis |
and the ratio of the Y-semi-axis to the X-semi-axis. |
When shape is 'cookie', the shape is defined |
in polar coordinates by the formula:
r(f) = R(1+m cos(n f)). |
The order of arguments is R, m, and n. |
When shape is 'super_ellipse', the shape is a super-ellipse |
(which approximates a rectangle). The X dimension is the first |
argument, the ratio of Y dimension to X dimension is the second |
argument, and the last argument is n, which determines the sharpness |
of the corners. The field 'param' of the output curve holds |
the list of parameters used to define the curve.
|
curveArray = CLONE(xCenters, yCenters, curve) |
Clones 'curve' object to create an array of curves centered |
at coordinates given by (xCenters, yCenters). |
|
curveArray = ARRAY_CAT(curveArray1, curveArray2) |
ConCATenates two curve arrays. |
|
[xCenters, yCenters] = HEX_CENTERS(a, ring1, ring2, type) |
Calculates the coordinates of points on a hexagonal lattice. |
Argument a is the lattice pitch. |
Argument ring1 is the number of points per hexagon side |
in the first ring of points. |
Argument ring2 is the number of points per hexagon side |
in the last ring of points. |
Argument type is either 1 or 2, which determines which one |
of the two types of lattices is calculated. |
outPositions = CUT_POS(oGd, positions, sClass) |
Cuts all sources and testing points in positions, outside of the minimum |
sector defined by the class in sClass. |
Argument sClass is a two letter string. The first letter is either |
'p' - for McIsaac's classes or 'f' for Fini's. |
The second character is a number which corresponds to the numbering |
of mode type in these two schemes. Possible strings are: |
'p1', 'p2' ... 'p8', and 'f1' ... 'f6'. |
Output outPositions includes the relations of array amplitudes that ensure |
that the mode has the required symmetry. |
[Neff, error] = FIND_MODES(oGd, positions, k0, minNeff,... |
maxNeff, tol, bShow, maxN, maxErr, complex, ... |
minNeffI, method) |
Finds the effective indices and error in continuity conditions |
of the modes for the geometry defined by oGd. |
Sources and testing points are distributed according to positions. |
Free-space wave number: k0. |
Range of effective index: (minNeff, maxNeff). |
Tolerance for effective index: tol. |
Show search progress: bShow. |
Max. Number of points in a monotonic interval (Nmax): maxN |
Max. acceptable error: maxErr |
Searches for complex effective indices if complex ¹ 0. |
For proper behavior at infinity, complex = 1. For improper (i.e. leaky
modes), |
complex = 2. Min. imaginary part: minNeffI. If minNeffI = 0, |
the algorithm determines the search region from the shape of the error on |
the real line. Eigenvalue determination method: method, can be |
either 'direct', or 'indirect'. Indirect is slower, |
but can avoid false minima which may occur with the direct method (false |
minima may be caused by poor source location.
)
|
error = SMT_SOLVE(Neff, oGd, positions, k0, method) |
Solves the geometry defined in oGd. |
Sources and testing points are distributed according to positions. |
Free-space wave number: k0. |
Effective index: Neff, which may be a vector. |
Eigenvalue determination method: method, can be either 'direct', |
or 'indirect'. Indirect is slower, but can avoid false minima which |
may occur with the direct method (false minima may be caused by poor |
source location) |
Returns the error in continuity conditions. |
[error, solution] = SMT_SOLVE(Neff, oGd, pos, k0, method) |
Returns the vector of source amplitudes as well. |
If Neff is a vector, solution is a matrix. Each column of the matrix |
corresponds to one entry of the Neff vector. |
If Neff is complex, the function must be called with one more argument: |
[error, solution] = SMT_SOLVE(Neff, oGd, pos, k0, isImproper). |
isImproper determines the behavior at infinity. A value of 1 means that |
phase propagation is outwards (to infinity). A value of 0 means that |
phase propagation is inwards (from infinity). |
field = CALC_FIELD(solution, positions, oGd, k0, Neff, ... |
sComponent, sClass, x, y) |
Calculates a field component (or longitudinal component of Poynting's |
vector). Argument solution is the source amplitudes, positions is the |
positions of sources and testing points, oGd, the geometry descriptor, k0 |
the free-space wave number, and Neff the effective index. The component |
plotted is defined by sComponent, which is a two letter string with the |
following allowed values: 'Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz', and
'Sz'. |
Argument sClass is the class string (see CUT_POS). Set to
'none' if no |
symmetry is required. Arguments x and y are vectors to the x and y |
coordinates where the field is evaluated. |
If Neff is complex, the function must be called with one more argument: |
field = CALC_FIELD(solution, positions, oGd, k0, Neff, ... |
sComponent, sClass, x, y, isLeaky) |
isLeaky determines the behavior at infinity. A value of 1 means that |
phase propagation is outwards (to infinity). A value of 0 means that |
phase propagation is inwards (from infinity), as in plasmons. |
|
[Neff_i, Sz] = CALC_ATT(solution, positions, oGd, k0, Neff, |
x, y) |
Calculates the attenuation of a mode due to radiation using a |
perturbational method. |
Argument solution is the source amplitudes, positions is the |
positions of sources and testing points, oGd, the geometry descriptor, k0 |
the free-space wave number, and Neff the effective index. The points on |
which Poynting's vector is evaluated is determined by x and y. |
Their range should include all the boundaries, but should not be too |
far away from the outermost boundary. |
The output is the imaginary part of the effective index, and the longitudinal |
component of Poynting's vector. |
The function may be used iteratively, first with a real effective index, |
and on the next iteration, with the imaginary part found previously. |
Note: at the moment, symmetry is not supported. The effective index may |
be found with the aid of symmetry, but the solution must then be |
recomputed, at the known effective index, without symmetry. |
curves = OUT2CURVES(SMTout) |
Creates a family of dispersion curves from the output of smtgui, i.e., |
the SMTout variable saved to the workspace from the results window. |
the output, curves, is a structure array which has two fields: |
curves.neff - a vector of effective indices, and |
curves.lambda - a vector of the corresponding wavelengths. |