All Projects → fancompute → Angler

fancompute / Angler

Licence: mit
Frequency-domain photonic simulation and inverse design optimization for linear and nonlinear devices

Programming Languages

python
139335 projects - #7 most used programming language
optics
23 projects

Projects that are alternatives of or similar to Angler

qpmad
ROS-compatible Eigen-based Goldfarb-Idnani quadratic programming solver
Stars: ✭ 41 (-45.33%)
Mutual labels:  optimization, solver
Componentarrays.jl
Arrays with arbitrarily nested named components.
Stars: ✭ 72 (-4%)
Mutual labels:  simulation, optimization
RAWSim-O
A simulation framework for Robotic Mobile Fulfillment Systems
Stars: ✭ 82 (+9.33%)
Mutual labels:  simulation, optimization
Spirit
Atomistic Spin Simulation Framework
Stars: ✭ 67 (-10.67%)
Mutual labels:  simulation, optimization
Awesome Robotics Libraries
😎 A curated list of robotics libraries and software
Stars: ✭ 1,159 (+1445.33%)
Mutual labels:  simulation, optimization
photontorch
Highly parallel simulation and optimization of photonic circuits in time and frequency domain based on the deep-learning framework PyTorch
Stars: ✭ 29 (-61.33%)
Mutual labels:  simulation, optimization
Simpeg
Simulation and Parameter Estimation in Geophysics - A python package for simulation and gradient based parameter estimation in the context of geophysical applications.
Stars: ✭ 283 (+277.33%)
Mutual labels:  simulation, optimization
ProxSDP.jl
Semidefinite programming optimization solver
Stars: ✭ 69 (-8%)
Mutual labels:  optimization, solver
Cppnumericalsolvers
a lightweight C++17 library of numerical optimization methods for nonlinear functions (Including L-BFGS-B for TensorFlow)
Stars: ✭ 638 (+750.67%)
Mutual labels:  solver, optimization
Vroom
Vehicle Routing Open-source Optimization Machine
Stars: ✭ 533 (+610.67%)
Mutual labels:  solver, optimization
Totsu
First-order conic solver for convex optimization problems
Stars: ✭ 18 (-76%)
Mutual labels:  optimization, solver
Su2
SU2: An Open-Source Suite for Multiphysics Simulation and Design
Stars: ✭ 731 (+874.67%)
Mutual labels:  simulation, optimization
siconos
Simulation framework for nonsmooth dynamical systems
Stars: ✭ 120 (+60%)
Mutual labels:  simulation, optimization
toy code
No description or website provided.
Stars: ✭ 78 (+4%)
Mutual labels:  simulation, optimization
cplex-example
Solving a TSP with the CPLEX C++ API.
Stars: ✭ 40 (-46.67%)
Mutual labels:  optimization, solver
osqp
The Operator Splitting QP Solver
Stars: ✭ 929 (+1138.67%)
Mutual labels:  optimization, solver
Optaplanner
AI constraint solver in Java to optimize the vehicle routing problem, employee rostering, task assignment, maintenance scheduling, conference scheduling and other planning problems.
Stars: ✭ 2,454 (+3172%)
Mutual labels:  solver, optimization
CSDP.jl
Julia Wrapper for CSDP (https://projects.coin-or.org/Csdp/)
Stars: ✭ 18 (-76%)
Mutual labels:  optimization, solver
Awesome Robotics
A curated list of awesome links and software libraries that are useful for robots.
Stars: ✭ 478 (+537.33%)
Mutual labels:  simulation, optimization
Osqp
The Operator Splitting QP Solver
Stars: ✭ 689 (+818.67%)
Mutual labels:  solver, optimization
Angler

angler

angler (named for 'adjoint nonlinear gradients') is a package for simulating and optimizing optical structures.

It provides a finite-difference frequency-domain (FDFD) solver for simulating for linear and nonlinear devices in the frequency domain.

It also provides an easy to use package for adjoint-based inverse design and optimization of linear and nonlinear devices. For example, you can inverse design optical switches to transport power to different ports for different input powers:

Fields

angler is released as part of a paper Adjoint method and inverse design for nonlinear optical devices, which can be viewed here.

Installation

One can install the most stable version of angler and all of its dependencies (apart from MKL) using

pip install angler

Alternatively, to use the most current version

git clone https://github.com/fancompute/angler.git
pip install -e angler

And then this directory can be added to path to import angler, i.e.

import sys
sys.path.append('path/to/angler')

Make angler faster

The most computationally expensive operation in angler is the sparse linear system solve. This is done with scipy.sparse.linalg.spsolve() by default. If MKL is installed, angler instead uses this with a python wrapper pyMKL, which makes things significantly faster, depending on the problem. The best way to install MKL, if using anaconda, is

conda install MKL

(pyMKL does not work when MKL is pip installed.)

Examples / Quickstart

There are several jupyter notebook examples in the Notebooks/ directory.

For a good introduction, try:

Notebooks/Splitter.ipynb

For more specific applications:

Electromagnetic simulations

For modeling linear devices with our FDFD solver (no optimization), see

Notebooks/Linear_system.ipynb

For modeling nonlinear devices with FDFD (no optimization), see

Notebooks/Nonlinear_system.ipynb

Inverse design & optimization

For examples of optimizing linear devices, see

Notebooks/Splitter.ipynb
Notebooks/Accelerator.ipynb

For examples of optimizing nonlinear devices, see

Notebooks/2_port.ipynb
Notebooks/3_port.ipynb
Notebooks/T_port.ipynb

Package Structure

angler provides two main classes, Simulation and Optimization, which perform most of the functionality.

Generally, Simulation objects are used to perform FDFD simulations, and Optimization classes run inverse design and optimization algorithms over Simulations. To learn more about how angler works and how to use it, please take a look at angler/README.md for a more detailed explanation.

Tests

To run all tests:

python -m unittest discover tests

Or to run individually:

python tests/individual_test.py

Contributing

angler is under development and we welcome suggestions, pull-requests, feature-requests, etc.

If you contribute a new feature, please also write a few tests and document your changes in angler/README.md or the wiki.

Authors

angler was written by Tyler Hughes, Momchil Minkov, and Ian Williamson.

Citing

If you use angler, please cite us using

@article{Hughes2018,
author = {Hughes, Tyler W. and Minkov, Momchil and Williamson, Ian A. D. and Fan, Shanhui},
title = {Adjoint Method and Inverse Design for Nonlinear Nanophotonic Devices},
journal = {ACS Photonics},
volume = {5},
number = {12},
pages = {4781-4787},
year = {2018},
doi = {10.1021/acsphotonics.8b01522}
}

License

This project is licensed under the MIT License - see the LICENSE.md file for details. Copyright 2018 Tyler Hughes.

Acknowledgments

  • our logo was made by Nadine Gilmer :)
  • RIP Ian's contributions before the code merge
  • We made use of a lot of code snippets (and advice) from Jerry Shi
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].