Scattnlay
Near- and far-field Mie scattering by a multilayered sphere
Install / Use
/learn @ovidiopr/ScattnlayREADME
Output example: Field distribution inside layered Si\Ag\Si sphere
and Poynting vector distribution in Ag sphere with powerflow lines
calculated with Scattnlay (scripts field-SiAgSi-flow.py and
field-Ag-flow.py from example section as revision ).
Discuss:
Fill the issue here: Issues.
AI era
- Version 2.5 (Dec 2025) Completed migration to CMake, added SIMD acceleration using Google Highway.
Stable releases
- Version 2.4 (Apr 10, 2024) The last hand-made release.
- Version 2.0.1 (Jan 17, 2017).
- Version 2.0.0 (Apr 1, 2016).
- Version 1.0.0 (Nov 22, 2014).
How to use scattnlay
Table of contents:
Mie theory calculator web application
Limited web version is available at https://physics.ifmo.ru/mie/
Compile Code
To compile the source you will need a C++11 capable compiler.
Dependencies
MultiPrecision (Optional):
- Ubuntu/Debian:
sudo apt install libboost-all-dev - macOS:
brew install boost
SIMD Acceleration (Optional, Recommended):
- Ubuntu/Debian:
sudo apt install libhwy-dev - macOS:
brew install highway
To compile the Python extension you need NumPy:
- python-numpy (>= 1.0)
- python-all-dev (any version)
- python-numpy-dev (any version)
and pybind11 (should be installed automatically via pyproject.toml)
And to compile the Debian package you need some tools:
- debhelper (>=7.0.0)
- dh-python (any version)
- cdbs (>= 0.4.49)
Compilation options
mkdir build && cd build
cmake -B build -S .
cmake --build build
To build WebAssembly target (requires Emscripten):
emcmake cmake -B build_wasm -S .
cmake --build build_wasm
Python module
To build and install Python module run from the source code directory (SIMD support is enabled automatically if Highway is found):
```bash
pip install .
SIMD Benchmark
To verify performance gains:
python examples/calc-simd-benchmark.py
Binary install
Binary files for Ubuntu and derivative distributions can be found at Launchpad To install it you must configure the repository:
sudo add-apt-repository ppa:ovidio/scattering
sudo apt update
and then you simply install the package:
sudo apt install python-scattnlay
You can also install it from PyPi via
sudo pip install scattnlay
You can also git clone and python3 -m pip install -e . to develop python package.
Use
- Python library
- Use scattnlay directly
from scattnlay import scattnlay, fieldnlay
...
x = ...
m = ...
coords = ...
terms, Qext, Qsca, Qabs, Qbk, Qpr, g, Albedo, S1, S2 = scattnlay(x, m)
terms, E, H = fieldnlay(x, m, coords)
...
- Execute some of the test scripts (located in the folder 'tests/python') Example:
./test01.py
- Standalone program
- Execute scattnlay directly:
scattnlay -l Layers x1 m1.r m1.i [x2 m2.r m2.i ...] [-t ti tf nt] [-c comment]
- Execute fieldnlay directly:
fieldnlay -l Layers x1 m1.r m1.i [x2 m2.r m2.i ...] -p xi xf nx yi yf ny zi zf nz [-c comment]
- Execute some of the test scripts (located in the folder 'tests/shell'):
./test01.sh > test01.csv
- C++ library
Scattnlay "Hello world!" example:
try {
nmie::MultiLayerMieApplied<double> multi_layer_mie;
multi_layer_mie.AddTargetLayer(core_width, index_Si);
multi_layer_mie.AddTargetLayer(inner_width, index_Ag);
multi_layer_mie.AddTargetLayer(outer_width, index_Si);
multi_layer_mie.SetWavelength(WL);
multi_layer_mie.RunMieCalculation();
double Qabs = multi_layer_mie.GetQabs();
printf("Qabs = %g\n", Qabs);
} catch( const std::invalid_argument& ia ) {
// Will catch if multi_layer_mie fails or other errors.
std::cerr << "Invalid argument: " << ia.what() << std::endl;
return -1;
}
The complete example-minimal.cc and a bit more complicated
example-get-Mie.cc can be found in example directory along with
go-cc-examples.sh script with build commands.
example-get-Mie.cc can be compiled using double precision or
multiple precision (just include -DMULTI_PRECISION=200 to use 200
digits for calculations).
Related papers
-
O. Peña and U. Pal, "Scattering of electromagnetic radiation by a multilayered sphere," Comput. Phys. Commun. 180, 2348-2354 (2009). http://dx.doi.org/10.1016/j.cpc.2009.07.010
-
K. Ladutenko, O. Peña-Rodríguez, I. Melchakova, I. Yagupov and P. Belov, "Reduction of scattering using thin all-dielectric shells designed by stochastic optimizer," J. Appl. Phys. 116, 184508 (2014). http://dx.doi.org/10.1063/1.4900529
-
K. Ladutenko, P. Belov, O. Peña-Rodríguez, A. Mirzaei, A. Miroshnichenko and I. Shadrivov, "Superabsorption of light by nanoparticles," Nanoscale 7, 18897-18901 (2015). http://dx.doi.org/10.1039/C5NR05468K
-
K. Ladutenko, U. Pal, A. Rivera, and O. Peña-Rodríguez, "Mie calculation of electromagnetic near-field for a multilayered sphere," Comp. Phys. Comm. 214, 225-230 (2017). http://dx.doi.org/j.cpc.2017.01.017
Acknowledgment
We expect that all publications describing work using this software, or all commercial products using it, cite at least one of the following references:
[1] O. Peña and U. Pal, "Scattering of electromagnetic radiation by a multilayered sphere," Computer Physics Communications, vol. 180, Nov. 2009, pp. 2348-2354.
[2] K. Ladutenko, U. Pal, A. Rivera and O. Peña-Rodríguez, "Mie calculation of electromagnetic near-field for a multilayered sphere," Computer Physics Communications, vol. 214, May 2017, pp. 225-230.
License
GPL v3+
Related Skills
node-connect
352.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
