468 * Based on the work of ajDeLange. |
468 * Based on the work of ajDeLange. |
469 */ |
469 */ |
470 void EditProduct::calcSparge() |
470 void EditProduct::calcSparge() |
471 { |
471 { |
472 double TargetpH = product->sparge_ph; |
472 double TargetpH = product->sparge_ph; |
473 double Source_pH = product->w1_ph; |
473 double Source_pH = 7.0; |
474 double Source_alkalinity = product->w1_total_alkalinity; |
|
475 |
474 |
476 qDebug() << "calcSparge()"; |
475 qDebug() << "calcSparge()"; |
477 |
|
478 setButtons(product->stage > PROD_STAGE_BREW); |
476 setButtons(product->stage > PROD_STAGE_BREW); |
479 |
477 |
480 if (product->sparge_source == 1 && product->w2_ph > 0.0) { |
478 if (product->sparge_source == 1 && product->w2_ph > 0.0) { |
|
479 product->ws_calcium = product->w2_calcium; |
|
480 product->ws_magnesium = product->w2_magnesium; |
|
481 product->ws_total_alkalinity = product->w2_total_alkalinity; |
|
482 product->ws_sodium = product->w2_sodium; |
|
483 product->ws_chloride = product->w2_chloride; |
|
484 product->ws_sulfate = product->w2_sulfate; |
481 Source_pH = product->w2_ph; |
485 Source_pH = product->w2_ph; |
482 Source_alkalinity = product->w2_total_alkalinity; |
|
483 ui->sp_caEdit->setValue(product->w2_calcium); |
|
484 ui->sp_mgEdit->setValue(product->w2_magnesium); |
|
485 ui->sp_hco3Edit->setValue(Utils::Bicarbonate(product->w2_total_alkalinity, product->w2_ph)); |
|
486 ui->sp_caco3Edit->setValue(product->w2_total_alkalinity); |
|
487 ui->sp_naEdit->setValue(product->w2_sodium); |
|
488 ui->sp_clEdit->setValue(product->w2_chloride); |
|
489 ui->sp_so4Edit->setValue(product->w2_sulfate); |
|
490 ui->sp_phShow->setValue(product->w2_ph); |
|
491 ui->sp_hardnessEdit->setValue(Utils::Hardness(product->w2_calcium, product->w2_magnesium)); |
|
492 ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(product->w2_total_alkalinity, product->w2_calcium, product->w2_magnesium)); |
|
493 } else if (product->sparge_source == 2 && product->w2_ph > 0.0) { |
486 } else if (product->sparge_source == 2 && product->w2_ph > 0.0) { |
|
487 product->ws_calcium = product->wg_calcium; |
|
488 product->ws_magnesium = product->wg_magnesium; |
|
489 product->ws_total_alkalinity = product->wg_total_alkalinity; |
|
490 product->ws_sodium = product->wg_sodium; |
|
491 product->ws_chloride = product->wg_chloride; |
|
492 product->ws_sulfate = product->wg_sulfate; |
494 Source_pH = product->wg_ph; |
493 Source_pH = product->wg_ph; |
495 Source_alkalinity = product->wg_total_alkalinity; |
|
496 ui->sp_caEdit->setValue(product->wg_calcium); |
|
497 ui->sp_mgEdit->setValue(product->wg_magnesium); |
|
498 ui->sp_hco3Edit->setValue(Utils::Bicarbonate(product->wg_total_alkalinity, product->wg_ph)); |
|
499 ui->sp_caco3Edit->setValue(product->wg_total_alkalinity); |
|
500 ui->sp_naEdit->setValue(product->wg_sodium); |
|
501 ui->sp_clEdit->setValue(product->wg_chloride); |
|
502 ui->sp_so4Edit->setValue(product->wg_sulfate); |
|
503 ui->sp_phShow->setValue(product->wg_ph); |
|
504 ui->sp_hardnessEdit->setValue(Utils::Hardness(product->wg_calcium, product->wg_magnesium)); |
|
505 ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(product->wg_total_alkalinity, product->wg_calcium, product->wg_magnesium)); |
|
506 } else { |
494 } else { |
507 ui->sp_caEdit->setValue(product->w1_calcium); |
495 product->ws_calcium = product->w1_calcium; |
508 ui->sp_mgEdit->setValue(product->w1_magnesium); |
496 product->ws_magnesium = product->w1_magnesium; |
509 ui->sp_hco3Edit->setValue(Utils::Bicarbonate(product->w1_total_alkalinity, product->w1_ph)); |
497 product->ws_total_alkalinity = product->w1_total_alkalinity; |
510 ui->sp_caco3Edit->setValue(product->w1_total_alkalinity); |
498 product->ws_sodium = product->w1_sodium; |
511 ui->sp_naEdit->setValue(product->w1_sodium); |
499 product->ws_chloride = product->w1_chloride; |
512 ui->sp_clEdit->setValue(product->w1_chloride); |
500 product->ws_sulfate = product->w1_sulfate; |
513 ui->sp_so4Edit->setValue(product->w1_sulfate); |
501 Source_pH = product->w1_ph; |
514 ui->sp_phShow->setValue(product->w1_ph); |
502 } |
515 ui->sp_hardnessEdit->setValue(Utils::Hardness(product->w1_calcium, product->w1_magnesium)); |
503 |
516 ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(product->w1_total_alkalinity, product->w1_calcium, product->w1_magnesium)); |
504 /* Calculate Salt additions */ |
517 } |
505 if (product->sparge_volume > 0) { |
518 // The spargewater is set. |
506 product->ws_calcium += ( ui->ss_cacl2Edit->value() * MMCa / MMCaCl2 * 1000 + ui->ss_caso4Edit->value() * MMCa / MMCaSO4 * 1000) / product->sparge_volume; |
|
507 product->ws_magnesium += (ui->ss_mgso4Edit->value() * MMMg / MMMgSO4 * 1000 + ui->ss_mgcl2Edit->value() * MMMg / MMMgCl2 * 1000) / product->sparge_volume; |
|
508 product->ws_sodium += (ui->ss_naclEdit->value() * MMNa / MMNaCl * 1000) / product->sparge_volume; |
|
509 product->ws_sulfate += (ui->ss_caso4Edit->value() * MMSO4 / MMCaSO4 * 1000 + ui->ss_mgso4Edit->value() * MMSO4 / MMMgSO4 * 1000) / product->sparge_volume; |
|
510 product->ws_chloride += (2 * ui->ss_cacl2Edit->value() * MMCl / MMCaCl2 * 1000 + ui->ss_naclEdit->value() * MMCl / MMNaCl * 1000 + |
|
511 ui->ss_mgcl2Edit->value() * MMCl / MMMgCl2 * 1000) / product->sparge_volume; |
|
512 } |
|
513 |
|
514 /* Show the spargewater with salt additions. */ |
|
515 ui->sp_caEdit->setValue(product->ws_calcium); |
|
516 ui->sp_mgEdit->setValue(product->ws_magnesium); |
|
517 ui->sp_hco3Edit->setValue(Utils::Bicarbonate(product->ws_total_alkalinity, Source_pH)); |
|
518 ui->sp_caco3Edit->setValue(product->ws_total_alkalinity); |
|
519 ui->sp_naEdit->setValue(product->ws_sodium); |
|
520 ui->sp_clEdit->setValue(product->ws_chloride); |
|
521 ui->sp_so4Edit->setValue(product->ws_sulfate); |
|
522 ui->sp_phShow->setValue(product->sparge_ph); |
|
523 ui->sp_hardnessEdit->setValue(Utils::Hardness(product->ws_calcium, product->ws_magnesium)); |
|
524 ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(product->ws_total_alkalinity, product->ws_calcium, product->ws_magnesium)); |
519 |
525 |
520 int AT = product->sparge_acid_type; |
526 int AT = product->sparge_acid_type; |
521 if (AT < 0 || AT >= my_acids.size()) { |
527 if (AT < 0 || AT >= my_acids.size()) { |
522 AT = 0; |
528 AT = 0; |
523 product->sparge_acid_type = 0; |
529 product->sparge_acid_type = 0; |
579 QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl; |
585 QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl; |
580 brewing_salt_sub(w, Acid, MISC_USES_SPARGE); // Put it in the miscs table. |
586 brewing_salt_sub(w, Acid, MISC_USES_SPARGE); // Put it in the miscs table. |
581 ui->sp_acidvolEdit->setValue(Acid); |
587 ui->sp_acidvolEdit->setValue(Acid); |
582 } |
588 } |
583 |
589 |
584 ui->sp_phShow->setValue(product->sparge_ph); |
590 // ui->sp_phShow->setValue(product->sparge_ph); |
585 // Finally calculate the estimate preboil pH |
591 // Finally calculate the estimate preboil pH |
586 product->est_preboil_ph = -log10(((pow(10, -product->mash_ph) * product->wg_amount) + (pow(10, -product->sparge_ph) * product->brew_sparge_est)) / |
592 product->est_preboil_ph = -log10(((pow(10, -product->mash_ph) * product->wg_amount) + (pow(10, -product->sparge_ph) * product->brew_sparge_est)) / |
587 (product->wg_amount + product->brew_sparge_est)); |
593 (product->wg_amount + product->brew_sparge_est)); |
588 ui->preboil_phEdit->setValue(product->est_preboil_ph); |
594 ui->preboil_phEdit->setValue(product->est_preboil_ph); |
589 ui->brew_preboilphShow->setValue(product->est_preboil_ph); |
595 ui->brew_preboilphShow->setValue(product->est_preboil_ph); |