17 const int DeltaDegree = 6;
19 double MMCollisionInt::delta[8] = {0.0, 0.25, 0.50, 0.75, 1.0,
23 doublereal quadInterp(doublereal x0, doublereal* x, doublereal* 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];
34 double MMCollisionInt::tstar22[37] = {
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
41 double MMCollisionInt::omega22_table[37*8] = {
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
82 double MMCollisionInt::tstar[39] = {
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
89 double MMCollisionInt::astar_table[39*8] = {
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,
132 double MMCollisionInt::bstar_table[39*8] = {
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,
175 double MMCollisionInt::cstar_table[39*8] = {
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
217 void MMCollisionInt::init(doublereal tsmin, doublereal tsmax,
int log_level)
219 m_loglevel = log_level;
220 debuglog(
"Collision Integral Polynomial Fits\n", m_loglevel > 0);
224 for (
int n = 0; n < 37; n++) {
225 if (tsmin > tstar[n+1]) {
228 if (tsmax > tstar[n+1]) {
232 if (m_nmin < 0 || m_nmin >= 36 || m_nmax < 0 || m_nmax > 36) {
236 if (m_loglevel > 0) {
237 writelogf(
"T*_min = %g\n", tstar[m_nmin + 1]);
238 writelogf(
"T*_max = %g\n", tstar[m_nmax + 1]);
240 m_logTemp.resize(37);
241 doublereal e22 = 0.0, ea = 0.0, eb = 0.0, ec = 0.0;
243 if (m_loglevel > 0) {
244 writelog(
"Collision integral fits at each tabulated T* vs. delta*.\n" 245 "These polynomial fits are used to interpolate between " 246 "columns (delta*)\n in the Monchick and Mason tables." 247 " They are only used for nonzero delta*.\n");
249 writelog(
"polynomial coefficients not printed (log_level < 4)\n");
253 for (
int i = 0; i < 37; i++) {
254 m_logTemp[i] = log(tstar[i+1]);
257 double rmserr = fitDelta(0, i, DeltaDegree, c.data());
259 writelogf(
"\ndelta* fit at T* = %.6g\n", tstar[i+1]);
262 m_o22poly.push_back(c);
263 e22 = std::max(e22, rmserr);
265 rmserr = fitDelta(1, i, DeltaDegree, c.data());
266 m_apoly.push_back(c);
270 ea = std::max(ea, rmserr);
272 rmserr = fitDelta(2, i, DeltaDegree, c.data());
273 m_bpoly.push_back(c);
277 eb = std::max(eb, rmserr);
279 rmserr = fitDelta(3, i, DeltaDegree, c.data());
280 m_cpoly.push_back(c);
284 ec = std::max(ec, rmserr);
287 writelogf(
"max RMS errors in fits vs. delta*:\n" 288 " omega_22 = %12.6g \n" 291 " C* = %12.6g \n", e22, ea, eb, ec);
296 doublereal MMCollisionInt::fitDelta(
int table,
int ntstar,
int degree, doublereal* c)
299 doublereal* begin = 0;
302 begin = omega22_table + 8*ntstar;
305 begin = astar_table + 8*(ntstar + 1);
308 begin = bstar_table + 8*(ntstar + 1);
311 begin = cstar_table + 8*(ntstar + 1);
317 return polyfit(8, degree, delta, begin, w.data(), c);
320 doublereal MMCollisionInt::omega22(
double ts,
double deltastar)
323 for (i = 0; i < 37; i++) {
324 if (ts < tstar22[i]) {
328 int i1 = std::max(i - 1, 0);
335 for (i = i1; i < i2; i++) {
336 if (deltastar == 0.0) {
337 values[i-i1] = omega22_table[8*i];
339 values[i-i1] =
poly5(deltastar, m_o22poly[i].data());
342 return quadInterp(log(ts), &m_logTemp[i1], values.data());
345 doublereal MMCollisionInt::astar(
double ts,
double deltastar)
348 for (i = 0; i < 37; i++)
if (ts < tstar22[i]) {
351 int i1 = std::max(i - 1, 0);
358 for (i = i1; i < i2; i++) {
359 if (deltastar == 0.0) {
360 values[i-i1] = astar_table[8*(i + 1)];
362 values[i-i1] =
poly5(deltastar, m_apoly[i].data());
365 return quadInterp(log(ts), &m_logTemp[i1], values.data());
368 doublereal MMCollisionInt::bstar(
double ts,
double deltastar)
371 for (i = 0; i < 37; i++)
if (ts < tstar22[i]) {
374 int i1 = std::max(i - 1, 0);
381 for (i = i1; i < i2; i++) {
382 if (deltastar == 0.0) {
383 values[i-i1] = bstar_table[8*(i + 1)];
385 values[i-i1] =
poly5(deltastar, m_bpoly[i].data());
388 return quadInterp(log(ts), &m_logTemp[i1], values.data());
391 doublereal MMCollisionInt::cstar(
double ts,
double deltastar)
394 for (i = 0; i < 37; i++)
if (ts < tstar22[i]) {
397 int i1 = std::max(i - 1,0);
404 for (i = i1; i < i2; i++) {
405 if (deltastar == 0.0) {
406 values[i-i1] = cstar_table[8*(i + 1)];
408 values[i-i1] =
poly5(deltastar, m_cpoly[i].data());
411 return quadInterp(log(ts), &m_logTemp[i1], values.data());
414 void MMCollisionInt::fit_omega22(
int degree, doublereal deltastar,
417 int n = m_nmax - m_nmin + 1;
420 doublereal* logT = &m_logTemp[m_nmin];
421 for (
int i = 0; i < n; i++) {
422 if (deltastar == 0.0) {
423 values[i] = omega22_table[8*(i + m_nmin)];
425 values[i] =
poly5(deltastar, m_o22poly[i+m_nmin].data());
429 double rmserr =
polyfit(n, degree, logT, values.data(), w.data(), o22);
430 if (m_loglevel > 0 && rmserr > 0.01) {
431 writelogf(
"Warning: RMS error = %12.6g in omega_22 fit" 432 "with delta* = %12.6g\n", rmserr, deltastar);
436 void MMCollisionInt::fit(
int degree, doublereal deltastar,
437 doublereal* a, doublereal* b, doublereal* c)
439 int n = m_nmax - m_nmin + 1;
442 doublereal* logT = &m_logTemp[m_nmin];
443 for (
int i = 0; i < n; i++) {
444 if (deltastar == 0.0) {
445 values[i] = astar_table[8*(i + m_nmin + 1)];
447 values[i] =
poly5(deltastar, m_apoly[i+m_nmin].data());
451 double rmserr =
polyfit(n, degree, logT, values.data(), w.data(), a);
453 for (
int i = 0; i < n; i++) {
454 if (deltastar == 0.0) {
455 values[i] = bstar_table[8*(i + m_nmin + 1)];
457 values[i] =
poly5(deltastar, m_bpoly[i+m_nmin].data());
461 rmserr =
polyfit(n, degree, logT, values.data(), w.data(), b);
463 for (
int i = 0; i < n; i++) {
464 if (deltastar == 0.0) {
465 values[i] = cstar_table[8*(i + m_nmin + 1)];
467 values[i] =
poly5(deltastar, m_cpoly[i+m_nmin].data());
471 rmserr =
polyfit(n, degree, logT, values.data(), w.data(), c);
472 if (m_loglevel > 2) {
473 writelogf(
"\nT* fit at delta* = %.6g\n", deltastar);
477 writelogf(
"Warning: RMS error = %12.6g for A* fit\n", rmserr);
482 writelogf(
"Warning: RMS error = %12.6g for B* fit\n", rmserr);
487 writelogf(
"Warning: RMS error = %12.6g for C* fit\n", rmserr);
std::string vec2str(const vector_fp &v, const std::string &fmt, const std::string &sep)
Convert a vector to a string (separated by commas)
Various templated functions that carry out common vector operations (see Templated Utility Functions)...
R poly5(D x, R *c)
Templated evaluation of a polynomial of order 5.
void writelog(const std::string &fmt, const Args &... args)
Write a formatted message to the screen.
Monk and Monchick collision integrals.
void debuglog(const std::string &msg, int loglevel)
Write a message to the log only if loglevel > 0.
void writelogf(const char *fmt, const Args &... args)
Write a formatted message to the screen.
std::vector< double > vector_fp
Turn on the use of stl vectors for the basic array type within cantera Vector of doubles.
Contains declarations for string manipulation functions within Cantera.
Namespace for the Cantera kernel.
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.