123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #include <complex>
- #include <cstdio>
- #include <string>
- #include <iostream>
- #include "../src/nmie.hpp"
- #include "../src/nmie-basic.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(1.1,0.0);
-
- double WL=545;
-
-
- double outer_width = 4*2*2;
- auto shift = 0.0;
- shell_generator::ShellGenerator shell;
- shell.Init();
- shell.Refine();
- shell.Refine();
- for (int refines=0; refines<1; ++refines) {
- shell.Refine();
- std::cout<<"Refined"<<std::endl;
- for (int i=0; i<7; ++i) {
-
- auto integration_radius = outer_width + 5*i ;
-
- multi_layer_mie.ClearAllDesign();
- multi_layer_mie.AddTargetLayer(outer_width, index_Si);
- multi_layer_mie.SetWavelength(WL);
- multi_layer_mie.RunMieCalculation();
- double Qsca = multi_layer_mie.GetQsca();
-
- double scale = 2.0*pi*(integration_radius)/WL*1.00001;
- shell.Rescale(scale);
-
- auto points = shell.GetFaceCentersT();
- 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 F = shell.IntegrateGauss(2.54,12.03);
-
-
-
- }
- }
- } catch( const std::invalid_argument &ia ) {
-
- std::cerr << "Invalid argument: " << ia.what() << std::endl;
- return -1;
- }
- return 0;
- }
|