Cantera  4.0.0a1
Loading...
Searching...
No Matches
MMCollisionInt.cpp
Go to the documentation of this file.
1/**
2 * @file MMCollisionInt.cpp
3 */
4
5// This file is part of Cantera. See License.txt in the top-level directory or
6// at https://cantera.org/license.txt for license and copyright information.
7
8#include "MMCollisionInt.h"
12#include "cantera/base/global.h"
13
14namespace Cantera
15{
16const int DeltaDegree = 6;
17
18std::array<double, 8> MMCollisionInt::delta = {
19 0.0, 0.25, 0.50, 0.75, 1.0, 1.5, 2.0, 2.5};
20
21double MMCollisionInt::quadInterp(double x0, span<const double> x, span<const double> y)
22{
23 checkArraySize("MMCollisionInt::quadInterp: x", x.size(), 3);
24 checkArraySize("MMCollisionInt::quadInterp: y", y.size(), 3);
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];
32}
33
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
39};
40
41std::array<double, 37*8> MMCollisionInt::omega22_table = {
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
79};
80
81// changed upper limit to 500 from 1.0e10 dgg 5/21/04
82std::array<double, 39> MMCollisionInt::tstar = {
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
87};
88
89std::array<double, 39*8> MMCollisionInt::astar_table = {
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,
129 1.14187
130};
131
132std::array<double, 39*8> MMCollisionInt::bstar_table = {
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,
172 1.10185
173};
174
175std::array<double, 39*8> MMCollisionInt::cstar_table = {
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
215};
216
217void MMCollisionInt::init(double tstar_min, double tstar_max)
218{
219 m_nmin = -1;
220 m_nmax = -1;
221
222 for (int n = 0; n < 37; n++) {
223 if (tstar_min > tstar[n+1]) {
224 m_nmin = n;
225 }
226 if (tstar_max > tstar[n+1]) {
227 m_nmax = n+1;
228 }
229 }
230 if (m_nmin < 0 || m_nmin >= 36 || m_nmax < 0 || m_nmax > 36) {
231 m_nmin = 0;
232 m_nmax = 36;
233 }
234 m_logTemp.resize(37);
235
236 for (int i = 0; i < 37; i++) {
237 m_logTemp[i] = log(tstar[i+1]);
238 vector<double> c(DeltaDegree+1);
239
240 fitDelta(0, i, DeltaDegree, c);
241 m_o22poly.push_back(c);
242
243 fitDelta(1, i, DeltaDegree, c);
244 m_apoly.push_back(c);
245
246 fitDelta(2, i, DeltaDegree, c);
247 m_bpoly.push_back(c);
248
249 fitDelta(3, i, DeltaDegree, c);
250 m_cpoly.push_back(c);
251 }
252}
253
254double MMCollisionInt::fitDelta(int table, int ntstar, int degree, span<double> c)
255{
256 span<const double> y;
257 switch (table) {
258 case 0:
259 y = span<const double>(omega22_table.data() + 8*ntstar, 8);
260 break;
261 case 1:
262 y = span<const double>(astar_table.data() + 8*(ntstar + 1), 8);
263 break;
264 case 2:
265 y = span<const double>(bstar_table.data() + 8*(ntstar + 1), 8);
266 break;
267 case 3:
268 y = span<const double>(cstar_table.data() + 8*(ntstar + 1), 8);
269 break;
270 default:
271 return 0.0;
272 }
273 return polyfit(degree, delta, y, {}, c);
274}
275
276double MMCollisionInt::omega22(double ts, double deltastar)
277{
278 int i;
279 for (i = 0; i < 37; i++) {
280 if (ts < tstar22[i]) {
281 break;
282 }
283 }
284 int i1 = std::max(i - 1, 0);
285 int i2 = i1+3;
286 if (i2 > 36) {
287 i2 = 36;
288 i1 = i2 - 3;
289 }
290 vector<double> values(3);
291 for (i = i1; i < i2; i++) {
292 if (deltastar == 0.0) {
293 values[i-i1] = omega22_table[8*i];
294 } else {
295 values[i-i1] = poly6(deltastar, m_o22poly[i]);
296 }
297 }
298 return quadInterp(log(ts), span<const double>(&m_logTemp[i1], 3), values);
299}
300
301double MMCollisionInt::astar(double ts, double deltastar)
302{
303 int i;
304 for (i = 0; i < 37; i++) if (ts < tstar22[i]) {
305 break;
306 }
307 int i1 = std::max(i - 1, 0);
308 int i2 = i1+3;
309 if (i2 > 36) {
310 i2 = 36;
311 i1 = i2 - 3;
312 }
313 vector<double> values(3);
314 for (i = i1; i < i2; i++) {
315 if (deltastar == 0.0) {
316 values[i-i1] = astar_table[8*(i + 1)];
317 } else {
318 values[i-i1] = poly6(deltastar, m_apoly[i]);
319 }
320 }
321 return quadInterp(log(ts), span<const double>(&m_logTemp[i1], 3), values);
322}
323
324double MMCollisionInt::bstar(double ts, double deltastar)
325{
326 int i;
327 for (i = 0; i < 37; i++) if (ts < tstar22[i]) {
328 break;
329 }
330 int i1 = std::max(i - 1, 0);
331 int i2 = i1+3;
332 if (i2 > 36) {
333 i2 = 36;
334 i1 = i2 - 3;
335 }
336 vector<double> values(3);
337 for (i = i1; i < i2; i++) {
338 if (deltastar == 0.0) {
339 values[i-i1] = bstar_table[8*(i + 1)];
340 } else {
341 values[i-i1] = poly6(deltastar, m_bpoly[i]);
342 }
343 }
344 return quadInterp(log(ts), span<const double>(&m_logTemp[i1], 3), values);
345}
346
347double MMCollisionInt::cstar(double ts, double deltastar)
348{
349 int i;
350 for (i = 0; i < 37; i++) if (ts < tstar22[i]) {
351 break;
352 }
353 int i1 = std::max(i - 1,0);
354 int i2 = i1+3;
355 if (i2 > 36) {
356 i2 = 36;
357 i1 = i2 - 3;
358 }
359 vector<double> values(3);
360 for (i = i1; i < i2; i++) {
361 if (deltastar == 0.0) {
362 values[i-i1] = cstar_table[8*(i + 1)];
363 } else {
364 values[i-i1] = poly6(deltastar, m_cpoly[i]);
365 }
366 }
367 return quadInterp(log(ts), span<const double>(&m_logTemp[i1], 3), values);
368}
369
370void MMCollisionInt::fit_omega22(int degree, double deltastar, span<double> o22)
371{
372 int n = m_nmax - m_nmin + 1;
373 vector<double> values(n);
374 span<const double> logT(&m_logTemp[m_nmin], n);
375 for (int i = 0; i < n; i++) {
376 if (deltastar == 0.0) {
377 values[i] = omega22_table[8*(i + m_nmin)];
378 } else {
379 values[i] = poly6(deltastar, m_o22poly[i+m_nmin]);
380 }
381 }
382 polyfit(degree, logT, values, {}, o22);
383}
384
385void MMCollisionInt::fit(int degree, double deltastar, span<double> a,
386 span<double> b, span<double> c)
387{
388 int n = m_nmax - m_nmin + 1;
389 vector<double> values(n);
390 span<const double> logT(&m_logTemp[m_nmin], n);
391 for (int i = 0; i < n; i++) {
392 if (deltastar == 0.0) {
393 values[i] = astar_table[8*(i + m_nmin + 1)];
394 } else {
395 values[i] = poly6(deltastar, m_apoly[i+m_nmin]);
396 }
397 }
398 polyfit(degree, logT, values, {}, a);
399
400 for (int i = 0; i < n; i++) {
401 if (deltastar == 0.0) {
402 values[i] = bstar_table[8*(i + m_nmin + 1)];
403 } else {
404 values[i] = poly6(deltastar, m_bpoly[i+m_nmin]);
405 }
406 }
407 polyfit(degree, logT, values, {}, b);
408
409 for (int i = 0; i < n; i++) {
410 if (deltastar == 0.0) {
411 values[i] = cstar_table[8*(i + m_nmin + 1)];
412 } else {
413 values[i] = poly6(deltastar, m_cpoly[i+m_nmin]);
414 }
415 }
416 polyfit(degree, logT, values, {}, c);
417}
418
419} // namespace
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.
Definition utilities.h:131
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.
Definition polyfit.cpp:14
Namespace for the Cantera kernel.
Definition AnyMap.cpp:595
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...