rizer.cantera_ext
C++ Cantera 1-D plasma extension (custom Domain1D models and solvers)
Loading...
Searching...
No Matches
CollisionModel_test.cpp
Go to the documentation of this file.
1
15
18
19#include <gtest/gtest.h>
20
21#include <limits>
22#include <stdexcept>
23#include <vector>
24
25namespace
26{
27
30
33 CollisionModel neutralAndIon()
34 {
35 CollisionModel::SpeciesSpec neutral;
36 neutral.radius = 1.0e-10;
37 neutral.molar_mass = 0.028;
38 CollisionModel::SpeciesSpec ion;
39 ion.Z = 1;
40 ion.molar_mass = 0.028;
41 return CollisionModel({neutral, ion}, /*Te_min=*/200.0, /*Te_max=*/1.0e5,
42 /*Te_n=*/16);
43 }
44
46 TEST(CollisionModelEvaluate, RefusesANonPositiveOrNanTe)
47 {
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;
51
52 model.evaluate(/*Te=*/1.0e4, /*n_e=*/1.0e20, n_k, 2, sigma, nu_E, nu_eH, nu_eI,
53 nu_eH_mass_weighted);
54 EXPECT_GT(sigma, 0.0);
55
56 for (const double Te : {0.0, -300.0, std::numeric_limits<double>::quiet_NaN()})
57 {
58 EXPECT_THROW(model.evaluate(Te, /*n_e=*/1.0e20, n_k, 2, sigma, nu_E, nu_eH,
59 nu_eI, nu_eH_mass_weighted),
60 TrialStateError)
61 << "Te = " << Te;
62 }
63 }
64
68 TEST(CollisionModelEvaluate, RefusesAnIonWithoutElectrons)
69 {
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;
73
74 EXPECT_THROW(model.evaluate(/*Te=*/1.0e4, /*n_e=*/0.0, n_k, 2, sigma, nu_E,
75 nu_eH, nu_eI, nu_eH_mass_weighted),
76 TrialStateError);
77 }
78
82 TEST(CollisionModelEvaluate, RefusesANegativeCoulombLogarithm)
83 {
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;
87
88 EXPECT_THROW(model.evaluate(/*Te=*/1000.0, /*n_e=*/1.0e26, n_k, 2, sigma, nu_E,
89 nu_eH, nu_eI, nu_eH_mass_weighted),
90 TrialStateError);
91 }
92
97 TEST(CollisionModelEvaluate, RefusesADensityArrayOfTheWrongLength)
98 {
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;
102
103 for (const std::size_t nsp : {std::size_t{1}, std::size_t{3}})
104 {
105 EXPECT_THROW(model.evaluate(/*Te=*/1.0e4, /*n_e=*/1.0e20, n_k, nsp, sigma,
106 nu_E, nu_eH, nu_eI, nu_eH_mass_weighted),
107 std::invalid_argument)
108 << "nsp = " << nsp;
109 }
110 }
111
113 TEST(CollisionModelElectronElectron, RefusesANonPositiveOrNanTe)
114 {
115 for (const double Te : {0.0, -300.0, std::numeric_limits<double>::quiet_NaN()})
116 {
117 EXPECT_THROW(CollisionModel::electronElectronCollisionFrequency(
118 /*n_e=*/1.0e20, Te),
119 TrialStateError)
120 << "Te = " << Te;
121 }
122 }
123
124} // namespace
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,...