BesselCyl
---------

.. xml:tag:: <optical solver="BesselCyl"> [BesselCyl]

   Corresponding Python class: :py:class:`optical.modal.BesselCyl`.

   Vectorial optical solver based on the Bessel expansion reflection transfer method.

   :attr required name: Solver name.

   .. xml:contents::

      .. xml:tag:: <geometry> [in optical.BesselCyl]

         Geometry for use by this solver.

         :attr required ref: Name of a Cylindrical geometry defined in the :xml:tag:`<geometry>` section.

      .. xml:tag:: <mesh> [in optical.BesselCyl]

         Optional Ordered mesh used by this solver.

         :attr required ref: Name of a Ordered mesh defined in the :xml:tag:`<grids>` section.

      .. xml:tag:: <expansion> [in optical.BesselCyl]

         Details on Bessel expansion used in computations

         :attr lam0: 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. (float)
         :attr update-gain: If this attribute is set to 'yes', material parameters are always recomputed for layers with gain or permittivity provided by inEpsilon. This allows to set 'lam0' for better efficiency and still consider slight changes of wavelength, where it matters the most. (bool, default is \ ``yes``\ )
         :attr domain: Computational domain. If set to finite, the field is expanded in Fourier-Bessel series over a finite domain (geometry + PMLs). For infinite domain, the field is represented by its Hankel transform. (\ ``finite``\  or \ ``infinite``\ , default is \ ``infinite``\ )
         :attr size: Expansion size. (int, default 12)
         :attr group-layers: Should similar layers be grouped for better performance. (bool, default is \ ``yes``\ )
         :attr temp-diff: 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. (float (K))
         :attr temp-dist: Approximate lateral distance of the points in which the temperature is probed to decide about the temperature difference in one layer. (float (µm), default 0.5 µm)
         :attr temp-layer: Minimum thickness of sublayers resulting from temperature-gradient division. (float (µm), default 0.05 µm)
         :attr integrals-error: Maximum error for Bessel functions integrals. (float, default 1e-06)
         :attr integrals-points: Maximum number of points each element is sampled for computing Bessel functions integrals. (int, default 1000)
         :attr k-method: Method of selecting wavevectors for numerical Hankel transform in infinite domain. (\ ``uniform``\ , \ ``nonuniform``\ , \ ``laguerre``\ , or \ ``manual``\ , default is \ ``nonuniform``\ )
         :attr k-max: Maximum wavevector used in infinite domain relative to the wavelength. (float, default 5)
         :attr k-scale: Scale factor for wavevectors used in infinite domain. (float, default 1)
         :attr k-list: A list of wavevectors ranges. If no weights are given, the actual wavevectors used in the computations are the avrages of each two adjacent values specified here and the integration weights are the sizes of each interval. (list of floats)
         :attr k-weights: Weights for manual wavevectors. (list of floats)
         :attr rule: Expansion rule for coefficients matrix. Can be direct or inverse. Inverse rule is proven to provide better convergence and should be used in almost every case. (\ ``direct``\ , \ ``combined1``\ , \ ``combined2``\ , or \ ``old``\ , default is \ ``direct``\ )

      .. xml:tag:: <mode> [in optical.BesselCyl]

         Mode properties.

         :attr lam: Light wavelength. For finding modes this parameter is ignored. However, it is important for reflection and transmission computation. (float (nm))
         :attr emission: Direction of the useful light emission. Necessary for the over-threshold model to correctly compute the output power. In this solver only top and bottom emission is possible. (\ ``undefined``\ , \ ``top``\ , or \ ``bottom``\ , default is \ ``undefined``\ )

      .. xml:tag:: <interface> [in optical.BesselCyl]

         Matching interface position in the stack.

         :attr position: Interface will be located as close as possible to the vertical coordinate specified in this attribute. (float (µm))
         :attr object: Name of the geometry object below which the interface is located. (geometry object)
         :attr path: Optional path name, specifying particular instance of the object given in the object attribute. (geometry path)

      .. xml:tag:: <transfer> [in optical.BesselCyl]

         Vertical field transfer settings.

         :attr method: Layers transfer algorithm. Can be either reflection transfer, admittance/impedance transfer or automatic, in which case the reflection computations will use reflection transfer and eigenmode search is done with admittance transfer. 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. (\ ``auto``\ , \ ``admittance``\ , \ ``impedance``\ , \ ``reflection``\ , \ ``reflection-impedance``\ , or \ ``reflection-admittance``\ , default is \ ``auto``\ )
         :attr determinant: This attribute specified what is returned by the \ ``get_determinant``\  method. Regardless of the determinant type, its value must be zero for any mode. Depending on the determinant type value, the computed value is either the characteristic matrix eigenvalue with the smallest magniture or the full determinant of this matrix. (\ ``eigenvalue``\ , \ ``full``\ , or \ ``eigen``\ , default is \ ``eigenvalue``\ )

      .. xml:tag:: <vpml> [in optical.BesselCyl]

         Vertical absorbing perfectly matched layer boundary conditions parameters.

         :attr factor: PML scaling factor. (complex, default is \ ``(1-2j)``\ )
         :attr dist: PML distance from the structure. (float (µm), default 10.0 µm)
         :attr size: PML size. (float (µm), default 2.0 µm)

      .. xml:tag:: <root> [in optical.BesselCyl]

         Parameters of the global root-finding algorithm.

         :attr method: Root finding algorithm (Muller's method or Broyden's method). (\ ``muller``\ , \ ``broyden``\ , or \ ``brent``\ , default is \ ``muller``\ )
         :attr tolx: Maximum change of the argument which is allowed for convergent solution. (float, default 1e-06)
         :attr tolf-min: Minimum value of the determinant sufficient to assume convergence. (float, default 1e-07)
         :attr tolf-max: Maximum value of the determinant required to assume convergence. (float, default 1e-05)
         :attr maxstep: Maximum step in one iteration of root finding. Significant for the Broyden method only. (float, default 0.1)
         :attr maxiter: Maximum number of root finding iterations. (int, default 500)
         :attr alpha: Parameter ensuring sufficient decrease of determinant in each step (Broyden method only). (float, default 1e-07)
         :attr lambda: Minimum decrease ratio of one step (Broyden method only). (float, default 1e-08)
         :attr initial-range: Initial range size (Muller method only). (complex, default 0.001)

      .. xml:tag:: <pml> [in optical.BesselCyl]

         Side absorbing perfectly matched layer boundary conditions parameters.

         :attr factor: PML scaling factor. (complex, default 1.0)
         :attr shape: PML shape order (0 → flat, 1 → linearly increasing, 2 → quadratic, etc.). (float, default 1)
         :attr dist: PML distance from the structure. (float (µm), default 20.0 µm)
         :attr size: PML size. (float (µm), default 0.0 µm)
