Merge commit '7ec217d47bfff56057000e1ac954d46b31417083'

This commit is contained in:
Darth Vader 2025-03-14 18:22:27 +00:00
commit b15a6bded7
3 changed files with 133 additions and 105 deletions

View File

@ -262,8 +262,9 @@ calc_SC(void)
{ {
class species *s_ptr; class species *s_ptr;
int i; int i;
LDBLE ka, l_z, Dw, ff, sqrt_mu, a, a2, a3, av, v_Cl = 1; LDBLE ka, l_z, Dw, ff, sqrt_mu, a, a2, a3, av, v_Cl = 1, Dw_SC;
SC = 0; SC = 0;
Dw_SC = 1e4 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298.15e3); // for recalculating Dw to ll0
sqrt_mu = sqrt(mu_x); sqrt_mu = sqrt(mu_x);
bool Falk = false; bool Falk = false;
s_ptr = s_search("H+"); s_ptr = s_search("H+");
@ -347,9 +348,9 @@ calc_SC(void)
if (correct_Dw) if (correct_Dw)
s_x[i]->dw_corr = Dw; s_x[i]->dw_corr = Dw;
s_x[i]->dw_t_SC = s_x[i]->moles / mass_water_aq_x * l_z * l_z * Dw; s_x[i]->dw_t_SC = s_x[i]->moles / mass_water_aq_x * l_z * l_z * Dw;
s_x[i]->dw_t_SC *= 1e3 * Dw_SC;
SC += s_x[i]->dw_t_SC; SC += s_x[i]->dw_t_SC;
} }
SC *= 1e7 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298150.0);
return (SC); return (SC);
} }
else else
@ -364,7 +365,7 @@ calc_SC(void)
Dw dw_t a a2 visc a3 = (0) or >5 Dw dw_t a a2 visc a3 = (0) or >5
-dw 1.03e-9 -14 4.03 0.8341 1.679 # Li+, ka = DH_B * a * (1 + (vm - v0))^a2 * mu^0.5 -dw 1.03e-9 -14 4.03 0.8341 1.679 # Li+, ka = DH_B * a * (1 + (vm - v0))^a2 * mu^0.5
*/ */
LDBLE q, sqrt_q, B1, B2, m_plus, m_min, eq_plus, eq_min, eq_dw_plus, eq_dw_min, z_plus, z_min, t1, Dw_SC; LDBLE q, sqrt_q, B1, B2, m_plus, m_min, eq_plus, eq_min, eq_dw_plus, eq_dw_min, z_plus, z_min, t1;
m_plus = m_min = eq_plus = eq_min = eq_dw_plus = eq_dw_min = z_plus = z_min = 0; m_plus = m_min = eq_plus = eq_min = eq_dw_plus = eq_dw_min = z_plus = z_min = 0;
SC = 0; SC = 0;
@ -432,7 +433,7 @@ calc_SC(void)
mu_min = 3 * m_min * (z_min - 1) + m_min; mu_min = 3 * m_min * (z_min - 1) + m_min;
mu_plus = 3 * m_plus * (z_plus - 1) + m_plus; mu_plus = 3 * m_plus * (z_plus - 1) + m_plus;
Dw_SC = 1e4 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298.15e3); // for recalculating Dw to ll0 //Dw_SC = 1e4 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298.15e3); // for recalculating Dw to ll0
t1 = calc_solution_volume(); t1 = calc_solution_volume();
ll_SC = 0.5e3 * (eq_plus + eq_min) / t1 * mass_water_aq_x / t1; // recalculates ll to SC in uS/cm, with mu in mol/kgw ll_SC = 0.5e3 * (eq_plus + eq_min) / t1 * mass_water_aq_x / t1; // recalculates ll to SC in uS/cm, with mu in mol/kgw
@ -466,7 +467,8 @@ calc_SC(void)
if (correct_Dw) if (correct_Dw)
s_x[i]->dw_corr = Dw; s_x[i]->dw_corr = Dw;
s_x[i]->dw_t_SC = s_x[i]->moles / mass_water_aq_x * l_z * l_z * Dw; s_x[i]->dw_t_SC = s_x[i]->moles / mass_water_aq_x * l_z * l_z * Dw;
SC += s_x[i]->dw_t_SC * 1e3 * Dw_SC; s_x[i]->dw_t_SC *= 1e3 * Dw_SC;
SC += s_x[i]->dw_t_SC;
} }
else else
{ {
@ -520,11 +522,11 @@ calc_SC(void)
a = (lz > 0 ? mu_plus / (eq_plus * a2) : mu_min / (eq_min * a2)); a = (lz > 0 ? mu_plus / (eq_plus * a2) : mu_min / (eq_min * a2));
t1 *= s_x[i]->moles * l_z * l_z / a; t1 *= s_x[i]->moles * l_z * l_z / a;
t1 *= ll_SC; t1 *= ll_SC;
s_x[i]->dw_t_SC = t1 / (1e3 * Dw_SC); s_x[i]->dw_t_SC = t1;
SC += t1; SC += t1;
} }
} }
return SC; return SC;
} }
} }
@ -1270,8 +1272,7 @@ calc_t_sc(const char* name)
calc_SC(); calc_SC();
if (!SC) if (!SC)
return (0); return (0);
LDBLE t = s_ptr->dw_t_SC * 1e7 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298150.0); return s_ptr->dw_t_SC / SC;
return (t / SC);
} }
return (0); return (0);
} }

View File

@ -224,6 +224,7 @@ main_method(int argc, char *argv[])
} }
#ifdef NPP #ifdef NPP
#ifdef DOS #ifdef DOS
SetConsoleOutputCP(CP_UTF8);
write_banner(); write_banner();
#endif #endif
#else #else
@ -295,64 +296,6 @@ main_method(int argc, char *argv[])
return 0; return 0;
} }
#endif //TEST_COPY #endif //TEST_COPY
#ifdef NPP
/* ---------------------------------------------------------------------- */
int Phreeqc::
write_banner(void)
/* ---------------------------------------------------------------------- */
{
#ifdef TESTING
return OK;
#endif
#ifndef NO_UTF8_ENCODING
char buffer[80];
int len, indent;
screen_msg(
" ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ\n");
screen_msg(
" º º\n");
/* version */
#ifdef NPP
len = sprintf(buffer, "* PHREEQC-%s *", "3.8.0");
#else
len = sprintf(buffer, "* PHREEQC-%s *", "@VERSION@");
#endif
indent = (49 - len) / 2;
screen_msg(sformatf("%14cº%*c%s%*cº\n", ' ', indent, ' ', buffer,
49 - indent - len, ' '));
screen_msg(
" º º\n");
screen_msg(
" º A hydrogeochemical transport model º\n");
screen_msg(
" º º\n");
screen_msg(
" º by º\n");
screen_msg(
" º D.L. Parkhurst and C.A.J. Appelo º\n");
screen_msg(
" º º\n");
/* date */
#ifdef NPP
len = sprintf(buffer, "%s", "August 27, 2024, with bug-fixes and new items");
#else
len = sprintf(buffer, "%s", "@VER_DATE@");
#endif
indent = (49 - len) / 2;
screen_msg(sformatf("%14cº%*c%s%*cº\n", ' ', indent, ' ', buffer,
49 - indent - len, ' '));
screen_msg(
" ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ\n\n");
#endif
return 0;
}
#else
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
int Phreeqc:: int Phreeqc::
write_banner(void) write_banner(void)
@ -370,7 +313,11 @@ write_banner(void)
" ║ ║\n"); " ║ ║\n");
/* version */ /* version */
#ifdef NPP
len = snprintf(buffer, sizeof(buffer), "* PHREEQC-%s *", "3.8.7");
#else
len = snprintf(buffer, sizeof(buffer), "* PHREEQC-%s *", "@VERSION@"); len = snprintf(buffer, sizeof(buffer), "* PHREEQC-%s *", "@VERSION@");
#endif
indent = (44 - len) / 2; indent = (44 - len) / 2;
screen_msg(sformatf("%14c║%*c%s%*c║\n", ' ', indent, ' ', buffer, screen_msg(sformatf("%14c║%*c%s%*c║\n", ' ', indent, ' ', buffer,
44 - indent - len, ' ')); 44 - indent - len, ' '));
@ -390,7 +337,11 @@ write_banner(void)
/* date */ /* date */
#ifdef NPP
len = snprintf(buffer, sizeof(buffer), "%s", "February 25, 2025");
#else
len = snprintf(buffer, sizeof(buffer), "%s", "@VER_DATE@"); len = snprintf(buffer, sizeof(buffer), "%s", "@VER_DATE@");
#endif
indent = (44 - len) / 2; indent = (44 - len) / 2;
screen_msg(sformatf("%14c║%*c%s%*c║\n", ' ', indent, ' ', buffer, screen_msg(sformatf("%14c║%*c%s%*c║\n", ' ', indent, ' ', buffer,
44 - indent - len, ' ')); 44 - indent - len, ' '));
@ -400,7 +351,6 @@ write_banner(void)
#endif #endif
return 0; return 0;
} }
#endif
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
int Phreeqc:: int Phreeqc::

View File

@ -1469,35 +1469,70 @@ print_species(void)
if (pr.species == FALSE || pr.all == FALSE) if (pr.species == FALSE || pr.all == FALSE)
return (OK); return (OK);
min = -1000; min = -1000;
print_centered("Distribution of species"); #ifdef NPP
/* print_centered("Distribution and properties of species");
* Heading for species
*/
if (pitzer_model == TRUE) if (pitzer_model == TRUE)
{ {
if (ICON == TRUE) if (ICON == TRUE)
{ {
output_msg(sformatf("%60s%10s\n", "MacInnes", "MacInnes")); output_msg(sformatf("%40s%10s\n", "MacInnes", "MacInnes"));
output_msg(sformatf("%40s%10s%10s%10s%10s\n", output_msg(sformatf(" %-13s%11s%13s%9s%10s%10s%8s\n",
"MacInnes", "Log", "Log", "Log", "mole V")); "Species", "Molality", "Activity", "Gamma", "mole V", "f_VISC¹", "t_SC²"));
} }
else else
{ {
output_msg(sformatf("%60s%10s\n", "Unscaled", "Unscaled")); output_msg(sformatf("%40s%10s\n", "Unscaled", "Unscaled"));
output_msg(sformatf("%40s%10s%10s%10s%10s\n", output_msg(sformatf(" %-13s%11s%13s%9s%10s%10s%8s\n",
"Unscaled", "Log", "Log", "Log", "mole V")); "Species", "Molality", "Activity", "Gamma", "mole V", "f_VISC¹", "t_SC²"));
} }
} }
else else
{ {
output_msg(sformatf("%50s%10s%10s%10s\n", "Log", "Log", "Log", "mole V")); if (SC)
{
output_msg(sformatf(" %-13s%11s%13s%9s%10s%10s%8s\n",
"Species", "Molality", "Activity", "Gamma", "mole V", "f_VISC¹", "t_SC²"));
output_msg(sformatf("%27s%-14s%-9s%11s%-9s%-9s\n\n",
"mol/kgw", " -", " -", "cm³/mol", " %", " %"));
}
else
{
output_msg(sformatf("%50s%10s%10s%10s\n", "Log", "Log", "Log", "mole V"));
output_msg(sformatf(" %-13s%12s%12s%10s%10s%10s%10s\n\n",
"Species", "Molality", "Activity", "Molality", "Activity", "Gamma", "cm³/mol"));
}
} }
#ifdef NO_UTF8_ENCODING
output_msg(sformatf(" %-13s%12s%12s%10s%10s%10s%10s\n\n", "Species",
"Molality", "Activity", "Molality", "Activity", "Gamma", "cm3/mol"));
#else #else
output_msg(sformatf(" %-13s%12s%12s%10s%10s%10s%11s\n\n", "Species", print_centered("Distribution of species");
"Molality", "Activity", "Molality", "Activity", "Gamma", "cm³/mol")); /*
* Heading for species
*/
if (pitzer_model == TRUE)
{
if (ICON == TRUE)
{
output_msg(sformatf("%60s%10s\n", "MacInnes", "MacInnes"));
output_msg(sformatf("%40s%10s%10s%10s%10s\n",
"MacInnes", "Log", "Log", "Log", "mole V"));
}
else
{
output_msg(sformatf("%60s%10s\n", "Unscaled", "Unscaled"));
output_msg(sformatf("%40s%10s%10s%10s%10s\n",
"Unscaled", "Log", "Log", "Log", "mole V"));
}
}
else
{
output_msg(sformatf("%50s%10s%10s%10s\n", "Log", "Log", "Log", "mole V"));
}
#ifdef NO_UTF8_ENCODING
output_msg(sformatf(" %-13s%12s%12s%10s%10s%10s%10s\n\n", "Species",
"Molality", "Activity", "Molality", "Activity", "Gamma", "cm3/mol"));
#else
output_msg(sformatf(" %-13s%12s%12s%10s%10s%10s%11s\n\n", "Species",
"Molality", "Activity", "Molality", "Activity", "Gamma", "cm³/mol"));
#endif
#endif #endif
/* /*
* Print list of species * Print list of species
@ -1506,9 +1541,9 @@ print_species(void)
name = s_hplus->secondary->elt->name; name = s_hplus->secondary->elt->name;
for (i = 0; i < (int)species_list.size(); i++) for (i = 0; i < (int)species_list.size(); i++)
{ {
/* /*
* Get name of master species * Get name of master species
*/ */
if (species_list[i].s->type == EX) if (species_list[i].s->type == EX)
continue; continue;
if (species_list[i].s->type == SURF) if (species_list[i].s->type == SURF)
@ -1523,14 +1558,14 @@ print_species(void)
master_ptr = species_list[i].master_s->primary; master_ptr = species_list[i].master_s->primary;
name1 = species_list[i].master_s->primary->elt->name; name1 = species_list[i].master_s->primary->elt->name;
} }
/* /*
* Check if new master species, print total molality * Check if new master species, print total molality
*/ */
if (name1 != name) if (name1 != name)
{ {
name = name1; name = name1;
output_msg(sformatf("%-11s%12.3e\n", name, output_msg(sformatf("%-11s%12.3e\n", name,
(double) (master_ptr->total / mass_water_aq_x))); (double)(master_ptr->total / mass_water_aq_x)));
min = censor * master_ptr->total / mass_water_aq_x; min = censor * master_ptr->total / mass_water_aq_x;
if (min > 0) if (min > 0)
{ {
@ -1541,9 +1576,9 @@ print_species(void)
min = -1000.; min = -1000.;
} }
} }
/* /*
* Print species data * Print species data
*/ */
if (species_list[i].s->lm > min) if (species_list[i].s->lm > min)
{ {
if (species_list[i].s == s_h2o) if (species_list[i].s == s_h2o)
@ -1554,25 +1589,67 @@ print_species(void)
{ {
lm = species_list[i].s->lm; lm = species_list[i].s->lm;
} }
#ifdef NPP
if (SC)
{
output_msg(sformatf(
" %-13s%12.3e%13.3e%9.3f",
species_list[i].s->name,
(double)((species_list[i].s->moles) / mass_water_aq_x),
(double)under(species_list[i].s->lm + species_list[i].s->lg),
(double)pow(10, species_list[i].s->lg)));
if (species_list[i].s->logk[vm_tc] || species_list[i].s == s_hplus)
output_msg(sformatf("%10.2f", (double)species_list[i].s->logk[vm_tc]));
else
output_msg(sformatf(" (0) "));
if (species_list[i].s->dw_t_visc || !strcmp(species_list[i].s->name, "Cl-"))
output_msg(sformatf("%9.2f", (double)100 * species_list[i].s->dw_t_visc));
else
output_msg(sformatf(" (0) "));
if (species_list[i].s->dw_t_SC)
output_msg(sformatf("%9.2f\n", (double)100 * species_list[i].s->dw_t_SC / SC));
else
output_msg(sformatf(" (0)\n"));
}
else
{
output_msg(sformatf(
" %-13s%12.3e%12.3e%10.3f%10.3f%10.3f",
species_list[i].s->name,
(double)((species_list[i].s->moles) / mass_water_aq_x),
(double)under(species_list[i].s->lm + species_list[i].s->lg), (double)lm,
(double)(species_list[i].s->lm + species_list[i].s->lg),
(double)species_list[i].s->lg));
if (species_list[i].s->logk[vm_tc] || species_list[i].s == s_hplus)
output_msg(sformatf("%10.2f", (double)species_list[i].s->logk[vm_tc]));
else
output_msg(sformatf(" (0) "));
output_msg(sformatf("\n"));
}
#else
output_msg(sformatf( output_msg(sformatf(
" %-13s%12.3e%12.3e%10.3f%10.3f%10.3f", " %-13s%12.3e%12.3e%10.3f%10.3f%10.3f",
species_list[i].s->name, species_list[i].s->name,
(double) ((species_list[i].s->moles) / (double)((species_list[i].s->moles) / mass_water_aq_x),
mass_water_aq_x), (double)under(species_list[i].s->lm + species_list[i].s->lg), (double)lm,
(double) under(species_list[i].s->lm + (double)(species_list[i].s->lm + species_list[i].s->lg),
species_list[i].s->lg), (double) lm, (double)species_list[i].s->lg));
(double) (species_list[i].s->lm +
species_list[i].s->lg),
(double) species_list[i].s->lg));
//if (species_list[i].s->logk[vm_tc] || !strcmp(species_list[i].s->name, "H+")) //if (species_list[i].s->logk[vm_tc] || !strcmp(species_list[i].s->name, "H+"))
if (species_list[i].s->logk[vm_tc] || species_list[i].s == s_hplus) if (species_list[i].s->logk[vm_tc] || species_list[i].s == s_hplus)
output_msg(sformatf("%10.2f\n", output_msg(sformatf("%10.2f\n", (double)species_list[i].s->logk[vm_tc]));
(double) species_list[i].s->logk[vm_tc]));
else else
output_msg(sformatf(" (0) \n")); output_msg(sformatf(" (0) \n"));
#endif
} }
} }
output_msg(sformatf("\n")); output_msg(sformatf("\n"));
#ifdef NPP
if (SC)
{
output_msg(sformatf(" ¹: Contribution to the relative viscosity change ((viscos / viscos_0 - 1) x 100).\n"));
output_msg(sformatf(" ²: Contribution to the specific conductance (Transport Number x 100).\n\n"));
}
#endif
return (OK); return (OK);
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */