Ceviche

# ceviche

Electromagnetic Simulation Tools + Automatic Differentiation. Code for paper Forward-Mode Differentiation of Maxwell's Equations.

## What is ceviche?

ceviche provides two core electromagnetic simulation tools for solving Maxwell's equations:

• finite-difference frequency-domain (FDFD)

• finite-difference time-domain (FDTD)

Both are written in numpy / scipy and are compatible with the HIPS autograd package, supporting forward-mode and reverse-mode automatic differentiation.

This allows you to write code to solve your E&M problem, and then use automatic differentiation on your results.

As a result, you can do gradient-based optimization, sensitivity analysis, or plug your E&M solver into a machine learning model without having to go through the tedious process of deriving your derivatives by hand.

## Examples

There is a comprehensive ceviche tutorial available at this link with several ipython notebook examples:

There are also a few examples in the examples/* directory.

## Installation

There are many ways to install ceviche.

The easiest is by

pip install ceviche


But to install from a local copy, one can instead do

git clone https://github.com/twhughes/ceviche.git
pip install -e ceviche
pip install -r ceviche/requirements.txt


from the main directory.

git clone https://github.com/twhughes/ceviche.git


and then import the package from within your python script

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


## Package Structure

### Ceviche

The ceviche directory contains everything needed.

To get the FDFD and FDTD simulators, import directly from ceviche import fdtd, fdfd_ez, fdfd_hz

To get the differentiation, import from ceviche import jacobian.

constants.py contains some constants EPSILON_0, C_0, ETA_0, Q_E, which are needed throughout the package

utils.py contains a few useful functions for plotting, autogradding, and various other things.

optimizers.py contains optimizer functions for doing inverse design.

viz.py are functions that help with plotting fields and sructures.

modes.py contains a mode sorter (WIP) that can be used to create waveguide mode profiles for the simulation, for example.

### Examples

There are many demos in the examples directory, which will give you a good sense of how to use the package.

### Tests

Tests are located in tests. To run, cd into tests and

python -m unittest


to run all or

python specific_test.py


to run a specific one. Some of these tests involve visual inspection of the field plots rather than error checking on values.

To run all of the gradient checking functions, run

chmod +x test/test_all_gradients.sh


## Credits

@article{hughes2019forward,
title={Forward-Mode Differentiation of Maxwell’s Equations},
author={Hughes, Tyler W and Williamson, Ian AD and Minkov, Momchil and Fan, Shanhui},
journal={ACS Photonics},
volume={6},
number={11},
pages={3010--3016},
year={2019},
publisher={ACS Publications}
}


Our logo was created by @nagilmer

## Project details

Uploaded source
Uploaded py3