2019-11-24 23:47:31 -08:00
|
|
|
"""
|
|
|
|
Tools for finite difference frequency-domain (FDFD) simulations and calculations.
|
|
|
|
|
|
|
|
These mostly involve picking a single frequency, then setting up and solving a
|
|
|
|
matrix equation (Ax=b) or eigenvalue problem.
|
|
|
|
|
|
|
|
|
|
|
|
Submodules:
|
|
|
|
|
|
|
|
- `operators`, `functional`: General FDFD problem setup.
|
|
|
|
- `solvers`: Solver interface and reference implementation.
|
|
|
|
- `scpml`: Stretched-coordinate perfectly matched layer (scpml) boundary conditions
|
|
|
|
- `waveguide_2d`: Operators and mode-solver for waveguides with constant cross-section.
|
|
|
|
- `waveguide_3d`: Functions for transforming `waveguide_2d` results into 3D.
|
2020-01-13 01:53:24 -08:00
|
|
|
|
|
|
|
|
2020-02-19 18:42:06 -08:00
|
|
|
================================================================
|
|
|
|
|
|
|
|
From the "Frequency domain" section of `meanas.fdmath`, we have
|
|
|
|
|
|
|
|
$$
|
|
|
|
\\begin{aligned}
|
|
|
|
\\tilde{E}_{l, \\vec{r}} &= \\tilde{E}_{\\vec{r}} e^{-\\imath \\omega l \\Delta_t} \\\\
|
|
|
|
\\tilde{J}_{l, \\vec{r}} &= \\tilde{J}_{\\vec{r}} e^{-\\imath \\omega (l - \\frac{1}{2}) \\Delta_t} \\\\
|
|
|
|
\\hat{\\nabla} \\times (\\mu^{-1}_{\\vec{r} + \\frac{1}{2}} \\cdot \\tilde{\\nabla} \\times \\tilde{E}_{\\vec{r}})
|
|
|
|
-\\Omega^2 \\epsilon_{\\vec{r}} \\cdot \\tilde{E}_{\\vec{r}} &= \\imath \\Omega \\tilde{J}_{\\vec{r}} \\\\
|
|
|
|
\\Omega &= 2 \\sin(\\omega \\Delta_t / 2) / \\Delta_t
|
|
|
|
\\end{aligned}
|
|
|
|
$$
|
|
|
|
|
2020-01-13 01:53:24 -08:00
|
|
|
|
|
|
|
# TODO FDFD?
|
|
|
|
# TODO PML
|
|
|
|
|
|
|
|
|
2019-11-24 23:47:31 -08:00
|
|
|
"""
|
|
|
|
from . import solvers, operators, functional, scpml, waveguide_2d, waveguide_3d
|
2019-10-27 15:44:28 -07:00
|
|
|
# from . import farfield, bloch TODO
|