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