Konstantin Ladutenko dc20b92193 Add MacOS to GitHub Actions tests (#72) | hai 10 meses | |
---|---|---|
.github | hai 10 meses | |
debian | %!s(int64=4) %!d(string=hai) anos | |
doc | %!s(int64=9) %!d(string=hai) anos | |
examples | hai 1 ano | |
guiapp | hai 10 meses | |
scattnlay | %!s(int64=2) %!d(string=hai) anos | |
src | %!s(int64=2) %!d(string=hai) anos | |
tests | hai 10 meses | |
utils | %!s(int64=3) %!d(string=hai) anos | |
vue-cli3-webapp | %!s(int64=3) %!d(string=hai) anos | |
.clang-format | %!s(int64=2) %!d(string=hai) anos | |
.gitignore | %!s(int64=3) %!d(string=hai) anos | |
.gitmodules | %!s(int64=3) %!d(string=hai) anos | |
CHANGES | %!s(int64=10) %!d(string=hai) anos | |
CMakeLists.txt | hai 1 ano | |
COPYING | %!s(int64=5) %!d(string=hai) anos | |
LICENSE | %!s(int64=10) %!d(string=hai) anos | |
MANIFEST.in | %!s(int64=5) %!d(string=hai) anos | |
Makefile | %!s(int64=2) %!d(string=hai) anos | |
PKG-INFO | %!s(int64=5) %!d(string=hai) anos | |
README.md | hai 10 meses | |
go.sh | %!s(int64=8) %!d(string=hai) anos | |
push-to-github.sh | %!s(int64=10) %!d(string=hai) anos | |
pyproject.toml | %!s(int64=2) %!d(string=hai) anos | |
requirements.txt | %!s(int64=2) %!d(string=hai) anos | |
setup.cfg | %!s(int64=6) %!d(string=hai) anos | |
setup.py | hai 10 meses | |
tox.ini | hai 10 meses |
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 ).
Fill the issue here: Issues.
Table of contents:
Limited web version is available at https://physics.ifmo.ru/mie/
To compile the source you will need a C++11 capable compiler. To use optional MultiPrecision feature you need to install Boost.Multiprecision library (package names are given in Ubuntu\Debian notation):
To compile the Python extension you need NumPy:
And to compile the Debian package you need some tools:
Compilation options
There are also an experimental CMake project and it is possible to compile into JavaScript module (using Emscripten compiler).
Python module
To build and install Python module run from the source code directory:
pip install . --user
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 python-scattnlay
You can also git clone
and pip install -e .
to develop python package.
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)
...
./test01.py
scattnlay -l Layers x1 m1.r m1.i [x2 m2.r m2.i ...] [-t ti tf nt] [-c comment]
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]
./test01.sh > test01.csv
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).
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
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.
GPL v3+