Sen descrición

dependabot[bot] 6a4ba8f8d8 Bump eventsource from 1.1.0 to 1.1.2 in /vue-cli3-webapp %!s(int64=2) %!d(string=hai) anos
.github 86627d3456 Create cmake.yml %!s(int64=2) %!d(string=hai) anos
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 9c9deac1ac Merge branch 'master' into quasar2 %!s(int64=2) %!d(string=hai) anos
guiapp 189b0450a3 add css transition for adding flex row %!s(int64=2) %!d(string=hai) anos
scattnlay 9f29e90ba6 add RunFieldCalculationCartesian method to nmie.hpp and link it to JS module %!s(int64=2) %!d(string=hai) anos
src d919c84e02 Du test passes for mesomie %!s(int64=2) %!d(string=hai) anos
tests d919c84e02 Du test passes for mesomie %!s(int64=2) %!d(string=hai) anos
utils f841e1886f introducing config.ts %!s(int64=3) %!d(string=hai) anos
vue-cli3-webapp 6a4ba8f8d8 Bump eventsource from 1.1.0 to 1.1.2 in /vue-cli3-webapp %!s(int64=2) %!d(string=hai) anos
.gitignore a835aaa459 add fogotten file %!s(int64=3) %!d(string=hai) anos
.gitmodules 63921447d4 add refractiveindex.info as submodule %!s(int64=3) %!d(string=hai) anos
CHANGES 1b7786ad5a Initial commit based on Ovidio version of python-scattnlay 0.3.0 %!s(int64=10) %!d(string=hai) anos
CMakeLists.txt f4aa8149fb add evalPsiZetD1D3() %!s(int64=2) %!d(string=hai) anos
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 ec48cf99fa add styling for physics.itmo.ru %!s(int64=3) %!d(string=hai) anos
PKG-INFO 48e7762a08 Changed version number and made some small fixes. %!s(int64=5) %!d(string=hai) anos
README.md ea89cbeb1d merge %!s(int64=3) %!d(string=hai) anos
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
requirements.txt df4a9c7dda Cleaned the code and removed unused imports. %!s(int64=3) %!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 4e8530db97 Fixed compilation options for Python extension (it was failing when imported). %!s(int64=2) %!d(string=hai) anos

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 MultiPrecision feature you need to install Boost.Multiprecision library:

  • 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

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+