vector sum_mb1, sum_mb2

This commit is contained in:
David Parkhurst 2021-03-16 14:50:43 -06:00
parent 7d303de1b4
commit f0707aa0b3
4 changed files with 39 additions and 56 deletions

View File

@ -579,15 +579,9 @@ void Phreeqc::init(void)
count_sum_jacob0 = 0;
max_sum_jacob0 = 0;
sum_jacob0 = NULL;
count_sum_mb1 = 0;
max_sum_mb1 = 0;
sum_mb1 = NULL;
count_sum_jacob1 = 0;
max_sum_jacob1 = 0;
sum_jacob1 = NULL;
count_sum_mb2 = 0;
max_sum_mb2 = 0;
sum_mb2 = NULL;
count_sum_jacob2 = 0;
max_sum_jacob2 = 0;
sum_jacob2 = NULL;

View File

@ -1326,18 +1326,15 @@ protected:
int max_sum_jacob0; /* calculated maximum number of elements in sum_jacob0 */
struct list0 *sum_jacob0; /* array of pointers to targets and coefficients for array */
int count_sum_mb1; /* number of elements in sum_mb1 */
int max_sum_mb1; /* calculated maximum number of elements in sum_mb1 */
struct list1 *sum_mb1; /* array of pointers to sources and targets for mass
balance summations with coef = 1.0 */
std::vector<struct list1> sum_mb1; /* array of pointers to sources and targets for mass
balance summations with coef = 1.0 */
int count_sum_jacob1; /* number of elements in sum_jacob1 */
int max_sum_jacob1; /* calculated maximum number of elements in sum_jacob1 */
struct list1 *sum_jacob1; /* array of pointers to sources and targets for array
equations with coef = 1.0 */
int count_sum_mb2; /* number of elements in sum_mb2 */
int max_sum_mb2; /* calculated maximum number of elements in sum_mb2 */
struct list2 *sum_mb2; /* array of coefficients and pointers to sources and
targets for mass balance summations with coef != 1.0 */
std::vector<struct list2> sum_mb2; /* array of coefficients and pointers to sources and
targets for mass balance summations with coef != 1.0 */
int count_sum_jacob2; /* number of elements in sum_jacob2 */
int max_sum_jacob2; /* calculated maximum number of elements in sum_jacob2 */
struct list2 *sum_jacob2; /* array of coefficients and pointers to sources and

View File

@ -2132,7 +2132,7 @@ mb_sums(void)
/*
* Add terms with coefficients of 1.0
*/
for (k = 0; k < count_sum_mb1; k++)
for (k = 0; k < (int)sum_mb1.size(); k++)
{
*sum_mb1[k].target += *sum_mb1[k].source;
/* { k += 1; k -= 1;} */
@ -2140,7 +2140,7 @@ mb_sums(void)
/*
* Add terms with coefficients != 1.0
*/
for (k = 0; k < count_sum_mb2; k++)
for (k = 0; k < (int)sum_mb2.size(); k++)
{
*sum_mb2[k].target += *sum_mb2[k].source * sum_mb2[k].coef;
/* { k += 1; k -= 1;} */
@ -5178,10 +5178,8 @@ free_model_allocs(void)
delta.clear();
residual.clear();
s_x.clear();
sum_mb1 = (struct list1 *) free_check_null(sum_mb1);
count_sum_mb1 = 0;
sum_mb2 = (struct list2 *) free_check_null(sum_mb2);
count_sum_mb2 = 0;
sum_mb1.clear();
sum_mb2.clear();
sum_jacob0 = (struct list0 *) free_check_null(sum_jacob0);
count_sum_jacob0 = 0;
sum_jacob1 = (struct list1 *) free_check_null(sum_jacob1);

View File

@ -1081,18 +1081,18 @@ build_mb_sums(void)
/*
* Make space for lists
*/
if (count_sum_mb1 + count_mb_unknowns >= max_sum_mb1)
{
space((void **) ((void *) &sum_mb1),
count_sum_mb1 + count_mb_unknowns, &max_sum_mb1,
sizeof(struct list1));
}
if (count_sum_mb2 + count_mb_unknowns >= max_sum_mb2)
{
space((void **) ((void *) &sum_mb2),
count_sum_mb2 + count_mb_unknowns, &max_sum_mb2,
sizeof(struct list2));
}
//if (count_sum_mb1 + count_mb_unknowns >= max_sum_mb1)
//{
// space((void **) ((void *) &sum_mb1),
// count_sum_mb1 + count_mb_unknowns, &max_sum_mb1,
// sizeof(struct list1));
//}
//if (count_sum_mb2 + count_mb_unknowns >= max_sum_mb2)
//{
// space((void **) ((void *) &sum_mb2),
// count_sum_mb2 + count_mb_unknowns, &max_sum_mb2,
// sizeof(struct list2));
//}
if (debug_prep == TRUE)
{
@ -1137,15 +1137,17 @@ build_model(void)
sum_species_map.clear();
s_x.clear();
max_sum_mb1 = MAX_SUM_MB;
count_sum_mb1 = 0;
space((void **) ((void *) &sum_mb1), INIT, &max_sum_mb1,
sizeof(struct list1));
//max_sum_mb1 = MAX_SUM_MB;
//count_sum_mb1 = 0;
//space((void **) ((void *) &sum_mb1), INIT, &max_sum_mb1,
// sizeof(struct list1));
sum_mb1.clear();
max_sum_mb2 = MAX_SUM_MB;
count_sum_mb2 = 0;
space((void **) ((void *) &sum_mb2), INIT, &max_sum_mb2,
sizeof(struct list2));
//max_sum_mb2 = MAX_SUM_MB;
//count_sum_mb2 = 0;
//space((void **) ((void *) &sum_mb2), INIT, &max_sum_mb2,
// sizeof(struct list2
sum_mb2.clear();
max_sum_jacob0 = MAX_SUM_JACOB0;
count_sum_jacob0 = 0;
@ -2637,10 +2639,9 @@ reprep(void)
/*
* Free arrays built in build_model
*/
//s_x = (struct species **) free_check_null(s_x);
s_x.clear();
sum_mb1 = (struct list1 *) free_check_null(sum_mb1);
sum_mb2 = (struct list2 *) free_check_null(sum_mb2);
sum_mb1.clear();
sum_mb2.clear();
sum_jacob0 = (struct list0 *) free_check_null(sum_jacob0);
sum_jacob1 = (struct list1 *) free_check_null(sum_jacob1);
sum_jacob2 = (struct list2 *) free_check_null(sum_jacob2);
@ -4976,25 +4977,18 @@ store_mb(LDBLE * source, LDBLE * target, LDBLE coef)
*/
if (equal(coef, 1.0, TOL) == TRUE)
{
size_t count_sum_mb1 = sum_mb1.size();
sum_mb1.resize(count_sum_mb1 + 1);
sum_mb1[count_sum_mb1].source = source;
sum_mb1[count_sum_mb1++].target = target;
if (count_sum_mb1 >= max_sum_mb1)
{
space((void **) ((void *) &sum_mb1),
count_sum_mb1 + count_trxn + 4, &max_sum_mb1,
sizeof(struct list1));
}
sum_mb1[count_sum_mb1].target = target;
}
else
{
size_t count_sum_mb2 = sum_mb2.size();
sum_mb2.resize(count_sum_mb2 + 1);
sum_mb2[count_sum_mb2].source = source;
sum_mb2[count_sum_mb2].coef = coef;
sum_mb2[count_sum_mb2++].target = target;
if (count_sum_mb2 >= max_sum_mb2)
{
space((void **) ((void *) &sum_mb2), count_sum_mb2,
&max_sum_mb2, sizeof(struct list2));
}
sum_mb2[count_sum_mb2].target = target;
}
return (OK);
}