This commit is contained in:
David Parkhurst 2021-03-15 13:21:14 -06:00
parent e7c78a88ad
commit de1ba62395
10 changed files with 69 additions and 95 deletions

View File

@ -726,9 +726,6 @@ void Phreeqc::init(void)
max_logk = MAX_S;
moles_per_kilogram_string= NULL;
pe_string = NULL;
s = NULL;
count_s = 0;
max_s = MAX_S;
// auto s_diff_layer;
s_x = NULL;
count_s_x = 0;
@ -1717,14 +1714,7 @@ Phreeqc::InternalCopy(const Phreeqc *pSrc)
}
count_logk = pSrc->count_logk;
// s, species
count_s = 0;
//max_s = pSrc->max_s;
//s = (struct species **) free_check_null(s);
//s = (struct species **) PHRQ_malloc(sizeof(struct species *)*size_t(max_s));
space((void **)((void *)&s), pSrc->max_s, &max_s, sizeof(struct species *));
for (int i = 0; i < pSrc->count_s; i++)
for (int i = 0; i < (int)pSrc->s.size(); i++)
{
struct species *s_ptr = s_store(pSrc->s[i]->name, pSrc->s[i]->z, FALSE);
memcpy(s_ptr, pSrc->s[i], sizeof(struct species));

View File

@ -1483,9 +1483,7 @@ protected:
char *moles_per_kilogram_string;
char *pe_string;
struct species **s;
int count_s;
int max_s;
std::vector<struct species*> s;
std::vector< std::map < std::string, cxxSpeciesDL > > s_diff_layer;
struct species **s_x;

View File

@ -88,8 +88,6 @@ initialize(void)
space((void **) ((void *) &trxn.token), INIT, &max_trxn,
sizeof(struct rxn_token_temp));
space((void **) ((void *) &s), INIT, &max_s, sizeof(struct species *));
space((void **) ((void *) &logk), INIT, &max_logk, sizeof(struct logk *));
/*
@ -98,7 +96,7 @@ initialize(void)
hcreate_multi((unsigned) max_logk, &logk_hash_table);
hcreate_multi((unsigned) MAX_ELTS, &master_isotope_hash_table);
hcreate_multi((unsigned) MAX_ELTS, &elements_hash_table);
hcreate_multi((unsigned) max_s, &species_hash_table);
hcreate_multi((unsigned) MAX_S, &species_hash_table);
hcreate_multi((unsigned) MAX_PHASES, &phases_hash_table);
// one save_values
save_values =

View File

@ -5028,7 +5028,7 @@ surface_model(void)
if (dl_type_x != cxxSurface::NO_DL && same_model == FALSE)
{
s_diff_layer.clear();
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
std::map < std::string, cxxSpeciesDL > dl;
s_diff_layer.push_back(dl);

View File

@ -65,19 +65,18 @@ pitzer_tidy(void)
*/
if (spec != NULL)
spec = (struct species **) free_check_null(spec);
spec =
(struct species **)
PHRQ_malloc((size_t) (3 * count_s * sizeof(struct species *)));
spec = (struct species **)
PHRQ_malloc((size_t) (3 * s.size() * sizeof(struct species *)));
if (spec == NULL)
malloc_error();
for (i = 0; i < 3 * count_s; i++)
for (i = 0; i < 3 * (int)s.size(); i++)
spec[i] = NULL;
cations = spec;
neutrals = &(spec[count_s]);
anions = &(spec[2 * count_s]);
MAXCATIONS = count_s;
FIRSTANION = 2 * count_s;
MAXNEUTRAL = count_s;
neutrals = &(spec[s.size()]);
anions = &(spec[2 * s.size()]);
MAXCATIONS = (int)s.size();
FIRSTANION = 2 * (int)s.size();
MAXNEUTRAL = (int)s.size();
count_cations = 0;
count_anions = 0;
count_neutrals = 0;
@ -88,22 +87,22 @@ pitzer_tidy(void)
*/
if (IPRSNT != NULL)
IPRSNT = (int *) free_check_null(IPRSNT);
IPRSNT = (int *) PHRQ_malloc((size_t) (3 * count_s * sizeof(int)));
IPRSNT = (int *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(int)));
if (IPRSNT == NULL)
malloc_error();
if (M != NULL)
M = (LDBLE *) free_check_null(M);
M = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE)));
M = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE)));
if (M == NULL)
malloc_error();
if (LGAMMA != NULL)
LGAMMA = (LDBLE *) free_check_null(LGAMMA);
LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE)));
LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE)));
if (LGAMMA == NULL)
malloc_error();
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
if (s[i] == s_eminus)
continue;
@ -159,9 +158,9 @@ pitzer_tidy(void)
}
}
for (i = 2 * count_s; i < 2 * count_s + count_anions - 1; i++)
for (i = 2 * (int)s.size(); i < 2 * (int)s.size() + count_anions - 1; i++)
{
for (j = i + 1; j < 2 * count_s + count_anions; j++)
for (j = i + 1; j < 2 * (int)s.size() + count_anions; j++)
{
sprintf(line, "%s %s 1", spec[i]->name, spec[j]->name);
pzp_ptr = pitz_param_read(line, 2);
@ -574,7 +573,7 @@ ISPEC(const char *name)
*/
{
int i;
for (i = 0; i < 3 * count_s; i++)
for (i = 0; i < 3 * (int)s.size(); i++)
{
if (spec[i] == NULL)
continue;
@ -923,7 +922,7 @@ pitzer(void)
C TRANSFER DATA FROM TO M
C
*/
for (i = 0; i < 3 * count_s; i++)
for (i = 0; i < 3 * (int)s.size(); i++)
{
IPRSNT[i] = FALSE;
M[i] = 0.0;
@ -954,7 +953,7 @@ pitzer(void)
C
*/
PTEMP(TK);
for (i = 0; i < 2 * count_s + count_anions; i++)
for (i = 0; i < 2 * (int)s.size() + count_anions; i++)
{
LGAMMA[i] = 0.0;
if (IPRSNT[i] == TRUE)
@ -1155,7 +1154,7 @@ pitzer(void)
F_var = (z0 == 1 ? F1 : (z0 == 2.0 ? F2 : F));
LGAMMA[i] += z0 * z0 * F_var + z0 * CSUM;
}
for (i = 2 * count_s; i < 2 * count_s + count_anions; i++)
for (i = 2 * (int)s.size(); i < 2 * (int)s.size() + count_anions; i++)
{
if (!IPRSNT[i])
continue;
@ -1176,7 +1175,7 @@ pitzer(void)
C CORRECTED ERROR IN PHIMAC, NOVEMBER, 1989
C
*/
for (i = 0; i < 2 * count_s + count_anions; i++)
for (i = 0; i < 2 * (int)s.size() + count_anions; i++)
{
if (IPRSNT[i] == TRUE)
{
@ -1198,7 +1197,7 @@ pitzer(void)
*/
/*s_h2o->la=log10(AW); */
mu_x = I;
for (i = 0; i < 2 * count_s + count_anions; i++)
for (i = 0; i < 2 * (int)s.size() + count_anions; i++)
{
if (IPRSNT[i] == FALSE)
continue;
@ -2627,12 +2626,12 @@ pitzer_make_lists(void)
max = count_cations;
break;
case 1:
min = count_s;
max = count_s + count_neutrals;
min = (int)s.size();
max = (int)s.size() + count_neutrals;
break;
case 2:
min = 2*count_s;
max = 2*count_s + count_anions;
min = 2* (int)s.size();
max = 2* (int)s.size() + count_anions;
break;
}
for (int i = min; i < max; i++)
@ -2647,19 +2646,19 @@ pitzer_make_lists(void)
continue;
IPRSNT[i] = TRUE;
s_list.push_back(i);
if (i < count_s)
if (i < (int)s.size())
{
cation_list.push_back(i);
}
if (i >= count_s && i < 2*count_s)
if (i >= (int)s.size() && i < 2* (int)s.size())
{
neutral_list.push_back(i);
}
if (i >= 2*count_s)
if (i >= 2* (int)s.size())
{
anion_list.push_back(i);
}
if (i < count_s || i >= 2*count_s)
if (i < (int)s.size() || i >= 2* (int)s.size())
{
ion_list.push_back(i);
}

View File

@ -1205,7 +1205,7 @@ build_model(void)
count_s_x = 0;
compute_gfw("H2O", &gfw_water);
gfw_water *= 0.001;
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
if (s[i]->type > H2O && s[i]->type != EX && s[i]->type != SURF)
continue;
@ -1810,7 +1810,7 @@ clear(void)
*/
solution_ptr = use.Get_solution_ptr();
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
s[i]->in = FALSE;
}
@ -4832,7 +4832,7 @@ setup_unknowns(void)
max_unknowns++;
if (pitzer_model == TRUE || sit_model == TRUE)
{
max_unknowns += count_s;
max_unknowns += (int)s.size();
}
/*

48
sit.cpp
View File

@ -39,16 +39,16 @@ sit_tidy(void)
* allocate pointers to species structures
*/
if (spec != NULL) spec = (struct species **) free_check_null(spec);
spec = (struct species **) PHRQ_malloc((size_t) (3 * count_s * sizeof(struct species *)));
spec = (struct species **) PHRQ_malloc((size_t) (3 * s.size() * sizeof(struct species *)));
if (spec == NULL) malloc_error();
for (i = 0; i < 3 * count_s; i++) spec[i] = NULL;
for (i = 0; i < 3 * (int)s.size(); i++) spec[i] = NULL;
cations = spec;
neutrals = &(spec[count_s]);
anions = &(spec[2 * count_s]);
sit_MAXCATIONS = count_s;
sit_FIRSTANION = 2 * count_s;
sit_MAXNEUTRAL = count_s;
neutrals = &(spec[s.size()]);
anions = &(spec[2 * s.size()]);
sit_MAXCATIONS = (int)s.size();
sit_FIRSTANION = 2 * (int)s.size();
sit_MAXNEUTRAL = (int)s.size();
sit_count_cations = 0;
sit_count_anions = 0;
sit_count_neutrals = 0;
@ -57,17 +57,17 @@ sit_tidy(void)
* allocate other arrays for SIT
*/
if (sit_IPRSNT != NULL) sit_IPRSNT = (int *) free_check_null(sit_IPRSNT);
sit_IPRSNT = (int *) PHRQ_malloc((size_t) (3 * count_s * sizeof(int)));
sit_IPRSNT = (int *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(int)));
if (sit_IPRSNT == NULL) malloc_error();
if (sit_M != NULL) sit_M = (LDBLE *) free_check_null(sit_M);
sit_M = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE)));
sit_M = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE)));
if (sit_M == NULL) malloc_error();
if (sit_LGAMMA != NULL) sit_LGAMMA = (LDBLE *) free_check_null(sit_LGAMMA);
sit_LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE)));
sit_LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE)));
if (sit_LGAMMA == NULL) malloc_error();
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
if (s[i] == s_eminus)
continue;
@ -149,7 +149,7 @@ sit_ISPEC(const char *name)
*/
{
int i;
for (i = 0; i < 3 * count_s; i++)
for (i = 0; i < 3 * (int)s.size(); i++)
{
if (spec[i] == NULL)
continue;
@ -340,7 +340,7 @@ sit(void)
sit_M[i] = 0.0;
}
}
//for (i = 0; i < 3 * count_s; i++)
//for (i = 0; i < 3 * (int)s.size(); i++)
//{
// sit_IPRSNT[i] = FALSE;
// sit_M[i] = 0.0;
@ -368,7 +368,7 @@ sit(void)
XI = XI + sit_M[i] * spec[i]->z * spec[i]->z;
OSUM = OSUM + sit_M[i];
}
//for (i = 0; i < 2 * count_s + sit_count_anions; i++)
//for (i = 0; i < 2 * (int)s.size() + sit_count_anions; i++)
//{
// sit_LGAMMA[i] = 0.0;
// if (sit_IPRSNT[i] == TRUE)
@ -462,7 +462,7 @@ sit(void)
// z0 = spec[i]->z;
// sit_LGAMMA[i] += z0 * z0 * F;
//}
//for (i = 2 * count_s; i < 2 * count_s + sit_count_anions; i++)
//for (i = 2 * (int)s.size(); i < 2 * (int)s.size() + sit_count_anions; i++)
//{
// z0 = spec[i]->z;
// sit_LGAMMA[i] += z0 * z0 * F;
@ -488,7 +488,7 @@ sit(void)
int i = s_list[j];
spec[i]->lg_pitzer = sit_LGAMMA[i];
}
// for (i = 0; i < 2 * count_s + sit_count_anions; i++)
// for (i = 0; i < 2 * (int)s.size() + sit_count_anions; i++)
// {
// if (sit_IPRSNT[i] == FALSE) continue;
// spec[i]->lg_pitzer = sit_LGAMMA[i];
@ -1447,12 +1447,12 @@ sit_make_lists(void)
max = sit_count_cations;
break;
case 1:
min = count_s;
max = count_s + sit_count_neutrals;
min = (int)s.size();
max = (int)s.size() + sit_count_neutrals;
break;
case 2:
min = 2*count_s;
max = 2*count_s + sit_count_anions;
min = 2*(int)s.size();
max = 2*(int)s.size() + sit_count_anions;
break;
}
for (int i = min; i < max; i++)
@ -1466,19 +1466,19 @@ sit_make_lists(void)
continue;
sit_IPRSNT[i] = TRUE;
s_list.push_back(i);
if (i < count_s)
if (i < (int)s.size())
{
cation_list.push_back(i);
}
if (i >= count_s && i < 2*count_s)
if (i >= (int)s.size() && i < 2*(int)s.size())
{
neutral_list.push_back(i);
}
if (i >= 2*count_s)
if (i >= 2*(int)s.size())
{
anion_list.push_back(i);
}
if (i < count_s || i >= 2*count_s)
if (i < (int)s.size() || i >= 2*(int)s.size())
{
ion_list.push_back(i);
}

View File

@ -326,7 +326,7 @@ xsolution_zero(void)
}
if (pitzer_model == TRUE || sit_model == TRUE)
{
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
s[i]->lg = 0.0;
}

View File

@ -64,12 +64,11 @@ clean_up(void)
/* species */
for (j = 0; j < count_s; j++)
for (j = 0; j < (int)s.size(); j++)
{
s_free(s[j]);
s[j] = (struct species *) free_check_null(s[j]);
}
s = (struct species **) free_check_null(s);
/* master species */
@ -311,7 +310,6 @@ clean_up(void)
title_x = (char *) free_check_null(title_x);
last_title_x.clear();
count_master = 0;
count_s = 0;
count_logk = 0;
count_rates = 0;
count_inverse = 0;
@ -1962,11 +1960,7 @@ s_delete(int i)
s_free(s[i]);
s[i] = (struct species *) free_check_null(s[i]);
for (j = i; j < (count_s - 1); j++)
{
s[j] = s[j + 1];
}
count_s--;
s.erase(s.begin() + i);
return (OK);
}
@ -2158,13 +2152,8 @@ s_store(const char *name, LDBLE l_z, int replace_if_found)
}
else
{
n = count_s++;
/* make sure there is space in s */
if (count_s >= max_s)
{
space((void **) ((void *) &s), count_s, &max_s,
sizeof(struct species *));
}
n = (int)s.size();
s.resize((size_t)n + 1);
/* Make new species structure */
s[n] = s_alloc();
s_ptr = s[n];

View File

@ -150,7 +150,7 @@ tidy_model(void)
/* species */
if (new_model == TRUE)
{
qsort(s, (size_t) count_s, (size_t) sizeof(struct species *), s_compare);
qsort(s.data(), s.size(), sizeof(struct species *), s_compare);
/* master species */
qsort(master, (unsigned) count_master, sizeof(struct master *), master_compare);
@ -453,7 +453,7 @@ check_species_input(void)
int return_value;
return_value = OK;
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
if (s[i]->next_elt == NULL)
{
@ -2304,7 +2304,7 @@ tidy_species(void)
/*
* Set secondary and primary pointers in species structures
*/
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
s[i]->number = i;
s[i]->primary = NULL;
@ -2396,7 +2396,7 @@ tidy_species(void)
/*
* Rewrite all species to secondary species
*/
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
count_trxn = 0;
if (s[i]->primary != NULL || s[i]->secondary != NULL)
@ -2487,7 +2487,7 @@ tidy_species(void)
/*
* Calculate H and O if alternate mass balance is given
*/
for (i = 0; i < count_s; i++)
for (i = 0; i < (int)s.size(); i++)
{
if (s[i]->next_secondary != NULL)
{