Fourier3D
---------

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

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

   Vectorial optical solver based on the plane-wave reflection transfer method.

   :attr required name: Solver name.

   .. xml:contents::

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

         Geometry for use by this solver.

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

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

         Details on Fourier 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 (nm))
         :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 size: Expansion sizes along longitudinal and transverse directions. You cannot set this attribute together with ‘Longitudinal expansion size’ (\ ``size-long``\ ) and ‘Transverse expansion size’ (\ ``size-tran``\ ) (int, default 12)
         :attr size-long: Expansion size along longitudinal axis. You cannot set this attribute together with ‘Expansion sizes’ (\ ``size``\ ). (int)
         :attr size-tran: Expansion size along transverse axis. You cannot set this attribute together with ‘Expansion sizes’ (\ ``size``\ ). (int)
         :attr refine: Number of refinement points for refractive index averaging along longitudinal and transverse directions. You cannot set this attribute together with ‘Longitudinal averaging points’ (\ ``refine-long``\ ) and ‘Transverse averaging points’ (\ ``refine-tran``\ ) . (int, default 16)
         :attr refine-long: Number of refinement points for refractive index averaging along longitudinal axis. You cannot set this attribute together with ‘Averaging points’ (\ ``refine``\ ). (int)
         :attr refine-tran: Number of refinement points for refractive index averaging along transverse axis. You cannot set this attribute together with ‘Averaging points’ (\ ``refine``\ ). (int)
         :attr rule: Permittivity inversion rule. The new rule is supposed to provide the best convergence. 'old' is available for consistency with old results. (\ ``direct``\ , \ ``inverse``\ , \ ``combined``\ , or \ ``old``\ , default is \ ``direct``\ )
         :attr grad-smooth: Smoothing parameter for refreactive index gradients. This is needed for the new expansion rule. (float, default 0.001)
         :attr dct: Type of discrete cosine transform for symmetric expansion. (\ ``1``\  or \ ``2``\ , default 2)
         :attr smooth: Smoothing parameter for material boundaries (increases convergence). (float, default 0.0)
         :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)

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

         Mode properties.

         :attr lam: Light wavelength. (float (nm))
         :attr k-long: Longitudinal wave-vector component. (float, default 0)
         :attr k-tran: Transverse wave-vector component. (float, default 0)
         :attr symmetry-long: Mode symmetry along longitudinal axis. Specify a symmetric field component here (e.g. '\ *Etran*\ ', '\ *Hx*\ '). (\ ``none``\ , \ ``Etran``\ , \ ``Elong``\ , \ ``Ex``\ , \ ``Ey``\ , \ ``Ez``\ , \ ``Er``\ , \ ``Ep``\ , \ ``Et``\ , \ ``El``\ , \ ``Htran``\ , \ ``Hlong``\ , \ ``Hx``\ , \ ``Hy``\ , \ ``Hz``\ , \ ``Hr``\ , \ ``Hp``\ , \ ``Ht``\ , or \ ``Hl``\ , default is \ ``none``\ )
         :attr symmetry-tran: Mode symmetry along transverse axis. Specify a symmetric field component here (e.g. '\ *Etran*\ ', '\ *Hx*\ '). (\ ``none``\ , \ ``Etran``\ , \ ``Elong``\ , \ ``Ex``\ , \ ``Ey``\ , \ ``Ez``\ , \ ``Er``\ , \ ``Ep``\ , \ ``Et``\ , \ ``El``\ , \ ``Htran``\ , \ ``Hlong``\ , \ ``Hx``\ , \ ``Hy``\ , \ ``Hz``\ , \ ``Hr``\ , \ ``Hp``\ , \ ``Ht``\ , or \ ``Hl``\ , default is \ ``none``\ )
         :attr emission: Direction of the useful light emission. Necessary for the over-threshold model to correctly compute the output power. Currently, the fields are normalized only for top and bottom emission. (\ ``undefined``\ , \ ``top``\ , or \ ``bottom``\ , default is \ ``undefined``\ )

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

         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:: <pmls> [in optical.Fourier3D]

         Side absorbing perfectly matched layer boundary conditions parameters.

         :attr factor: PML scaling factor. (complex, default is \ ``(1-2j)``\ )
         :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 0.5 µm)
         :attr size: PML size. (float (µm), default 1.0 µm)

         .. xml:tag:: <long> [in optical.Fourier3D]

            Parameters of PMLs in longitudinal direction. This overrides the global side PMLs configuration.

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

         .. xml:tag:: <tran> [in optical.Fourier3D]

            Parameters of PMLs in transverse direction. This overrides the global side PMLs configuration.

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

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

         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.Fourier3D]

         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.Fourier3D]

         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)
