1. Introduction
This is the draft documentation for the A_FMM package. It is a work in progress. Any suggestion for improvements is welcome.
1.1. Installation
You can install A_FMM directly from pypi by running:
pip install A_FMM
1.2. Method Overview
The A-FMM method as we know it appeared in the mid 2005 [1]. It builds on the Fourier modal method for crossed gratings [2], which combines Fourier methods with the well-known scattering matrix algorithm [3]. The novelty of the A-FMM is the addition of a coordinate transformation to map the unit cell of the grating to the full ℝ2 space, thus allowing the modeling of aperiodic structures. The transformation exists in real and complex variants [4], where the latter behaves as a PML and thus allows for the treatment of structure with high scattering loss. The implementation in this paper complements these core functionalities with methods for calculating Bloch modes from the scattering matrix of the unit cell [5] and a custom method for calculating Poynting vectors and energy flows [6].
This implementation aims at providing easy access to the A-FMM method to as many people as possible. Therefore, it is implemented in Python3, making this tool easy to install and portable across different platforms. It makes use of classes for a simple and modular structure (figure below). Being heavily based on numpy [7] and scipy [8] libraries, it uses well tested numerical routines known for their efficiency, stability and scalability.
Moreover, this implementation was battle tasted on HPC system and was employed during research activities leading to published papers [9] [10] [11].
Structure of the A-FMM code. Blocks represent Python classes and arrows the relations between them.