16const int DeltaDegree = 6;
18std::array<double, 8> MMCollisionInt::delta = {
19 0.0, 0.25, 0.50, 0.75, 1.0, 1.5, 2.0, 2.5};
21double MMCollisionInt::quadInterp(
double x0, span<const double> x, span<const double> y)
25 double dx21 = x[1] - x[0];
26 double dx32 = x[2] - x[1];
27 double dx31 = dx21 + dx32;
28 double dy32 = y[2] - y[1];
29 double dy21 = y[1] - y[0];
30 double a = (dx21*dy32 - dy21*dx32)/(dx21*dx31*dx32);
31 return a*(x0 - x[0])*(x0 - x[1]) + (dy21/dx21)*(x0 - x[1]) + y[1];
34std::array<double, 37> MMCollisionInt::tstar22 = {
35 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,
36 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0,
37 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 14.0, 16.0,
38 18.0, 20.0, 25.0, 30.0, 35.0, 40.0, 50.0, 75.0, 100.0
42 4.1005, 4.266, 4.833, 5.742, 6.729, 8.624, 10.34, 11.89,
43 3.2626, 3.305, 3.516, 3.914, 4.433, 5.57, 6.637, 7.618,
44 2.8399, 2.836, 2.936, 3.168, 3.511, 4.329, 5.126, 5.874,
45 2.531, 2.522, 2.586, 2.749, 3.004, 3.64, 4.282, 4.895,
46 2.2837, 2.277, 2.329, 2.46, 2.665, 3.187, 3.727, 4.249,
47 2.0838, 2.081, 2.13, 2.243, 2.417, 2.862, 3.329, 3.786,
48 1.922, 1.924, 1.97, 2.072, 2.225, 2.614, 3.028, 3.435,
49 1.7902, 1.795, 1.84, 1.934, 2.07, 2.417, 2.788, 3.156,
50 1.6823, 1.689, 1.733, 1.82, 1.944, 2.258, 2.596, 2.933,
51 1.5929, 1.601, 1.644, 1.725, 1.838, 2.124, 2.435, 2.746,
52 1.4551, 1.465, 1.504, 1.574, 1.67, 1.913, 2.181, 2.451,
53 1.3551, 1.365, 1.4, 1.461, 1.544, 1.754, 1.989, 2.228,
54 1.28, 1.289, 1.321, 1.374, 1.447, 1.63, 1.838, 2.053,
55 1.2219, 1.231, 1.259, 1.306, 1.37, 1.532, 1.718, 1.912,
56 1.1757, 1.184, 1.209, 1.251, 1.307, 1.451, 1.618, 1.795,
57 1.0933, 1.1, 1.119, 1.15, 1.193, 1.304, 1.435, 1.578,
58 1.0388, 1.044, 1.059, 1.083, 1.117, 1.204, 1.31, 1.428,
59 0.99963, 1.004, 1.016, 1.035, 1.062, 1.133, 1.22, 1.319,
60 0.96988, 0.9732, 0.983, 0.9991, 1.021, 1.079, 1.153, 1.236,
61 0.92676, 0.9291, 0.936, 0.9473, 0.9628, 1.005, 1.058, 1.121,
62 0.89616, 0.8979, 0.903, 0.9114, 0.923, 0.9545, 0.9955, 1.044,
63 0.87272, 0.8741, 0.878, 0.8845, 0.8935, 0.9181, 0.9505, 0.9893,
64 0.85379, 0.8549, 0.858, 0.8632, 0.8703, 0.8901, 0.9164, 0.9482,
65 0.83795, 0.8388, 0.8414, 0.8456, 0.8515, 0.8678, 0.8895, 0.916,
66 0.82435, 0.8251, 0.8273, 0.8308, 0.8356, 0.8493, 0.8676, 0.8901,
67 0.80184, 0.8024, 0.8039, 0.8065, 0.8101, 0.8201, 0.8337, 0.8504,
68 0.78363, 0.784, 0.7852, 0.7872, 0.7899, 0.7976, 0.8081, 0.8212,
69 0.76834, 0.7687, 0.7696, 0.7712, 0.7733, 0.7794, 0.7878, 0.7983,
70 0.75518, 0.7554, 0.7562, 0.7575, 0.7592, 0.7642, 0.7711, 0.7797,
71 0.74364, 0.7438, 0.7445, 0.7455, 0.747, 0.7512, 0.7569, 0.7642,
72 0.71982, 0.72, 0.7204, 0.7211, 0.7221, 0.725, 0.7289, 0.7339,
73 0.70097, 0.7011, 0.7014, 0.7019, 0.7026, 0.7047, 0.7076, 0.7112,
74 0.68545, 0.6855, 0.6858, 0.6861, 0.6867, 0.6883, 0.6905, 0.6932,
75 0.67232, 0.6724, 0.6726, 0.6728, 0.6733, 0.6743, 0.6762, 0.6784,
76 0.65099, 0.651, 0.6512, 0.6513, 0.6516, 0.6524, 0.6534, 0.6546,
77 0.61397, 0.6141, 0.6143, 0.6145, 0.6147, 0.6148, 0.6148, 0.6147,
78 0.5887, 0.5889, 0.5894, 0.59, 0.5903, 0.5901, 0.5895, 0.5885
83 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,
84 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0,
85 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 14.0, 16.0,
86 18.0, 20.0, 25.0, 30.0, 35.0, 40.0, 50.0, 75.0, 100.0, 500.0
90 1.0065, 1.0840, 1.0840, 1.0840, 1.0840, 1.0840, 1.0840, 1.0840,
91 1.0231, 1.0660, 1.0380, 1.0400, 1.0430, 1.0500, 1.0520, 1.0510,
92 1.0424, 1.0450, 1.0480, 1.0520, 1.0560, 1.0650, 1.0660, 1.0640,
93 1.0719, 1.0670, 1.0600, 1.0550, 1.0580, 1.0680, 1.0710, 1.0710,
94 1.0936, 1.0870, 1.0770, 1.0690, 1.0680, 1.0750, 1.0780, 1.0780,
95 1.1053, 1.0980, 1.0880, 1.0800, 1.0780, 1.0820, 1.0840, 1.0840,
96 1.1104, 1.1040, 1.0960, 1.0890, 1.0860, 1.0890, 1.0900, 1.0900,
97 1.1114, 1.1070, 1.1000, 1.0950, 1.0930, 1.0950, 1.0960, 1.0950,
98 1.1104, 1.1070, 1.1020, 1.0990, 1.0980, 1.1000, 1.1000, 1.0990,
99 1.1086, 1.1060, 1.1020, 1.1010, 1.1010, 1.1050, 1.1050, 1.1040,
100 1.1063, 1.1040, 1.1030, 1.1030, 1.1040, 1.1080, 1.1090, 1.1080,
101 1.1020, 1.1020, 1.1030, 1.1050, 1.1070, 1.1120, 1.1150, 1.1150,
102 1.0985, 1.0990, 1.1010, 1.1040, 1.1080, 1.1150, 1.1190, 1.1200,
103 1.0960, 1.0960, 1.0990, 1.1030, 1.1080, 1.1160, 1.1210, 1.1240,
104 1.0943, 1.0950, 1.0990, 1.1020, 1.1080, 1.1170, 1.1230, 1.1260,
105 1.0934, 1.0940, 1.0970, 1.1020, 1.1070, 1.1160, 1.1230, 1.1280,
106 1.0926, 1.0940, 1.0970, 1.0990, 1.1050, 1.1150, 1.1230, 1.1300,
107 1.0934, 1.0950, 1.0970, 1.0990, 1.1040, 1.1130, 1.1220, 1.1290,
108 1.0948, 1.0960, 1.0980, 1.1000, 1.1030, 1.1120, 1.1190, 1.1270,
109 1.0965, 1.0970, 1.0990, 1.1010, 1.1040, 1.1100, 1.1180, 1.1260,
110 1.0997, 1.1000, 1.1010, 1.1020, 1.1050, 1.1100, 1.1160, 1.1230,
111 1.1025, 1.1030, 1.1040, 1.1050, 1.1060, 1.1100, 1.1150, 1.1210,
112 1.1050, 1.1050, 1.1060, 1.1070, 1.1080, 1.1110, 1.1150, 1.1200,
113 1.1072, 1.1070, 1.1080, 1.1080, 1.1090, 1.1120, 1.1150, 1.1190,
114 1.1091, 1.1090, 1.1090, 1.1100, 1.1110, 1.1130, 1.1150, 1.1190,
115 1.1107, 1.1110, 1.1110, 1.1110, 1.1120, 1.1140, 1.1160, 1.1190,
116 1.1133, 1.1140, 1.1130, 1.1140, 1.1140, 1.1150, 1.1170, 1.1190,
117 1.1154, 1.1150, 1.1160, 1.1160, 1.1160, 1.1170, 1.1180, 1.1200,
118 1.1172, 1.1170, 1.1170, 1.1180, 1.1180, 1.1180, 1.1190, 1.1200,
119 1.1186, 1.1190, 1.1190, 1.1190, 1.1190, 1.1190, 1.1200, 1.1210,
120 1.1199, 1.1200, 1.1200, 1.1200, 1.1200, 1.1210, 1.1210, 1.1220,
121 1.1223, 1.1220, 1.1220, 1.1220, 1.1220, 1.1230, 1.1230, 1.1240,
122 1.1243, 1.1240, 1.1240, 1.1240, 1.1240, 1.1240, 1.1250, 1.1250,
123 1.1259, 1.1260, 1.1260, 1.1260, 1.1260, 1.1260, 1.1260, 1.1260,
124 1.1273, 1.1270, 1.1270, 1.1270, 1.1270, 1.1270, 1.1270, 1.1280,
125 1.1297, 1.1300, 1.1300, 1.1300, 1.1300, 1.1300, 1.1300, 1.1290,
126 1.1339, 1.1340, 1.1340, 1.1350, 1.1350, 1.1340, 1.1340, 1.1320,
127 1.1364, 1.1370, 1.1370, 1.1380, 1.1390, 1.1380, 1.1370, 1.1350,
128 1.14187, 1.14187, 1.14187, 1.14187, 1.14187, 1.14187, 1.14187,
133 1.1852, 1.2963, 1.2963, 1.2963, 1.2963, 1.2963,1.2963, 1.2963,
134 1.1960, 1.216, 1.237, 1.269, 1.285, 1.290, 1.297, 1.294,
135 1.2451, 1.257, 1.340, 1.389, 1.366, 1.327, 1.314, 1.278,
136 1.2900, 1.294, 1.272, 1.258, 1.262, 1.282, 1.290, 1.299,
137 1.2986, 1.291, 1.284, 1.278, 1.277, 1.288, 1.294, 1.297,
138 1.2865, 1.281, 1.276, 1.272, 1.277, 1.286, 1.292, 1.298,
139 1.2665, 1.264, 1.261, 1.263, 1.269, 1.284, 1.292, 1.298,
140 1.2455, 1.244, 1.248, 1.255, 1.262, 1.278, 1.289, 1.296,
141 1.2253, 1.225, 1.234, 1.240, 1.252, 1.271, 1.284, 1.295,
142 1.2078, 1.210, 1.216, 1.227, 1.242, 1.264, 1.281, 1.292,
143 1.1919, 1.192, 1.205, 1.216, 1.230, 1.256, 1.273, 1.287,
144 1.1678, 1.172, 1.181, 1.195, 1.209, 1.237, 1.261, 1.277,
145 1.1496, 1.155, 1.161, 1.174, 1.189, 1.221, 1.246, 1.266,
146 1.1366, 1.141, 1.147, 1.159, 1.174, 1.202, 1.231, 1.256,
147 1.1270, 1.130, 1.138, 1.148, 1.162, 1.191, 1.218, 1.242,
148 1.1197, 1.122, 1.129, 1.140, 1.149, 1.178, 1.205, 1.231,
149 1.1080, 1.110, 1.116, 1.122, 1.132, 1.154, 1.180, 1.205,
150 1.1016, 1.103, 1.107, 1.112, 1.120, 1.138, 1.160, 1.183,
151 1.0980, 1.099, 1.102, 1.106, 1.112, 1.127, 1.145, 1.165,
152 1.0958, 1.097, 1.099, 1.102, 1.107, 1.119, 1.135, 1.153,
153 1.0935, 1.094, 1.095, 1.097, 1.100, 1.109, 1.120, 1.134,
154 1.0925, 1.092, 1.094, 1.095, 1.098, 1.104, 1.112, 1.122,
155 1.0922, 1.092, 1.093, 1.094, 1.096, 1.100, 1.106, 1.115,
156 1.0922, 1.092, 1.093, 1.093, 1.095, 1.098, 1.103, 1.110,
157 1.0923, 1.092, 1.093, 1.093, 1.094, 1.097, 1.101, 1.106,
158 1.0923, 1.092, 1.092, 1.093, 1.094, 1.096, 1.099, 1.103,
159 1.0927, 1.093, 1.093, 1.093, 1.094, 1.095, 1.098, 1.101,
160 1.0930, 1.093, 1.093, 1.093, 1.094, 1.094, 1.096, 1.099,
161 1.0933, 1.094, 1.093, 1.094, 1.094, 1.095, 1.096, 1.098,
162 1.0937, 1.093, 1.094, 1.094, 1.094, 1.094, 1.096, 1.097,
163 1.0939, 1.094, 1.094, 1.094, 1.094, 1.095, 1.095, 1.097,
164 1.0943, 1.094, 1.094, 1.094, 1.095, 1.095, 1.096, 1.096,
165 1.0944, 1.095, 1.094, 1.094, 1.094, 1.095, 1.095, 1.096,
166 1.0944, 1.094, 1.095, 1.094, 1.094, 1.095, 1.096, 1.096,
167 1.0943, 1.095, 1.094, 1.094, 1.095, 1.095, 1.095, 1.095,
168 1.0941, 1.094, 1.094, 1.094, 1.094, 1.094, 1.094, 1.096,
169 1.0947, 1.095, 1.094, 1.094, 1.093, 1.093, 1.094, 1.095,
170 1.0957, 1.095, 1.094, 1.093, 1.092, 1.093, 1.093, 1.094,
171 1.10185, 1.10185, 1.10185, 1.10185, 1.10185, 1.10185, 1.10185,
176 0.8889, 0.77778, 0.77778,0.77778,0.77778,0.77778,0.77778,0.77778,
177 0.88575, 0.8988, 0.8378, 0.8029, 0.7876, 0.7805, 0.7799, 0.7801,
178 0.87268, 0.8692,0.8647,0.8479,0.8237,0.7975,0.7881,0.7784,
179 0.85182, 0.8525,0.8366,0.8198,0.8054,0.7903,0.7839,0.782,
180 0.83542, 0.8362,0.8306,0.8196,0.8076,0.7918,0.7842,0.7806,
181 0.82629, 0.8278,0.8252,0.8169,0.8074,0.7916,0.7838,0.7802,
182 0.82299, 0.8249,0.823,0.8165,0.8072,0.7922,0.7839,0.7798,
183 0.82357, 0.8257,0.8241,0.8178,0.8084,0.7927,0.7839,0.7794,
184 0.82657, 0.828,0.8264,0.8199,0.8107,0.7939,0.7842,0.7796,
185 0.8311, 0.8234,0.8295,0.8228,0.8136,0.796,0.7854,0.7798,
186 0.8363, 0.8366,0.8342,0.8267,0.8168,0.7986,0.7864,0.7805,
187 0.84762, 0.8474,0.8438,0.8358,0.825,0.8041,0.7904,0.7822,
188 0.85846, 0.8583,0.853,0.8444,0.8336,0.8118,0.7957,0.7854,
189 0.8684, 0.8674,0.8619,0.8531,0.8423,0.8186,0.8011,0.7898,
190 0.87713, 0.8755,0.8709,0.8616,0.8504,0.8265,0.8072,0.7939,
191 0.88479, 0.8831,0.8779,0.8695,0.8578,0.8338,0.8133,0.799,
192 0.89972, 0.8986,0.8936,0.8846,0.8742,0.8504,0.8294,0.8125,
193 0.91028, 0.9089,0.9043,0.8967,0.8869,0.8649,0.8438,0.8253,
194 0.91793, 0.9166,0.9125,0.9058,0.897,0.8768,0.8557,0.8372,
195 0.92371, 0.9226,0.9189,0.9128,0.905,0.8861,0.8664,0.8484,
196 0.93135, 0.9304,0.9274,0.9226,0.9164,0.9006,0.8833,0.8662,
197 0.93607, 0.9353,0.9329,0.9291,0.924,0.9109,0.8958,0.8802,
198 0.93927, 0.9387,0.9366,0.9334,0.9292,0.9162,0.905,0.8911,
199 0.94149, 0.9409,0.9393,0.9366,0.9331,0.9236,0.9122,0.8997,
200 0.94306, 0.9426,0.9412,0.9388,0.9357,0.9276,0.9175,0.9065,
201 0.94419, 0.9437,0.9425,0.9406,0.938,0.9308,0.9219,0.9119,
202 0.94571, 0.9455,0.9445,0.943,0.9409,0.9353,0.9283,0.9201,
203 0.94662, 0.9464,0.9456,0.9444,0.9428,0.9382,0.9325,0.9258,
204 0.94723, 0.9471,0.9464,0.9455,0.9442,0.9405,0.9355,0.9298,
205 0.94764, 0.9474,0.9469,0.9462,0.945,0.9418,0.9378,0.9328,
206 0.9479, 0.9478,0.9474,0.9465,0.9457,0.943,0.9394,0.9352,
207 0.94827, 0.9481,0.948,0.9472,0.9467,0.9447,0.9422,0.9391,
208 0.94842, 0.9484,0.9481,0.9478,0.9472,0.9458,0.9437,0.9415,
209 0.94852, 0.9484,0.9483,0.948,0.9475,0.9465,0.9449,0.943,
210 0.94861, 0.9487,0.9484,0.9481,0.9479,0.9468,0.9455,0.943,
211 0.94872, 0.9486,0.9486,0.9483,0.9482,0.9475,0.9464,0.9452,
212 0.94881, 0.9488,0.9489,0.949,0.9487,0.9482,0.9476,0.9468,
213 0.94863, 0.9487,0.9489,0.9491,0.9493,0.9491,0.9483,0.9476,
214 0.94444, 0.94444,0.94444,0.94444,0.94444,0.94444,0.94444,0.94444
222 for (
int n = 0; n < 37; n++) {
223 if (tstar_min >
tstar[n+1]) {
226 if (tstar_max >
tstar[n+1]) {
230 if (m_nmin < 0 || m_nmin >= 36 || m_nmax < 0 || m_nmax > 36) {
236 for (
int i = 0; i < 37; i++) {
238 vector<double> c(DeltaDegree+1);
240 fitDelta(0, i, DeltaDegree, c);
241 m_o22poly.push_back(c);
243 fitDelta(1, i, DeltaDegree, c);
244 m_apoly.push_back(c);
246 fitDelta(2, i, DeltaDegree, c);
247 m_bpoly.push_back(c);
249 fitDelta(3, i, DeltaDegree, c);
250 m_cpoly.push_back(c);
254double MMCollisionInt::fitDelta(
int table,
int ntstar,
int degree, span<double> c)
256 span<const double> y;
262 y = span<const double>(
astar_table.data() + 8*(ntstar + 1), 8);
265 y = span<const double>(
bstar_table.data() + 8*(ntstar + 1), 8);
268 y = span<const double>(
cstar_table.data() + 8*(ntstar + 1), 8);
273 return polyfit(degree, delta, y, {}, c);
276double MMCollisionInt::omega22(
double ts,
double deltastar)
279 for (i = 0; i < 37; i++) {
280 if (ts < tstar22[i]) {
284 int i1 = std::max(i - 1, 0);
290 vector<double> values(3);
291 for (i = i1; i < i2; i++) {
292 if (deltastar == 0.0) {
295 values[i-i1] =
poly6(deltastar, m_o22poly[i]);
298 return quadInterp(log(ts), span<const double>(&
m_logTemp[i1], 3), values);
301double MMCollisionInt::astar(
double ts,
double deltastar)
304 for (i = 0; i < 37; i++)
if (ts < tstar22[i]) {
307 int i1 = std::max(i - 1, 0);
313 vector<double> values(3);
314 for (i = i1; i < i2; i++) {
315 if (deltastar == 0.0) {
318 values[i-i1] =
poly6(deltastar, m_apoly[i]);
321 return quadInterp(log(ts), span<const double>(&
m_logTemp[i1], 3), values);
324double MMCollisionInt::bstar(
double ts,
double deltastar)
327 for (i = 0; i < 37; i++)
if (ts < tstar22[i]) {
330 int i1 = std::max(i - 1, 0);
336 vector<double> values(3);
337 for (i = i1; i < i2; i++) {
338 if (deltastar == 0.0) {
341 values[i-i1] =
poly6(deltastar, m_bpoly[i]);
344 return quadInterp(log(ts), span<const double>(&
m_logTemp[i1], 3), values);
347double MMCollisionInt::cstar(
double ts,
double deltastar)
350 for (i = 0; i < 37; i++)
if (ts < tstar22[i]) {
353 int i1 = std::max(i - 1,0);
359 vector<double> values(3);
360 for (i = i1; i < i2; i++) {
361 if (deltastar == 0.0) {
364 values[i-i1] =
poly6(deltastar, m_cpoly[i]);
367 return quadInterp(log(ts), span<const double>(&
m_logTemp[i1], 3), values);
370void MMCollisionInt::fit_omega22(
int degree,
double deltastar, span<double> o22)
373 vector<double> values(n);
375 for (
int i = 0; i < n; i++) {
376 if (deltastar == 0.0) {
382 polyfit(degree, logT, values, {}, o22);
385void MMCollisionInt::fit(
int degree,
double deltastar, span<double> a,
386 span<double> b, span<double> c)
389 vector<double> values(n);
391 for (
int i = 0; i < n; i++) {
392 if (deltastar == 0.0) {
398 polyfit(degree, logT, values, {}, a);
400 for (
int i = 0; i < n; i++) {
401 if (deltastar == 0.0) {
407 polyfit(degree, logT, values, {}, b);
409 for (
int i = 0; i < n; i++) {
410 if (deltastar == 0.0) {
416 polyfit(degree, logT, values, {}, c);
Monchick and Mason collision integrals.
int m_nmin
Index of the tstar array that encompasses the minimum temperature fitting range value of tsmin.
static std::array< double, 39 *8 > astar_table
astar table
void init(double tsmin, double tsmax)
Initialize the object for calculation.
static std::array< double, 39 *8 > bstar_table
bstar table
static std::array< double, 39 > tstar
T* values (reduced temperature)
int m_nmax
Index of the tstar array that encompasses the maximum temperature fitting range value of tsmax.
static std::array< double, 39 *8 > cstar_table
cstar table
static std::array< double, 37 *8 > omega22_table
Table of omega22 values.
vector< double > m_logTemp
Log temp.
This file contains definitions for utility functions and text for modules, inputfiles and logging,...
auto poly6(D x, const C &c)
Templated evaluation of a polynomial of order 6.
double polyfit(size_t deg, span< const double > x, span< const double > y, span< const double > w, span< double > p)
Fits a polynomial function to a set of data points.
Namespace for the Cantera kernel.
void checkArraySize(const char *procedure, size_t available, size_t required)
Wrapper for throwing ArraySizeError.
Contains declarations for string manipulation functions within Cantera.
Various templated functions that carry out common vector and polynomial operations (see Templated Arr...