From 7ec217d47bfff56057000e1ac954d46b31417083 Mon Sep 17 00:00:00 2001 From: Darth Vader Date: Fri, 14 Mar 2025 18:22:27 +0000 Subject: [PATCH] Squashed 'phreeqcpp/' changes from a4886d6..b24dedb b24dedb Added missing newlines(\n) to distribution of species section 35afe0d Tony changes to basicsubs, updated viscosity for Sr, NH4, and tidied databases. git-subtree-dir: phreeqcpp git-subtree-split: b24dedb82589e656af7af947f3c475b49ba36fc4 --- basicsubs.cpp | 19 ++++--- class_main.cpp | 68 +++------------------- print.cpp | 151 +++++++++++++++++++++++++++++++++++++------------ 3 files changed, 133 insertions(+), 105 deletions(-) diff --git a/basicsubs.cpp b/basicsubs.cpp index adac2736..1f3b83e8 100644 --- a/basicsubs.cpp +++ b/basicsubs.cpp @@ -262,8 +262,9 @@ calc_SC(void) { class species *s_ptr; 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; + 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); bool Falk = false; s_ptr = s_search("H+"); @@ -347,9 +348,9 @@ calc_SC(void) if (correct_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 *= 1e3 * Dw_SC; SC += s_x[i]->dw_t_SC; } - SC *= 1e7 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298150.0); return (SC); } else @@ -364,7 +365,7 @@ calc_SC(void) 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 */ - 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; SC = 0; @@ -432,7 +433,7 @@ calc_SC(void) mu_min = 3 * m_min * (z_min - 1) + m_min; 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(); 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) 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; - 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 { @@ -520,11 +522,11 @@ calc_SC(void) a = (lz > 0 ? mu_plus / (eq_plus * a2) : mu_min / (eq_min * a2)); t1 *= s_x[i]->moles * l_z * l_z / a; t1 *= ll_SC; - s_x[i]->dw_t_SC = t1 / (1e3 * Dw_SC); + s_x[i]->dw_t_SC = t1; SC += t1; } } - return SC; + return SC; } } @@ -1270,8 +1272,7 @@ calc_t_sc(const char* name) calc_SC(); if (!SC) return (0); - LDBLE t = s_ptr->dw_t_SC * 1e7 * F_C_MOL * F_C_MOL / (R_KJ_DEG_MOL * 298150.0); - return (t / SC); + return s_ptr->dw_t_SC / SC; } return (0); } diff --git a/class_main.cpp b/class_main.cpp index 79e6475f..abd19625 100644 --- a/class_main.cpp +++ b/class_main.cpp @@ -224,6 +224,7 @@ main_method(int argc, char *argv[]) } #ifdef NPP #ifdef DOS + SetConsoleOutputCP(CP_UTF8); write_banner(); #endif #else @@ -295,64 +296,6 @@ main_method(int argc, char *argv[]) return 0; } #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:: write_banner(void) @@ -370,7 +313,11 @@ write_banner(void) " ║ ║\n"); /* version */ +#ifdef NPP + len = snprintf(buffer, sizeof(buffer), "* PHREEQC-%s *", "3.8.7"); +#else len = snprintf(buffer, sizeof(buffer), "* PHREEQC-%s *", "@VERSION@"); +#endif indent = (44 - len) / 2; screen_msg(sformatf("%14c║%*c%s%*c║\n", ' ', indent, ' ', buffer, 44 - indent - len, ' ')); @@ -390,7 +337,11 @@ write_banner(void) /* date */ +#ifdef NPP + len = snprintf(buffer, sizeof(buffer), "%s", "February 25, 2025"); +#else len = snprintf(buffer, sizeof(buffer), "%s", "@VER_DATE@"); +#endif indent = (44 - len) / 2; screen_msg(sformatf("%14c║%*c%s%*c║\n", ' ', indent, ' ', buffer, 44 - indent - len, ' ')); @@ -400,7 +351,6 @@ write_banner(void) #endif return 0; } -#endif /* ---------------------------------------------------------------------- */ int Phreeqc:: diff --git a/print.cpp b/print.cpp index 4aa70fb6..35fd1998 100644 --- a/print.cpp +++ b/print.cpp @@ -1469,35 +1469,70 @@ print_species(void) if (pr.species == FALSE || pr.all == FALSE) return (OK); min = -1000; - print_centered("Distribution of species"); -/* - * Heading for species - */ +#ifdef NPP + print_centered("Distribution and properties of 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")); + output_msg(sformatf("%40s%10s\n", "MacInnes", "MacInnes")); + output_msg(sformatf(" %-13s%11s%13s%9s%10s%10s%8s\n", + "Species", "Molality", "Activity", "Gamma", "mole V", "f_VISC¹", "t_SC²")); } else { - output_msg(sformatf("%60s%10s\n", "Unscaled", "Unscaled")); - output_msg(sformatf("%40s%10s%10s%10s%10s\n", - "Unscaled", "Log", "Log", "Log", "mole V")); + output_msg(sformatf("%40s%10s\n", "Unscaled", "Unscaled")); + output_msg(sformatf(" %-13s%11s%13s%9s%10s%10s%8s\n", + "Species", "Molality", "Activity", "Gamma", "mole V", "f_VISC¹", "t_SC²")); } } 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 - output_msg(sformatf(" %-13s%12s%12s%10s%10s%10s%11s\n\n", "Species", - "Molality", "Activity", "Molality", "Activity", "Gamma", "cm³/mol")); + print_centered("Distribution of species"); +/* + * 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 /* * Print list of species @@ -1506,9 +1541,9 @@ print_species(void) name = s_hplus->secondary->elt->name; 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) continue; if (species_list[i].s->type == SURF) @@ -1523,14 +1558,14 @@ print_species(void) master_ptr = species_list[i].master_s->primary; 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) { name = name1; 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; if (min > 0) { @@ -1541,9 +1576,9 @@ print_species(void) min = -1000.; } } -/* - * Print species data - */ + /* + * Print species data + */ if (species_list[i].s->lm > min) { if (species_list[i].s == s_h2o) @@ -1554,25 +1589,67 @@ print_species(void) { 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( - " %-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)); + " %-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] || !strcmp(species_list[i].s->name, "H+")) if (species_list[i].s->logk[vm_tc] || species_list[i].s == s_hplus) - output_msg(sformatf("%10.2f\n", - (double) species_list[i].s->logk[vm_tc])); + output_msg(sformatf("%10.2f\n", (double)species_list[i].s->logk[vm_tc])); else output_msg(sformatf(" (0) \n")); +#endif } } 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); } /* ---------------------------------------------------------------------- */