Electromagnetic simulations in python
  • Python 99.4%
  • Shell 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
jan fcca9e3ae5 Fix waveguide eigenvalue derivation
Thanks to Rafael Diaz Fuentes and Paolo Pintus for catching and
correcting these!
2021-07-05 15:01:08 -07:00
examples Change comments to new format 2020-01-07 21:31:16 -08:00
meanas Fix waveguide eigenvalue derivation 2021-07-05 15:01:08 -07:00
pdoc_templates improve doc generation and fix code links 2021-07-05 14:58:39 -07:00
.flake8 style and type fixes (per mypy and flake8) 2020-10-16 19:16:13 -07:00
.gitignore add .mypy_cache to gitignore 2020-06-11 19:28:37 -07:00
LICENSE.md add license 2016-04-13 04:06:15 -07:00
make_docs.sh improve doc generation and fix code links 2021-07-05 14:58:39 -07:00
MANIFEST.in remove old VERSION file from manifest 2021-01-09 01:07:31 -08:00
README.md Update repo location 2020-02-19 18:56:56 -08:00
setup.py add py.typed to enable downstream typechecking 2020-11-03 01:15:58 -08:00

meanas

meanas is a python package for electromagnetic simulations

** UNSTABLE / WORK IN PROGRESS **

Formerly known as fdfd_tools.

This package is intended for building simulation inputs, analyzing simulation outputs, and running short simulations on unspecialized hardware. It is designed to provide tooling and a baseline for other, high-performance purpose- and hardware-specific solvers.

Contents

  • Finite difference frequency domain (FDFD)
    • Library of sparse matrices for representing the electromagnetic wave equation in 3D, as well as auxiliary matrices for conversion between fields
    • Waveguide mode operators
    • Waveguide mode eigensolver
    • Stretched-coordinate PML boundaries (SCPML)
    • Functional versions of most operators
    • Anisotropic media (limited to diagonal elements eps_xx, eps_yy, eps_zz, mu_xx, ...)
    • Arbitrary distributions of perfect electric and magnetic conductors (PEC / PMC)
  • Finite difference time domain (FDTD)
    • Basic Maxwell time-steps
    • Poynting vector and energy calculation
    • Convolutional PMLs

This package does not provide a fast matrix solver, though by default meanas.fdfd.solvers.generic(...) will call scipy.sparse.linalg.qmr(...) to perform a solve. For 2D FDFD problems this should be fine; likewise, the waveguide mode solver uses scipy's eigenvalue solver, with reasonable results.

For solving large (or 3D) FDFD problems, I recommend a GPU-based iterative solver, such as opencl_fdfd or those included in MAGMA. Your solver will need the ability to solve complex symmetric (non-Hermitian) linear systems, ideally with double precision.

Installation

Requirements:

  • python 3 (tests require 3.7)
  • numpy
  • scipy

Install from PyPI with pip:

pip3 install 'meanas[test,examples]'

Development install

Install python3.7, virtualenv, and git:

# This is for Debian/Ubuntu/other-apt-based systems; you may need an alternative command
sudo apt install python3.7 virtualenv build-essential python3.7-dev git

If python 3.7 is not your default python3 version, create a virtualenv:

# Check python3 version:
python3 --version
# output on my system: Python 3.7.5rc1
# If this indicates a version >= 3.7, you can skip all
#  the steps involving virtualenv or referencing the venv/ directory

# Create a virtual environment using python3.7 and place it in the directory `venv/`
virtualenv -p python3.7 venv

In-place development install:

# Download using git
#git clone https://mpxd.net/code/jan/meanas.git

# If you are using a virtualenv, activate it
source venv/bin/activate

# Install in-place (-e, editable) from ./meanas, including testing and example dependencies ([test, examples])
pip3 install --user -e './meanas[test,examples]'

# Run tests
cd meanas
python3 -m pytest -rsxX | tee test_results.txt

See also:

Use

See examples/ for some simple examples; you may need additional packages such as gridlock to run the examples.