Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
ianwilliamson committed Nov 18, 2019
1 parent 0dbc882 commit 1cc68f2
Showing 1 changed file with 32 additions and 14 deletions.
46 changes: 32 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
# Optical Inverse Design with Automatic Differentiation

This repository contains the code and notebooks for the workshop on the inverse design of optical devices with automatic differentiation. Below is the animation of such an optimization applied to an optical splitter.

![](img/optimization.gif)

# Optical Inverse Design with Automatic Differentiation
## Contents

This repository contains the code and notebooks for the workshop on the inverse design of optical devices with automatic differentiation.
| Notebook | Description |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [01_First_simulation.ipynb](01_First_simulation.ipynb) | Covers the basics of setting up a finite difference frequency domain (FDFD) simulation |
| [02_Invdes_intro.ipynb](02_Invdes_intro.ipynb) | Deals with setting up and performing an inverse design optimization of a mode converter |
| [03_Invdes_parameterization.ipynb](03_Invdes_parameterization.ipynb) | Expands on Notebook 02 to introduce parameterization strategies |

The materials in this repository are organized into several [Jupyter](https://jupyter.org/) notebooks. You can interact with them through the `jupyter lab` interface, which is a web-based user interface that runs from your local computing environment. They are numbered and can be followed in order.

## Getting started

Expand All @@ -13,33 +22,42 @@ If you have `git` installed, you can enter the following command in a terminal t

git clone https://github.com/fancompute/workshop-invdesign.git

You will also need a python environment with the necessary packages installed. There are several ways to setup a python environment, but we recommend using Anaconda. You can download the Anaconda installer for your operating system from: <https://www.anaconda.com/distribution/>.
You will also need a python environment with the necessary packages installed. There are several ways to setup a python environment, but we recommend using Anaconda, which can be downloaded for your operating system from: <https://www.anaconda.com/distribution/>.

**Note:** you will want to download the distribution for a 3.X version of Python (e.g. 3.6 or 3.7).

By default, the Anaconda distribution includes many of the python packages that we require for this workshop. However, there are a few additional packages we will need to install manually, as described in the next sections of this guide.

## Installing HIPS autograd
## Installing ceviche

[HIPS autograd](https://github.com/HIPS/autograd) is an automatic differentiation framework with a Numpy-like API. We rely on autograd for flexible gradient computation in our inverse design studies. To install autograd, execute the following command in your conda environment:
Ceviche is our research group's finite difference frequency domain (FDFD) and time domain (FDTD) package. This is the primary package we will use to simulate and optimize optical devices. In case you are wondering, the word "ceviche" refers to [a seafood dish from Peru](https://en.wikipedia.org/wiki/Ceviche) that Tyler Hughes enjoys.

pip install autograd
The source code for ceviche is freely available on GitHub at <https://github.com/fancompute/ceviche>. You can install ceviche by git cloning the repository into your local computing environment and adding its location to your `PYTHONPATH` environment variable. However, we recommend installing ceviche via pip, by executing the following command:

## Installing pymkl
pip install ceviche

pymkl provides an interface to the [PARDISO](https://www.pardiso-project.org/) sparse solver which we use to accelerate our simulations. We have observed approximately a 10X speed up in certain cases compared to the standard SciPy sparse linear solver routines. To install pymkl, execute the following command in your conda environment:
Running this command should also install most of the dependencies for ceviche. However, we briefly describe several key dependencies below and the steps for manually installing them, if necessary.

pip install pymkl
### scikit-image

## Installing ceviche
scikit-image provides some useful utility functions for drawing shapes into 2D arrays. We can utilize these functions to help us define geometry features in our FDFD domains. To install scikit-image, execute the following command in your conda environment:

Ceviche is our research group's finite difference frequency domain (FDFD) and time domain (FDTD) package. The source code is freely available on GitHub at <https://github.com/twhughes/ceviche>. You can install ceviche by git cloning the repository into your local computing environment and adding its location to your `PYTHONPATH` environment variable. However, we recommend installing ceviche via pip, by executing the following command:
conda install scikit-image

pip install ceviche
**Note:** this does not get installed automatically with ceviche.

### hips autograd

[HIPS autograd](https://github.com/HIPS/autograd) is an automatic differentiation framework with a Numpy-like API. We rely on autograd for flexible gradient computation in our inverse design studies. To install autograd, execute the following command in your conda environment:

pip install autograd

### pymkl

## Using the materials
pymkl provides an interface to the [PARDISO](https://www.pardiso-project.org/) sparse solver which we use to accelerate our simulations. We have observed approximately a 10X speed up in certain cases compared to the standard SciPy sparse linear solver routines. To install pymkl, execute the following command in your conda environment:

pip install pymkl

The materials in this repository are organized into [Jupyter](https://jupyter.org/) notebooks. You can interact with them through the `jupyter lab` interface, which is a web-based user interface that runs from your local computing environment.

## References

Expand Down

0 comments on commit 1cc68f2

Please sign in to comment.