MCPcopy Create free account
hub / github.com/Cantera/cantera / setGridCache

Method setGridCache

src/thermo/EEDFTwoTermApproximation.cpp:519–588  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

517}
518
519void EEDFTwoTermApproximation::setGridCache()
520{
521 m_sigma.clear();
522 m_sigma.resize(m_phase->nCollisions());
523 m_eps.clear();
524 m_eps.resize(m_phase->nCollisions());
525 m_j.clear();
526 m_j.resize(m_phase->nCollisions());
527 m_i.clear();
528 m_i.resize(m_phase->nCollisions());
529 for (size_t k = 0; k < m_phase->nCollisions(); k++) {
530 auto& collision = m_phase->collisionRate(k);
531 auto& x = collision->energyLevels();
532 auto& y = collision->crossSections();
533 vector<double> eps1(m_points + 1);
534 int shiftFactor = (collision->kind() == "ionization") ? 2 : 1;
535
536 for (size_t i = 0; i < m_points + 1; i++) {
537 eps1[i] = clip(shiftFactor * m_gridEdge[i] + collision->threshold(),
538 m_gridEdge[0] + 1e-9, m_gridEdge[m_points] - 1e-9);
539 }
540 vector<double> nodes = eps1;
541 for (size_t i = 0; i < m_points + 1; i++) {
542 if (m_gridEdge[i] >= eps1[0] && m_gridEdge[i] <= eps1[m_points]) {
543 nodes.push_back(m_gridEdge[i]);
544 }
545 }
546 for (size_t i = 0; i < x.size(); i++) {
547 if (x[i] >= eps1[0] && x[i] <= eps1[m_points]) {
548 nodes.push_back(x[i]);
549 }
550 }
551
552 std::sort(nodes.begin(), nodes.end());
553 auto last = std::unique(nodes.begin(), nodes.end());
554 nodes.resize(std::distance(nodes.begin(), last));
555 vector<double> sigma0(nodes.size());
556 for (size_t i = 0; i < nodes.size(); i++) {
557 sigma0[i] = linearInterp(nodes[i], x, y);
558 }
559
560 // search position of cell j
561 for (size_t i = 1; i < nodes.size(); i++) {
562 auto low = std::lower_bound(m_gridEdge.begin(), m_gridEdge.end(), nodes[i]);
563 m_j[k].push_back(low - m_gridEdge.begin() - 1);
564 }
565
566 // search position of cell i
567 for (size_t i = 1; i < nodes.size(); i++) {
568 auto low = std::lower_bound(eps1.begin(), eps1.end(), nodes[i]);
569 m_i[k].push_back(low - eps1.begin() - 1);
570 }
571
572 // construct sigma
573 for (size_t i = 0; i < nodes.size() - 1; i++) {
574 m_sigma[k].push_back({sigma0[i], sigma0[i+1]});
575 }
576

Callers 1

addCollisionMethod · 0.80

Calls 10

clipFunction · 0.85
linearInterpFunction · 0.85
nCollisionsMethod · 0.80
collisionRateMethod · 0.80
clearMethod · 0.45
resizeMethod · 0.45
thresholdMethod · 0.45
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected