Multipoles
This class provides the mathematical framework for evaluating the
multipolar fields \(A_{j m_z}\) of
electric or magnetic type using vector spherical harmonics. It supports
field visualization in circular polarization and integrates with domains
defined by the domain_class
. The implementation follows the
formalism of M.E. Rose(Rose
1957).
Creating an instance of a Multipoles
object sets up the
spherical harmonics, coordinate systems, and coupling factors needed to
evaluate and visualize multipolar radiation patterns.
Multipoles(l_max, m_max, wl, domain, nr = 1, radius = None)
int — maximum total angular momentum quantum number \(\l\).
int — maximum quantum number for the z-projection of the AM \(m_z\).
float — wavelength of incident field (in microns).
domain_class
object — spatial domain used for evaluating
the fields.
float — relative refractive index of the scatterer (default is 1).
float — optional radius of the scatterer. If not specified, defaults to 25% of domain size.
Returns the spherical Hankel function of the first kind of order \(n\), or its derivative if
derivative=True
. Defined as \(h_n(kr) = j_n(kr) + i y_n(kr)\).
Computes the Clebsch-Gordan coefficient \(\langle j_1, m_1; j_2, m_2 | j, m \rangle\)
using Wigner 3j symbols: \[C(j_1 j_2 j; m_1
m_2 m) = (-1)^{j_1 - j_2 + m} \sqrt{2j + 1}
\begin{pmatrix}
j_1 & j_2 & j \\
m_1 & m_2 & -m
\end{pmatrix}\]
Returns the Wigner 3j symbol for given quantum numbers. Used internally
by clebsch_gordan
.
Normalization coefficients for vector spherical harmonics: \[C_{l+1}^{(e)} = -\sqrt{\frac{l}{2l+1}}, \quad
C_{l-1}^{(e)} = \sqrt{\frac{l+1}{2l+1}}, \quad
C_l^{(m)} = 1\]
Computes the normalized associated Legendre functions \(P_{l}^{m}(\cos\theta)\) using
scipy.assoc_legendre_p_all()
, with optional derivative.
Returns a 3D array with shape \((l+1,\, m+1,\,
\text{len}(\theta))\).
Computes the scalar spherical harmonic \(Y_l^m(\theta, \phi)\) using the Rose
convention: \[Y_l^m (\theta, \phi) =
\frac{1}{\sqrt{2\pi}} P_l^m(\cos\theta) e^{im\phi}\]
Computes the components \(\xi_+, \xi_0,
\xi_-\) of the vector spherical harmonics: \[\mathbf{T}_{l1j} = \sum_\mu C(l1j; M - \mu, \mu)
Y_l^{M - \mu} \boldsymbol{\xi}_\mu\]
Computes the electric and magnetic field components of a multipole \(A_{lm_z}\) as follows, using the given
spatial function (e.g., ’hankel’
, ’bessel’
,
’both’
) for outgoing, standing or both multipole types.
(Rose 1957)
\[\begin{aligned}
\text{Magnetic:}\qquad&\mathbf{A}^{(m)}_{lm_z}=C_l^{(m)}\zeta_l(kr)\mathbf{T}_{llm_z}(\theta,\varphi)\\
\text{Electric:}\qquad&\mathbf{A}^{(e)}_{lm_z}=C_{l+1}^{(e)}\zeta_{l+1}(kr)\mathbf{T}_{l,l+1,m_z}(\theta,\varphi)+
C_{l-1}^{(e)}\zeta_{l-1}(kr)\mathbf{T}_{l,l-1,m_z}(\theta,\varphi),
\end{aligned}\]
Returns a dict object with the two parities as keys, each holding a
numpy
array with each polarization component of the
electric field.
{
"magnetic": array([xi_+, xi_0, xi_-]),
"electric": array([xi_+, xi_0, xi_-])
}
Visualizes the field distribution for a given multipole defined by
integers \(l\) and \(m\). Options:
type:
"magnetic"
or
"electric"
interaction:
"scattering"
,
"internal"
, or "both"
, dictating which
spatial function to use in the above function, i.e. whether the
multipole is outgoing (contributing to the scattered field), standing
(contributing to the internal field) or both.
plot:
"components"
to show each \(\xi\)-component, or "total"
for total intensity
globalnorm:
whether to normalize across all
planes