src/EditProductTab8.cpp

changeset 365
4bc746c65650
parent 362
6a615dbae216
child 395
7212b980a527
equal deleted inserted replaced
364:1efe29f64551 365:4bc746c65650
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;
543 double d43 = 1 + r143 + r143 * r243; 549 double d43 = 1 + r143 + r143 * r243;
544 double f143 = 1 / d43; 550 double f143 = 1 / d43;
545 double f343 = r143 * r243 / d43; 551 double f343 = r143 * r243 / d43;
546 552
547 // Step 4. Solve 553 // Step 4. Solve
548 double Ct = Source_alkalinity / 50 / ((f143 - f1) + (f3 - f343)); 554 double Ct = product->ws_total_alkalinity / 50 / ((f143 - f1) + (f3 - f343));
549 555
550 // Step 5. Compute mole fractions at desired pH 556 // Step 5. Compute mole fractions at desired pH
551 double r1g = pow(10, TargetpH - 6.35); 557 double r1g = pow(10, TargetpH - 6.35);
552 double r2g = pow(10, TargetpH - 10.33); 558 double r2g = pow(10, TargetpH - 10.33);
553 double dg = 1 + r1g + r1g * r2g; 559 double dg = 1 + r1g + r1g * r2g;
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);
600 } 606 }
601 607
602 608
603 void EditProduct::sp_volume_changed(double val) 609 void EditProduct::sp_volume_changed(double val)
604 { 610 {
611 if (! product->calc_acid) {
612 product->sparge_acid_amount *= val / product->sparge_volume;
613 const QSignalBlocker blocker1(ui->sp_acidvolEdit);
614 ui->sp_acidvolEdit->setValue(product->sparge_acid_amount * 1000.0);
615 }
616
605 product->sparge_volume = val; 617 product->sparge_volume = val;
606 ui->brew_spargevolShow->setValue(val); 618 ui->brew_spargevolShow->setValue(val);
607 calcSparge(); 619 calcSparge();
608 is_changed(); 620 is_changed();
609 } 621 }

mercurial