diff --git a/Phreeqc.cpp b/Phreeqc.cpp index 039903a0..be9c7236 100644 --- a/Phreeqc.cpp +++ b/Phreeqc.cpp @@ -576,18 +576,7 @@ void Phreeqc::init(void) /*---------------------------------------------------------------------- * Jacobian and Mass balance lists *---------------------------------------------------------------------- */ - count_sum_jacob0 = 0; - max_sum_jacob0 = 0; - sum_jacob0 = NULL; - count_sum_jacob1 = 0; - max_sum_jacob1 = 0; - sum_jacob1 = NULL; - count_sum_jacob2 = 0; - max_sum_jacob2 = 0; - sum_jacob2 = NULL; - count_sum_delta = 0; - max_sum_delta = 0; - sum_delta = NULL; + /*---------------------------------------------------------------------- * Solution *---------------------------------------------------------------------- */ diff --git a/Phreeqc.h b/Phreeqc.h index a49b3319..61404c90 100644 --- a/Phreeqc.h +++ b/Phreeqc.h @@ -1321,28 +1321,18 @@ protected: /*---------------------------------------------------------------------- * Jacobian and Mass balance lists *---------------------------------------------------------------------- */ - - int count_sum_jacob0; /* number of elements in sum_jacob0 */ - 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 */ + std::vector sum_jacob0; /* array of pointers to targets and coefficients for array */ std::vector 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 */ - + std::vector sum_jacob1; /* array of pointers to sources and targets for array + equations with coef = 1.0 */ std::vector 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 - targets, coef != 1.0 */ - int count_sum_delta; /* number of elements in sum_delta */ - int max_sum_delta; /* calculated maximum number of elements in sum_delta */ - struct list2 *sum_delta; /* array of pointers to sources, targets and coefficients for - summing deltas for mass balance equations */ + std::vector sum_jacob2; /* array of coefficients and pointers to sources and + targets, coef != 1.0 */ + std::vector sum_delta; /* array of pointers to sources, targets and coefficients for + summing deltas for mass balance equations */ /*---------------------------------------------------------------------- * Solution *---------------------------------------------------------------------- */ diff --git a/model.cpp b/model.cpp index fc7d1a16..26ab9995 100644 --- a/model.cpp +++ b/model.cpp @@ -1951,21 +1951,21 @@ jacobian_sums(void) /* * Add constant terms */ - for (k = 0; k < count_sum_jacob0; k++) + for (k = 0; k < (int)sum_jacob0.size(); k++) { *sum_jacob0[k].target += sum_jacob0[k].coef; } /* * Add terms with coefficients of 1.0 */ - for (k = 0; k < count_sum_jacob1; k++) + for (k = 0; k < (int)sum_jacob1.size(); k++) { *sum_jacob1[k].target += *sum_jacob1[k].source; } /* * Add terms with coefficients != 1.0 */ - for (k = 0; k < count_sum_jacob2; k++) + for (k = 0; k < (int)sum_jacob2.size(); k++) { *sum_jacob2[k].target += *sum_jacob2[k].source * sum_jacob2[k].coef; } @@ -2135,7 +2135,6 @@ mb_sums(void) for (k = 0; k < (int)sum_mb1.size(); k++) { *sum_mb1[k].target += *sum_mb1[k].source; -/* { k += 1; k -= 1;} */ } /* * Add terms with coefficients != 1.0 @@ -2143,7 +2142,6 @@ mb_sums(void) 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;} */ } return (OK); } @@ -3155,7 +3153,7 @@ reset(void) x[i]->delta = 0.0; } - for (i = 0; i < count_sum_delta; i++) + for (i = 0; i < (int)sum_delta.size(); i++) { *sum_delta[i].target += *sum_delta[i].source * sum_delta[i].coef; } @@ -5180,14 +5178,10 @@ free_model_allocs(void) s_x.clear(); 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); - count_sum_jacob1 = 0; - sum_jacob2 = (struct list2 *) free_check_null(sum_jacob2); - count_sum_jacob2 = 0; - sum_delta = (struct list2 *) free_check_null(sum_delta); - count_sum_delta = 0; + sum_jacob0.clear(); + sum_jacob1.clear(); + sum_jacob2.clear(); + sum_delta.clear(); return (OK); } diff --git a/prep.cpp b/prep.cpp index d9576fbd..b3280e3d 100644 --- a/prep.cpp +++ b/prep.cpp @@ -1136,39 +1136,12 @@ build_model(void) sum_species_map_db.clear(); 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)); 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 sum_mb2.clear(); - - max_sum_jacob0 = MAX_SUM_JACOB0; - count_sum_jacob0 = 0; - space((void **) ((void *) &sum_jacob0), INIT, &max_sum_jacob0, - sizeof(struct list0)); - - max_sum_jacob1 = MAX_SUM_JACOB1; - count_sum_jacob1 = 0; - space((void **) ((void *) &sum_jacob1), INIT, &max_sum_jacob1, - sizeof(struct list1)); - - max_sum_jacob2 = MAX_SUM_JACOB2; - count_sum_jacob2 = 0; - space((void **) ((void *) &sum_jacob2), INIT, &max_sum_jacob2, - sizeof(struct list2)); - - - max_sum_delta = MAX_SUM_JACOB0; - count_sum_delta = 0; - space((void **) ((void *) &sum_delta), INIT, &max_sum_delta, - sizeof(struct list2)); + sum_jacob0.clear(); + sum_jacob1.clear(); + sum_jacob2.clear(); + sum_delta.clear(); max_species_list = 5 * MAX_S; count_species_list = 0; @@ -2642,10 +2615,10 @@ reprep(void) s_x.clear(); 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); - sum_delta = (struct list2 *) free_check_null(sum_delta); + sum_jacob0.clear(); + sum_jacob1.clear(); + sum_jacob2.clear(); + sum_delta.clear(); /* * Build model again */ @@ -4913,34 +4886,26 @@ store_jacob(LDBLE * source, LDBLE * target, LDBLE coef) */ if (equal(coef, 1.0, TOL) == TRUE) { + size_t count_sum_jacob1 = sum_jacob1.size(); + sum_jacob1.resize(count_sum_jacob1 + 1); if (debug_prep == TRUE) { - output_msg(sformatf( "\tjacob1 %d\n", count_sum_jacob1)); + output_msg(sformatf( "\tjacob1 %d\n", (int)count_sum_jacob1)); } sum_jacob1[count_sum_jacob1].source = source; - sum_jacob1[count_sum_jacob1++].target = target; - /* Check space */ - if (count_sum_jacob1 >= max_sum_jacob1) - { - space((void **) ((void *) &sum_jacob1), count_sum_jacob1, - &max_sum_jacob1, sizeof(struct list1)); - } + sum_jacob1[count_sum_jacob1].target = target; } else { + size_t count_sum_jacob2 = sum_jacob2.size(); + sum_jacob2.resize(count_sum_jacob2 + 1); if (debug_prep == TRUE) { - output_msg(sformatf( "\tjacob2 %d\n", count_sum_jacob2)); + output_msg(sformatf("\tjacob2 %d\n", count_sum_jacob2)); } sum_jacob2[count_sum_jacob2].source = source; sum_jacob2[count_sum_jacob2].target = target; - sum_jacob2[count_sum_jacob2++].coef = coef; - /* Check space */ - if (count_sum_jacob2 >= max_sum_jacob2) - { - space((void **) ((void *) &sum_jacob2), count_sum_jacob2, - &max_sum_jacob2, sizeof(struct list2)); - } + sum_jacob2[count_sum_jacob2].coef = coef; } return (OK); } @@ -4953,15 +4918,11 @@ store_jacob0(int row, int column, LDBLE coef) /* * Stores in list a constant coef which will be added into jacobian array */ + size_t count_sum_jacob0 = sum_jacob0.size(); + sum_jacob0.resize(count_sum_jacob0 + 1); sum_jacob0[count_sum_jacob0].target = - &(my_array[row * (count_unknowns + 1) + column]); - sum_jacob0[count_sum_jacob0++].coef = coef; - /* Check space */ - if (count_sum_jacob0 >= max_sum_jacob0) - { - space((void **) ((void *) &sum_jacob0), count_sum_jacob0, - &max_sum_jacob0, sizeof(struct list0)); - } + &(my_array[(size_t)row * ((size_t)count_unknowns + 1) + (size_t)column]); + sum_jacob0[count_sum_jacob0].coef = coef; return (OK); } @@ -5004,15 +4965,11 @@ store_sum_deltas(LDBLE * source, LDBLE * target, LDBLE coef) * in x[i]->delta. These may be multiplied by a factor under some * situations where the entire calculated step is not taken */ + size_t count_sum_delta = sum_delta.size(); + sum_delta.resize(count_sum_delta + 1); sum_delta[count_sum_delta].source = source; sum_delta[count_sum_delta].target = target; - sum_delta[count_sum_delta++].coef = coef; - /* Check space */ - if (count_sum_delta >= max_sum_delta) - { - space((void **) ((void *) &sum_delta), count_sum_delta, - &max_sum_delta, sizeof(struct list2)); - } + sum_delta[count_sum_delta].coef = coef; return (OK); }