| 820 | } |
| 821 | |
| 822 | void SolutionArray::normalize() { |
| 823 | auto phase = m_sol->thermo(); |
| 824 | auto nativeState = phase->nativeState(); |
| 825 | if (nativeState.size() < 3) { |
| 826 | return; |
| 827 | } |
| 828 | size_t nState = phase->stateSize(); |
| 829 | vector<double> out(nState); |
| 830 | if (nativeState.count("Y")) { |
| 831 | size_t offset = nativeState["Y"]; |
| 832 | for (int loc = 0; loc < static_cast<int>(m_size); loc++) { |
| 833 | setLoc(loc, true); // set location and restore state |
| 834 | phase->setMassFractions(m_data->data() + m_loc * m_stride + offset); |
| 835 | m_sol->thermo()->saveState(out); |
| 836 | setState(loc, out); |
| 837 | } |
| 838 | } else if (nativeState.count("X")) { |
| 839 | size_t offset = nativeState["X"]; |
| 840 | for (int loc = 0; loc < static_cast<int>(m_size); loc++) { |
| 841 | setLoc(loc, true); // set location and restore state |
| 842 | phase->setMoleFractions(m_data->data() + m_loc * m_stride + offset); |
| 843 | m_sol->thermo()->saveState(out); |
| 844 | setState(loc, out); |
| 845 | } |
| 846 | } else { |
| 847 | throw NotImplementedError("SolutionArray::normalize", |
| 848 | "Not implemented for mode '{}'.", phase->nativeMode()); |
| 849 | } |
| 850 | } |
| 851 | |
| 852 | AnyMap SolutionArray::getAuxiliary(int loc) |
| 853 | { |