12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include <complex>
- #include <cstdio>
- #include <string>
- #include <iostream>
- #include "../src/nmie.hpp"
- #include "../src/nmie-impl.hpp"
- #include "../src/nmie-applied.hpp"
- #include "../src/nmie-applied-impl.hpp"
- #include "../src/shell-generator.hpp"
- int main(int argc, char *argv[]) {
- try {
- const double pi = 3.1415926535897932384626433832795;
- nmie::MultiLayerMieApplied<double> multi_layer_mie;
-
-
-
- const std::complex<double> index_Si(2.0);
-
- double WL=500;
- double outer_width = 67.91;
- shell_generator::ShellGenerator shell;
- shell.Init();
- shell.Refine();
- shell.Refine();
- shell.Refine();
- for (int i=0; i<10; ++i) {
- outer_width = 10+10*i;
- multi_layer_mie.AddTargetLayer(outer_width, index_Si);
- multi_layer_mie.SetWavelength(WL);
- multi_layer_mie.RunMieCalculation();
- double Qsca = multi_layer_mie.GetQsca();
- printf("Qsca = %g\n", Qsca);
-
- double scale = 2.0*pi*(110)/WL*2.001;
-
- shell.Rescale(scale);
-
-
-
-
- auto points = shell.GetVerticesT();
- multi_layer_mie.SetFieldPointsSP(points);
- multi_layer_mie.RunFieldCalculation();
- auto E = nmie::ConvertComplexVectorVector<double>(multi_layer_mie.GetFieldE());
- auto H = nmie::ConvertComplexVectorVector<double>(multi_layer_mie.GetFieldH());
- shell.SetField(E,H);
-
-
- auto F1 = shell.IntegrateByComp();
- std::cout<<"F: " <<F1[0]<<", "<< F1[1] <<", "<<F1[2] << std::endl;
- }
- } catch( const std::invalid_argument& ia ) {
-
- std::cerr << "Invalid argument: " << ia.what() << std::endl;
- return -1;
- }
- return 0;
- }
|