Strata is a C++ library for computing the dyadic multilayer Green's function (MGF), intended for use in computational electromagnetics codes for solving Maxwell's equations in integral form. Strata can be used as a standalone library to compute the MGF as a function of frequency and/or spatial separation. It can also be incorporated easily into existing integral equation solvers.
- CMake, at least version 3.10.2
To install Strata, clone this repository and navigate to the root directory of the cloned repository in a terminal. Then run the following commands:
mkdir build
cd build
cmake ..
make
Important notes
- An internet connection is required during the installation process, because some third-party libraries (OpenBLAS and yaml-cpp) will automatically be downloaded and installated locally in the directory
external
. - If you already have OpenBLAS installed on your machine, you could save some time by reusing it. In that case, instead of
cmake ..
, runwherecmake -DWITH_OPENBLAS_INC=location/of/openblas/headers -DWITH_OPENBLAS_LIB=location/of/openblas/lib ..
location/of/openblas/headers
is the path to the directory containing all OpenBLAS-related headers (e.g.,cblas.h
andlapacke.h
), andlocation/of/openblas/lib
is the path to the directory containing the OpenBLAS shared library, usuallylibopenblas.so
. - On macOS, the
cmake
command requires an additional option:cmake -DCMAKE_INSTALL_RPATH_USE_LINK_PATH="ON" ..
Advanced users may want to consult this page for out-of-source builds.
To use Strata within your own application, include the directory inc
, which contains all the headers, and link to build/libstrata.so
while building your project.
Strata is designed for UNIX-based operating systems, and has been tested on
- Ubuntu 20.04
- Ubuntu 18.04
- CentOS 7
- macOS Catalina 10.15.6
Please consult the Strata documentation, doc/strata.html
or doc/strata.pdf
for usage instructions.
Note: the documentation is generated automatically during the build process.
A set of example layer definition files and test cases is provided in the test
directory.
The most basic test case is in test/testMGF.cpp
, which takes as input the layer definition file (see doc/strata.html
or doc/strata.pdf
for details) and a name for the output file.
From within the build
folder, run
./testMGF ../test/examples/ling_jin_2000/layers.yaml ../test/examples/ling_jin_2000/MGFdata.txt
This will compute the MGF for a simple example and store the reuslts in the file test/examples/ling_jin_2000/MGFdata.txt
.
Now, assuming you have Python 3 installed, you can plot the computed MGF:
cd ../test/examples/ling_jin_2000
python3 makeplots.py
You should see the following plot:
The functionality of Strata can be divided into the computation of the MGF in (a) the spectral domain, and (b) the spatial domain.
Strata can compute, in spectral domain:
- Each component of the dyadic G(A), and the scalar term G(φ), as defined in formulation-C of [1]
- Each unique component of the dyadics G(EM) and G(HJ), as defined in [2]
In addition, one can optionally extract the quasistatic terms as defined in [3].
Strata allows computing the spatial domain MGF via the following methods:
- Direct numerical integration of the Sommerfeld integrals, as described in [4]
- The discrete complex image method (DCIM) [5]
- Precomputation of interpolation tables constructed using either one of the above methods
In addition, one can optionally extract (in spectral domain) and add (in spatial domain) the quasistatic terms as defined in [3].
To easily incorporate into existing codes, one can also extract out the singular behaviour of the MGF, so that the singularities can be treated separately.
Strata is written with modularity and readability as a priority, to allow users to incorporate new formulations and extend the functionality in both spectral and spatial domains.
We request that you acknowledge the authors of Strata by citing the following:
@INPROCEEDINGS{strata,
author={S. {Sharma} and P. {Triverio}},
booktitle={2021 {IEEE} International Symposium on Antennas and Propagation and {USNC-URSI} Radio Science Meeting},
title={Strata: An Open-Source {C++} Library for Computing {Green's} Functions for Layered Media},
year={2021},
month={Dec.},
address = {Singapore}}
[1] K. A. Michalski and D. Zheng, "Electromagnetic scattering and radiation by surfaces of arbitrary shape in layered media. I. theory," IEEE Trans. Antennas Propag., vol. 38, no. 3, pp. 335–344, Mar. 1990.
[2] K. A. Michalski and J. R. Mosig, "Multilayered media Green's functions in integral equation formulations," IEEE Trans. Antennas Propag., vol. 45, no. 3, pp. 508–519, Mar. 1997.
[3] E. Simsek, Q. H. Liu, and B. Wei, "Singularity Subtraction for Evaluation of Green's Functions for Multilayer Media," IEEE Trans. Microw. Theory Tech., vol. 54, pp. 216–225, Jan 2006.
[4] K. A. Michalski and J. R. Mosig, "Efficient computation of Sommerfeld integral tails - methods and algorithms," J. Electromagn. Waves Appl., vol. 30, no. 3, pp. 281–317, 2016.
[5] M. I. Aksun, "A Robust Approach for the derivation of closed-form Green's functions," IEEE Trans. Microw. Theory Tech., vol. 44, pp. 651–658, May 1996.
Strata was developed as part of a PhD project at the Modelics Lab, University of Toronto, Canada.
- Shashwat Sharma (Architect & Developer)
- Piero Triverio (Principal Investigator)