|
@@ -1,76 +1,74 @@
|
|
-#include "gtest/gtest.h"
|
|
|
|
#include "../src/nmie-basic.hpp"
|
|
#include "../src/nmie-basic.hpp"
|
|
#include "../src/nmie-nearfield.hpp"
|
|
#include "../src/nmie-nearfield.hpp"
|
|
|
|
+#include "gtest/gtest.h"
|
|
#include "test_cases.hpp"
|
|
#include "test_cases.hpp"
|
|
|
|
|
|
-//TEST(RunFieldCalculationCartesian, DISABLED_HandlesInput) {
|
|
|
|
|
|
+// TEST(RunFieldCalculationCartesian, DISABLED_HandlesInput) {
|
|
TEST(RunFieldCalculationCartesian, HandlesInput) {
|
|
TEST(RunFieldCalculationCartesian, HandlesInput) {
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
-// EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
|
|
|
|
-// EXPECT_THROW(nmie.RunFieldCalculationPolar(1,1,10,5), std::invalid_argument);
|
|
|
|
- nmie::FloatType total_r = 2*nmie::PI_*1000/532;
|
|
|
|
-// double r = 1500;
|
|
|
|
- nmie.SetLayersSize({total_r/2, total_r});
|
|
|
|
- nmie.SetLayersIndex({ {1.330,0}, {1.33,0}});
|
|
|
|
|
|
+ // EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
|
|
|
|
+ // EXPECT_THROW(nmie.RunFieldCalculationPolar(1,1,10,5),
|
|
|
|
+ // std::invalid_argument);
|
|
|
|
+ nmie::FloatType total_r = 2 * nmie::PI_ * 1000 / 532;
|
|
|
|
+ // double r = 1500;
|
|
|
|
+ nmie.SetLayersSize({total_r / 2, total_r});
|
|
|
|
+ nmie.SetLayersIndex({{1.330, 0}, {1.33, 0}});
|
|
nmie.RunMieCalculation();
|
|
nmie.RunMieCalculation();
|
|
double relative_max_distance = 1e-10;
|
|
double relative_max_distance = 1e-10;
|
|
-// nmie.SetModeNmaxAndType(3,-1);
|
|
|
|
-// int nmax = 21;
|
|
|
|
- nmie.RunFieldCalculationCartesian(2, 5, relative_max_distance, nmie::Planes::kEk,
|
|
|
|
- 1.0, 0, 0, false,3);
|
|
|
|
|
|
+ // nmie.SetModeNmaxAndType(3,-1);
|
|
|
|
+ // int nmax = 21;
|
|
|
|
+ nmie.RunFieldCalculationCartesian(2, 5, relative_max_distance,
|
|
|
|
+ nmie::Planes::kEk, 1.0, 0, 0, false, 3);
|
|
auto Eabs = nmie.GetFieldEabs();
|
|
auto Eabs = nmie.GetFieldEabs();
|
|
auto E = nmie.GetFieldE();
|
|
auto E = nmie.GetFieldE();
|
|
- std::cout<<std::endl;
|
|
|
|
|
|
+ std::cout << std::endl;
|
|
{
|
|
{
|
|
// Eabs points are located near the sphere outer border
|
|
// Eabs points are located near the sphere outer border
|
|
//
|
|
//
|
|
// 0 1 2 3 4
|
|
// 0 1 2 3 4
|
|
// ----- border ----
|
|
// ----- border ----
|
|
// 5 6 7 8 9
|
|
// 5 6 7 8 9
|
|
- // distance between points (0) and (4) is relative_max_distance*total_r, initial
|
|
|
|
- // value used for the test was 1e-10*total_r, so we expect good linear dependence
|
|
|
|
- // for points from 0 to 4 and 5 to 9. In the asserts we check, that the slope doesn't
|
|
|
|
- // change too fast inside the curve. While writing this, the test was failing.
|
|
|
|
- // The value of z-coordinates of 2 and 7 points = 0
|
|
|
|
|
|
+ // distance between points (0) and (4) is relative_max_distance*total_r,
|
|
|
|
+ // initial value used for the test was 1e-10*total_r, so we expect good
|
|
|
|
+ // linear dependence for points from 0 to 4 and 5 to 9. In the asserts we
|
|
|
|
+ // check, that the slope doesn't change too fast inside the curve. While
|
|
|
|
+ // writing this, the test was failing. The value of z-coordinates of 2 and 7
|
|
|
|
+ // points = 0
|
|
using nmie::nmm::abs;
|
|
using nmie::nmm::abs;
|
|
- EXPECT_TRUE(
|
|
|
|
- ( abs(Eabs[0] - Eabs[1]) + abs(Eabs[3] - Eabs[4]) ) >= abs(Eabs[1] - Eabs[2])
|
|
|
|
- );
|
|
|
|
- EXPECT_TRUE(
|
|
|
|
- ( abs(Eabs[5] - Eabs[6]) + abs(Eabs[8] - Eabs[9]) ) >= abs(Eabs[6] - Eabs[7])
|
|
|
|
- );
|
|
|
|
|
|
+ EXPECT_TRUE((abs(Eabs[0] - Eabs[1]) + abs(Eabs[3] - Eabs[4])) >=
|
|
|
|
+ abs(Eabs[1] - Eabs[2]));
|
|
|
|
+ EXPECT_TRUE((abs(Eabs[5] - Eabs[6]) + abs(Eabs[8] - Eabs[9])) >=
|
|
|
|
+ abs(Eabs[6] - Eabs[7]));
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-// nmie.RunFieldCalculationCartesian(2, 2, 2, nmie::Planes::kHk,
|
|
|
|
-// 0, 0, 0, true);
|
|
|
|
-// nmie.RunFieldCalculationCartesian(2, 2, 2, nmie::Planes::kEH,
|
|
|
|
-// 0, 0, 0, true);
|
|
|
|
|
|
+ // nmie.RunFieldCalculationCartesian(2, 2, 2, nmie::Planes::kHk,
|
|
|
|
+ // 0, 0, 0, true);
|
|
|
|
+ // nmie.RunFieldCalculationCartesian(2, 2, 2, nmie::Planes::kEH,
|
|
|
|
+ // 0, 0, 0, true);
|
|
// TODO add check of E and H symmetry for X and Y axis inversion
|
|
// TODO add check of E and H symmetry for X and Y axis inversion
|
|
|
|
|
|
-// EXPECT_EQ(1, nmie.GetMaxTerms());
|
|
|
|
-// EXPECT_FALSE(nmie.GetFieldConvergence());
|
|
|
|
-// auto Eabs = nmie.GetFieldEabs();
|
|
|
|
-// EXPECT_TRUE(std::isnan(static_cast<double>(Eabs[0])));
|
|
|
|
-
|
|
|
|
|
|
+ // EXPECT_EQ(1, nmie.GetMaxTerms());
|
|
|
|
+ // EXPECT_FALSE(nmie.GetFieldConvergence());
|
|
|
|
+ // auto Eabs = nmie.GetFieldEabs();
|
|
|
|
+ // EXPECT_TRUE(std::isnan(static_cast<double>(Eabs[0])));
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+#ifdef SKIP_LONG_TESTS
|
|
TEST(LargeBubbleSpectrum, DISABLED_HandlesInput) {
|
|
TEST(LargeBubbleSpectrum, DISABLED_HandlesInput) {
|
|
-//TEST(LargeBubbleSpectrum, HandlesInput) { // TODO fix fail...
|
|
|
|
|
|
+ // TEST(LargeBubbleSpectrum, HandlesInput) { // TODO fix fail...
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
- nmie::FloatType core_r = 2*nmie::PI_*100;
|
|
|
|
- nmie::FloatType shell_r = 2*nmie::PI_*(100+0.1);
|
|
|
|
- nmie.SetLayersIndex({ {1,0}, {1.33,0}});
|
|
|
|
|
|
+ nmie::FloatType core_r = 2 * nmie::PI_ * 100;
|
|
|
|
+ nmie::FloatType shell_r = 2 * nmie::PI_ * (100 + 0.1);
|
|
|
|
+ nmie.SetLayersIndex({{1, 0}, {1.33, 0}});
|
|
double central_WL = 0.7007;
|
|
double central_WL = 0.7007;
|
|
double relative_distance = 1e-10;
|
|
double relative_distance = 1e-10;
|
|
- double dWL = central_WL*relative_distance;
|
|
|
|
|
|
+ double dWL = central_WL * relative_distance;
|
|
std::vector<double> Qsca(5);
|
|
std::vector<double> Qsca(5);
|
|
for (int i = 0; i < 5; ++i) {
|
|
for (int i = 0; i < 5; ++i) {
|
|
- auto WL = static_cast<nmie::FloatType>(central_WL +(i - 2)*dWL);
|
|
|
|
- nmie.SetLayersSize({core_r/WL, shell_r/WL});
|
|
|
|
|
|
+ auto WL = static_cast<nmie::FloatType>(central_WL + (i - 2) * dWL);
|
|
|
|
+ nmie.SetLayersSize({core_r / WL, shell_r / WL});
|
|
nmie.RunMieCalculation();
|
|
nmie.RunMieCalculation();
|
|
Qsca[i] = static_cast<double>(nmie.GetQsca());
|
|
Qsca[i] = static_cast<double>(nmie.GetQsca());
|
|
- std::cout<<"Qsca["<<i<<"]="<<Qsca[i]<<std::endl;
|
|
|
|
|
|
+ std::cout << "Qsca[" << i << "]=" << Qsca[i] << std::endl;
|
|
}
|
|
}
|
|
|
|
|
|
{
|
|
{
|
|
@@ -78,61 +76,69 @@ TEST(LargeBubbleSpectrum, DISABLED_HandlesInput) {
|
|
//
|
|
//
|
|
// 0 1 2 3 4
|
|
// 0 1 2 3 4
|
|
// ------- WL ------>
|
|
// ------- WL ------>
|
|
- // distance between points (0) and (4) is 5*relative_distance*central_WL, initial
|
|
|
|
- // value used for the test was 5*1e-10*0.7007, so we expect good linear dependence
|
|
|
|
- // for points from 0 to 4. In the asserts we check, that the slope doesn't
|
|
|
|
- // change too fast inside the curve.
|
|
|
|
|
|
+ // distance between points (0) and (4) is 5*relative_distance*central_WL,
|
|
|
|
+ // initial value used for the test was 5*1e-10*0.7007, so we expect good
|
|
|
|
+ // linear dependence for points from 0 to 4. In the asserts we check, that
|
|
|
|
+ // the slope doesn't change too fast inside the curve.
|
|
using std::abs;
|
|
using std::abs;
|
|
- EXPECT_TRUE(
|
|
|
|
- ( abs(Qsca[0] - Qsca[1]) + abs(Qsca[3] - Qsca[4]) ) >= abs(Qsca[1] - Qsca[2])
|
|
|
|
- );
|
|
|
|
|
|
+ EXPECT_TRUE((abs(Qsca[0] - Qsca[1]) + abs(Qsca[3] - Qsca[4])) >=
|
|
|
|
+ abs(Qsca[1] - Qsca[2]));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
-//TEST(RunFieldCalculationPolar, DISABLED_HandlesInput) {
|
|
|
|
|
|
+// TEST(RunFieldCalculationPolar, DISABLED_HandlesInput) {
|
|
TEST(RunFieldCalculationPolar, HandlesInput) {
|
|
TEST(RunFieldCalculationPolar, HandlesInput) {
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
|
|
EXPECT_THROW(nmie.RunFieldCalculationPolar(0), std::invalid_argument);
|
|
- EXPECT_THROW(nmie.RunFieldCalculationPolar(1,1,10,5), std::invalid_argument);
|
|
|
|
|
|
+ EXPECT_THROW(nmie.RunFieldCalculationPolar(1, 1, 10, 5),
|
|
|
|
+ std::invalid_argument);
|
|
double r = 60;
|
|
double r = 60;
|
|
-// double r = 1500;
|
|
|
|
- nmie.SetLayersSize({r/2, r});
|
|
|
|
- nmie.SetLayersIndex({ {1.33,0}, {1.33,0}});
|
|
|
|
|
|
+ // double r = 1500;
|
|
|
|
+ nmie.SetLayersSize({r / 2, r});
|
|
|
|
+ nmie.SetLayersIndex({{1.33, 0}, {1.33, 0}});
|
|
nmie.RunMieCalculation();
|
|
nmie.RunMieCalculation();
|
|
- nmie.RunFieldCalculationPolar(1, 1,
|
|
|
|
- 0.5145*r,
|
|
|
|
- r*0.5148,
|
|
|
|
- 0, 3.14, 0, 0, true, 1);
|
|
|
|
|
|
+ nmie.RunFieldCalculationPolar(1, 1, 0.5145 * r, r * 0.5148, 0, 3.14, 0, 0,
|
|
|
|
+ true, 1);
|
|
EXPECT_EQ(1, nmie.GetMaxTerms());
|
|
EXPECT_EQ(1, nmie.GetMaxTerms());
|
|
EXPECT_FALSE(nmie.GetFieldConvergence());
|
|
EXPECT_FALSE(nmie.GetFieldConvergence());
|
|
auto Eabs = nmie.GetFieldEabs();
|
|
auto Eabs = nmie.GetFieldEabs();
|
|
EXPECT_TRUE(std::isnan(static_cast<double>(Eabs[0])));
|
|
EXPECT_TRUE(std::isnan(static_cast<double>(Eabs[0])));
|
|
-
|
|
|
|
}
|
|
}
|
|
//#ifndef MULTI_PRECISION
|
|
//#ifndef MULTI_PRECISION
|
|
-//TEST(BulkSphere, DISABLED_HandlesInput) {
|
|
|
|
|
|
+// TEST(BulkSphere, DISABLED_HandlesInput) {
|
|
TEST(BulkSphere, HandlesInput) {
|
|
TEST(BulkSphere, HandlesInput) {
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
nmie::MultiLayerMie<nmie::FloatType> nmie;
|
|
- for (const auto &data : parameters_bulk_sphere) {
|
|
|
|
|
|
+ for (const auto& data : parameters_bulk_sphere) {
|
|
auto x = std::get<0>(data);
|
|
auto x = std::get<0>(data);
|
|
auto m = std::get<1>(data);
|
|
auto m = std::get<1>(data);
|
|
nmie.SetLayersSize({x});
|
|
nmie.SetLayersSize({x});
|
|
nmie.SetLayersIndex({m});
|
|
nmie.SetLayersIndex({m});
|
|
nmie.SetMaxTerms(-1);
|
|
nmie.SetMaxTerms(-1);
|
|
-// nmie.RunMieCalculation();
|
|
|
|
-// std::cout<<" test case: "<<std::get<2>(data)<<" Qsca="<<nmie.GetQsca()<<std::endl;
|
|
|
|
- nmie.RunFieldCalculationPolar(4,3,x,x*3, 0, static_cast<double>(nmie::PI_), 0, static_cast<double>(nmie::PI_),true, -1);
|
|
|
|
|
|
+ // nmie.RunMieCalculation();
|
|
|
|
+ // std::cout<<" test case: "<<std::get<2>(data)<<"
|
|
|
|
+ // Qsca="<<nmie.GetQsca()<<std::endl;
|
|
|
|
+ nmie.RunFieldCalculationPolar(4, 3, x, x * 3, 0,
|
|
|
|
+ static_cast<double>(nmie::PI_), 0,
|
|
|
|
+ static_cast<double>(nmie::PI_), true, -1);
|
|
auto Eabs = nmie.GetFieldEabs();
|
|
auto Eabs = nmie.GetFieldEabs();
|
|
- for (auto &E:Eabs) E=nmie::pow2(E);
|
|
|
|
-// print(Eabs)
|
|
|
|
- EXPECT_TRUE(nmie.GetFieldConvergence())<<"Outside test for x="<<x<<" m="<<m<<" test case: "<<std::get<2>(data)<<std::endl;
|
|
|
|
- nmie.RunFieldCalculationPolar(4,10,x*0.01,x, 0, static_cast<double>(nmie::PI_), 0, static_cast<double>(nmie::PI_),true, -1);
|
|
|
|
- EXPECT_TRUE(nmie.GetFieldConvergence())<<"Inside test for x="<<x<<" m="<<m<<" test case: "<<std::get<2>(data)<<std::endl;
|
|
|
|
|
|
+ for (auto& E : Eabs)
|
|
|
|
+ E = nmie::pow2(E);
|
|
|
|
+ // print(Eabs)
|
|
|
|
+ EXPECT_TRUE(nmie.GetFieldConvergence())
|
|
|
|
+ << "Outside test for x=" << x << " m=" << m
|
|
|
|
+ << " test case: " << std::get<2>(data) << std::endl;
|
|
|
|
+ nmie.RunFieldCalculationPolar(4, 10, x * 0.01, x, 0,
|
|
|
|
+ static_cast<double>(nmie::PI_), 0,
|
|
|
|
+ static_cast<double>(nmie::PI_), true, -1);
|
|
|
|
+ EXPECT_TRUE(nmie.GetFieldConvergence())
|
|
|
|
+ << "Inside test for x=" << x << " m=" << m
|
|
|
|
+ << " test case: " << std::get<2>(data) << std::endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//#endif
|
|
//#endif
|
|
|
|
|
|
-int main(int argc, char **argv) {
|
|
|
|
|
|
+int main(int argc, char** argv) {
|
|
testing::InitGoogleTest(&argc, argv);
|
|
testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
return RUN_ALL_TESTS();
|
|
}
|
|
}
|