# HG changeset patch # User Michiel Broek # Date 1658088881 -7200 # Node ID f60f5a1fece9c3cb87a3d37ffa450bd1133b9e1d # Parent f3318d9d6668f1c5b15107bcee113d2e220a48c8 Made the Hardness function more precise. Removed RA_ppm function, was doubles with ResidualAlkalinity. Added RA_CaCO3 and Bicarbonate functions. diff -r f3318d9d6668 -r f60f5a1fece9 src/Utils.cpp --- a/src/Utils.cpp Sun Jul 17 22:11:30 2022 +0200 +++ b/src/Utils.cpp Sun Jul 17 22:14:41 2022 +0200 @@ -610,14 +610,19 @@ double Utils::Hardness(double calcium, double magnesium) { - return ((calcium / 20) + (magnesium / 12.15)) * 50; + return 2.497 * calcium + 4.164 * magnesium; } -double Utils::RA_ppm(double total_alkalinity, double calcium, double magnesium) +double Utils::Bicarbonate(double total_alkalinity, double ph) { - double alkalinity = total_alkalinity * (1 + (2 * pow(10, -2.33))); - return (alkalinity - ((calcium * 0.7143) + (magnesium * 0.5879))); + return (total_alkalinity / (1 + 2*pow(10, ph - 10.33)) * MMHCO3 /*61.016*/ / (MMCaCO3 / 2) /*50.043*/); +} + + +double Utils::RA_CaCO3(double bicarbonate, double carbonate, double calcium, double magnesium) +{ + return ((bicarbonate / MMHCO3) + (2*carbonate / MMCO3) - (2*calcium / MMCa)/3.5 - (2*magnesium / MMMg)/7) * 50; } diff -r f3318d9d6668 -r f60f5a1fece9 src/Utils.h --- a/src/Utils.h Sun Jul 17 22:11:30 2022 +0200 +++ b/src/Utils.h Sun Jul 17 22:14:41 2022 +0200 @@ -137,10 +137,30 @@ */ double Hardness(double calcium, double magnesium); - double RA_ppm(double total_alkalinity, double calcium, double magnesium); + /** + * @brief Calculate HCO3 (bicarbonate) from the total_alkalinity and ph. + * @param total_alkalinity as ppm + * @param ph the pH + * @return The bicarbonate as HCO3. + */ + double Bicarbonate(double total_alkalinity, double ph); /** - * @brief Return mg/l as CaCO3 + * @brief Return Residual Alkalinity as CaCO3 + * @param bicarbonate as ppm + * @param carbonate CO3 as ppm + * @param calcium as ppm + * @param magnesium as ppm + * @return Residual Alkalinity + */ + double RA_CaCO3(double bicarbonate, double carbonate, double calcium, double magnesium); + + /** + * @brief Return Residual Alkalinity as CaCO3, Paul Kolbach. + * @param total_alkalinity as ppm + * @param calcium as ppm + * @param magnesium as ppm + * @return Residual Alkalinity */ double ResidualAlkalinity(double total_alkalinity, double calcium, double magnesium);