solprop.coupling.outcouple#

Synthesise a guide’s exit field on a spatial grid (SEP 31, sections 4.1 and 5.2).

Outcouple turns an ordinary modal plane – true-power coefficients with their scalar profiles (ScalarModeBasis) – into a radial or Cartesian FieldPlane of the physical field, under an explicitly declared forward interface model. No Fresnel factor is implied: the one model offered, "matched", is the guide’s exit into a medium of its own core index, where the transverse field is continuous; a change of index is a separate PlanarInterface element in the transport sequence that follows, applied once.

The guide’s field per true-power coefficient is \(\sqrt{2/(\varepsilon_0c\operatorname{Re}n_{\rm eff})}\,v_m\) (docs/dev/ conventions.md section 4). It is written into the grid’s columns through each profile’s closed-form transform (target_columns()), so a profile’s kink at the core radius is not sampled; what the grid’s spectral window cannot hold is reported, not renormalised.

Module Attributes

OutcouplingModel

A declared forward interface model of Outcouple.

Classes

Outcouple(space[, interface, medium, index])

Synthesise an ordinary guide's exit field onto a spatial grid.

OutcoupleResult(plane, modal, synthesised, ...)

The synthesised exit plane and its energy account.

class solprop.coupling.outcouple.Outcouple(space, interface='matched', medium=None, index=None)[source]#

Bases: object

Synthesise an ordinary guide’s exit field onto a spatial grid.

Attributes:
spacesolprop.grid.RadialGrid or solprop.grid.FreeGrid

The grid of the synthesised plane, centred on the guide’s axis.

interface{‘matched’}

The declared forward interface model. 'matched': the exit medium has the guide’s core index, so the transverse field is continuous and there is no reflection; any other exit medium is refused, and its index change is a separate planar interface.

mediumsolprop.spatial.SpatialMedium or None, optional

The exit medium, whose index must match the core’s.

indexnumpy.ndarray or None, optional

Its real phase index at each bin instead, shape (n_omega,); by default the guide’s own core index.

Raises:
CouplingError

For both a medium and an index.

Examples

>>> from solprop.grid import RadialGrid
>>> Outcouple(RadialGrid(300e-6, 128))
Outcouple(matched, RadialGrid)
apply(plane)[source]#

Synthesise a modal plane’s exit field on the grid.

Parameters:
planesolprop.coupling.plane.FieldPlane

An ordinary modal plane carrying its scalar profiles (read with field_plane(run, source=simulation)).

Returns:
OutcoupleResult

The spatial plane and its energy account.

Raises:
CouplingError

If the plane is not modal or has no profiles, or the exit medium’s index is not the core’s.

index: Float[ndarray, 'n_omega'] | None = None#
interface: Literal['matched'] = 'matched'#
medium: SpatialMedium | None = None#
space: RadialGrid | FreeGrid#
class solprop.coupling.outcouple.OutcoupleResult(plane, modal, synthesised, window)[source]#

Bases: object

The synthesised exit plane and its energy account.

Attributes:
planesolprop.coupling.plane.FieldPlane

The radial or Cartesian plane of the exit field.

modalnumpy.ndarray

The modal plane’s energy per bin in its native metric, J, shape (n_omega,).

synthesisednumpy.ndarray

The synthesised plane’s energy per bin in its axial-admittance metric, J, shape (n_omega,). It differs from modal by the scalar model’s metric defect (core index against effective index), the profiles’ angular content and what the grid’s window misses; nothing is renormalised.

windowfloat

The largest departure of the profiles’ Gram in the grid’s spectral window from the identity: the share of a profile the grid cannot represent.

modal: Float[ndarray, 'n_omega']#
plane: FieldPlane#
synthesised: Float[ndarray, 'n_omega']#
window: float#
solprop.coupling.outcouple.OutcouplingModel#

A declared forward interface model of Outcouple.

alias of Literal[‘matched’]