Moved the mix function to Utils. Added some calculations to Utils. Added defines to global.h.

Thu, 14 Apr 2022 22:47:05 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 14 Apr 2022 22:47:05 +0200
changeset 134
5099df8ba6c6
parent 133
08635b028dcf
child 135
e68b27ad8a40

Moved the mix function to Utils. Added some calculations to Utils. Added defines to global.h.

src/EditRecipe.h file | annotate | diff | comparison | revisions
src/EditRecipeTab7.cpp file | annotate | diff | comparison | revisions
src/Utils.cpp file | annotate | diff | comparison | revisions
src/Utils.h file | annotate | diff | comparison | revisions
src/global.h file | annotate | diff | comparison | revisions
--- 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();
 };
 
--- 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;
--- 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));
+}
+
--- 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 <QString>
 #include <QColor>
 
+// #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
--- 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 <QList>
 #include <QString>
 
+
+#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;

mercurial