void MMCollisionInt::fit(int degree, doublereal deltastar, doublereal* a, doublereal* b, doublereal* c) { int i, n = m_nmax - m_nmin + 1; int ndeg=0; vector_fp values(n); doublereal rmserr; vector_fp w(n); doublereal* logT = DATA_PTR(m_logTemp) + m_nmin; for (i = 0; i < n; i++) { if (deltastar == 0.0) { values[i] = astar_table[8*(i + m_nmin + 1)]; } else { values[i] = poly5(deltastar, DATA_PTR(m_apoly[i+m_nmin])); } } w[0]= -1.0; rmserr = polyfit(n, logT, DATA_PTR(values), DATA_PTR(w), degree, ndeg, 0.0, a); for (i = 0; i < n; i++) { if (deltastar == 0.0) { values[i] = bstar_table[8*(i + m_nmin + 1)]; } else { values[i] = poly5(deltastar, DATA_PTR(m_bpoly[i+m_nmin])); } } w[0]= -1.0; rmserr = polyfit(n, logT, DATA_PTR(values), DATA_PTR(w), degree, ndeg, 0.0, b); for (i = 0; i < n; i++) { if (deltastar == 0.0) { values[i] = cstar_table[8*(i + m_nmin + 1)]; } else { values[i] = poly5(deltastar, DATA_PTR(m_cpoly[i+m_nmin])); } } w[0]= -1.0; rmserr = polyfit(n, logT, DATA_PTR(values), DATA_PTR(w), degree, ndeg, 0.0, c); if (DEBUG_MODE_ENABLED && m_loglevel > 2) { writelogf("\nT* fit at delta* = %.6g\n", deltastar); writelog("astar = [" + vec2str(vector_fp(a, a+degree+1))+ "]\n"); if (rmserr > 0.01) { writelogf("Warning: RMS error = %12.6g for A* fit\n", rmserr); } writelog("bstar = [" + vec2str(vector_fp(b, b+degree+1))+ "]\n"); if (rmserr > 0.01) { writelogf("Warning: RMS error = %12.6g for B* fit\n", rmserr); } writelog("cstar = [" + vec2str(vector_fp(c, c+degree+1))+ "]\n"); if (rmserr > 0.01) { writelogf("Warning: RMS error = %12.6g for C* fit\n", rmserr); } } }
void IonFlow::updateTransport(double* x, size_t j0, size_t j1) { StFlow::updateTransport(x,j0,j1); for (size_t j = j0; j < j1; j++) { setGasAtMidpoint(x,j); m_trans->getMobilities(&m_mobility[j*m_nsp]); if (m_import_electron_transport) { size_t k = m_kElectron; double tlog = log(m_thermo->temperature()); m_mobility[k+m_nsp*j] = poly5(tlog, m_mobi_e_fix.data()); m_diff[k+m_nsp*j] = poly5(tlog, m_diff_e_fix.data()); } } }
void MMCollisionInt::fit_omega22(int degree, doublereal deltastar, doublereal* o22) { int i, n = m_nmax - m_nmin + 1; int ndeg=0; vector_fp values(n); doublereal rmserr; vector_fp w(n); doublereal* logT = DATA_PTR(m_logTemp) + m_nmin; for (i = 0; i < n; i++) { if (deltastar == 0.0) { values[i] = omega22_table[8*(i + m_nmin)]; } else { values[i] = poly5(deltastar, DATA_PTR(m_o22poly[i+m_nmin])); } } w[0]= -1.0; rmserr = polyfit(n, logT, DATA_PTR(values), DATA_PTR(w), degree, ndeg, 0.0, o22); if (DEBUG_MODE_ENABLED && m_loglevel > 0 && rmserr > 0.01) { writelogf("Warning: RMS error = %12.6g in omega_22 fit" "with delta* = %12.6g\n", rmserr, deltastar); } }
doublereal MMCollisionInt::cstar(double ts, double deltastar) { int i; for (i = 0; i < 37; i++) if (ts < tstar22[i]) { break; } int i1, i2; i1 = std::max(i - 1,0); i2 = i1+3; if (i2 > 36) { i2 = 36; i1 = i2 - 3; } vector_fp values(3); for (i = i1; i < i2; i++) { if (deltastar == 0.0) { values[i-i1] = cstar_table[8*(i + 1)]; } else { values[i-i1] = poly5(deltastar, DATA_PTR(m_cpoly[i])); } } return quadInterp(log(ts), DATA_PTR(m_logTemp) + i1, DATA_PTR(values)); }