4.1.1 Geometry Types

All the geometry types are derived from the abstract class Geometry and provide the following methods:

addLayer( layer(width))
Add a new layer to the geometry setting its width. The layer(widht) is the recommended way of specyfing the parameters as is the most clear and flexible. You may hovever call the method the following way geometry.addLayer(layer,width).

It is recommenced to add the same layer several times when they repeat in the structure. This can reduce the computation time significantly. Note that this must be exactly the same object. Even if you create two different objects even with the same parameters, all the necessary calculation will be repeated for them separatelly.

clear( )
Clear the stack. That layers are deleted if no other variable references them.

generateStack( )
Generate the list of unique layers, list of indices of layers in the stack and their heights. You usually don't need to call this method individually. This is used when providing the data for the program.

setInterface( [where])
Set the matching interface after the last layer or at the position denoted by where.

The position of the matching interface.

The smoothing parameter for the goemetry. In order to improve the convergence of the solution the material permittivity and permeability profile is covoluted with Gaussian function. The smooth is the half-width of the Gaussian function. It's value have to be chosen experimentically -- the larger it is the more convergent plane-wave expansion you get but at the same time, the less sharp edges of the objects become.

The following classes can be instantiated:

class Geometry2D( L)
The simple Cartesian 2D geometry. When you use this class you assume that the electromagnetic field has analytical form along $x$-axis which is

\Psi(x,y,z) = \Psi(y,z) \exp(i\beta x)

$\Psi$ being any of the field components. The computational domain of each layer has one dimension of the length given by L.

The only possible object in this geometry is the Rectangle.

class Geometry3D( A1, A2[, symmetry])
The most general three-dimensional Cartesian geometry. A1 and A2 are the 2D vectors defining the computational domain. They should be tuples of two numbers, usually of the form (a1,0) and (0,a2). Alternatively you can specify both A1 and A2 as single numbers in which case the computational domain is assumed to be rectangle of the size $\var{A1}\times\var{A2}$.

You can define Cylinder and Cuboid for this geometry.

The optional argument symmetry defines whether the structure and electromagnetic field has inversion symmetry in the plane perpendicular to one or both lattice vectors. In the former case set symmetry to the simple symmetry definition (see below) and in the latter to the tuple (symmetry1, symmetry2), where symmetry1 and symmetry2 are symmetry definitions along $b_1$ and $b_2$ axes respectively.

In each case symmetry definition is either 'HE' or 'EH'. The former means that the $H_x$ and $E_y$ componenst are symmetric and $E_x$ and $H_y$ antisymmetric and the latter is just an opposite.