refactor: replace preprocessor constants by constexpr for type-safety and other problems

This commit is contained in:
Max Lübke 2024-11-07 14:07:33 +01:00
parent fc9057c2f9
commit 7bb4852cab
3 changed files with 24 additions and 19 deletions

View File

@ -1,4 +1,5 @@
#include "Phreeqc.h"
#include "global_structures.h"
#include "phqalloc.h"
#include "Utils.h"
@ -173,15 +174,15 @@ sa_declercq(double sa_type, double Sa, double d, double m, double m0, double gfw
double mass0 = m0 * gfw;
double V0 = mass0 / d; // volume
double St0 = mass0 * Sa; // total surface
double a0 = pow(3.0 * V0/(4.0 * pi), 1.0/3.0); // ((3*V0)/(4 * 3.14159265359))^(1/3)
double Sp0 = (4.0 * pi) * a0 * a0; // surface particle
double a0 = pow(3.0 * V0/(4.0 * piConstant), 1.0/3.0); // ((3*V0)/(4 * 3.14159265359))^(1/3)
double Sp0 = (4.0 * piConstant) * a0 * a0; // surface particle
double np = St0 / Sp0; // number of particles
double RATS = Sa / St0;
double mass = m * gfw;
double V = mass / d;
double a = pow(3.0 * V/(4.0 * pi), 1.0/3.0); //((3*V)/(4 * 3.14159265359))^(1/3)
double St = 4.0 * pi * a * a * np;
double a = pow(3.0 * V/(4.0 * piConstant), 1.0/3.0); //((3*V)/(4 * 3.14159265359))^(1/3)
double St = 4.0 * piConstant * a * a * np;
return St * RATS; // total current surface
}
error_string = sformatf( "Unknown surface area type in SA_DECLERCQ %d.", (int) sa_type);
@ -421,7 +422,7 @@ calc_SC(void)
sqrt_q = sqrt(q);
// B1 = relaxtion, B2 = electrophoresis in ll = (ll0 - B2 * sqrt(mu) / f2(1 + ka)) * (1 - B1 * sqrt(mu) / f1(1 + ka))
a = 1.60218e-19 * 1.60218e-19 / (6 * pi);
a = 1.60218e-19 * 1.60218e-19 / (6 * piConstant);
B1 = a / (2 * 8.8542e-12 * eps_r * 1.38066e-23 * tk_x) * q / (1 + sqrt_q) * DH_B * 1e10 * z_plus * z_min; // DH_B is per Angstrom (*1e10)
B2 = a * AVOGADRO / viscos_0 * DH_B * 1e17; // DH_B per Angstrom (*1e10), viscos in mPa.s (*1e3), B2 in cm2 (*1e4)
//B1 = a / (2 * 8.8542e-12 * eps_c * 1.38066e-23 * tk_x) * q / (1 + sqrt_q) * DH_B * 1e10 * z_plus * z_min; // DH_B is per Angstrom (*1e10)

View File

@ -17,19 +17,22 @@
#define MISSING -9999.999
#include "NA.h" /* NA = not available */
#define F_C_MOL 96493.5 /* C/mol or joule/volt-eq */
#define F_KJ_V_EQ 96.4935 /* kJ/volt-eq */
#define F_KCAL_V_EQ 23.0623 /* kcal/volt-eq */
#define R_LITER_ATM 0.0820597 /* L-atm/deg-mol */
#define R_KCAL_DEG_MOL 0.00198726 /* kcal/deg-mol */
#define R_KJ_DEG_MOL 0.00831470 /* kJ/deg-mol */
#define EPSILON 78.5 /* dialectric constant, dimensionless. Is calculated as eps_r(P, T) in calc_dielectrics. Update the code?? */
#define EPSILON_ZERO 8.854e-12 /* permittivity of free space, C/V-m = C**2/m-J */
#define JOULES_PER_CALORIE 4.1840
#define PASCAL_PER_ATM 1.01325E5 /* conversion from atm to Pa */
#define AVOGADRO 6.02252e23 /* atoms / mole */
#define pi 3.14159265358979
#define AH2O_FACTOR 0.017
constexpr double F_C_MOL = 96493.5; /* C/mol or joule/volt-eq */
constexpr double F_KJ_V_EQ = 96.4935; /* kJ/volt-eq */
constexpr double F_KCAL_V_EQ = 23.0623; /* kcal/volt-eq */
constexpr double R_LITER_ATM = 0.0820597; /* L-atm/deg-mol */
constexpr double R_KCAL_DEG_MOL = 0.00198726; /* kcal/deg-mol */
constexpr double R_KJ_DEG_MOL = 0.00831470; /* kJ/deg-mol */
constexpr double EPSILON =
78.5; /* dialectric constant, dimensionless. Is calculated as eps_r(P, T) in
calc_dielectrics. Update the code?? */
constexpr double EPSILON_ZERO =
8.854e-12; /* permittivity of free space, C/V-m = C**2/m-J */
constexpr double JOULES_PER_CALORIE = 4.1840;
constexpr double PASCAL_PER_ATM = 1.01325E5; /* conversion from atm to Pa */
constexpr double AVOGADRO = 6.02252e23; /* atoms / mole */
constexpr double AH2O_FACTOR = 0.017;
constexpr double piConstant = 3.14159265358979;
#define TRUE 1
#define FALSE 0

View File

@ -1,5 +1,6 @@
#include "Utils.h"
#include "Phreeqc.h"
#include "global_structures.h"
#include "phqalloc.h"
#include "NameDouble.h"
#include "Exchange.h"
@ -111,7 +112,7 @@ calc_dielectrics(LDBLE tc, LDBLE pa)
= 1.671008e-3 (esu^2 / (erg/K)) / (eps_r * T) */
LDBLE e2_DkT = 1.671008e-3 / (eps_r * T);
DH_B = sqrt(8 * pi * AVOGADRO * e2_DkT * rho_0 / 1e3); // Debye length parameter, 1/cm(mol/kg)^-0.5
DH_B = sqrt(8 * piConstant * AVOGADRO * e2_DkT * rho_0 / 1e3); // Debye length parameter, 1/cm(mol/kg)^-0.5
DH_A = DH_B * e2_DkT / (2. * LOG_10); //(mol/kg)^-0.5