![output example](/doc/OutputExample.png) **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](https://github.com/ovidiopr/scattnlay/commit/57c7261705a5776f78420c1f486e929517d5f584) ). Discuss: -------- Try to join our Gitter chat: [![Join the chat at https://gitter.im/scattnlay/Lobby](https://badges.gitter.im/scattnlay/Lobby.svg)](https://gitter.im/scattnlay/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Fill the issue here: [Issues](https://github.com/ovidiopr/scattnlay/issues). Stable releases =============== - Version 2.0.1 (Jan 17, 2017). [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.248729.svg)](https://doi.org/10.5281/zenodo.248729) - 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](#mie-theory-calculator-web-application) - [Compile code](#compile-code) - [Binary install](#binary-install) - [Use](#use) - [Papers](#papers) - [Acknowledgment](#acknowledgment) - [License](#license) 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](http://www.numpy.org/): - **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](https://launchpad.net/~ovidio/+archive/ubuntu/scattering/+packages) To install it you must configure the repository: ``` bash sudo add-apt-repository ppa:ovidio/scattering sudo apt update ``` and then you simply install the package: ``` bash sudo apt install python-scattnlay ``` You can also install it from PyPi via ```bash 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 ```python 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: ```bash ./test01.py ``` 2. Standalone program * Execute scattnlay directly: ```bash scattnlay -l Layers x1 m1.r m1.i [x2 m2.r m2.i ...] [-t ti tf nt] [-c comment] ``` * Execute fieldnlay directly: ```bash 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'): ```bash ./test01.sh > test01.csv ``` 3. C++ library Scattnlay "Hello world!" example: ```C++ try { nmie::MultiLayerMieApplied 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+