Konstantin Ladutenko 7b4c666b95 update' | 5 years ago | |
---|---|---|
debian | 7 years ago | |
doc | 9 years ago | |
examples | 5 years ago | |
src | 5 years ago | |
tests | 8 years ago | |
utils | 9 years ago | |
.gitignore | 8 years ago | |
CHANGES | 10 years ago | |
COPYING | 8 years ago | |
LICENSE | 10 years ago | |
MANIFEST.in | 8 years ago | |
Makefile | 6 years ago | |
PKG-INFO | 8 years ago | |
README.md | 7 years ago | |
go.sh | 8 years ago | |
push-to-github.sh | 10 years ago | |
scattnlay.pyx | 6 years ago | |
setup.py | 6 years ago |
Output example: Field distribution inside layered Si\Ag\Si sphere and Poynting vector distribution in Ag sphere with poweflow 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:
To compile the source you will need a C++11 capable compiler. To use MultiPrecision feature you need to install Boost.Multiprecision library:
To compile the Python extension you need NumPy:
And to compile the Debian package you need some tools:
Compilation options
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-get update
and then you simply install the package:
sudo apt-get install python-scattnlay
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).
"Scattering of electromagnetic radiation by a multilayered sphere" O. Pena and U. Pal, Computer Physics Communications, vol. 180, Nov. 2009, pp. 2348-2354. http://dx.doi.org/10.1016/j.cpc.2009.07.010
"Reduction of scattering using thin all-dielectric shells designed by stochastic optimizer" Konstantin Ladutenko, Ovidio Peña-Rodríguez, Irina Melchakova, Ilya Yagupov, and Pavel Belov J. Appl. Phys., vol. 116, pp. 184508, 2014 http://dx.doi.org/10.1063/1.4900529
"Superabsorption of light by nanoparticles" Konstantin Ladutenko, Pavel Belov, Ovidio Peña-Rodríguez, Ali Mirzaei, Andrey E. Miroshnichenko and Ilya V. Shadrivov Nanoscale, 2015,7, 18897-18901 http://dx.doi.org/10.1039/C5NR05468K
We expect that all publications describing work using this software, or all commercial products using it, cite the following reference:
O. Pena and U. Pal, "Scattering of electromagnetic radiation by a multilayered sphere," Computer Physics Communications, vol. 180, Nov. 2009, pp. 2348-2354.
GPL v3+