# HG changeset patch # User Michiel Broek # Date 1649969225 -7200 # Node ID 5099df8ba6c64d49d754d3792b9a0d59c49f91b1 # Parent 08635b028dcf244f3c01bab3d3de4ef9ef3535f2 Moved the mix function to Utils. Added some calculations to Utils. Added defines to global.h. diff -r 08635b028dcf -r 5099df8ba6c6 src/EditRecipe.h --- a/src/EditRecipe.h Thu Apr 14 21:54:37 2022 +0200 +++ b/src/EditRecipe.h Thu Apr 14 22:47:05 2022 +0200 @@ -352,7 +352,6 @@ void set_brewing_salt(QString salt, double val); void calcFermentables(); void calcIBUs(); - double mix(double v1, double v2, double c1, double c2); void calcWater(); }; diff -r 08635b028dcf -r 5099df8ba6c6 src/EditRecipeTab7.cpp --- a/src/EditRecipeTab7.cpp Thu Apr 14 21:54:37 2022 +0200 +++ b/src/EditRecipeTab7.cpp Thu Apr 14 22:47:05 2022 +0200 @@ -29,15 +29,6 @@ } -double EditRecipe::mix(double v1, double v2, double c1, double c2) -{ - if ((v1 + v2) > 0) { - return ((v1 * c1) + (v2 * c2)) / (v1 + v2); - } - return 0; -} - - void EditRecipe::calcWater() { double liters = 0; @@ -57,12 +48,12 @@ */ if (recipe->w2_name != "") { liters = recipe->w1_amount + recipe->w2_amount; - calcium = mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_calcium, recipe->w2_calcium); - magnesium = mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_magnesium, recipe->w2_magnesium); - sodium = mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sodium, recipe->w2_sodium); - chloride = mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_chloride, recipe->w2_chloride); - sulfate = mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sulfate, recipe->w2_sulfate); - total_alkalinity = mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_total_alkalinity, recipe->w2_total_alkalinity); + calcium = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_calcium, recipe->w2_calcium); + magnesium = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_magnesium, recipe->w2_magnesium); + sodium = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sodium, recipe->w2_sodium); + chloride = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_chloride, recipe->w2_chloride); + sulfate = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sulfate, recipe->w2_sulfate); + total_alkalinity = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_total_alkalinity, recipe->w2_total_alkalinity); ph = -log10(((pow(10, -recipe->w1_ph) * recipe->w1_amount) + (pow(10, -recipe->w2_ph) * recipe->w2_amount)) / liters); } else { liters = recipe->w1_amount; diff -r 08635b028dcf -r 5099df8ba6c6 src/Utils.cpp --- a/src/Utils.cpp Thu Apr 14 21:54:37 2022 +0200 +++ b/src/Utils.cpp Thu Apr 14 22:47:05 2022 +0200 @@ -464,3 +464,37 @@ } +double Utils::mix(double v1, double v2, double c1, double c2) +{ + if ((v1 + v2) > 0) { + return ((v1 * c1) + (v2 * c2)) / (v1 + v2); + } + return 0; +} + + +double Utils::ResidualAlkalinity(double total_alkalinity, double calcium, double magnesium) +{ + return total_alkalinity - (calcium / 1.4 + magnesium / 1.7); +} + + +double Utils::PartCO3(double pH) +{ + double H = pow(10, -pH); + return 100 * Ka1 * Ka2 / (H * H + H * Ka1 + Ka1 * Ka2); +} + + +double Utils::PartHCO3(double pH) +{ + double H = pow(10, -pH); + return 100 * Ka1 * H / (H * H + H * Ka1 + Ka1 * Ka2); +} + + +double Utils::Charge(double pH) +{ + return (-2 * PartCO3(pH) - PartHCO3(pH)); +} + diff -r 08635b028dcf -r 5099df8ba6c6 src/Utils.h --- a/src/Utils.h Thu Apr 14 21:54:37 2022 +0200 +++ b/src/Utils.h Thu Apr 14 22:47:05 2022 +0200 @@ -4,6 +4,9 @@ #include #include +// #define Ka1 0.0000004445 +// #define Ka2 0.0000000000468 + /** * @namespace Utils @@ -61,6 +64,23 @@ * @return A QString with stylesheet colors. */ QString ebc_to_style(int srm); + + /** + * @brief Mix water volumes and ingredients. + * + */ + double mix(double v1, double v2, double c1, double c2); + + /** + * @brief Return mg/l as CaCO3 + */ + double ResidualAlkalinity(double total_alkalinity, double calcium, double magnesium); + + double PartCO3(double pH); + + double PartHCO3(double pH); + + double Charge(double pH); } #endif diff -r 08635b028dcf -r 5099df8ba6c6 src/global.h --- a/src/global.h Thu Apr 14 21:54:37 2022 +0200 +++ b/src/global.h Thu Apr 14 22:47:05 2022 +0200 @@ -4,6 +4,34 @@ #include #include + +#define Ka1 0.0000004445 +#define Ka2 0.0000000000468 + +#define MMCa 40.048 +#define MMMg 24.305 +#define MMNa 22.98976928 +#define MMCl 35.453 +#define MMSO4 96.0626 +#define MMCO3 60.01684 +#define MMHCO3 61.01684 +#define MMCaSO4 172.171 +#define MMCaCl2 147.015 +#define MMCaCO3 100.087 +#define MMMgCl2 95.211 /* Since 27-06-2021 */ +#define MMMgSO4 246.475 +#define MMNaHCO3 84.007 +#define MMNa2CO3 105.996 +#define MMNaCl 58.443 +#define MMCaOH2 74.06268 + +#define SpecificHeatWater 1.0 +#define SpecificHeatMalt 0.399 //cal/g.°C +#define SlakingHeat 10.318 //cal/g.°C +#define eq_tun_weight 2.0 // 2 Kg pot +#define eq_tun_specific_heat 0.110 + + struct Acid { QString name;