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