19#include <gtest/gtest.h>
33 CollisionModel neutralAndIon()
35 CollisionModel::SpeciesSpec neutral;
36 neutral.radius = 1.0e-10;
37 neutral.molar_mass = 0.028;
38 CollisionModel::SpeciesSpec ion;
40 ion.molar_mass = 0.028;
41 return CollisionModel({neutral, ion}, 200.0, 1.0e5,
46 TEST(CollisionModelEvaluate, RefusesANonPositiveOrNanTe)
48 const CollisionModel model = neutralAndIon();
49 const double n_k[2] = {2.4e25, 1.0e20};
50 double sigma, nu_E, nu_eH, nu_eI, nu_eH_mass_weighted;
52 model.evaluate(1.0e4, 1.0e20, n_k, 2, sigma, nu_E, nu_eH, nu_eI,
54 EXPECT_GT(sigma, 0.0);
56 for (
const double Te : {0.0, -300.0, std::numeric_limits<double>::quiet_NaN()})
58 EXPECT_THROW(model.evaluate(Te, 1.0e20, n_k, 2, sigma, nu_E, nu_eH,
59 nu_eI, nu_eH_mass_weighted),
68 TEST(CollisionModelEvaluate, RefusesAnIonWithoutElectrons)
70 const CollisionModel model = neutralAndIon();
71 const double n_k[2] = {2.4e25, 1.0e20};
72 double sigma, nu_E, nu_eH, nu_eI, nu_eH_mass_weighted;
74 EXPECT_THROW(model.evaluate(1.0e4, 0.0, n_k, 2, sigma, nu_E,
75 nu_eH, nu_eI, nu_eH_mass_weighted),
82 TEST(CollisionModelEvaluate, RefusesANegativeCoulombLogarithm)
84 const CollisionModel model = neutralAndIon();
85 const double n_k[2] = {2.4e25, 1.0e26};
86 double sigma, nu_E, nu_eH, nu_eI, nu_eH_mass_weighted;
88 EXPECT_THROW(model.evaluate(1000.0, 1.0e26, n_k, 2, sigma, nu_E,
89 nu_eH, nu_eI, nu_eH_mass_weighted),
97 TEST(CollisionModelEvaluate, RefusesADensityArrayOfTheWrongLength)
99 const CollisionModel model = neutralAndIon();
100 const double n_k[3] = {2.4e25, 1.0e20, 1.0e20};
101 double sigma, nu_E, nu_eH, nu_eI, nu_eH_mass_weighted;
103 for (
const std::size_t nsp : {std::size_t{1}, std::size_t{3}})
105 EXPECT_THROW(model.evaluate(1.0e4, 1.0e20, n_k, nsp, sigma,
106 nu_E, nu_eH, nu_eI, nu_eH_mass_weighted),
107 std::invalid_argument)
113 TEST(CollisionModelElectronElectron, RefusesANonPositiveOrNanTe)
115 for (
const double Te : {0.0, -300.0, std::numeric_limits<double>::quiet_NaN()})
117 EXPECT_THROW(CollisionModel::electronElectronCollisionFrequency(
The error a closure raises for a state it cannot evaluate, so that the integrator proposing that stat...
Composition-resolved electron-heavy momentum-transfer collision model.
A state the closures cannot evaluate: a temperature outside the fits, an undefined Coulomb logarithm,...