Fourier3D Class

class optical.modal.Fourier3D(name='')

Optical Solver using Fourier expansion in 3D.

It calculates optical modes and optical field distribution using Fourier modal method and reflection transfer in three-dimensional Cartesian space.

Subclasses

Eigenmodes

Layer eignemodes

Mode

Detailed information about the mode.

Oversampling

Access wrapper for parameter along long/tran axis

PMLs

Access wrapper for parameter along long/tran axis

Scattering

Reflected mode proxy.

Sizes

Access wrapper for parameter along long/tran axis

Symmetries

Access wrapper for parameter along long/tran axis

Methods

compute_reflectivity(...)

Compute reflection coefficient on planar incidence [%].

compute_transmittivity(...)

Compute transmission coefficient on planar incidence [%].

find_mode(*args, **kwargs)

Compute the mode near the specified effective index.

gaussian(side, polarization, sigma[, center])

Create coefficients vector with Gaussian profile.

get_determinant(*args, **kwargs)

Compute discontinuity matrix determinant.

get_raw_E(num, level)

Get Fourier expansion coefficients for the electric field.

get_raw_H(num, level)

Get Fourier expansion coefficients for the magnetic field.

initialize()

Initialize solver.

integrateEE(...)

Get average integral of the squared electric field:

integrateHH(...)

Get average integral of the squared magnetic field:

invalidate()

Set the solver back to uninitialized state.

layer_eigenmodes(level)

Get eignemodes for a layer at specified level.

scattering(...)

Access to the reflected field.

scattering_gaussian(side, polarization, sigma)

Helper function to Access reflected fields for access incidence.

set_interface(...)

Set interface at the bottom of the specified object.

set_mode(*args, **kwargs)

Set the mode for specified parameters.

Attributes

Receivers

inCarriersConcentration

Receiver of the carriers concentration required for computations [1/cm³].

inEpsilon

Receiver of the permittivity tensor required for computations [-].

inGain

Receiver of the material gain required for computations [1/cm].

inTemperature

Receiver of the temperature required for computations [K].

Providers

outDownwardsLightE

Provider of the computed electric field [V/m].

outDownwardsLightH

Provider of the computed magnetic field [A/m].

outEpsilon

Provider of the computed permittivity tensor [-].

outGradients

Provider of the computed refractive index gradient functions cos² and cos·sin [-].

outLightE

Provider of the computed electric field [V/m].

outLightH

Provider of the computed magnetic field [A/m].

outLightMagnitude

Provider of the computed optical field magnitude [W/m²].

outRefractiveIndex

Provider of the computed refractive index [-].

outUpwardsLightE

Provider of the computed electric field [V/m].

outUpwardsLightH

Provider of the computed magnetic field [A/m].

outWavelength

Provider of the computed wavelength [nm].

Other

dct

Type of discrete cosine transform for symmetric expansion.

determinant_type

Type of determinant that is computed in root finding.

emission

Direction of the useful light emission.

geometry

Geometry provided to the solver

grad_smooth

Smoothing parameter for material boundaries gradients (needed for the new expansion rule).

group_layers

Layer grouping switch.

id

Id of the solver object.

initialized

True if the solver has been initialized.

interface

Matching interface position.

k0

Normalized frequency of the light (1/µm).

klong

Longitudinal propagation constant of the light (1/µm).

ktran

Transverse propagation constant of the light (1/µm).

lam

Wavelength of the light (nm).

lam0

Reference wavelength.

layer_centers

Vertical posiotions of centers of each layer.

layer_edges

Vertical posiotions of egges of each layer.

modes

Computed modes.

pmls

Longitudinal and transverse edge Perfectly Matched Layers boundary conditions.

refine

Number of refinement points for refractive index averaging in longitudinal and transverse directions.

root

Configuration of the root searching algorithm.

rule

Permittivity inversion rule.

size

Orthogonal expansion sizes in longitudinal and transverse directions.

smooth

Smoothing parameter for material boundaries (increases convergence).

stack

Stack of distinct layers.

symmetry

Longitudinal and transverse mode symmetries.

temp_diff

Maximum temperature difference between the layers in one group.

temp_dist

Temperature probing step.

temp_layer

Temperature probing step.

transfer

Preferred transfer method.

update_gain

Recompute dynamic parameters.

vpml

Vertical Perfectly Matched Layers boundary conditions.

wavelength

Alias for lam

Descriptions

Method Details

Fourier3D.compute_reflectivity(lam, side, index)
Fourier3D.compute_reflectivity(lam, side, polarization)
Fourier3D.compute_reflectivity(lam, side, coffs)

Compute reflection coefficient on planar incidence [%].

Parameters:
  • lam (float or array of floats) – Incident light wavelength (nm).

  • side (top or bottom) – Side of the structure where the incident light is present.

  • polarization – Specification of the incident light polarization. It should be a string of the form ‘E#‘, where # is the axis name of the non-vanishing electric field component.

  • idx – Eigenmode number.

  • coeffs – expansion coefficients of the incident vector.

Fourier3D.compute_transmittivity(lam, side, index)
Fourier3D.compute_transmittivity(lam, side, polarization)
Fourier3D.compute_transmittivity(lam, side, coffs)

Compute transmission coefficient on planar incidence [%].

Parameters:
  • lam (float or array of floats) – Incident light wavelength (nm).

  • side (top or bottom) – Side of the structure where the incident light is present.

  • polarization – Specification of the incident light polarization. It should be a string of the form ‘E#‘, where # is the axis name of the non-vanishing electric field component.

  • idx – Eigenmode number.

  • coeffs – expansion coefficients of the incident vector.

Fourier3D.find_mode(*args, **kwargs)

Compute the mode near the specified effective index.

Only one of the following arguments can be given through a keyword. It is the starting point for search of the specified parameter.

Parameters:
  • lam (complex) – Wavelength (nm).

  • k0 (complex) – Normalized frequency (1/µm).

  • klong (complex) – Longitudinal wavevector (1/µm).

  • ktran (complex) – Transverse wavevector (1/µm).

Fourier3D.gaussian(side, polarization, sigma, center=(0.0, 0.0))

Create coefficients vector with Gaussian profile.

This method is intended to use for scattering() method.

Parameters:
  • side (top or bottom) – Side of the structure where the incident light is present.

  • polarization – Specification of the incident light polarization. It should be a string of the form ‘E#‘, where # is the axis name of the non-vanishing electric field component.

  • sigma (float or tuple) – Gaussian standard deviation in longitudinal and transverse directions [µm, µm].

  • center (tuple) – Position of the beam center [µm, µm].

Example

>>> scattered = fourier.scattering('top',
...     fourier.gaussian('top', 'Ex', 0.2))
Fourier3D.get_determinant(*args, **kwargs)

Compute discontinuity matrix determinant.

Arguments can be given through keywords only.

Parameters:
  • lam (complex) – Wavelength (nm).

  • k0 (complex) – Normalized frequency (1/µm).

  • klong (complex) – Longitudinal wavevector (1/µm).

  • ktran (complex) – Transverse wavevector (1/µm).

Fourier3D.get_raw_E(num, level)

Get Fourier expansion coefficients for the electric field.

This is a low-level function returning $E_l$ and/or $E_t$ Fourier expansion coefficients. Please refer to the detailed solver description for their interpretation.

Parameters:
  • num (int) – Computed mode number.

  • level (float) – Vertical level at which the coefficients are computed.

Return type:

numpy.ndarray

Fourier3D.get_raw_H(num, level)

Get Fourier expansion coefficients for the magnetic field.

This is a low-level function returning $H_l$ and/or $H_t$ Fourier expansion coefficients. Please refer to the detailed solver description for their interpretation.

Parameters:
  • num (int) – Computed mode number.

  • level (float) – Vertical level at which the coefficients are computed.

Return type:

numpy.ndarray

Fourier3D.initialize()

Initialize solver.

This method manually initialized the solver and sets initialized to True. Normally calling it is not necessary, as each solver automatically initializes itself when needed.

Returns:

solver initialized state prior to this method call.

Return type:

bool

Fourier3D.integrateEE(num, z1, z2)
Fourier3D.integrateEE(z1, z2)

Get average integral of the squared electric field:

\[\frac 1 2 \int_{z_1}^{z_2} |E|^2.\]

In the lateral direction integration is performed over the whole domain.

Parameters:
  • num (int) – Computed mode number.

  • z1 (float) – Lower vertical bound of the integral.

  • z2 (float) – Upper vertical bound of the integral.

Returns:

Computed integral [V2 / m2].

Return type:

float

Warning

This method may return incorrect results for layers with gain, due to the strong non-Hemiticity!

Fourier3D.integrateHH(num, z1, z2)
Fourier3D.integrateHH(z1, z2)

Get average integral of the squared magnetic field:

\[\frac 1 2 \int_{z_1}^{z_2} |H|^2.\]

In the lateral direction integration is performed over the whole domain.

Parameters:
  • num (int) – Computed mode number.

  • z1 (float) – Lower vertical bound of the integral.

  • z2 (float) – Upper vertical bound of the integral.

Returns:

Computed integral [A2 / m2].

Return type:

float

Warning

This method may return incorrect results for layers with gain, due to the strong non-Hemiticity!

Fourier3D.invalidate()

Set the solver back to uninitialized state.

This method frees the memory allocated by the solver and sets initialized to False.

Fourier3D.layer_eigenmodes(level)

Get eignemodes for a layer at specified level.

This is a low-level function to access diagonalized eigenmodes for a specific layer. Please refer to the detailed solver description for the interpretation of the returned values.

Parameters:

level (float) – Vertical level at which the coefficients are computed.

Return type:

Eigenmodes

Fourier3D.scattering(side, polarization)
Fourier3D.scattering(side, coeffs)
Fourier3D.scattering(side, idx)

Access to the reflected field.

Parameters:
  • side (top or bottom) – Side of the structure where the incident light is present.

  • polarization – Specification of the incident light polarization. It should be a string of the form ‘E#‘, where # is the axis name of the non-vanishing electric field component.

  • idx – Eigenmode number.

  • coeffs – expansion coefficients of the incident vector.

Return type:

Fourier3D.Scattering

Fourier3D.scattering_gaussian(side, polarization, sigma, center=(0.0, 0.0))

Helper function to Access reflected fields for access incidence.

This method is equivalent to calling:

>>> fourier.scattering(side,
...     fourier.gaussian(side, polarization, sigma, center))
Parameters:
  • side (top or bottom) – Side of the structure where the incident light is present.

  • polarization – Specification of the incident light polarization. It should be a string of the form ‘E#‘, where # is the axis name of the non-vanishing electric field component.

  • sigma (float) – Gaussian standard deviation (µm).

  • center (float) – Position of the beam center (µm).

Fourier3D.set_interface(pos)
Fourier3D.set_interface(object, path=None)

Set interface at the bottom of the specified object.

Parameters:
  • object (geometry object) – object to set the interface at.

  • path (path) – Optional path specifying an instance of the object.

Set interface as close as possible to the specified position.

Parameters:

pos (float) – Position, near which the interface will be located.

Fourier3D.set_mode(*args, **kwargs)

Set the mode for specified parameters.

This method should be used if you have found a mode manually and want to insert it into the solver in order to determine the fields. Calling this will raise an exception if the determinant for the specified parameters is too large.

Arguments can be given through keywords only.

Parameters:
  • lam (complex) – Wavelength (nm).

  • k0 (complex) – Normalized frequency (1/µm).

  • klong (complex) – Longitudinal wavevector (1/µm).

  • ktran (complex) – Transverse wavevector (1/µm).

Receiver Details

Fourier3D.inCarriersConcentration = <property object>

Receiver of the carriers concentration required for computations [1/cm³].

You will find usage details in the documentation of the receiver class CarriersConcentrationReceiver3D.

Example

Connect the receiver to a provider from some other solver:

>>> solver.inCarriersConcentration = other_solver.outCarriersConcentration

See also

Receciver class: plask.flow.CarriersConcentrationReceiver3D

Provider class: plask.flow.CarriersConcentrationProvider3D

Data filter: plask.filter.CarriersConcentrationFilter3D

Fourier3D.inEpsilon = <property object>

Receiver of the permittivity tensor required for computations [-].

You will find usage details in the documentation of the receiver class EpsilonReceiver3D.

Example

Connect the receiver to a provider from some other solver:

>>> solver.inEpsilon = other_solver.outEpsilon

See also

Receciver class: plask.flow.EpsilonReceiver3D

Provider class: plask.flow.EpsilonProvider3D

Data filter: plask.filter.EpsilonFilter3D

Fourier3D.inGain = <property object>

Receiver of the material gain required for computations [1/cm].

You will find usage details in the documentation of the receiver class GainReceiver3D.

Example

Connect the receiver to a provider from some other solver:

>>> solver.inGain = other_solver.outGain

See also

Receciver class: plask.flow.GainReceiver3D

Provider class: plask.flow.GainProvider3D

Data filter: plask.filter.GainFilter3D

Fourier3D.inTemperature = <property object>

Receiver of the temperature required for computations [K].

You will find usage details in the documentation of the receiver class TemperatureReceiver3D.

Example

Connect the receiver to a provider from some other solver:

>>> solver.inTemperature = other_solver.outTemperature

See also

Receciver class: plask.flow.TemperatureReceiver3D

Provider class: plask.flow.TemperatureProvider3D

Data filter: plask.filter.TemperatureFilter3D

Provider Details

Fourier3D.outDownwardsLightE(n=0, mesh, interpolation='default') = <property object>

Provider of the computed electric field [V/m].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the electric field on the specified mesh [V/m].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightE = solver.outDownwardsLightE

Obtain the provided field:

>>> solver.outDownwardsLightE(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outDownwardsLightE)
3

See also

Provider class: plask.flow.ModeLightEProvider3D

Receciver class: plask.flow.ModeLightEReceiver3D

Fourier3D.outDownwardsLightH(n=0, mesh, interpolation='default') = <property object>

Provider of the computed magnetic field [A/m].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the magnetic field on the specified mesh [A/m].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightH = solver.outDownwardsLightH

Obtain the provided field:

>>> solver.outDownwardsLightH(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outDownwardsLightH)
3

See also

Provider class: plask.flow.ModeLightHProvider3D

Receciver class: plask.flow.ModeLightHReceiver3D

Fourier3D.outEpsilon(mesh, lam=DEFAULT, interpolation='default') = <property object>

Provider of the computed permittivity tensor [-].

Parameters:
  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

  • lam (float) – Complex wavelength at which the epsilon tensor is computed (nm).

Returns:

Data with the permittivity tensor on the specified mesh [-].

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inEpsilon = solver.outEpsilon

Obtain the provided field:

>>> solver.outEpsilon(mesh, lam=DEFAULT)
<plask.Data at 0x1234567>

See also

Provider class: plask.flow.EpsilonProvider3D

Receciver class: plask.flow.EpsilonReceiver3D

Fourier3D.outGradients(n=0, mesh, interpolation='default') = <property object>

Provider of the computed refractive index gradient functions cos² and cos·sin [-]. Gradients are important if the new factorization rule is used.

Parameters:
  • n (int) – Value number.

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the refractive index gradient functions cos² and cos·sin on the specified mesh [-].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inGradientFunctions = solver.outGradients

Obtain the provided field:

>>> solver.outGradients(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outGradients)
3

See also

Provider class: plask.flow.GradientFunctionsProvider3D

Receciver class: plask.flow.GradientFunctionsReceiver3D

Fourier3D.outLightE(n=0, mesh, interpolation='default') = <property object>

Provider of the computed electric field [V/m].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the electric field on the specified mesh [V/m].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightE = solver.outLightE

Obtain the provided field:

>>> solver.outLightE(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outLightE)
3

See also

Provider class: plask.flow.ModeLightEProvider3D

Receciver class: plask.flow.ModeLightEReceiver3D

Fourier3D.outLightH(n=0, mesh, interpolation='default') = <property object>

Provider of the computed magnetic field [A/m].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the magnetic field on the specified mesh [A/m].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightH = solver.outLightH

Obtain the provided field:

>>> solver.outLightH(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outLightH)
3

See also

Provider class: plask.flow.ModeLightHProvider3D

Receciver class: plask.flow.ModeLightHReceiver3D

Fourier3D.outLightMagnitude(n=0, mesh, interpolation='default') = <property object>

Provider of the computed optical field magnitude [W/m²].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the optical field magnitude on the specified mesh [W/m²].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightMagnitude = solver.outLightMagnitude

Obtain the provided field:

>>> solver.outLightMagnitude(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outLightMagnitude)
3
Fourier3D.outRefractiveIndex(n=0, mesh, lam=DEFAULT, interpolation='default') = <property object>

Provider of the computed refractive index [-].

Parameters:
  • comp (str) – Component of a diagonal refractive index derivative to return. Can be ‘ll’, ‘tt’, ‘vv’, or equivalent using current axes names. For scalar solvers this argument is ignored and can be skipped.

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

  • lam (float) – Complex wavelength at which the refractive index is computed (nm).

Returns:

Data with the refractive index on the specified mesh [-].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inRefractiveIndex = solver.outRefractiveIndex

Obtain the provided field:

>>> solver.outRefractiveIndex(0, mesh, lam=DEFAULT)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outRefractiveIndex)
3
Fourier3D.outUpwardsLightE(n=0, mesh, interpolation='default') = <property object>

Provider of the computed electric field [V/m].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the electric field on the specified mesh [V/m].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightE = solver.outUpwardsLightE

Obtain the provided field:

>>> solver.outUpwardsLightE(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outUpwardsLightE)
3

See also

Provider class: plask.flow.ModeLightEProvider3D

Receciver class: plask.flow.ModeLightEReceiver3D

Fourier3D.outUpwardsLightH(n=0, mesh, interpolation='default') = <property object>

Provider of the computed magnetic field [A/m].

Parameters:
  • n (int) – Number of the mode found with find_mode().

  • mesh (mesh) – Target mesh to get the field at.

  • interpolation (str) – Requested interpolation method.

Returns:

Data with the magnetic field on the specified mesh [A/m].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeLightH = solver.outUpwardsLightH

Obtain the provided field:

>>> solver.outUpwardsLightH(0, mesh)
<plask.Data at 0x1234567>

Test the number of provided values:

>>> len(solver.outUpwardsLightH)
3

See also

Provider class: plask.flow.ModeLightHProvider3D

Receciver class: plask.flow.ModeLightHReceiver3D

Fourier3D.outWavelength(n=0) = <property object>

Provider of the computed wavelength [nm].

Parameters:

n (int) – Value number.

Returns:

Value of the wavelength [nm].

You may obtain the number of different values this provider can return by testing its length.

Example

Connect the provider to a receiver in some other solver:

>>> other_solver.inModeWavelength = solver.outWavelength

Obtain the provided value:

>>> solver.outWavelength(n=0)
1000

Test the number of provided values:

>>> len(solver.outWavelength)
3

See also

Provider class: plask.flow.ModeWavelengthProvider

Receciver class: plask.flow.ModeWavelengthReceiver

Attribute Details

Fourier3D.dct = <property object>

Type of discrete cosine transform for symmetric expansion.

Fourier3D.determinant_type = <property object>

Type of determinant that is computed in root finding.

This attribute specifies what is returned by the get_determinant() method. Regardless of the determinant type, its value must be zero for any mode.

Can take on of the following values that specified what quantity is computed for the characteristic matrix:

eigenvalue

Eigenvalue with the smallest magnitude

full

Determinant of the matrix

Fourier3D.emission = <property object>

Direction of the useful light emission.

Necessary for the over-threshold model to correctly compute the output power. Currently the fields are normalized only if this parameter is set to top or bottom. Otherwise, it is undefined (default) and the fields are not normalized.

Fourier3D.geometry = <property object>

Geometry provided to the solver

Fourier3D.grad_smooth = <property object>

Smoothing parameter for material boundaries gradients (needed for the new expansion rule).

Fourier3D.group_layers = <property object>

Layer grouping switch.

If this property is True, similar layers are grouped for efficiency.

Fourier3D.id = <property object>

Id of the solver object. (read only)

Example

>>> mysolver.id
mysolver:category.type
Fourier3D.initialized = <property object>

True if the solver has been initialized. (read only)

Solvers usually get initialized at the beginning of the computations. You can clean the initialization state and free the memory by calling the invalidate() method.

Fourier3D.interface = <property object>

Matching interface position.

Fourier3D.k0 = <property object>

Normalized frequency of the light (1/µm).

Use this property only if you are looking for anything else than the wavelength,e.g. the effective index of lateral wavevector.

Fourier3D.klong = <property object>

Longitudinal propagation constant of the light (1/µm).

Use this property only if you are looking for anything else than the longitudinal component of the propagation vector and the effective index.

Fourier3D.ktran = <property object>

Transverse propagation constant of the light (1/µm).

Use this property only if you are looking for anything else than the transverse component of the propagation vector.

Fourier3D.lam = <property object>

Wavelength of the light (nm).

Use this property only if you are looking for anything else than the wavelength, e.g. the effective index of lateral wavevector.

Fourier3D.lam0 = <property object>

Reference wavelength.

This is a wavelength at which refractive index is retrieved from the structure. If this parameter is None, material parameters are computed each time, the wavelength changes even slightly (this is most accurate, but can be very inefficient.

Fourier3D.layer_centers = <property object>

Vertical posiotions of centers of each layer.

At these positions materials and temperatures are probed.

Fourier3D.layer_edges = <property object>

Vertical posiotions of egges of each layer.

Fourier3D.modes = <property object>

Computed modes.

Fourier3D.pmls = <property object>

Longitudinal and transverse edge Perfectly Matched Layers boundary conditions.

Attributes:

factor

PML scaling factor.

shape

PML shape order (0 → flat, 1 → linearly increasing, 2 → quadratic, etc.).

dist

PML distance from the structure.

size

PML size.

Return type:

PML

Fourier3D.refine = <property object>

Number of refinement points for refractive index averaging in longitudinal and transverse directions.

Fourier3D.root = <property object>

Configuration of the root searching algorithm.

Attributes:

alpha

Parameter ensuring sufficient decrease of determinant in each step (Broyden method only).

lambd

Minimum decrease ratio of one step (Broyden method only).

initial_range

Initial range size (Muller and Brent methods only).

maxiter

Maximum number of iterations.

maxstep

Maximum step in one iteration (Broyden method only).

method

Root finding method ('muller', 'broyden', or 'brent')

tolf_max

Required tolerance on the function value.

tolf_min

Sufficient tolerance on the function value.

tolx

Absolute tolerance on the argument.

Return type:

RootParams

Fourier3D.rule = <property object>

Permittivity inversion rule.

Can be ‘direct’, ‘inverse’, ‘combined’, or ‘old’. The new ‘combined’ rule is supposed to provide the best convergence. ‘old’ is available for consistency with old results.

Fourier3D.size = <property object>

Orthogonal expansion sizes in longitudinal and transverse directions.

Fourier3D.smooth = <property object>

Smoothing parameter for material boundaries (increases convergence).

Fourier3D.stack = <property object>

Stack of distinct layers.

Fourier3D.symmetry = <property object>

Longitudinal and transverse mode symmetries.

Fourier3D.temp_diff = <property object>

Maximum temperature difference between the layers in one group.

If a temperature in a single layer varies vertically more than this value, the layer is split into two and put into separate groups. If this is empty, temperature gradient is ignored in layers grouping.

Fourier3D.temp_dist = <property object>

Temperature probing step.

If temp_diff is not None, the temperature is laterally probed in points approximately separated by this distance.

Fourier3D.temp_layer = <property object>

Temperature probing step.

If temp_diff is not None, this is the minimum thickness of sublayers resulting from temperature-gradient division.

Fourier3D.transfer = <property object>

Preferred transfer method.

Can take on of the following values:

auto

Automatically choose the best method

reflection

Reflection Transfer Method

admittance

Admittance Transfer Method

impedance

Impedance Transfer Method

Reflection transfer can have optional suffix -admittance (default) or -impedance, in which case the admittance/impedance matching is done at interface (for eigenmode search). You should prefer admittance if electric field is expected to have significant horizontal components (particularly at the interface) i.e. for TE-like modes and impedance for TM-like modes.

Fourier3D.update_gain = <property object>

Recompute dynamic parameters.

If this attribute is set to True, material parameters are always recomputed for layers with gain or permittivity provided by py:inEpsilon. This allows to set ‘lam0’ for better efficiency and still consider slight changes of wavelength, where it matters the most.

Fourier3D.vpml = <property object>

Vertical Perfectly Matched Layers boundary conditions.

Attributes

factor

PML scaling factor.

dist

PML distance from the structure.

size

PML size.

Attribute shape is ignored for vertical PML (it is always 0).

Fourier3D.wavelength = <property object>

Alias for lam