www/js/rec_edit.js

changeset 155
041af8a82d77
parent 154
ef298b5aa994
child 156
35860890224c
equal deleted inserted replaced
154:ef298b5aa994 155:041af8a82d77
250 if (amount == 0) { 250 if (amount == 0) {
251 for (var i = 0; i < rows.length; i++) { 251 for (var i = 0; i < rows.length; i++) {
252 var row = rows[i]; 252 var row = rows[i];
253 if (row.m_name == name) { 253 if (row.m_name == name) {
254 var id = $("#miscGrid").jqxGrid('getrowid', i); 254 var id = $("#miscGrid").jqxGrid('getrowid', i);
255 // console.log("name found, erase "+ id);
256 var commit = $("#miscGrid").jqxGrid('deleterow', id); 255 var commit = $("#miscGrid").jqxGrid('deleterow', id);
257 // console.log("result: "+commit);
258 } 256 }
259 } 257 }
260 } else { 258 } else {
261 var found = false; 259 var found = false;
262 for (var i = 0; i < rows.length; i++) { 260 for (var i = 0; i < rows.length; i++) {
266 $("#miscGrid").jqxGrid('setcellvalue', i, 'm_weight', amount); 264 $("#miscGrid").jqxGrid('setcellvalue', i, 'm_weight', amount);
267 $("#miscGrid").jqxGrid('setcellvalue', i, 'm_amount', amount / 1000); 265 $("#miscGrid").jqxGrid('setcellvalue', i, 'm_amount', amount / 1000);
268 break; 266 break;
269 } 267 }
270 } 268 }
271 console.log("set something, found: "+found); 269 // console.log("set something, found: "+found);
272 if (! found) { 270 if (! found) {
273 // console.log("need to add this misc"); 271 // console.log("need to add this misc");
274 var miscs = new $.jqx.dataAdapter(miscInvSource, { 272 var miscs = new $.jqx.dataAdapter(miscInvSource, {
275 loadComplete: function () { 273 loadComplete: function () {
276 var records = miscs.records; 274 var records = miscs.records;
285 row["m_use_use"] = record.use_use; 283 row["m_use_use"] = record.use_use;
286 row["m_time"] = 0; 284 row["m_time"] = 0;
287 row["m_weight"] = amount; 285 row["m_weight"] = amount;
288 row["m_amount_is_weight"] = record.amount_is_weight; 286 row["m_amount_is_weight"] = record.amount_is_weight;
289 var commit = $("#miscGrid").jqxGrid('addrow', null, row); 287 var commit = $("#miscGrid").jqxGrid('addrow', null, row);
290 // console.log("result: "+commit);
291 } 288 }
292 } 289 }
293 } 290 }
294 }); 291 });
295 miscs.dataBind(); 292 miscs.dataBind();
388 var n = 0; 385 var n = 0;
389 var pH = 5.4; 386 var pH = 5.4;
390 var deltapH = 0.001; 387 var deltapH = 0.001;
391 var deltapd = 0.1; 388 var deltapd = 0.1;
392 var pd = ProtonDeficit(pH); 389 var pd = ProtonDeficit(pH);
393 while (((pd < -deltapd) || (pd > deltapd)) && (n < 1000)) { 390 while (((pd < -deltapd) || (pd > deltapd)) && (n < 2000)) {
394 n++; 391 n++;
395 if (pd < -deltapd) 392 if (pd < -deltapd)
396 pH -= deltapH; 393 pH -= deltapH;
397 else if (pd > deltapd) 394 else if (pd > deltapd)
398 pH += deltapH; 395 pH += deltapH;
399 pd = ProtonDeficit(pH); 396 pd = ProtonDeficit(pH);
400 } 397 }
401 console.log("MashpH() n: "+n+" pH: "+pH); 398 console.log("MashpH() n: "+n+" pH: "+pH);
399 return pH;
402 } 400 }
403 401
404 function GetAcidSpecs(AT) { 402 function GetAcidSpecs(AT) {
405 switch(AT) { 403 switch(AT) {
406 case 'Melkzuur': return { 404 case 'Melkzuur': return {
487 sulfate = dataRecord.w1_sulfate; 485 sulfate = dataRecord.w1_sulfate;
488 total_alkalinity = dataRecord.w1_total_alkalinity; 486 total_alkalinity = dataRecord.w1_total_alkalinity;
489 ph = dataRecord.w1_ph; 487 ph = dataRecord.w1_ph;
490 } 488 }
491 $('#wg_amount').val(liters); 489 $('#wg_amount').val(liters);
490 var wg_calcium = calcium;
492 $('#wg_calcium').val(Math.round(calcium * 10) / 10); 491 $('#wg_calcium').val(Math.round(calcium * 10) / 10);
492 var wg_magnesium = magnesium;
493 $('#wg_magnesium').val(Math.round(magnesium * 10) / 10); 493 $('#wg_magnesium').val(Math.round(magnesium * 10) / 10);
494 var wg_sodium = sodium;
494 $('#wg_sodium').val(Math.round(sodium * 10) / 10); 495 $('#wg_sodium').val(Math.round(sodium * 10) / 10);
496 var wg_total_alkalinity = total_alkalinity;
495 $('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10); 497 $('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
498 var wg_chloride = chloride;
496 $('#wg_chloride').val(Math.round(chloride * 10) / 10); 499 $('#wg_chloride').val(Math.round(chloride * 10) / 10);
500 var wg_sulfate = sulfate;
497 $('#wg_sulfate').val(Math.round(sulfate * 10) / 10); 501 $('#wg_sulfate').val(Math.round(sulfate * 10) / 10);
498 // Note: brouwhulp has the malts included here in the result. 502 // Note: brouwhulp has the malts included here in the result.
503 var wg_ph = ph;
499 $('#wg_ph').val(Math.round(ph * 10) / 10); 504 $('#wg_ph').val(Math.round(ph * 10) / 10);
500 $('#wb_ph').val(Math.round(ph * 10) / 10); 505 // $('#wb_ph').val(Math.round(ph * 10) / 10);
506 $('#wb_ph').val(Math.round(MashpH() * 10) / 10);
501 bicarbonate = total_alkalinity * 1.22; 507 bicarbonate = total_alkalinity * 1.22;
508 var wg_bicarbonate = bicarbonate;
502 509
503 // Noot: de volgende berekeningen geven bijna gelijke resultaten in Brun'water. 510 // Noot: de volgende berekeningen geven bijna gelijke resultaten in Brun'water.
504 // Calculate Ca 511 // Calculate Ca
505 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 + 512 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
506 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4; 513 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4;
522 // Calculate Cl 529 // Calculate Cl
523 RA = 2 * parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 + 530 RA = 2 * parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
524 parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl; 531 parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl;
525 chloride += 1000 * RA / liters; 532 chloride += 1000 * RA / liters;
526 // Einde noot. 533 // Einde noot.
534
535 if ($("#wa_acid_name").val() == "") {
536 $("#wa_acid_name").val('Melkzuur');
537 last_acid = 'Melkzuur';
538 }
539 if ($("#wa_base_name").val() == "") {
540 $("#wa_base_name").val('NaHCO3');
541 last_base = 'NaHCO3';
542 }
527 543
528 var AT = $("#wa_acid_name").val(); 544 var AT = $("#wa_acid_name").val();
529 var BT = $("#wa_base_name").val(); 545 var BT = $("#wa_base_name").val();
530 546
531 var result = GetAcidSpecs(AT); 547 var result = GetAcidSpecs(AT);
542 protonDeficit = ProtonDeficit(TpH); 558 protonDeficit = ProtonDeficit(TpH);
543 console.log("calc_acid tgt: "+TpH+" protonDeficit: "+protonDeficit); 559 console.log("calc_acid tgt: "+TpH+" protonDeficit: "+protonDeficit);
544 if (protonDeficit > 0) { // Add acid 560 if (protonDeficit > 0) { // Add acid
545 $("#wa_base").val(0); 561 $("#wa_base").val(0);
546 setWaterAgent(last_base, 0); 562 setWaterAgent(last_base, 0);
547 if ($("#wa_acid_name").val() == "") {
548 $("#wa_acid_name").val('Melkzuur');
549 last_acid = 'Melkzuur';
550 }
551 frac = CalcFrac(TpH, pK1, pK2, pK3); 563 frac = CalcFrac(TpH, pK1, pK2, pK3);
552 Acid = protonDeficit / frac; 564 Acid = protonDeficit / frac;
553 console.log("Required moles: "+Acid); 565 // console.log("Required moles: "+Acid);
554 Acid *= MolWt; // mg 566 Acid *= MolWt; // mg
555 // Acidmg = Acid; 567 Acidmg = Acid;
556 // console.log("Required mg: "+Acidmg); 568 // console.log("Required mg: "+Acidmg);
557 Acid = Acid / AcidSG; // ml 569 Acid = Acid / AcidSG; // ml
558 570
559 if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0) 571 if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
560 $("#wa_acid_perc").val(AcidPrc); 572 $("#wa_acid_perc").val(AcidPrc);
566 bicarbonate = bicarbonate - protonDeficit * frac / liters; 578 bicarbonate = bicarbonate - protonDeficit * frac / liters;
567 total_alkalinity = bicarbonate * 50 / 61; 579 total_alkalinity = bicarbonate * 50 / 61;
568 } else if (protonDeficit < 0) { //Add base 580 } else if (protonDeficit < 0) { //Add base
569 $("#wa_acid").val(0); 581 $("#wa_acid").val(0);
570 setWaterAgent(last_acid, 0); 582 setWaterAgent(last_acid, 0);
571 if ($("#wa_base_name").val() == "") {
572 $("#wa_base_name").val('NaHCO3');
573 last_base = 'NaHCO3';
574 }
575 r1d = Math.pow(10, (TpH - 6.38)); 583 r1d = Math.pow(10, (TpH - 6.38));
576 r2d = Math.pow(10, (TpH - 10.38)); 584 r2d = Math.pow(10, (TpH - 10.38));
577 f1d = 1 / (1 + r1d + r1d * r2d); 585 f1d = 1 / (1 + r1d + r1d * r2d);
578 f2d = f1d * r1d; 586 f2d = f1d * r1d;
579 f3d = f2d * r2d; 587 f3d = f2d * r2d;
585 if (liters > 0) { 593 if (liters > 0) {
586 // Na 594 // Na
587 RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl + 595 RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
588 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3; 596 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
589 RA = 1000 * RA / liters; 597 RA = 1000 * RA / liters;
590 sodium = parseFloat($('#wg_sodium').jqxNumberInput('decimal')) + RA; 598 sodium = wg_sodium + RA;
591 // HCO3 599 // HCO3
592 RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3; 600 RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3;
593 RA = 1000 * RA / liters; 601 RA = 1000 * RA / liters;
594 bicarbonate = (parseFloat($('#wg_total_alkalinity').jqxNumberInput('decimal')) * 1.22) + RA; 602 bicarbonate = wg_bicarbonate + RA;
595 total_alkalinity = bicarbonate * 50 / 61; 603 total_alkalinity = bicarbonate * 50 / 61;
596 } 604 }
597 break; 605 break;
598 case 'Na2CO3': base = -protonDeficit / (2 * f1d + f2d); //mmol totaal 606 case 'Na2CO3': base = -protonDeficit / (2 * f1d + f2d); //mmol totaal
599 base = base * MMNa2CO3/1000; //gram 607 base = base * MMNa2CO3/1000; //gram
601 setWaterAgent(BT, Math.round(base * 100) / 100); 609 setWaterAgent(BT, Math.round(base * 100) / 100);
602 if (liters > 0) { 610 if (liters > 0) {
603 RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl + 611 RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
604 parseFloat($("#wa_base").jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3; 612 parseFloat($("#wa_base").jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3;
605 RA = 1000 * RA / liters; 613 RA = 1000 * RA / liters;
606 sodium = parseFloat($('#wg_sodium').jqxNumberInput('decimal')) + RA; 614 sodium = wg_sodium + RA;
607 // HCO3 615 // HCO3
608 RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3; 616 RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3;
609 RA = 1000 * RA / liters; 617 RA = 1000 * RA / liters;
610 bicarbonate = (parseFloat($('#wg_total_alkalinity').jqxNumberInput('decimal')) * 1.22) + RA; 618 bicarbonate = wg_bicarbonate + RA;
611 total_alkalinity = bicarbonate * 50 / 61; 619 total_alkalinity = bicarbonate * 50 / 61;
612 } 620 }
613 break; 621 break;
614 case 'CaCO3': base = -protonDeficit * (f1d - f3d); //mmol totaal 622 case 'CaCO3': base = -protonDeficit * (f1d - f3d); //mmol totaal
615 base = base * MMCaCO3/1000; //gram 623 base = base * MMCaCO3/1000; //gram
619 setWaterAgent(BT, Math.round(base * 100) / 100); 627 setWaterAgent(BT, Math.round(base * 100) / 100);
620 if (liters > 0) { 628 if (liters > 0) {
621 //Bicarbonate 629 //Bicarbonate
622 RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3; 630 RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3;
623 RA = 1000 * RA / liters; 631 RA = 1000 * RA / liters;
624 bicarbonate = (parseFloat($('#wg_total_alkalinity').jqxNumberInput('decimal')) * 1.22) + RA; 632 bicarbonate = wg_bicarbonate + RA;
625 total_alkalinity = bicarbonate * 50 / 61; 633 total_alkalinity = bicarbonate * 50 / 61;
626 //Ca precipitates out as Ca10(PO4)6(OH)2 634 //Ca precipitates out as Ca10(PO4)6(OH)2
627 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 + 635 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
628 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 + 636 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
629 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaCO3; 637 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaCO3;
630 RA = 1000 * RA / liters; 638 RA = 1000 * RA / liters;
631 calcium = parseFloat($('#wg_calcium').jqxNumberInput('decimal')) + RA; 639 calcium = wg_calcium + RA;
632 } 640 }
633 break; 641 break;
634 case 'Ca(OH)2': base = -protonDeficit / 19.3; // g 642 case 'Ca(OH)2': base = -protonDeficit / 19.3; // g
635 $("#wa_base").val(Math.round(base * 100) / 100); 643 $("#wa_base").val(Math.round(base * 100) / 100);
636 setWaterAgent(BT, Math.round(base * 100) / 100); 644 setWaterAgent(BT, Math.round(base * 100) / 100);
637 if (liters > 0) { 645 if (liters > 0) {
638 // Bicarbonate 646 // Bicarbonate
639 RA = -protonDeficit / liters; 647 RA = -protonDeficit / liters;
640 total_alkalinity = parseFloat($('#wg_total_alkalinity').jqxNumberInput('decimal')) + RA; 648 total_alkalinity = wg_total_alkalinity + RA;
641 bicarbonate = total_alkalinity * 61 / 50; 649 bicarbonate = total_alkalinity * 61 / 50;
642 // Calcium 650 // Calcium
643 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 + 651 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
644 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 + 652 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
645 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaOH2; 653 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaOH2;
646 RA = 1000 * RA / liters; 654 RA = 1000 * RA / liters;
647 calcium = parseFloat($('#wg_calcium').jqxNumberInput('decimal')) + RA; 655 calcium = wg_calcium + RA;
648 } 656 }
649 break; 657 break;
650 } 658 }
651 } 659 }
652 ph = TpH; 660 ph = TpH;
657 if (parseFloat($("#wa_base").jqxNumberInput('decimal')) > 0) { 665 if (parseFloat($("#wa_base").jqxNumberInput('decimal')) > 0) {
658 666
659 } 667 }
660 668
661 TpH = parseFloat(dataRecord.mash_ph); 669 TpH = parseFloat(dataRecord.mash_ph);
662 pHa = parseFloat($('#wg_ph').jqxNumberInput('decimal')); 670 // pHa = MashpH();
663 //pHa = parseFloat(dataRecord.mash_ph); 671 pHa = parseFloat($("#wb_ph").jqxNumberInput('decimal'));
664 // Then calculate the new pH with added acids 672 // Then calculate the new pH with added acids
665 if (parseFloat($("#wa_acid").jqxNumberInput('decimal')) > 0) { 673 if (parseFloat($("#wa_acid").jqxNumberInput('decimal')) > 0) {
666 console.log("TpH: "+TpH+" water: "+pHa); 674 console.log("TpH: "+TpH+" water: "+pHa);
667 Acid = parseFloat($("#wa_acid").jqxNumberInput('decimal')); 675 Acid = parseFloat($("#wa_acid").jqxNumberInput('decimal'));
668 if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0) 676 if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
669 $("#wa_acid_perc").val(AcidPrc); 677 $("#wa_acid_perc").val(AcidPrc);
670 Acid = Acid / AcidPrc * (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml 678 Acid = Acid / AcidPrc * (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml
671 Acid = Acid * AcidSG; // ml 679 Acid = Acid * AcidSG; // ml
672 Acid = Acid / MolWt; // mg 680 Acid = Acid / MolWt; // mg
681 Acidmg = Acid;
673 682
674 //find the pH where the protondeficit = protondeficit by the acid 683 //find the pH where the protondeficit = protondeficit by the acid
675 frac = CalcFrac(pHa, pK1, pK2, pK3); 684 frac = CalcFrac(pHa, pK1, pK2, pK3);
676 protonDeficit = Acid * frac; 685 protonDeficit = Acid * frac;
677 686
678 deltapH = 0.01; 687 deltapH = 0.001;
679 deltapd = 0.1; 688 deltapd = 0.1;
680 pd = ProtonDeficit(TpH); 689 pd = ProtonDeficit(TpH);
681 n = 0; 690 n = 0;
682 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa); 691 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
683 692
684 while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 1000)) { 693 while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 2000)) {
685 n++; 694 n++;
686 if (pd < (protonDeficit-deltapd)) 695 if (pd < (protonDeficit-deltapd))
687 pHa = pHa - deltapH; 696 pHa = pHa - deltapH;
688 else if (pd > (protonDeficit+deltapd)) 697 else if (pd > (protonDeficit+deltapd))
689 pHa = pHa + deltapH; 698 pHa = pHa + deltapH;
691 protonDeficit = Acid * frac; 700 protonDeficit = Acid * frac;
692 pd = ProtonDeficit(pHa); 701 pd = ProtonDeficit(pHa);
693 // console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa); 702 // console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
694 } 703 }
695 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa); 704 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
696 705 RA = wg_bicarbonate - protonDeficit * frac / liters;
706 bicarbonate = RA;
707 total_alkalinity = RA * 50 / 61;
708 ph = pHa;
709 $('#wb_ph').val(Math.round(ph * 10) / 10);
697 } 710 }
698 } 711 }
699 /* 712
700 TpH = parseFloat(dataRecord.mash_ph); 713 if ((AT == 'Zwavelzuur') && (liters > 0)) {
701 if (TpH < 5.0 || TpH > 6.0) { 714 RA = parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
702 TpH = 5.4; 715 parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 +
703 dataRecord.mash_ph = 5.4; 716 Acidmg / 1000 * MMSO4 / (MMSO4 + 2);
704 $("#mash_ph").val(5.4); 717 RA = 1000 * RA / liters;
705 } 718 sulfate = wg_sulfate + RA; // Not add to sulfate??
706 var acid_amount = parseFloat($("#wa_acid").jqxNumberInput('decimal')); 719 } else if ((AT == 'Zoutzuur') && (liters > 0)) {
707 var acid_perc = parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')); 720 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
708 721 parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl +
709 switch ($("#wa_acid_name").val()) { 722 Acidmg / 1000 * MMCl / (MMCL + 1);
710 case 'Melkzuur': pK1 = 3.08; 723 RA = 1000 * RA / liters;
711 pK2 = 20; 724 chloride = wg_chloride + RA;
712 pK3 = 20; 725 }
713 MolWt = 90.08; 726
714 AcidSG = 1214; //@88%
715 AcidPrc = 0.88;
716 frac = CalcFrac(TpH, pK1, pK2, pK3);
717 acid += acid_amount * acid_perc / 100 * AcidSG / MolWt * frac / liters; //mEq/l
718 break;
719
720 case 'Zoutzuur': pK1 = -10;
721 pK2 = 20;
722 pK3 = 20;
723 MolWt = 36.46;
724 AcidSG = 1142; //@28%
725 AcidPrc = 0.28;
726 frac = CalcFrac(TpH, pK1, pK2, pK3);
727 Acidmg = acid_amount * acid_perc / 100 * AcidSG / liters;
728 acid += Acidmg / MolWt * frac; //mEq/l
729 chloride += Acidmg / 1000 * MMCl / (MMCl + 1);
730 break;
731
732 case 'Fosforzuur': pK1 = 2.12;
733 pK2 = 7.20;
734 pK3 = 12.44;
735 MolWt = 98.00;
736 AcidSG = 1170; //@25%
737 AcidPrc = 0.25;
738 frac = CalcFrac(TpH, pK1, pK2, pK3);
739 Acidmg = acid_amount * acid_perc / 100 * AcidSG / liters;
740 acid += Acidmg / MolWt * frac; //mEq/l
741 break;
742
743 case 'Zwavelzuur': pK1 = -10;
744 pK2 = 1.92;
745 pK3 = 20;
746 MolWt = 98.07;
747 AcidSG = 1700; //@93%
748 AcidPrc = 0.93;
749 frac = CalcFrac(TpH, pK1, pK2, pK3);
750 Acidmg = acid_amount * acid_perc / 100 * AcidSG / liters;
751 acid += Acidmg / MolWt * frac; //mEq/l
752 sulfate += Acidmg / 1000 * MMSO4 / (MMSO4 + 2);
753 break;
754 }
755
756 if (dataRecord.calc_acid) {
757 } else if (liters > 0) { // not calc_acid
758 // First add base salts
759 if (parseFloat($("#wa_base").jqxNumberInput('decimal')) > 0) {
760
761 }
762
763 pHa = parseFloat($("#wb_ph").jqxNumberInput('decimal'));
764 console.log("Adjusted water mash pH: "+pHa);
765 // Then calculate the new pH with added acids
766 if (parseFloat($("#wa_acid").jqxNumberInput('decimal')) > 0) {
767 acid = parseFloat($("#wa_acid").jqxNumberInput('decimal'));
768 if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
769 $("#wa_acid_perc").val(AcidPrc);
770 console.log("screen value: "+acid);
771 acid = acid / AcidPrc * (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml
772 console.log("acid ml: "+acid);
773 acid = acid * AcidSG // ml
774 console.log("acid ml: "+acid);
775 acid = acid / MolWt; // mg
776 console.log("acid mg: "+acid);
777 var Acidmg = acid;
778
779 frac = CalcFrac(pHa, pK1, pK2, pK3);
780 protonDeficit = acid * frac;
781
782 deltapH = 0.001;
783 deltapd = 0.1;
784 pd = ProtonDeficit(pHa);
785 n = 0;
786 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
787
788 while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 1000)) {
789 n++;
790 if (pd < (protonDeficit-deltapd))
791 pHa = pHa - deltapH;
792 else if (pd > (protonDeficit+deltapd))
793 pHa = pHa + deltapH;
794 frac = CalcFrac(pHa, pK1, pK2, pK3);
795 protonDeficit = acid * frac;
796 pd = ProtonDeficit(pHa);
797 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
798 }
799 console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
800 }
801 }
802 total_alkalinity -= 50 / 61 * protonDeficit * frac / liters;
803 MashpH();
804 */
805 $('#tgt_bu').val(Math.round(GetBUGU() * 100) / 100); 727 $('#tgt_bu').val(Math.round(GetBUGU() * 100) / 100);
806 $('#tgt_cl_so4').val(Math.round(GetOptClSO4ratio() * 10) / 10); 728 $('#tgt_cl_so4').val(Math.round(GetOptClSO4ratio() * 10) / 10); // Show real value too
807 729
808 $('#wb_calcium').val(Math.round(calcium * 10) / 10); 730 $('#wb_calcium').val(Math.round(calcium * 10) / 10);
809 $('#wb_magnesium').val(Math.round(magnesium * 10) / 10); 731 $('#wb_magnesium').val(Math.round(magnesium * 10) / 10);
810 $('#wb_sodium').val(Math.round(sodium * 10) / 10); 732 $('#wb_sodium').val(Math.round(sodium * 10) / 10);
811 $('#wb_sulfate').val(Math.round(sulfate * 10) / 10); 733 $('#wb_sulfate').val(Math.round(sulfate * 10) / 10);

mercurial