Sen descrición

Konstantin Ladutenko af76031eeb update Makefile hai 9 meses
.github 6e1421428b split web interface from nmie-applied (#74) hai 10 meses
debian 32e03214e1 Modified the default Debian package to be for Python 3. %!s(int64=4) %!d(string=hai) anos
doc 57c7261705 updated fiel plotting script %!s(int64=9) %!d(string=hai) anos
examples 6e1421428b split web interface from nmie-applied (#74) hai 10 meses
guiapp d8db666ffa [chore] update github acitons file to match changes in latest Ubuntu distro + add tests for python package hai 10 meses
scattnlay f7eaa4fb66 initial match of supp fig 5 and simulation results %!s(int64=2) %!d(string=hai) anos
src 6e1421428b split web interface from nmie-applied (#74) hai 10 meses
tests 1a0213bd6d [chore] version bump hai 10 meses
utils f841e1886f introducing config.ts %!s(int64=3) %!d(string=hai) anos
vue-cli3-webapp f841e1886f introducing config.ts %!s(int64=3) %!d(string=hai) anos
.clang-format 360f3b154c Move pb11 conversion functions to a separate file %!s(int64=2) %!d(string=hai) anos
.gitignore a835aaa459 add fogotten file %!s(int64=3) %!d(string=hai) anos
.gitmodules 433a801e59 update git modules hai 9 meses
CHANGES 1b7786ad5a Initial commit based on Ovidio version of python-scattnlay 0.3.0 %!s(int64=10) %!d(string=hai) anos
CMakeLists.txt 1a0213bd6d [chore] version bump hai 10 meses
COPYING 48e7762a08 Changed version number and made some small fixes. %!s(int64=5) %!d(string=hai) anos
LICENSE 1b7786ad5a Initial commit based on Ovidio version of python-scattnlay 0.3.0 %!s(int64=10) %!d(string=hai) anos
MANIFEST.in 4165e55421 Completed port from Cython to pybind11. %!s(int64=5) %!d(string=hai) anos
Makefile af76031eeb update Makefile hai 9 meses
PKG-INFO 48e7762a08 Changed version number and made some small fixes. %!s(int64=5) %!d(string=hai) anos
README.md c41278d7d0 add c++11 compilation flag for python setup.py hai 10 meses
go.sh e8024478b5 change missed .h to .hpp %!s(int64=8) %!d(string=hai) anos
push-to-github.sh eea51ce5ca Changes to push script %!s(int64=10) %!d(string=hai) anos
pyproject.toml f05aa36d40 initial python tests on GitHub %!s(int64=2) %!d(string=hai) anos
requirements.txt f05aa36d40 initial python tests on GitHub %!s(int64=2) %!d(string=hai) anos
setup.cfg 71a297d952 Updated copyright and prepared the code to add scattnlay to PyPI. %!s(int64=6) %!d(string=hai) anos
setup.py 1a0213bd6d [chore] version bump hai 10 meses
tox.ini dc20b92193 Add MacOS to GitHub Actions tests (#72) hai 10 meses

README.md

output example 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:

Try to join our Gitter chat:

Fill the issue here: Issues.

Stable releases

  • Version 2.0.1 (Jan 17, 2017). DOI
  • 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. To use optional MultiPrecision feature you need to install Boost.Multiprecision library (package names are given in Ubuntu\Debian notation):

  • libboost-all-dev (>= 1.58.0)

To compile the Python extension you need NumPy:

  • python-numpy (>= 1.0)
  • python-all-dev (any version)
  • python-numpy-dev (any version)
  • pybind11 (any version)

And to compile the Debian package you need some tools:

  • debhelper (>=7.0.0)
  • dh-python (any version)
  • cdbs (>= 0.4.49)

Compilation options

  • make source - Create source package for Python extension
  • make ext - Create Python extension using C++ code
  • make install - Install Python extension on local system
  • make rpm - Generate a rpm package for Python extension
  • make deb - Generate a deb package for Python extension
  • make standalone - Create standalone programs (scattnlay and fieldnlay)
  • make clean - Delete temporal files

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 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 python-scattnlay

You can also git clone and pip install -e . to develop python package.

Use

  1. 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
  1. 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
  1. 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

  1. 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

  2. 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

  3. 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

  4. 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+