Switch bases for SIT.

git-svn-id: svn://136.177.114.72/svn_GW/phreeqc3/trunk@9637 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
David L Parkhurst 2015-05-11 22:20:49 +00:00
parent ca572ee976
commit ef8611e0ed
2 changed files with 32 additions and 20 deletions

View File

@ -5028,6 +5028,8 @@ switch_bases(void)
{
if (x[i]->type != MB)
continue;
if (x[i]->type == PITZER_GAMMA)
break;
first = 0;
la = x[i]->master[0]->s->la;
for (j = 1; x[i]->master[j] != NULL; j++)
@ -5056,7 +5058,7 @@ switch_bases(void)
x[i]->master[0]->s->name, iterations, la, x[i]->master[0]->s->la);
*/
x[i]->master[0]->s->la = la;
x[i]->la = la;
log_msg(sformatf( "Switching bases to %s.\tIteration %d\n",
x[i]->master[0]->s->name, iterations));
return_value = TRUE;

48
sit.cpp
View File

@ -894,19 +894,19 @@ sit_revise_guesses(void)
if (x[i] == ph_unknown || x[i] == pe_unknown)
continue;
if (x[i]->type == MB ||
/* x[i]->type == ALK || */
x[i]->type == CB ||
x[i]->type == SOLUTION_PHASE_BOUNDARY ||
x[i]->type == EXCH || x[i]->type == SURFACE)
/* x[i]->type == ALK || */
x[i]->type == CB ||
x[i]->type == SOLUTION_PHASE_BOUNDARY ||
x[i]->type == EXCH || x[i]->type == SURFACE)
{
if (debug_set == TRUE)
{
output_msg(sformatf(
"\n\t%5s at beginning of set %d: %e\t%e\t%e\n",
x[i]->description, l_iter, (double) x[i]->sum,
(double) x[i]->moles,
(double) x[i]->master[0]->s->la));
"\n\t%5s at beginning of set %d: %e\t%e\t%e\n",
x[i]->description, l_iter, (double) x[i]->sum,
(double) x[i]->moles,
(double) x[i]->master[0]->s->la));
}
if (fabs(x[i]->moles) < 1e-30)
x[i]->moles = 0;
@ -923,12 +923,8 @@ sit_revise_guesses(void)
/*!!!!*/ if (x[i]->master[0]->s->la < -999.)
x[i]->master[0]->s->la = MIN_RELATED_LOG_ACTIVITY;
}
else if (fail == TRUE && f < 1.5 * fabs(x[i]->moles))
{
continue;
}
else if (f > 1.5 * fabs(x[i]->moles)
|| f < 1.0/d * fabs(x[i]->moles))
else if (f > d * fabs(x[i]->moles)
|| f < 1.0/d * fabs(x[i]->moles))
{
weight = (f < 1.0/d * fabs(x[i]->moles)) ? 0.3 : 1.0;
if (x[i]->moles <= 0)
@ -944,10 +940,10 @@ sit_revise_guesses(void)
if (debug_set == TRUE)
{
output_msg(sformatf(
"\t%5s not converged in set %d: %e\t%e\t%e\n",
x[i]->description, l_iter,
(double) x[i]->sum, (double) x[i]->moles,
(double) x[i]->master[0]->s->la));
"\t%5s not converged in set %d: %e\t%e\t%e\n",
x[i]->description, l_iter,
(double) x[i]->sum, (double) x[i]->moles,
(double) x[i]->master[0]->s->la));
}
}
}
@ -1297,7 +1293,10 @@ model_sit(void)
{
full_pitzer = FALSE;
}
molalities(TRUE);
if (molalities(FALSE) == ERROR)
{
sit_revise_guesses();
}
if (use.Get_surface_ptr() != NULL &&
use.Get_surface_ptr()->Get_dl_type() != cxxSurface::NO_DL &&
use.Get_surface_ptr()->Get_related_phases() == TRUE)
@ -1305,6 +1304,17 @@ model_sit(void)
mb_sums();
mb_gases();
mb_ss();
/*
* Switch bases if necessary
*/
if (switch_bases() == TRUE)
{
count_basis_change++;
count_unknowns -= (int) s_list.size();
reprep();
full_pitzer = false;
}
/* debug
species_list_sort();
sum_species();