# PLaSK User Manual

#### Page Contents

- EffectiveFrequencyCyl Class
  - `EffectiveFrequencyCyl`
  - Subclasses
  - Methods
  - Attributes
    - Receivers
    - Providers
    - Other
  - Descriptions
    - Method Details
      - `EffectiveFrequencyCyl.clear_modes()`
      - `EffectiveFrequencyCyl.find_mode()`
      - `EffectiveFrequencyCyl.find_modes()`
      - `EffectiveFrequencyCyl.get_delta_neff()`
      - `EffectiveFrequencyCyl.get_determinant()`
      - `EffectiveFrequencyCyl.get_gain_integral()`
      - `EffectiveFrequencyCyl.get_nng()`
      - `EffectiveFrequencyCyl.get_total_absorption()`
      - `EffectiveFrequencyCyl.get_vert_determinant()`
      - `EffectiveFrequencyCyl.initialize()`
      - `EffectiveFrequencyCyl.invalidate()`
      - `EffectiveFrequencyCyl.set_mode()`
      - `EffectiveFrequencyCyl.set_simple_mesh()`
    - Receiver Details
      - `EffectiveFrequencyCyl.inCarriersConcentration`
      - `EffectiveFrequencyCyl.inGain`
      - `EffectiveFrequencyCyl.inTemperature`
    - Provider Details
      - `EffectiveFrequencyCyl.outElectricField`
      - `EffectiveFrequencyCyl.outHeat`
      - `EffectiveFrequencyCyl.outLightE`
      - `EffectiveFrequencyCyl.outLightMagnitude`
      - `EffectiveFrequencyCyl.outLoss`
      - `EffectiveFrequencyCyl.outRefractiveIndex`
      - `EffectiveFrequencyCyl.outWavelength`
    - Attribute Details
      - `EffectiveFrequencyCyl.determinant_mode`
      - `EffectiveFrequencyCyl.emission`
      - `EffectiveFrequencyCyl.geometry`
      - `EffectiveFrequencyCyl.id`
      - `EffectiveFrequencyCyl.initialized`
      - `EffectiveFrequencyCyl.k0`
      - `EffectiveFrequencyCyl.lam0`
      - `EffectiveFrequencyCyl.mesh`
      - `EffectiveFrequencyCyl.modes`
      - `EffectiveFrequencyCyl.root`
      - `EffectiveFrequencyCyl.stripe_root`
      - `EffectiveFrequencyCyl.vat`
      - `EffectiveFrequencyCyl.vlam`

# EffectiveFrequencyCyl Class

class optical.effective.EffectiveFrequencyCyl(name='')

  Calculate optical modes and optical field distribution using the effective frequency method in two-dimensional cylindrical space.

## Subclasses

`Mode` | Detailed information about the mode.

## Methods

`clear_modes`() | Clear all computed modes.
`find_mode`(lam[, m]) | Compute the mode near the specified wavelength.
`find_modes`([start, end, m, resteps, ...]) | Find the modes within the specified range using global method.
`get_delta_neff`(pos) | Return effective index part for lateral propagation at specified radial position.
`get_determinant`(lam[, m]) | Get modal determinant.
`get_gain_integral`([num]) | Get total energy generated in the gain region to a mode in unit time.
`get_nng`(pos) | Return average index at specified radial position.
`get_total_absorption`([num]) | Get total energy absorbed from a mode in unit time.
`get_vert_determinant`(vlam) | Get vertical modal determinant for debugging purposes.
`initialize`() | Initialize solver.
`invalidate`() | Set the solver back to uninitialized state.
`set_mode`(...) | Set the current mode the specified wavelength.
`set_simple_mesh`() | Set simple mesh based on the geometry objects bounding boxes.

## Attributes

### Receivers

`inCarriersConcentration` | Receiver of the carriers concentration required for computations [1/cm³].
`inGain` | Receiver of the material gain required for computations [1/cm].
`inTemperature` | Receiver of the temperature required for computations [K].

### Providers

`outElectricField` | Alias for `outLightE`.
`outHeat` | Provider of the computed heat sources density [W/m³].
`outLightE` | Provider of the computed electric field [V/m].
`outLightMagnitude` | Provider of the computed optical field magnitude [W/m²].
`outLoss` | Provider of the computed modal extinction [1/cm].
`outRefractiveIndex` | Provider of the computed refractive index [-].
`outWavelength` | Provider of the computed wavelength [nm].

### Other

`determinant_mode` | Radial determinant mode.
`emission` | Emission direction.
`geometry` | Geometry provided to the solver
`id` | Id of the solver object.
`initialized` | True if the solver has been initialized.
`k0` | Reference normalized frequency.
`lam0` | Reference wavelength.
`mesh` | Mesh provided to the solver.
`modes` | List of the computed modes.
`root` | Configuration of the root searching algorithm for horizontal component of the mode.
`stripe_root` | Configuration of the root searching algorithm for vertical component of the mode in a single stripe.
`vat` | Radial position of at which the vertical part of the field is calculated.
`vlam` | 'Vertical wavelength' used as a helper for searching vertical modes.

## Descriptions

### Method Details

EffectiveFrequencyCyl.clear_modes()

  Clear all computed modes.

EffectiveFrequencyCyl.find_mode(lam, m=0)

  Compute the mode near the specified wavelength.

  Parameters:

    - lam (complex) – Initial wavelength to for root finging algorithm.

    - m (int) – Angular mode number (O for LP0x, 1 for LP1x, etc.).

  Returns:

    Index in the `modes` list of the found mode.

  Return type:

    integer

EffectiveFrequencyCyl.find_modes(start=0.0, end=0.0, m=0, resteps=256, imsteps=64, eps=1e-06 + 1e-09j)

  Find the modes within the specified range using global method.

  Parameters:

    - m (int) – Angular mode number (O for LP0x, 1 for LP1x, etc.).

    - start (complex) – Start of the search range (0 means automatic).

    - end (complex) – End of the search range (0 means automatic).

    - resteps (integer) – Number of steps on the real axis during the search.

    - imsteps (integer) – Number of steps on the imaginary axis during the search.

    - eps (complex) – required precision of the search.

  Returns:

    List of the indices in the `modes` list of the found modes.

  Return type:

    list of integers

EffectiveFrequencyCyl.get_delta_neff(pos)

  Return effective index part for lateral propagation at specified radial position.

  Parameters:

    pos (float or array of floats) – Radial position to get the effective index.

EffectiveFrequencyCyl.get_determinant(lam, m=0)

  Get modal determinant.

  Parameters:

    - lam (complex of numeric array of complex) – wavelength to compute the determinant at.

    - m (int) – Angular mode number (O for LP0x, 1 for LP1x, etc.).

EffectiveFrequencyCyl.get_gain_integral(num=0)

  Get total energy generated in the gain region to a mode in unit time.

  Parameters:

    num (int) – number of the mode.

  Returns:

    Total generated energy (mW).

EffectiveFrequencyCyl.get_nng(pos)

  Return average index at specified radial position.

  Parameters:

    pos (float or array of floats) – Radial position to get the effective index.

EffectiveFrequencyCyl.get_total_absorption(num=0)

  Get total energy absorbed from a mode in unit time.

  Parameters:

    num (int) – number of the mode.

  Returns:

    Total absorbed energy (mW).

EffectiveFrequencyCyl.get_vert_determinant(vlam)

  Get vertical modal determinant for debugging purposes.

  Parameters:

    - vlam (complex of numeric array of complex) – Vertical wavelength value

    - at. (to compute the determinant) –

  Returns:

    Determinant at the vertical wavelength vlam or an array matching its size.

  Return type:

    complex or list of complex

EffectiveFrequencyCyl.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

EffectiveFrequencyCyl.invalidate()

  Set the solver back to uninitialized state.

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

EffectiveFrequencyCyl.set_mode(lam, m=0)
EffectiveFrequencyCyl.set_mode(lam, loss, m=0)

  Set the current mode the specified wavelength.

  Parameters:

    - lam (float of complex) – Mode wavelength.

    - loss (float) – Mode losses. Allowed only if lam is a float.

    - m (int) – Angular mode number (O for LP0x, 1 for LP1x, etc.).

EffectiveFrequencyCyl.set_simple_mesh()

  Set simple mesh based on the geometry objects bounding boxes.

### Receiver Details

EffectiveFrequencyCyl.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 `CarriersConcentrationReceiverCyl`.

  Example

  Connect the receiver to a provider from some other solver:

      >>> solver.inCarriersConcentration = other_solver.outCarriersConcentration

  See also

  Receciver class: `plask.flow.CarriersConcentrationReceiverCyl`

  Provider class: `plask.flow.CarriersConcentrationProviderCyl`

  Data filter: `plask.filter.CarriersConcentrationFilterCyl`

EffectiveFrequencyCyl.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 `GainReceiverCyl`.

  Example

  Connect the receiver to a provider from some other solver:

      >>> solver.inGain = other_solver.outGain

  See also

  Receciver class: `plask.flow.GainReceiverCyl`

  Provider class: `plask.flow.GainProviderCyl`

  Data filter: `plask.filter.GainFilterCyl`

EffectiveFrequencyCyl.inTemperature = <property object>

  Receiver of the temperature required for computations [K].

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

  Example

  Connect the receiver to a provider from some other solver:

      >>> solver.inTemperature = other_solver.outTemperature

  See also

  Receciver class: `plask.flow.TemperatureReceiverCyl`

  Provider class: `plask.flow.TemperatureProviderCyl`

  Data filter: `plask.filter.TemperatureFilterCyl`

### Provider Details

EffectiveFrequencyCyl.outElectricField = <property object>

  Alias for `outLightE`.

EffectiveFrequencyCyl.outHeat(mesh, interpolation='default') = <property object>

  Provider of the computed heat sources density [W/m³].

  Parameters:

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

    - interpolation (str) – Requested interpolation method.

  Returns:

    Data with the heat sources density on the specified mesh [W/m³].

  Example

  Connect the provider to a receiver in some other solver:

      >>> other_solver.inHeat = solver.outHeat

  Obtain the provided field:

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

  See also

  Provider class: `plask.flow.HeatProviderCyl`

  Receciver class: `plask.flow.HeatReceiverCyl`

EffectiveFrequencyCyl.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.ModeLightEProviderCyl`

  Receciver class: `plask.flow.ModeLightEReceiverCyl`

EffectiveFrequencyCyl.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

  See also

  Provider class: `plask.flow.ModeLightMagnitudeProviderCyl`

  Receciver class: `plask.flow.ModeLightMagnitudeReceiverCyl`

EffectiveFrequencyCyl.outLoss(n=0) = <property object>

  Provider of the computed modal extinction [1/cm].

  Parameters:

    n (int) – Value number.

  Returns:

    Value of the modal extinction [1/cm].

  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.inModeLoss = solver.outLoss

  Obtain the provided value:

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

  Test the number of provided values:

      >>> len(solver.outLoss)
      3

  See also

  Provider class: `plask.flow.ModeLossProvider`

  Receciver class: `plask.flow.ModeLossReceiver`

EffectiveFrequencyCyl.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

  See also

  Provider class: `plask.flow.RefractiveIndexProviderCyl`

  Receciver class: `plask.flow.RefractiveIndexReceiverCyl`

EffectiveFrequencyCyl.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

EffectiveFrequencyCyl.determinant_mode = <property object>

  Radial determinant mode.

  This parameter determines the method used to compute radial determinant. If it is set to ‘transfer’, 2x2 transfer matrix is used to ensure field continuity at the interfaces. For the ‘full’ value, one single matrix is constructed for all the interfaces and its determinant is returned.

EffectiveFrequencyCyl.emission = <property object>

  Emission direction.

EffectiveFrequencyCyl.geometry = <property object>

  Geometry provided to the solver

EffectiveFrequencyCyl.id = <property object>

  Id of the solver object. (read only)

  Example

      >>> mysolver.id
      mysolver:category.type

EffectiveFrequencyCyl.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.

EffectiveFrequencyCyl.k0 = <property object>

  Reference normalized frequency.

EffectiveFrequencyCyl.lam0 = <property object>

  Reference wavelength.

EffectiveFrequencyCyl.mesh = <property object>

  Mesh provided to the solver.

EffectiveFrequencyCyl.modes = <property object>

  List of the computed modes.

  Item Attributes

  `m` | LP_mn mode parameter describing angular dependence.
  `lam` | Alias for `wavelength`.
  `wavelength` | Mode wavelength (nm).
  `power` | Total power emitted into the mode.
  `total_absorption` | Cumulated absorption for the mode (mW).
  `gain_integral` | Total gain for the mode (mW).

  Return type:

    optical.effective.EffectiveFrquencyCyl.Mode

EffectiveFrequencyCyl.root = <property object>

  Configuration of the root searching algorithm for horizontal component of the mode.

  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.
  `stairs` | Number of staircase iterations (Brent method only).

  Return type:

    RootParams

EffectiveFrequencyCyl.stripe_root = <property object>

  Configuration of the root searching algorithm for vertical component of the mode in a single stripe.

  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.
  `stairs` | Number of staircase iterations (Brent method only).

  Return type:

    RootParams

EffectiveFrequencyCyl.vat = <property object>

  Radial position of at which the vertical part of the field is calculated.

  Should be a float number or `None` to compute effective frequencies for all the stripes.

EffectiveFrequencyCyl.vlam = <property object>

  ‘Vertical wavelength’ used as a helper for searching vertical modes.