src/EditRecipeTab7.cpp

changeset 365
4bc746c65650
parent 361
ec8de79f6ff6
child 395
7212b980a527
--- a/src/EditRecipeTab7.cpp	Tue Jul 19 16:00:52 2022 +0200
+++ b/src/EditRecipeTab7.cpp	Wed Jul 20 12:44:02 2022 +0200
@@ -470,51 +470,58 @@
 void EditRecipe::calcSparge()
 {
     double TargetpH = recipe->sparge_ph;
-    double Source_pH = recipe->w1_ph;
-    double Source_alkalinity = recipe->w1_total_alkalinity;
+    double Source_pH = 7.0;
 
     qDebug() << "calcSparge()";
     setButtons(recipe->locked);
 
     if (recipe->sparge_source == 1 && recipe->w2_ph > 0.0) {
-	Source_pH = recipe->w2_ph;
-	Source_alkalinity = recipe->w2_total_alkalinity;
-	ui->sp_caEdit->setValue(recipe->w2_calcium);
-        ui->sp_mgEdit->setValue(recipe->w2_magnesium);
-        ui->sp_hco3Edit->setValue(Utils::Bicarbonate(recipe->w2_total_alkalinity, recipe->w2_ph));
-        ui->sp_caco3Edit->setValue(recipe->w2_total_alkalinity);
-        ui->sp_naEdit->setValue(recipe->w2_sodium);
-        ui->sp_clEdit->setValue(recipe->w2_chloride);
-        ui->sp_so4Edit->setValue(recipe->w2_sulfate);
-        ui->sp_phShow->setValue(recipe->w2_ph);
-        ui->sp_hardnessEdit->setValue(Utils::Hardness(recipe->w2_calcium, recipe->w2_magnesium));
-        ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(recipe->w2_total_alkalinity, recipe->w2_calcium, recipe->w2_magnesium));
+	recipe->ws_calcium = recipe->w2_calcium;
+        recipe->ws_magnesium = recipe->w2_magnesium;
+        recipe->ws_total_alkalinity = recipe->w2_total_alkalinity;
+        recipe->ws_sodium = recipe->w2_sodium;
+        recipe->ws_chloride = recipe->w2_chloride;
+        recipe->ws_sulfate = recipe->w2_sulfate;
+        Source_pH = recipe->w2_ph;
     } else if (recipe->sparge_source == 2 && recipe->w2_ph > 0.0) {
-	Source_pH = recipe->wg_ph;
-	Source_alkalinity = recipe->wg_total_alkalinity;
-	ui->sp_caEdit->setValue(recipe->wg_calcium);
-	ui->sp_mgEdit->setValue(recipe->wg_magnesium);
-	ui->sp_hco3Edit->setValue(Utils::Bicarbonate(recipe->wg_total_alkalinity, recipe->wg_ph));
-	ui->sp_caco3Edit->setValue(recipe->wg_total_alkalinity);
-	ui->sp_naEdit->setValue(recipe->wg_sodium);
-	ui->sp_clEdit->setValue(recipe->wg_chloride);
-	ui->sp_so4Edit->setValue(recipe->wg_sulfate);
-	ui->sp_phShow->setValue(recipe->wg_ph);
-	ui->sp_hardnessEdit->setValue(Utils::Hardness(recipe->wg_calcium, recipe->wg_magnesium));
-	ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(recipe->wg_total_alkalinity, recipe->wg_calcium, recipe->wg_magnesium));
+	recipe->ws_calcium = recipe->wg_calcium;
+        recipe->ws_magnesium = recipe->wg_magnesium;
+        recipe->ws_total_alkalinity = recipe->wg_total_alkalinity;
+        recipe->ws_sodium = recipe->wg_sodium;
+        recipe->ws_chloride = recipe->wg_chloride;
+        recipe->ws_sulfate = recipe->wg_sulfate;
+        Source_pH = recipe->wg_ph;
     } else {
-	ui->sp_caEdit->setValue(recipe->w1_calcium);
-	ui->sp_mgEdit->setValue(recipe->w1_magnesium);
-	ui->sp_hco3Edit->setValue(Utils::Bicarbonate(recipe->w1_total_alkalinity, recipe->w1_ph));
-	ui->sp_caco3Edit->setValue(recipe->w1_total_alkalinity);
-	ui->sp_naEdit->setValue(recipe->w1_sodium);
-	ui->sp_clEdit->setValue(recipe->w1_chloride);
-	ui->sp_so4Edit->setValue(recipe->w1_sulfate);
-	ui->sp_phShow->setValue(recipe->w1_ph);
-	ui->sp_hardnessEdit->setValue(Utils::Hardness(recipe->w1_calcium, recipe->w1_magnesium));
-	ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(recipe->w1_total_alkalinity, recipe->w1_calcium, recipe->w1_magnesium));
+	recipe->ws_calcium = recipe->w1_calcium;
+	recipe->ws_magnesium = recipe->w1_magnesium;
+	recipe->ws_total_alkalinity = recipe->w1_total_alkalinity;
+	recipe->ws_sodium = recipe->w1_sodium;
+	recipe->ws_chloride = recipe->w1_chloride;
+	recipe->ws_sulfate = recipe->w1_sulfate;
+	Source_pH = recipe->w1_ph;
     }
-    // The spargewater is set.
+
+    /* Calculate Salt additions */
+    if (recipe->sparge_volume > 0) {
+	recipe->ws_calcium += ( ui->ss_cacl2Edit->value() * MMCa / MMCaCl2 * 1000 + ui->ss_caso4Edit->value() * MMCa / MMCaSO4 * 1000) / recipe->sparge_volume;
+	recipe->ws_magnesium += (ui->ss_mgso4Edit->value() * MMMg / MMMgSO4 * 1000 + ui->ss_mgcl2Edit->value() * MMMg / MMMgCl2 * 1000) / recipe->sparge_volume;
+	recipe->ws_sodium += (ui->ss_naclEdit->value() * MMNa / MMNaCl * 1000) / recipe->sparge_volume;
+	recipe->ws_sulfate += (ui->ss_caso4Edit->value() * MMSO4 / MMCaSO4 * 1000 + ui->ss_mgso4Edit->value() * MMSO4 / MMMgSO4 * 1000) / recipe->sparge_volume;
+	recipe->ws_chloride += (2 * ui->ss_cacl2Edit->value() * MMCl / MMCaCl2 * 1000 + ui->ss_naclEdit->value() * MMCl / MMNaCl * 1000 +
+				ui->ss_mgcl2Edit->value() * MMCl / MMMgCl2 * 1000) / recipe->sparge_volume;
+    }
+
+    /* Show the spargewater with salt additions. */
+    ui->sp_caEdit->setValue(recipe->ws_calcium);
+    ui->sp_mgEdit->setValue(recipe->ws_magnesium);
+    ui->sp_hco3Edit->setValue(Utils::Bicarbonate(recipe->ws_total_alkalinity, Source_pH));
+    ui->sp_caco3Edit->setValue(recipe->ws_total_alkalinity);
+    ui->sp_naEdit->setValue(recipe->ws_sodium);
+    ui->sp_clEdit->setValue(recipe->ws_chloride);
+    ui->sp_so4Edit->setValue(recipe->ws_sulfate);
+    ui->sp_phShow->setValue(recipe->sparge_ph);
+    ui->sp_hardnessEdit->setValue(Utils::Hardness(recipe->ws_calcium, recipe->ws_magnesium));
+    ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(recipe->ws_total_alkalinity, recipe->ws_calcium, recipe->ws_magnesium));
 
     int AT = recipe->sparge_acid_type;
     if (AT < 0 || AT >= my_acids.size()) {
@@ -544,7 +551,7 @@
     	double f343 = r143 * r243 / d43;
 
     	// Step 4. Solve
-    	double Ct = Source_alkalinity / 50 / ((f143 - f1) + (f3 - f343));
+    	double Ct = recipe->ws_total_alkalinity / 50 / ((f143 - f1) + (f3 - f343));
 
     	// Step 5. Compute mole fractions at desired pH
     	double r1g = pow(10, TargetpH - 6.35);
@@ -578,7 +585,6 @@
     	ui->sp_acidvolEdit->setValue(Acid);
     }
 
-    ui->sp_phShow->setValue(recipe->sparge_ph);
     // Finally calculate the estimate preboil pH
     recipe->preboil_ph = -log10(((pow(10, -recipe->mash_ph) * recipe->wg_amount) + (pow(10, -recipe->sparge_ph) * recipe->sparge_volume)) /
                              (recipe->wg_amount + recipe->sparge_volume));
@@ -629,6 +635,20 @@
 }
 
 
+void EditRecipe::sp_vol_changed(double val)
+{
+    if (! recipe->calc_acid) {
+	recipe->sparge_acid_amount *= val / recipe->sparge_volume;
+	const QSignalBlocker blocker1(ui->sp_acidvolEdit);
+	ui->sp_acidvolEdit->setValue(recipe->sparge_acid_amount * 1000.0);
+    }
+
+    recipe->sparge_volume = val;
+    calcSparge();
+    is_changed();
+}
+
+
 void EditRecipe::sp_acid_changed(double val)
 {
     if (recipe->calc_acid)

mercurial