|  | @@ -134,22 +134,6 @@ int main(int argc, char *argv[]) {
 | 
	
		
			
				|  |  |  	mode = read_x;
 | 
	
		
			
				|  |  |  	continue;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      // if (strcmp(argv[i], "-l") == 0) {
 | 
	
		
			
				|  |  | -      //   i++;
 | 
	
		
			
				|  |  | -      //   L = atoi(argv[i]);
 | 
	
		
			
				|  |  | -      //   x.resize(L);
 | 
	
		
			
				|  |  | -      //   m.resize(L);
 | 
	
		
			
				|  |  | -      //   if (argc < 3*(L + 1)) {
 | 
	
		
			
				|  |  | -      // 	  throw std::invalid_argument(error_msg);
 | 
	
		
			
				|  |  | -      //   } else {
 | 
	
		
			
				|  |  | -      //     for (l = 0; l < L; l++) {
 | 
	
		
			
				|  |  | -      //       i++;
 | 
	
		
			
				|  |  | -      //       x[l] = atof(argv[i]);
 | 
	
		
			
				|  |  | -      //       i++;
 | 
	
		
			
				|  |  | -      //       m[l] = std::complex<double>(atof(argv[i]), atof(argv[i + 1]));
 | 
	
		
			
				|  |  | -      //       i++;
 | 
	
		
			
				|  |  | -      //     }
 | 
	
		
			
				|  |  | -      //   }
 | 
	
		
			
				|  |  |        if (mode == read_ti) {
 | 
	
		
			
				|  |  |  	ti = std::stod(arg);
 | 
	
		
			
				|  |  |  	mode = read_tf;
 | 
	
	
		
			
				|  | @@ -169,28 +153,11 @@ int main(int argc, char *argv[]) {
 | 
	
		
			
				|  |  |          S2w.resize(nt);
 | 
	
		
			
				|  |  |  	continue;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      //} else if (strcmp(argv[i], "-t") == 0) {
 | 
	
		
			
				|  |  | -        // i++;
 | 
	
		
			
				|  |  | -        // ti = atof(argv[i]);
 | 
	
		
			
				|  |  | -        // i++;
 | 
	
		
			
				|  |  | -        // tf = atof(argv[i]);
 | 
	
		
			
				|  |  | -        // i++;
 | 
	
		
			
				|  |  | -        // nt = atoi(argv[i]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Theta.resize(nt);
 | 
	
		
			
				|  |  | -        // S1.resize(nt);
 | 
	
		
			
				|  |  | -        // S2.resize(nt);
 | 
	
		
			
				|  |  |        if (mode ==  read_comment) {
 | 
	
		
			
				|  |  |  	comment = arg;
 | 
	
		
			
				|  |  |          has_comment = 1;
 | 
	
		
			
				|  |  |  	continue;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      // } else if (strcmp(argv[i], "-c") == 0) {
 | 
	
		
			
				|  |  | -      //   i++;
 | 
	
		
			
				|  |  | -      // 	comment = args[i];
 | 
	
		
			
				|  |  | -      //   //strcpy(comment, argv[i]);
 | 
	
		
			
				|  |  | -      //   has_comment = 1;
 | 
	
		
			
				|  |  | -      // } else { i++; }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if ( (x.size() != m.size()) || (L != x.size()) ) 
 | 
	
		
			
				|  |  |        throw std::invalid_argument(std::string("Broken structure!\n")
 | 
	
	
		
			
				|  | @@ -209,12 +176,7 @@ int main(int argc, char *argv[]) {
 | 
	
		
			
				|  |  |        Theta[i] = (ti + (double)i*(tf - ti)/(nt - 1))*PI/180.0;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    timespec time1, time2;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    // timespec time1, time2;
 | 
	
		
			
				|  |  |      // long cpptime_nsec, best_cpp;
 | 
	
		
			
				|  |  |      // long ctime_nsec, best_c;
 | 
	
		
			
				|  |  |      // long cpptime_sec, ctime_sec;
 | 
	
	
		
			
				|  | @@ -251,36 +213,36 @@ int main(int argc, char *argv[]) {
 | 
	
		
			
				|  |  |      //   repeats *= 10;
 | 
	
		
			
				|  |  |      // } while (cpptime_nsec < 1e8 && ctime_nsec < 1e8);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    nMie(L, x, m, nt, Theta, &Qext, &Qsca, &Qabs, &Qbk, &Qpr, &g, &Albedo, S1, S2);
 | 
	
		
			
				|  |  | -    nmie::nMie(L, x, m, nt, Theta, &Qextw, &Qscaw, &Qabsw, &Qbkw, &Qprw, &gw, &Albedow, S1w, S2w);
 | 
	
		
			
				|  |  | -        printf("\n");
 | 
	
		
			
				|  |  | +    // nMie(L, x, m, nt, Theta, &Qext, &Qsca, &Qabs, &Qbk, &Qpr, &g, &Albedo, S1, S2);
 | 
	
		
			
				|  |  | +    // nmie::nMie(L, x, m, nt, Theta, &Qextw, &Qscaw, &Qabsw, &Qbkw, &Qprw, &gw, &Albedow, S1w, S2w);
 | 
	
		
			
				|  |  | +    //     printf("\n");
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -    if (has_comment) {
 | 
	
		
			
				|  |  | -      printf("%6s, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  old\n", comment.c_str(), Qext, Qsca, Qabs, Qbk, Qpr, g, Albedo);
 | 
	
		
			
				|  |  | -      printf("%6s, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  \n", comment.c_str(), Qextw, Qscaw, Qabsw, Qbkw, Qprw, gw, Albedow);
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      printf("%+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  old\n", Qext, Qsca, Qabs, Qbk, Qpr, g, Albedo);
 | 
	
		
			
				|  |  | -      printf("%+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  \n", Qextw, Qscaw, Qabsw, Qbkw, Qprw, gw, Albedow);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    // if (has_comment) {
 | 
	
		
			
				|  |  | +    //   printf("%6s, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  old\n", comment.c_str(), Qext, Qsca, Qabs, Qbk, Qpr, g, Albedo);
 | 
	
		
			
				|  |  | +    //   printf("%6s, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  \n", comment.c_str(), Qextw, Qscaw, Qabsw, Qbkw, Qprw, gw, Albedow);
 | 
	
		
			
				|  |  | +    // } else {
 | 
	
		
			
				|  |  | +    //   printf("%+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  old\n", Qext, Qsca, Qabs, Qbk, Qpr, g, Albedo);
 | 
	
		
			
				|  |  | +    //   printf("%+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e, %+.5e  \n", Qextw, Qscaw, Qabsw, Qbkw, Qprw, gw, Albedow);
 | 
	
		
			
				|  |  | +    // }
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -    if (nt > 0) {
 | 
	
		
			
				|  |  | -      printf(" Theta,         S1.r,         S1.i,         S2.r,         S2.i\n");
 | 
	
		
			
				|  |  | +    // if (nt > 0) {
 | 
	
		
			
				|  |  | +    //   printf(" Theta,         S1.r,         S1.i,         S2.r,         S2.i\n");
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  | -      for (i = 0; i < nt; i++) {
 | 
	
		
			
				|  |  | -        printf("%6.2f, %+.5e, %+.5e, %+.5e, %+.5e  old\n", Theta[i]*180.0/PI, S1[i].real(), S1[i].imag(), S2[i].real(), S2[i].imag());
 | 
	
		
			
				|  |  | -        printf("%6.2f, %+.5e, %+.5e, %+.5e, %+.5e  \n", Theta[i]*180.0/PI, S1w[i].real(), S1w[i].imag(), S2w[i].real(), S2w[i].imag());
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    //   for (i = 0; i < nt; i++) {
 | 
	
		
			
				|  |  | +    //     printf("%6.2f, %+.5e, %+.5e, %+.5e, %+.5e  old\n", Theta[i]*180.0/PI, S1[i].real(), S1[i].imag(), S2[i].real(), S2[i].imag());
 | 
	
		
			
				|  |  | +    //     printf("%6.2f, %+.5e, %+.5e, %+.5e, %+.5e  \n", Theta[i]*180.0/PI, S1w[i].real(), S1w[i].imag(), S2w[i].real(), S2w[i].imag());
 | 
	
		
			
				|  |  | +    //   }
 | 
	
		
			
				|  |  | +    // }
 | 
	
		
			
				|  |  |      // Field testing
 | 
	
		
			
				|  |  |      double from_coord = -3.0, to_coord = 3000.0;
 | 
	
		
			
				|  |  |      //double size=2.0*PI*1.0/6.0;
 | 
	
		
			
				|  |  | -    double size=0.01;
 | 
	
		
			
				|  |  | +    double size=0.001;
 | 
	
		
			
				|  |  |      std::vector<double> range;
 | 
	
		
			
				|  |  |      // for (int i = 0; i < samples; ++i) {
 | 
	
		
			
				|  |  |        //range.push_back( from_coord + (to_coord-from_coord)/(static_cast<double>(samples)-1)*i );
 | 
	
		
			
				|  |  |      //range.push_back(size*0.01);
 | 
	
		
			
				|  |  |      //range.push_back(size*0.99999);
 | 
	
		
			
				|  |  | -    range.push_back(size/2.0);
 | 
	
		
			
				|  |  | +    range.push_back(size/20.0);
 | 
	
		
			
				|  |  |      //range.push_back(size*1.00001);
 | 
	
		
			
				|  |  |      //range.push_back(3);
 | 
	
		
			
				|  |  |      //printf("r=%g  ", range.back());
 | 
	
	
		
			
				|  | @@ -288,25 +250,22 @@ int main(int argc, char *argv[]) {
 | 
	
		
			
				|  |  |      int samples = range.size();
 | 
	
		
			
				|  |  |      std::vector<double> zero(samples, 0.0);
 | 
	
		
			
				|  |  |      std::vector<double> Xp, Yp, Zp;
 | 
	
		
			
				|  |  | -    // X line
 | 
	
		
			
				|  |  | -    Xp.insert(Xp.end(), range.begin(), range.end());
 | 
	
		
			
				|  |  | -    Yp.insert(Yp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | -    Zp.insert(Zp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | +    // // X line
 | 
	
		
			
				|  |  | +    // Xp.insert(Xp.end(), range.begin(), range.end());
 | 
	
		
			
				|  |  | +    // Yp.insert(Yp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | +    // Zp.insert(Zp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  |      // Y line
 | 
	
		
			
				|  |  |      Xp.insert(Xp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  |      Yp.insert(Yp.end(), range.begin(), range.end());
 | 
	
		
			
				|  |  |      Zp.insert(Zp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | -    // // Z line
 | 
	
		
			
				|  |  | -    Xp.insert(Xp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | -    Yp.insert(Yp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | -    Zp.insert(Zp.end(), range.begin(), range.end());
 | 
	
		
			
				|  |  | +    // // // Z line
 | 
	
		
			
				|  |  | +    // Xp.insert(Xp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | +    // Yp.insert(Yp.end(), zero.begin(), zero.end());
 | 
	
		
			
				|  |  | +    // Zp.insert(Zp.end(), range.begin(), range.end());
 | 
	
		
			
				|  |  |      int ncoord = Xp.size();
 | 
	
		
			
				|  |  | +    // Test solid sphere
 | 
	
		
			
				|  |  |      x = {size};
 | 
	
		
			
				|  |  | -    m = {std::complex<double>(4.000000,0.00)};
 | 
	
		
			
				|  |  | -    // x = {size};
 | 
	
		
			
				|  |  | -    //m = {std::complex<double>(1.33,0.0)};
 | 
	
		
			
				|  |  | -    // x = {1.017, 2.016};
 | 
	
		
			
				|  |  | -    // m = {std::complex<double>(1.5016,1.023), std::complex<double>(2.014,2.012)};
 | 
	
		
			
				|  |  | +    m = {std::complex<double>(2.000000,0.00)};
 | 
	
		
			
				|  |  |      L = x.size();
 | 
	
		
			
				|  |  |      int pl = 0;
 | 
	
		
			
				|  |  |      int nmax = 0;
 | 
	
	
		
			
				|  | @@ -321,14 +280,17 @@ int main(int argc, char *argv[]) {
 | 
	
		
			
				|  |  |      printf ("Field total sum ()\n");
 | 
	
		
			
				|  |  |      for (auto f:E) {
 | 
	
		
			
				|  |  |        sum_e = 0.0;
 | 
	
		
			
				|  |  | -      for (auto c:f) sum_e+=std::abs(pow2(c));
 | 
	
		
			
				|  |  | +      for (auto c:f) {
 | 
	
		
			
				|  |  | +	sum_e+=std::abs(pow2(c));
 | 
	
		
			
				|  |  | +	printf("component: %g + %g i\n", std::real(c), std::imag(c));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |        printf("Field E=%g\n", std::sqrt(std::abs(sum_e)));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    for (auto f:H) {
 | 
	
		
			
				|  |  | -      sum_h = 0.0;
 | 
	
		
			
				|  |  | -      for (auto c:f) sum_h+=std::abs(pow2(c));
 | 
	
		
			
				|  |  | -      printf("Field H=%g\n", std::sqrt(std::abs(sum_h))*free_impedance);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    // for (auto f:H) {
 | 
	
		
			
				|  |  | +    //   sum_h = 0.0;
 | 
	
		
			
				|  |  | +    //   for (auto c:f) sum_h+=std::abs(pow2(c));
 | 
	
		
			
				|  |  | +    //   printf("Field H=%g\n", std::sqrt(std::abs(sum_h))*free_impedance);
 | 
	
		
			
				|  |  | +    // }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    } catch( const std::invalid_argument& ia ) {
 | 
	
		
			
				|  |  |      // Will catch if  multi_layer_mie fails or other errors.
 |