test_near_field.cc 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "gtest/gtest.h"
  2. #include "../src/nmie-basic.hpp"
  3. #include "../src/nmie-nearfield.hpp"
  4. TEST(RunFieldCalculationPolar, HandlesInput) {
  5. nmie::MultiLayerMie<nmie::FloatType> nmie;
  6. EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
  7. EXPECT_THROW(nmie.RunFieldCalculationPolar(1,1,10,5), std::invalid_argument);
  8. nmie.SetLayersSize({1.099});
  9. nmie.SetLayersIndex({ {1.,0}});
  10. nmie.RunMieCalculation();
  11. nmie.RunFieldCalculationPolar(2, 2, 0.1, 1.5);
  12. auto Eabs = nmie.GetFieldEabs();
  13. std::cout<<"nmax = " << nmie.GetMaxTerms() << std::endl;
  14. }
  15. //TEST(BulkSphere, HandlesInput) {
  16. // nmie::MultiLayerMie<nmie::FloatType> nmie;
  17. // // A list of tests for a bulk sphere from
  18. // // Hong Du, "Mie-scattering calculation," Appl. Opt. 43, 1951-1956 (2004)
  19. // // table 1: sphere size and refractive index
  20. // // followed by resulting extinction and scattering efficiencies
  21. // std::vector< std::tuple< double, std::complex<double>, double, double, char > >
  22. // parameters_and_results
  23. // {
  24. // // x, {Re(m), Im(m)}, Qext, Qsca, test_name
  25. // {0.099, {0.75,0}, 7.417859e-06, 7.417859e-06, 'a'},
  26. // {0.101, {0.75,0}, 8.033538e-06, 8.033538e-06, 'b'},
  27. // {10, {0.75,0}, 2.232265, 2.232265, 'c'},
  28. // {100, {1.33,1e-5}, 2.101321, 2.096594, 'e'},
  29. // {0.055, {1.5, 1}, 0.10149104, 1.131687e-05, 'g'},
  30. // {0.056, {1.5, 1}, 0.1033467, 1.216311e-05, 'h'},
  31. // {100, {1.5, 1}, 2.097502, 1.283697, 'i'},
  32. // {1, {10, 10}, 2.532993, 2.049405, 'k'},
  33. // {1000, {0.75,0}, 1.997908, 1.997908, 'd'},
  34. // {100, {10, 10,}, 2.071124, 1.836785, 'l'},
  35. // {10000, {1.33,1e-5}, 2.004089, 1.723857, 'f'},
  36. // {10000, {1.5, 1}, 2.004368, 1.236574, 'j'},
  37. // {10000, {10, 10}, 2.005914, 1.795393, 'm'},
  38. // };
  39. // for (const auto &data : parameters_and_results) {
  40. // auto x = std::get<0>(data);
  41. // auto m = std::get<1>(data);
  42. // // auto Nstop = nmie::LeRu_near_field_cutoff(m*x)+1;
  43. //
  44. // nmie.SetLayersSize({x});
  45. // nmie.SetLayersIndex({m});
  46. //// nmie.SetMaxTerms(Nstop);
  47. // nmie.RunMieCalculation();
  48. // double Qext = static_cast<double>(nmie.GetQext());
  49. // double Qsca = static_cast<double>(nmie.GetQsca());
  50. // double Qext_Du = std::get<2>(data);
  51. // double Qsca_Du = std::get<3>(data);
  52. // EXPECT_FLOAT_EQ(Qext_Du, Qext)
  53. // << "Extinction of the bulk sphere, test case:" << std::get<4>(data)
  54. // << "\nnmax_ = " << nmie.GetMaxTerms();
  55. // EXPECT_FLOAT_EQ(Qsca_Du, Qsca)
  56. // << "Scattering of the bulk sphere, test case:" << std::get<4>(data);
  57. // }
  58. //}
  59. int main(int argc, char **argv) {
  60. testing::InitGoogleTest(&argc, argv);
  61. return RUN_ALL_TESTS();
  62. }