LightWave2D
Meta |
||
Testing |
||
PyPi |
||
Anaconda |
LightWave2D is a software designed for comprehensive 2D Finite-Difference Time-Domain (FDTD) simulations, featuring a user-friendly installation and operation process. The characterization of wave propagation, scattering, and diffraction within LightWave2D is determined by a set of specific components, as illustrated in the subsequent figure.
LightWave2D integrates various components, including waveguides, scatterers (squares, circles, ellipses, triangles, lenses), gratings, and resonators. Additional parameters governing the simulation are contingent upon the attributes of the components and the simulation setup.
Key Features
Intuitive API for configuring simulations.
Support for waveguides, scatterers, gratings, and resonators.
Built-in tools for rendering field animations.
Extensive gallery of examples in the documentation.
Documentation
All the latest available documentation is available here or you can click the following badge:
Installation
Install the published package with pip:
>>> pip install LightWave2D
Building Documentation Locally
To generate the HTML documentation on your machine, install the optional dependencies and run:
pip install .[documentation]
cd docs && make html
firefox build/html/index.html
Coding examples
LightWave2D was developed with the aim of being an intuitive and easy to use tool. All dimensional arguments can now be provided using pint quantities or strings with units. Below are two examples that illustrate this:
Spherical scatterer
from LightWave2D.grid import Grid
from LightWave2D.experiment import Experiment
from MPSPlots import colormaps
from TypedUnit import ureg
grid = Grid(
resolution=0.1 * ureg.micrometer,
size_x=32 * ureg.micrometer,
size_y=20 * ureg.micrometer,
n_steps=300
)
experiment = Experiment(grid=grid)
scatterer = experiment.add_circle(
position=('30%', '50%'),
epsilon_r=2,
radius=3 * ureg.micrometer
)
source = experiment.add_line_source(
wavelength=1550 * ureg.nanometer,
position_0=('10%', '100%'),
position_1=('10%', '0%'),
amplitude=10,
)
experiment.add_pml(order=1, width="10%", sigma_max=5000 * ureg.siemens / ureg.meter)
experiment.run()
animation = experiment.render_propagation(
skip_frame=5,
colormap=colormaps.polytechnique.red_black_blue
)
animation.save('./spherical_scatterer.gif', writer='Pillow', fps=10)
Ring resonator
from LightWave2D.grid import Grid
from LightWave2D.experiment import Experiment
from MPSPlots.colormaps import polytechnique
from TypedUnit import ureg
grid = Grid(
resolution=0.1 * ureg.micrometer,
size_x=50 * ureg.micrometer,
size_y=30 * ureg.micrometer,
n_steps=800
)
experiment = Experiment(grid=grid)
scatterer = experiment.add_ring_resonator(
position=('35%', '50%'),
epsilon_r=1.5,
inner_radius=4 * ureg.micrometer,
width=2 * ureg.micrometer
)
source = experiment.add_point_source(
wavelength=1550 * ureg.nanometer,
position=('25%', '50%'),
amplitude=100,
)
experiment.add_pml(order=1, width="10%", sigma_max=5000 * ureg.siemens / ureg.meter)
experiment.run()
animation = experiment.render_propagation(skip_frame=5, colormap=polytechnique.red_black_blue)
animation.save('./resonator.gif', writer='Pillow', fps=10)
Lens
from LightWave2D.grid import Grid
from LightWave2D.experiment import Experiment
from MPSPlots import colormaps
from TypedUnit import ureg
grid = Grid(
resolution=0.1 * ureg.micrometer,
size_x=60 * ureg.micrometer,
size_y=30 * ureg.micrometer,
n_steps=1200
)
experiment = Experiment(grid=grid)
scatterer = experiment.add_lens(
position=('35%', '50%'),
epsilon_r=2,
curvature=10 * ureg.micrometer,
width=5 * ureg.micrometer
)
source = experiment.add_point_source(
wavelength=1550 * ureg.nanometer,
position=('10%', '50%'),
amplitude=10,
)
experiment.add_pml(order=1, width="10%", sigma_max=5000 * ureg.siemens / ureg.meter)
experiment.run()
experiment.plot_frame(
frame_number=-1,
enhance_contrast=5,
colormap=colormaps.polytechnique.red_black_blue
)
animation = experiment.render_propagation(
skip_frame=5,
colormap=colormaps.polytechnique.red_black_blue
)
animation.save('./lens.gif', writer='Pillow', fps=10)
Plenty of other examples are available online, I invite you to check the examples section of the documentation.
Testing
To test locally (with cloning the GitHub repository) you’ll need to install the dependencies and run the coverage command as
>>> git clone https://github.com/MartinPdeS/LightWave2D.git
>>> cd LightWave2D
>>> pip install -r requirements/requirements.txt
>>> coverage run --source=LightWave2D --module pytest --verbose tests
>>> coverage report --show-missing
Contributing
Contributions are welcome! Feel free to open an issue or submit a pull request on GitHub.
Contact Information
As of 2024 the project is still under development if you want to collaborate it would be a pleasure. I encourage you to contact me.
LightWave2D was written by Martin Poinsinet de Sivry-Houle .
Metadata
Release files for LightWave2D 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 23.8 MB
Release files / lightwave2d-0.7.0-cp313-cp313-win_amd64.whl
| Download URL | lightwave2d-0.7.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 6.0 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9c8efab301d1069ddd473b11e69097b5d78d477072a4cff88c37cb61dc54b471
|
|
BLAKE2b-256 checksum How to use checksums |
cbb0270d087ee774eb105d1b42e64e099f1961e4d2b7fb28de97c3cb1d70f4d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | lightwave2d-0.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d1655e0104a21f0070346547cf9fa2b3089b5b3071e005fe90864ee660cbdcf8
|
|
BLAKE2b-256 checksum How to use checksums |
e0cbb718ad5e8cfa04649e80a1d7ffb626c21626dea6989c8e35ece394856ba6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp313-cp313-macosx_26_0_arm64.whl
| Download URL | lightwave2d-0.7.0-cp313-cp313-macosx_26_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.13 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d51be49a01f56cfee6a2373e1358ab64b748083d1a91e71db415b76b8801c3b5
|
|
BLAKE2b-256 checksum How to use checksums |
eb576f0d4cd9c80a58245e656120446f11c1504d18fea872ac406d210b413a2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp312-cp312-win_amd64.whl
| Download URL | lightwave2d-0.7.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a3be067542b7c0e6b444ae0e5478ca026d12f096b4363039cd075c8b866ad004
|
|
BLAKE2b-256 checksum How to use checksums |
9b1c47e4ef91e6bc967d377a225fffa34fd9f346be28608d6239b3d3ec77c418
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | lightwave2d-0.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a5e2812cd115562a6b8e2cc6de9076c8668c36ee7589bdcf99f4e55123a050ae
|
|
BLAKE2b-256 checksum How to use checksums |
1c8b001cde800aa02edd8cd2e664e42ffa340ed0ff8f61e34cf2979512bd1415
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp312-cp312-macosx_26_0_arm64.whl
| Download URL | lightwave2d-0.7.0-cp312-cp312-macosx_26_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.12 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cc975b60bb24be94e707350904a541b1d74df3c40cb2a8e10bd546a431c40efb
|
|
BLAKE2b-256 checksum How to use checksums |
35f79ec755fd3228d7dd9dbd200f98d8998f47a9844169b44649f570b73f4338
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp311-cp311-win_amd64.whl
| Download URL | lightwave2d-0.7.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a6bfe913312987267ba0bc5a6ccea0dbe0e17cebcb8427a57ad8dd91841dc10a
|
|
BLAKE2b-256 checksum How to use checksums |
40098ae15569f1d12b701ef29dde92034f9e7a6e4ea1781c4b4a22df001072d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | lightwave2d-0.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4e92cf60f983c5db6b4d86bcab8c173268c13982201c326204498ef59bfd2add
|
|
BLAKE2b-256 checksum How to use checksums |
3d3a48d3f8d452338cc35a9a98a5db19ca3f5f8af1fadfaf9cc2190291db75c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / lightwave2d-0.7.0-cp311-cp311-macosx_26_0_arm64.whl
| Download URL | lightwave2d-0.7.0-cp311-cp311-macosx_26_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2e78e5a1832f52602f11cb589cec58d26efabcc1244538c36ef29795700eb645
|
|
BLAKE2b-256 checksum How to use checksums |
ac4c64fb4d75a00253a446e1e8a2e812a8482d35377dfbdb30325e19bfe88586
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|