371 double liters = Volume; |
371 double liters = Volume; |
372 double alpha = Alpha / 100.0; |
372 double alpha = Alpha / 100.0; |
373 double mass = Amount * 1000.0; |
373 double mass = Amount * 1000.0; |
374 double time = Boiltime; |
374 double time = Boiltime; |
375 |
375 |
376 if ((Use == HOP_USEAT_AROMA) || (Use == HOP_USEAT_WHIRLPOOL) || (Use == HOP_USEAT_DRY_HOP)) { |
376 if ((Use == HOP_USEAT_AROMA) || (Use == HOP_USEAT_WHIRLPOOL) || (Use == HOP_USEAT_DRY_HOP) || (Use == HOP_USEAT_BOTTLING)) { |
377 fmoment = 0.0; |
377 fmoment = 0.0; |
378 } else if (Use == HOP_USEAT_MASH) { |
378 } else if (Use == HOP_USEAT_MASH) { |
379 fmoment += my_factor_mashhop / 100.0; // Brouwhulp |
379 fmoment += my_factor_mashhop / 100.0; // Brouwhulp |
380 time = Fulltime; // Take the full boiltime |
380 time = Fulltime; // Take the full boiltime |
381 } else if (Use == HOP_USEAT_FWH) { |
381 } else if (Use == HOP_USEAT_FWH) { |
389 pfactor += my_factor_plug / 100.0; |
389 pfactor += my_factor_plug / 100.0; |
390 } else if (Form == HOP_FORMS_LEAF_WET) { |
390 } else if (Form == HOP_FORMS_LEAF_WET) { |
391 pfactor += my_factor_wethop / 100.0; // From https://github.com/chrisgilmerproj/brewday/blob/master/brew/constants.py |
391 pfactor += my_factor_wethop / 100.0; // From https://github.com/chrisgilmerproj/brewday/blob/master/brew/constants.py |
392 } else if (Form == HOP_FORMS_CRYO) { |
392 } else if (Form == HOP_FORMS_CRYO) { |
393 pfactor += my_factor_cryohop / 100.0; |
393 pfactor += my_factor_cryohop / 100.0; |
|
394 } else if (Form == HOP_FORMS_EXTRACT) { |
|
395 // Nothing for now. |
394 } |
396 } |
395 |
397 |
396 // Ideas from Zymurgy March-April 2018. These are not exact formulas! |
398 // Ideas from Zymurgy March-April 2018. These are not exact formulas! |
397 double whirlibus = 0.0; |
399 double whirlibus = 0.0; |
398 if (Use == HOP_USEAT_AROMA) { |
400 if (Use == HOP_USEAT_AROMA) { |
454 |
456 |
455 double Utils::hopFlavourContribution(double bt, double vol, int use, double amount) |
457 double Utils::hopFlavourContribution(double bt, double vol, int use, double amount) |
456 { |
458 { |
457 double result; |
459 double result; |
458 |
460 |
459 if (use == 4 || use == 5) // Whirlpool or Dry-hop |
461 if (use == HOP_USEAT_WHIRLPOOL || use == HOP_USEAT_DRY_HOP) |
460 return 0; |
462 return 0; |
461 if (use == 1) { // First wort |
463 if (use == HOP_USEAT_FWH) { |
462 result = 0.15; // assume 15% flavourcontribution for fwh |
464 result = 0.15; // assume 15% flavourcontribution for fwh |
463 } else if (bt > 50) { |
465 } else if (bt > 50) { |
464 result = 0.10; // assume 10% flavourcontribution as a minimum |
466 result = 0.10; // assume 10% flavourcontribution as a minimum |
465 } else { |
467 } else { |
466 result = 15.25 / (6 * sqrt(2 * 3.1416)) * exp(-0.5 * pow((bt - 21.0) / 6.0, 2.0)); |
468 result = 15.25 / (6 * sqrt(2 * 3.1416)) * exp(-0.5 * pow((bt - 21.0) / 6.0, 2.0)); |
473 |
475 |
474 double Utils::hopAromaContribution(double bt, double vol, int use, double amount) |
476 double Utils::hopAromaContribution(double bt, double vol, int use, double amount) |
475 { |
477 { |
476 double result = 0.0; |
478 double result = 0.0; |
477 |
479 |
478 if (use == 5) { // Dry hop |
480 if (use == HOP_USEAT_DRY_HOP) { |
479 result = 1.33; |
481 result = 1.33; |
480 } else if (use == 4) { // Whirlpool |
482 } else if (use == HOP_USEAT_WHIRLPOOL) { |
481 if (bt > 30) |
483 if (bt > 30) |
482 bt = 30; // Max 30 minutes |
484 bt = 30; // Max 30 minutes |
483 result = 0.62 * bt / 30.0; |
485 result = 0.62 * bt / 30.0; |
484 } else if (bt > 20) { |
486 } else if (bt > 20) { |
485 result = 0.0; |
487 result = 0.0; |
486 } else if (bt > 7.5) { |
488 } else if (bt > 7.5) { |
487 result = 10.03 / (4 * sqrt(2 * 3.1416)) * exp(-0.5 * pow((bt - 7.5) / 4.0, 2.0)); |
489 result = 10.03 / (4 * sqrt(2 * 3.1416)) * exp(-0.5 * pow((bt - 7.5) / 4.0, 2.0)); |
488 } else if (use == 2) { // Boil |
490 } else if (use == HOP_USEAT_BOIL) { // Boil |
489 result = 1; |
491 result = 1; |
490 } else if (use == 3) { // Aroma |
492 } else if (use == HOP_USEAT_AROMA) { // Aroma |
491 result = 1.2; |
493 result = 1.2; |
492 } |
494 } |
493 return (result * amount * 1000.0) / vol; |
495 return (result * amount * 1000.0) / vol; |
494 } |
496 } |
495 |
497 |