mirror of
https://git.gfz-potsdam.de/naaice/iphreeqc.git
synced 2025-12-16 16:44:49 +01:00
Added Basic functions GFW and SOLN_VOL.
Added test case gfw in mytest and added to Makefile git-svn-id: svn://136.177.114.72/svn_GW/phreeqc3/trunk@6796 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
parent
b0b007ca92
commit
ad3e78e2f5
23
PBasic.cpp
23
PBasic.cpp
@ -1522,7 +1522,13 @@ listtokens(FILE * f, tokenrec * l_buf)
|
||||
output_msg("QBrn"); // Q_Born, d(eps_r)/d(P)/(eps_r^2)
|
||||
break;
|
||||
case tokkappa:
|
||||
output_msg("kappa"); // compressibility of pure water, d(rho)/d(P) / rho
|
||||
output_msg("KAPPA"); // compressibility of pure water, d(rho)/d(P) / rho
|
||||
break;
|
||||
case tokgfw:
|
||||
output_msg("GFW"); // gram formula weight of a formula
|
||||
break;
|
||||
case toksoln_vol:
|
||||
output_msg("SOLN_VOL"); // volume of solution
|
||||
break;
|
||||
}
|
||||
l_buf = l_buf->next;
|
||||
@ -3099,6 +3105,17 @@ factor(struct LOC_exec * LINK)
|
||||
case tokkappa:
|
||||
n.UU.val = PhreeqcPtr->kappa_0;
|
||||
break;
|
||||
case tokgfw:
|
||||
{
|
||||
const char * str = stringfactor(STR1, LINK);
|
||||
LDBLE gfw;
|
||||
PhreeqcPtr->compute_gfw(str, &gfw);
|
||||
n.UU.val = (parse_all) ? 1 : gfw;
|
||||
}
|
||||
break;
|
||||
case toksoln_vol:
|
||||
n.UU.val = (parse_all) ? 1 : PhreeqcPtr->calc_solution_volume();
|
||||
break;
|
||||
case toklog10:
|
||||
n.UU.val = log10(realfactor(LINK));
|
||||
break;
|
||||
@ -6407,7 +6424,9 @@ const std::map<const std::string, PBasic::BASIC_TOKEN>::value_type temp_tokens[]
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("dh_b", PBasic::tokdh_b),
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("dh_av", PBasic::tokdh_av),
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("qbrn", PBasic::tokqbrn),
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("kappa", PBasic::tokkappa)
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("kappa", PBasic::tokkappa),
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("gfw", PBasic::tokgfw),
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN>::value_type("soln_vol", PBasic::toksoln_vol)
|
||||
};
|
||||
std::map<const std::string, PBasic::BASIC_TOKEN> PBasic::command_tokens(temp_tokens, temp_tokens + sizeof temp_tokens / sizeof temp_tokens[0]);
|
||||
|
||||
|
||||
4
PBasic.h
4
PBasic.h
@ -308,7 +308,9 @@ public:
|
||||
tokdh_b,
|
||||
tokdh_av,
|
||||
tokqbrn,
|
||||
tokkappa
|
||||
tokkappa,
|
||||
tokgfw,
|
||||
toksoln_vol
|
||||
};
|
||||
|
||||
#if !defined(PHREEQCI_GUI)
|
||||
|
||||
@ -140,6 +140,8 @@ public:
|
||||
|
||||
static LDBLE f_rho(LDBLE rho_old, void *cookie);
|
||||
static LDBLE f_Vm(LDBLE v1, void *cookie);
|
||||
LDBLE calc_solution_volume(void);
|
||||
|
||||
// chart.cpp
|
||||
#if defined PHREEQ98
|
||||
void DeleteCurves(void);
|
||||
@ -1651,7 +1653,6 @@ protected:
|
||||
LDBLE dgdP; // dg / dP, pressure derivative of g-function, for supcrt calc'n of molal volume
|
||||
#endif
|
||||
LDBLE solution_mass, solution_volume;
|
||||
LDBLE f_rho(LDBLE rho_old);
|
||||
|
||||
/* phqalloc.cpp ------------------------------- */
|
||||
PHRQMemHeader *s_pTail;
|
||||
|
||||
@ -395,6 +395,37 @@ f_rho(LDBLE rho_old, void *cookie)
|
||||
return (rho - rho_old);
|
||||
}
|
||||
#endif
|
||||
/* ---------------------------------------------------------------------- */
|
||||
LDBLE Phreeqc::
|
||||
calc_solution_volume(void)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
{
|
||||
/*
|
||||
* Calculates solution volume based on sum of mass of element plus density
|
||||
*/
|
||||
LDBLE total_mass = 0;
|
||||
LDBLE gfw;
|
||||
compute_gfw("H", &gfw);
|
||||
total_mass = total_h_x * gfw;
|
||||
compute_gfw("O", &gfw);
|
||||
total_mass += total_o_x * gfw;
|
||||
|
||||
for (int i = 0; i < count_master; i++)
|
||||
{
|
||||
if (master[i]->s->type != AQ) continue;
|
||||
struct master *master_ptr = master[i];
|
||||
if (master_ptr->primary == TRUE)
|
||||
{
|
||||
total_mass += master_ptr->total_primary * master_ptr->gfw;
|
||||
//if (master_ptr->total_primary > 0)
|
||||
// std::cerr << master_ptr->elt->name << " " << master_ptr->total_primary << "\n";
|
||||
}
|
||||
}
|
||||
LDBLE rho = calc_dens();
|
||||
LDBLE vol = 1e-3 * total_mass / rho;
|
||||
return (vol);
|
||||
|
||||
}
|
||||
/* DP: End function for interval halving */
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -2086,6 +2086,8 @@ print_totals(void)
|
||||
(double) dens));
|
||||
if (dens > 1.999) output_msg(sformatf("%18s\n", " (Program's limit)"));
|
||||
else output_msg(sformatf("\n"));
|
||||
output_msg(sformatf("%45s%9.5f\n", " Volume (L) = ",
|
||||
(double) calc_solution_volume()));
|
||||
}
|
||||
/* VP: Density End */
|
||||
output_msg(sformatf("%45s%7.3f\n", "Activity of water = ",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user