test_near_field.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "gtest/gtest.h"
  2. #include "../src/nmie-basic.hpp"
  3. #include "../src/nmie-nearfield.hpp"
  4. #include "test_cases.hpp"
  5. //TEST(RunFieldCalculationCartesian, DISABLED_HandlesInput) {
  6. TEST(RunFieldCalculationCartesian, HandlesInput) {
  7. nmie::MultiLayerMie<nmie::FloatType> nmie;
  8. // EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
  9. // EXPECT_THROW(nmie.RunFieldCalculationPolar(1,1,10,5), std::invalid_argument);
  10. nmie::FloatType r = 2*nmie.PI_*100/619;
  11. // double r = 1500;
  12. nmie.SetLayersSize({r/2, r});
  13. nmie.SetLayersIndex({ {4.0,0}, {4.0,0}});
  14. nmie.RunMieCalculation();
  15. int nmax = 21;
  16. // TODO add check of E and H symmetry for X and Y axis inversion
  17. nmie.RunFieldCalculationCartesian(2, 2, nmie::Planes::kEk,
  18. 0, 0, 0, true, nmax);
  19. nmie.RunFieldCalculationCartesian(2, 2, nmie::Planes::kHk,
  20. 0, 0, 0, true, nmax);
  21. nmie.RunFieldCalculationCartesian(2, 2, nmie::Planes::kEH,
  22. 0, 0, 0, true, nmax);
  23. // EXPECT_EQ(1, nmie.GetMaxTerms());
  24. // EXPECT_FALSE(nmie.GetFieldConvergence());
  25. // auto Eabs = nmie.GetFieldEabs();
  26. // EXPECT_TRUE(std::isnan(static_cast<double>(Eabs[0])));
  27. }
  28. //TEST(RunFieldCalculationPolar, DISABLED_HandlesInput) {
  29. TEST(RunFieldCalculationPolar, HandlesInput) {
  30. nmie::MultiLayerMie<nmie::FloatType> nmie;
  31. EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
  32. EXPECT_THROW(nmie.RunFieldCalculationPolar(1,1,10,5), std::invalid_argument);
  33. double r = 60;
  34. // double r = 1500;
  35. nmie.SetLayersSize({r/2, r});
  36. nmie.SetLayersIndex({ {1.33,0}, {1.33,0}});
  37. nmie.RunMieCalculation();
  38. nmie.RunFieldCalculationPolar(1, 1,
  39. 0.5145*r,
  40. r*0.5148,
  41. 0, 3.14, 0, 0, true, 1);
  42. EXPECT_EQ(1, nmie.GetMaxTerms());
  43. EXPECT_FALSE(nmie.GetFieldConvergence());
  44. auto Eabs = nmie.GetFieldEabs();
  45. EXPECT_TRUE(std::isnan(static_cast<double>(Eabs[0])));
  46. }
  47. //#ifndef MULTI_PRECISION
  48. //TEST(BulkSphere, DISABLED_HandlesInput) {
  49. TEST(BulkSphere, HandlesInput) {
  50. nmie::MultiLayerMie<nmie::FloatType> nmie;
  51. for (const auto &data : parameters_bulk_sphere) {
  52. auto x = std::get<0>(data);
  53. auto m = std::get<1>(data);
  54. nmie.SetLayersSize({x});
  55. nmie.SetLayersIndex({m});
  56. nmie.SetMaxTerms(-1);
  57. // nmie.RunMieCalculation();
  58. // std::cout<<" test case: "<<std::get<2>(data)<<" Qsca="<<nmie.GetQsca()<<std::endl;
  59. nmie.RunFieldCalculationPolar(4,3,x,x*3, 0, static_cast<double>(nmie.PI_), 0, static_cast<double>(nmie.PI_),true, -1);
  60. auto Eabs = nmie.GetFieldEabs();
  61. for (auto &E:Eabs) E=nmie::pow2(E);
  62. // print(Eabs)
  63. EXPECT_TRUE(nmie.GetFieldConvergence())<<"Outside test for x="<<x<<" m="<<m<<" test case: "<<std::get<2>(data)<<std::endl;
  64. nmie.RunFieldCalculationPolar(4,10,x*0.01,x, 0, static_cast<double>(nmie.PI_), 0, static_cast<double>(nmie.PI_),true, -1);
  65. EXPECT_TRUE(nmie.GetFieldConvergence())<<"Inside test for x="<<x<<" m="<<m<<" test case: "<<std::get<2>(data)<<std::endl;
  66. }
  67. }
  68. //#endif
  69. int main(int argc, char **argv) {
  70. testing::InitGoogleTest(&argc, argv);
  71. return RUN_ALL_TESTS();
  72. }