Eliminated "heapsort" function in favor of using std::sort
This commit is contained in:
parent
1ff7c23860
commit
4cdac9a90f
4 changed files with 15 additions and 159 deletions
|
|
@ -13,7 +13,6 @@
|
|||
|
||||
#include "ct_defs.h"
|
||||
#include "global.h"
|
||||
#include "sort.h"
|
||||
#include "PropertyCalculator.h"
|
||||
#include "ctexceptions.h"
|
||||
#include "vec_functions.h"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
#ifdef WITH_ELECTROLYTES
|
||||
#include "MolalityVPSSTP.h"
|
||||
#endif
|
||||
#include "sort.h"
|
||||
#include "global.h"
|
||||
|
||||
#include <math.h>
|
||||
|
|
@ -799,35 +798,27 @@ namespace Cantera {
|
|||
}
|
||||
|
||||
void MultiPhaseEquil::computeN() {
|
||||
index_t m, k;
|
||||
// Sort the list of species by mole fraction (decreasing order)
|
||||
std::vector<std::pair<double, size_t> > moleFractions(m_nsp);
|
||||
for (size_t k = 0; k < m_nsp; k++) {
|
||||
// use -Xk to generate reversed sort order
|
||||
moleFractions[k].first = - m_mix->speciesMoles(m_species[k]);
|
||||
moleFractions[k].second = k;
|
||||
}
|
||||
std::sort(moleFractions.begin(), moleFractions.end());
|
||||
for (size_t k = 0; k < m_nsp; k++) {
|
||||
m_sortindex[k] = moleFractions[k].second;
|
||||
}
|
||||
|
||||
// get the species moles
|
||||
|
||||
// sort mole fractions
|
||||
doublereal molesum = 0.0;
|
||||
for (k = 0; k < m_nsp; k++) {
|
||||
m_work[k] = m_mix->speciesMoles(m_species[k]);
|
||||
m_sortindex[k] = k;
|
||||
molesum += m_work[k];
|
||||
}
|
||||
heapsort(m_work, m_sortindex);
|
||||
|
||||
// reverse order in sort index
|
||||
index_t itmp;
|
||||
for (k = 0; k < m_nsp/2; k++) {
|
||||
itmp = m_sortindex[m_nsp-k-1];
|
||||
m_sortindex[m_nsp-k-1] = m_sortindex[k];
|
||||
m_sortindex[k] = itmp;
|
||||
}
|
||||
index_t ik, ij;
|
||||
bool ok;
|
||||
for (m = 0; m < m_nel; m++) {
|
||||
for (ik = 0; ik < m_nsp; ik++) {
|
||||
for (size_t m = 0; m < m_nel; m++) {
|
||||
size_t k;
|
||||
for (size_t ik = 0; ik < m_nsp; ik++) {
|
||||
k = m_sortindex[ik];
|
||||
if (m_mix->nAtoms(m_species[k],m_element[m]) != 0) break;
|
||||
}
|
||||
ok = false;
|
||||
for (ij = 0; ij < m_nel; ij++) {
|
||||
for (size_t ij = 0; ij < m_nel; ij++) {
|
||||
if (k == m_order[ij]) ok = true;
|
||||
}
|
||||
if (!ok || m_force) {
|
||||
|
|
|
|||
|
|
@ -1,112 +0,0 @@
|
|||
/**
|
||||
* @file sort.cpp
|
||||
*/
|
||||
|
||||
#include "sort.h"
|
||||
|
||||
namespace Cantera {
|
||||
|
||||
// sort (x,y) pairs by x
|
||||
|
||||
void heapsort(vector_fp& x, std::vector<size_t>& y) {
|
||||
size_t n = x.size();
|
||||
if (n < 2) return;
|
||||
doublereal rra;
|
||||
size_t rrb;
|
||||
size_t ll = n/2;
|
||||
size_t iret = n-1;
|
||||
|
||||
while (1 > 0) {
|
||||
if (ll > 0) {
|
||||
ll--;
|
||||
rra = x[ll];
|
||||
rrb = y[ll];
|
||||
}
|
||||
else {
|
||||
rra = x[iret];
|
||||
rrb = y[iret];
|
||||
x[iret] = x[0];
|
||||
y[iret] = y[0];
|
||||
iret--;
|
||||
if (iret == 0) {
|
||||
x[0] = rra;
|
||||
y[0] = rrb;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
size_t i = ll;
|
||||
size_t j = ll + ll + 1;
|
||||
|
||||
while (j <= iret) {
|
||||
if (j < iret) {
|
||||
if (x[j] < x[j+1])
|
||||
j++;
|
||||
}
|
||||
if (rra < x[j]) {
|
||||
x[i] = x[j];
|
||||
y[i] = y[j];
|
||||
i = j;
|
||||
j = j + j + 1;
|
||||
}
|
||||
else {
|
||||
j = iret + 1;
|
||||
}
|
||||
}
|
||||
x[i] = rra;
|
||||
y[i] = rrb;
|
||||
}
|
||||
}
|
||||
|
||||
void heapsort(vector_fp& x, vector_fp& y) {
|
||||
size_t n = x.size();
|
||||
if (n < 2) return;
|
||||
doublereal rra;
|
||||
doublereal rrb;
|
||||
size_t ll = n/2;
|
||||
size_t iret = n-1;
|
||||
|
||||
while (1 > 0) {
|
||||
if (ll > 0) {
|
||||
ll--;
|
||||
rra = x[ll];
|
||||
rrb = y[ll];
|
||||
}
|
||||
else {
|
||||
rra = x[iret];
|
||||
rrb = y[iret];
|
||||
x[iret] = x[0];
|
||||
y[iret] = y[0];
|
||||
iret--;
|
||||
if (iret == 0) {
|
||||
x[0] = rra;
|
||||
y[0] = rrb;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
size_t i = ll;
|
||||
size_t j = ll + ll + 1;
|
||||
|
||||
while (j <= iret) {
|
||||
if (j < iret) {
|
||||
if (x[j] < x[j+1])
|
||||
j++;
|
||||
}
|
||||
if (rra < x[j]) {
|
||||
x[i] = x[j];
|
||||
y[i] = y[j];
|
||||
i = j;
|
||||
j = j + j + 1;
|
||||
}
|
||||
else {
|
||||
j = iret + 1;
|
||||
}
|
||||
}
|
||||
x[i] = rra;
|
||||
y[i] = rrb;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
/**
|
||||
* @file sort.h
|
||||
*/
|
||||
|
||||
#ifndef CT_SORT_H
|
||||
#define CT_SORT_H
|
||||
|
||||
#include "ct_defs.h"
|
||||
|
||||
namespace Cantera {
|
||||
|
||||
/// Given two arrays x and y, sort the (x,y) pairs by the x
|
||||
/// values. This version is for floating-point x, and integer y.
|
||||
void heapsort(vector_fp& x, std::vector<size_t>& y);
|
||||
|
||||
/// Given two arrays x and y, sort the (x,y) pairs by the x
|
||||
/// values. This version is for floating-point x, and
|
||||
/// floating-point y.
|
||||
void heapsort(vector_fp& x, vector_fp& y);
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Reference in a new issue