www/js/rec_edit.js

changeset 662
4bb005694ce7
parent 660
0e9a725354ac
child 667
1246550451ca
equal deleted inserted replaced
661:74b442eae07b 662:4bb005694ce7
31 preboil_sg = 0, 31 preboil_sg = 0,
32 last_base = '', 32 last_base = '',
33 last_acid = '', 33 last_acid = '',
34 Ka1 = 0.0000004445, 34 Ka1 = 0.0000004445,
35 Ka2 = 0.0000000000468, 35 Ka2 = 0.0000000000468,
36 error_count = 0,
36 MMCa = 40.048, 37 MMCa = 40.048,
37 MMMg = 24.305, 38 MMMg = 24.305,
38 MMNa = 22.98976928, 39 MMNa = 22.98976928,
39 MMCl = 35.453, 40 MMCl = 35.453,
40 MMSO4 = 96.0626, 41 MMSO4 = 96.0626,
558 Z = ZAlkalinity(pHZ); 559 Z = ZAlkalinity(pHZ);
559 return Z - (Calc / 3.5 + Magn / 7); 560 return Z - (Calc / 3.5 + Magn / 7);
560 } 561 }
561 562
562 563
564 function BufferCapacity(di_ph, acid_to_ph_57, ebc, graintype) {
565 C1 = 0;
566 if ((di_ph != 5.7) && ((acid_to_ph_57 < - 0.1) || (acid_to_ph_57 > 0.1))) {
567 C1 = acid_to_ph_57 / (di_ph - 5.7);
568 } else {
569 // If the acid_to_ph_5.7 is unknown from the maltster, guess the required acid.
570 switch (graintype) {
571 case 0: // Base, Special, Kilned
572 case 3:
573 case 5: C1 = 0.014 * ebc - 34.192;
574 break;
575 case 2: C1 = -0.0597 * ebc - 32.457; // Crystal
576 break;
577 case 1: C1 = 0.0107 * ebc - 54.768; // Roast
578 break;
579 case 4: C1 = -149; // Sour malt
580 break;
581 }
582 }
583 return C1;
584 }
585
586
563 function ProtonDeficit(pHZ) { 587 function ProtonDeficit(pHZ) {
564 var ebc, C1, i, rows, row, Result = ZRA(pHZ) * parseFloat($('#wg_amount').jqxNumberInput('decimal')); 588 var C1, i, rows, row, Result = ZRA(pHZ) * parseFloat($('#wg_amount').jqxNumberInput('decimal'));
565 // proton deficit for the grist 589 // proton deficit for the grist
566 rows = $('#fermentableGrid').jqxGrid('getrows'); 590 if ((rows = $('#fermentableGrid').jqxGrid('getrows'))) {
567 for (i = 0; i < rows.length; i++) { 591 for (i = 0; i < rows.length; i++) {
568 row = rows[i]; 592 row = rows[i];
569 if (row.f_added == 0 && row.f_graintype != 6) { // Added == Mash && graintype != No Malt 593 if (row.f_added == 0 && row.f_graintype != 6) { // Added == Mash && graintype != No Malt
570 // Check if acid is required 594 C1 = BufferCapacity(row.f_di_ph, row.f_acid_to_ph_57, row.f_color, row.f_graintype);
571 C1 = 0; 595 x = C1 * (pHZ - row.f_di_ph); // AcidRequired(ZpH)
572 if ((row.f_di_ph != 5.7) && ((row.f_acid_to_ph_57 < - 0.1) || (row.f_acid_to_ph_57 > 0.1))) { 596 Result += x * row.f_amount;
573 C1 = row.f_acid_to_ph_57 / (row.f_di_ph - 5.7);
574 } else {
575 // If the acid_to_ph_5.7 is unknown from the maltster, guess the required acid.
576 ebc = row.f_color;
577 switch (row.f_graintype) {
578 case 0: // Base, Special, Kilned
579 case 3:
580 case 5: C1 = 0.014 * ebc - 34.192;
581 break;
582 case 2: C1 = -0.0597 * ebc - 32.457; // Crystal
583 break;
584 case 1: C1 = 0.0107 * ebc - 54.768; // Roast
585 break;
586 case 4: C1 = -149; // Sour malt
587 break;
588 }
589 } 597 }
590 x = C1 * (pHZ - row.f_di_ph); // AcidRequired(ZpH) 598 }
591 Result += x * row.f_amount; 599 } else {
592 } 600 error_count++;
601 if (error_count < 5)
602 console.log('ProtonDeficit(' + pHZ + ') invalid grist, return ' + Result);
593 } 603 }
594 return Result; 604 return Result;
595 } 605 }
596 606
597 607
607 pH -= deltapH; 617 pH -= deltapH;
608 else if (pd > deltapd) 618 else if (pd > deltapd)
609 pH += deltapH; 619 pH += deltapH;
610 pd = ProtonDeficit(pH); 620 pd = ProtonDeficit(pH);
611 } 621 }
622 pH = Round(pH, 6);
612 //console.log('MashpH() n: ' + n + ' pH: ' + pH); 623 //console.log('MashpH() n: ' + n + ' pH: ' + pH);
613 return pH; 624 return pH;
614 } 625 }
615
616
617 function GetAcidSpecs(AT) {
618 switch (AT) {
619 case 0: return { pK1: 3.86, pK2: 20, pK3: 20, MolWt: 90.08, AcidSG: 1214, AcidPrc: 0.88 }; // Melkzuur
620 case 1: return { pK1: -7, pK2: 20, pK3: 20, MolWt: 36.46, AcidSG: 1142, AcidPrc: 0.28 }; // Zoutzuur
621 case 2: return { pK1: 2.12, pK2: 7.20, pK3: 12.44, MolWt: 98.00, AcidSG: 1170, AcidPrc: 0.25 }; // Fosforzuur
622 case 3: return { pK1: -1, pK2: 1.92, pK3: 20, MolWt: 98.07, AcidSG: 1700, AcidPrc: 0.93 }; // Zwavelzuur
623 }
624 }
625
626
627
628 626
629 627
630 628
631 629
632 $(document).ready(function() { 630 $(document).ready(function() {
1897 ph = 0, 1895 ph = 0,
1898 RA = 0, 1896 RA = 0,
1899 frac = 0, 1897 frac = 0,
1900 TpH = 0, 1898 TpH = 0,
1901 protonDeficit = 0, 1899 protonDeficit = 0,
1902 AT, BT, result, pK1, pK2, pK3, MolWt, AcidSG, AcidPrc, 1900 AT, BT,
1903 r1d, r2d, f1d, f2d, f3d, 1901 r1d, r2d, f1d, f2d, f3d,
1904 deltapH, deltapd, pd, n, 1902 deltapH, deltapd, pd, n,
1905 Res, 1903 Res;
1906 wg_calcium, wg_sodium, wg_total_alkalinity, wg_chloride, wg_sulfate, wg_bicarbonate;
1907 1904
1908 if (dataRecord.w1_name == '') { 1905 if (dataRecord.w1_name == '') {
1909 return; 1906 return;
1910 } 1907 }
1911 1908
1927 chloride = dataRecord.w1_chloride; 1924 chloride = dataRecord.w1_chloride;
1928 sulfate = dataRecord.w1_sulfate; 1925 sulfate = dataRecord.w1_sulfate;
1929 total_alkalinity = dataRecord.w1_total_alkalinity; 1926 total_alkalinity = dataRecord.w1_total_alkalinity;
1930 ph = dataRecord.w1_ph; 1927 ph = dataRecord.w1_ph;
1931 } 1928 }
1929 var bicarbonate = total_alkalinity * 1.22;
1930
1931 /* Save mixed water ions for later */
1932 var wg_calcium = calcium;
1933 var wg_sodium = sodium;
1934 var wg_total_alkalinity = total_alkalinity;
1935 var wg_chloride = chloride;
1936 var wg_sulfate = sulfate;
1937 var wg_bicarbonate = bicarbonate;
1938
1932 $('#wg_amount').val(liters); 1939 $('#wg_amount').val(liters);
1933 wg_calcium = calcium;
1934 $('#wg_calcium').val(Math.round(calcium * 10) / 10); 1940 $('#wg_calcium').val(Math.round(calcium * 10) / 10);
1935 //wg_magnesium = magnesium;
1936 $('#wg_magnesium').val(Math.round(magnesium * 10) / 10); 1941 $('#wg_magnesium').val(Math.round(magnesium * 10) / 10);
1937 wg_sodium = sodium;
1938 $('#wg_sodium').val(Math.round(sodium * 10) / 10); 1942 $('#wg_sodium').val(Math.round(sodium * 10) / 10);
1939 wg_total_alkalinity = total_alkalinity;
1940 $('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10); 1943 $('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
1941 wg_chloride = chloride;
1942 $('#wg_chloride').val(Math.round(chloride * 10) / 10); 1944 $('#wg_chloride').val(Math.round(chloride * 10) / 10);
1943 wg_sulfate = sulfate;
1944 $('#wg_sulfate').val(Math.round(sulfate * 10) / 10); 1945 $('#wg_sulfate').val(Math.round(sulfate * 10) / 10);
1945 // Note: brouwhulp has the malts included here in the result.
1946 //wg_ph = ph;
1947 $('#wg_ph').val(Round(ph, 1)); 1946 $('#wg_ph').val(Round(ph, 1));
1948 $('#wb_ph').val(Round(MashpH(), 1)); 1947
1949 bicarbonate = total_alkalinity * 1.22; 1948 var mash_ph = Round(MashpH(), 3);
1950 wg_bicarbonate = bicarbonate; 1949 console.log('Distilled water mash pH: ' + mash_ph);
1951 1950
1952 // Noot: de volgende berekeningen geven bijna gelijke resultaten in Brun'water. 1951 /* Calculate Salt additions */
1953 // Calculate Ca 1952 if (liters > 0) {
1954 RA = parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 + 1953 calcium += (parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 * 1000 +
1955 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4; 1954 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4 * 1000) / liters;
1956 calcium += 1000 * RA / liters; 1955 magnesium += (parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMMg / MMMgSO4 * 1000) / liters;
1957 1956 sodium += (parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl * 1000 +
1958 // Calculate Mg 1957 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMNa / MMNaHCO3 * 1000) / liters;
1959 RA = parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMMg / MMMgSO4; 1958 sulfate += (parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 * 1000 +
1960 magnesium += 1000 * RA / liters; 1959 parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 * 1000) / liters;
1961 1960 chloride += (2 * parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCl / MMCaCl2 * 1000 +
1962 // Calculate Na 1961 parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMCl / MMNaCl * 1000) / liters;
1963 RA = parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl; 1962 }
1964 sodium += 1000 * RA / liters; 1963
1965 1964 if (dataRecord.wa_acid_name < 0 || dataRecord,wa_acid_name >= AcidTypeData.length) {
1966 // Calculate SO4
1967 RA = parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
1968 parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMSO4 / MMMgSO4;
1969 sulfate += 1000 * RA / liters;
1970
1971 // Calculate Cl
1972 RA = 2 * parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
1973 parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMCl / MMNaCl;
1974 chloride += 1000 * RA / liters;
1975 // Einde noot.
1976
1977 if ($('#wa_acid_name').val() < 0 || $('#wa_acid_name').val() > 3) {
1978 $('#wa_acid_name').val(0); 1965 $('#wa_acid_name').val(0);
1979 dataRecord.wa_acid_name = 0; 1966 dataRecord.wa_acid_name = 0;
1967 dataRecord.wa_acid_perc = AcidTypeData[0].AcidPrc;
1968 $('#wa_acid_perc').val(AcidTypeData[0].AcidPrc);
1980 } 1969 }
1981 if (last_acid == '') 1970 if (last_acid == '')
1982 last_acid = AcidTypeData[$('#wa_acid_name').val()].nl; 1971 last_acid = AcidTypeData[dataRecord.wa_acid_name].nl;
1983 1972
1984 if ($('#wa_base_name').val() < 0 || $('#wa_base_name').val() > 3) { 1973 if (parseFloat(dataRecord.wa_acid_perc) == 0) {
1974 dataRecord.wa_acid_perc = AcidTypeData[AT].AcidPrc;
1975 $('#wa_acid_perc').val(AcidTypeData[AT].AcidPrc);
1976 }
1977
1978 if (dataRecord.wa_base_name < 0 || dataRecord.wa_base_name > 3) {
1985 $('#wa_base_name').val(0); 1979 $('#wa_base_name').val(0);
1986 dataRecord.wa_base_name = 0; 1980 dataRecord.wa_base_name = 0;
1987 } 1981 }
1988 if (last_base == '') 1982 if (last_base == '')
1989 last_base = BaseTypeData[$('#wa_base_name').val()].nl; 1983 last_base = BaseTypeData[dataRecord.wa_base_name].nl;
1990 1984
1991 AT = dataRecord.wa_acid_name; 1985 AT = dataRecord.wa_acid_name;
1992 BT = dataRecord.wa_base_name; 1986 BT = dataRecord.wa_base_name;
1993 1987
1994 result = GetAcidSpecs(AT); 1988 /* Note that the next calculations do not correct the pH change by the added salts.
1995 pK1 = result.pK1; 1989 This pH change is at most 0.1 pH and is a minor difference in Acid amount. */
1996 pK2 = result.pK2;
1997 pK3 = result.pK3;
1998 MolWt = result.MolWt;
1999 AcidSG = result.AcidSG;
2000 AcidPrc = result.AcidPrc;
2001 1990
2002 if (dataRecord.calc_acid) { 1991 if (dataRecord.calc_acid) {
1992 $('.c_mashph').show();
1993 /* Auto calculate pH */
2003 TpH = parseFloat(dataRecord.mash_ph); 1994 TpH = parseFloat(dataRecord.mash_ph);
2004 protonDeficit = ProtonDeficit(TpH); 1995 protonDeficit = ProtonDeficit(TpH);
2005 console.log('calc_acid tgt: ' + TpH + ' protonDeficit: ' + protonDeficit); 1996 console.log('calc_acid tgt: ' + TpH + ' protonDeficit: ' + protonDeficit);
2006 if (protonDeficit > 0) { // Add acid 1997 if (protonDeficit > 0) { // Add acid
2007 $('#wa_base').val(0); 1998 $('#wa_base').val(0);
2008 setWaterAgent(last_base, 0); 1999 setWaterAgent(last_base, 0);
2009 frac = CalcFrac(TpH, pK1, pK2, pK3); 2000 frac = CalcFrac(TpH, AcidTypeData[AT].pK1, AcidTypeData[AT].pK2, AcidTypeData[AT].pK3);
2010 Acid = protonDeficit / frac; 2001 Acid = protonDeficit / frac;
2011 Acid *= MolWt; // mg 2002 Acid *= AcidTypeData[AT].MolWt; // mg
2012 Acidmg = Acid; 2003 Acidmg = Acid;
2013 Acid = Acid / AcidSG; // ml 2004 Acid = Acid / AcidTypeData[AT].AcidSG; // ml
2014 2005 Acid = Round(Acid / (parseFloat(dataRecord.wa_acid_perc) / 100), 2); // ml
2015 if (parseFloat($('#wa_acid_perc').jqxNumberInput('decimal')) == 0) 2006 console.log('Mash auto Acid final ml: ' + Acid);
2016 $('#wa_acid_perc').val(AcidPrc); 2007 $('#wa_acid').val(Acid);
2017 Acid = Acid * AcidPrc / (parseFloat($('#wa_acid_perc').jqxNumberInput('decimal')) / 100); // ml 2008 setWaterAgent(AcidTypeData[AT].nl, Acid);
2018 console.log('Final ml: ' + Acid);
2019 $('#wa_acid').val(Math.round(Acid * 100) / 100);
2020 setWaterAgent(AcidTypeData[AT].nl, Math.round(Acid * 100) / 100);
2021 2009
2022 bicarbonate = bicarbonate - protonDeficit * frac / liters; 2010 bicarbonate = bicarbonate - protonDeficit * frac / liters;
2023 total_alkalinity = bicarbonate * 50 / 61; 2011 total_alkalinity = bicarbonate * 50 / 61;
2024 } else if (protonDeficit < 0) { //Add base 2012 } else if (protonDeficit < 0) { //Add base
2025 $('#wa_acid').val(0); 2013 $('#wa_acid').val(0);
2026 setWaterAgent(last_acid, 0); 2014 setWaterAgent(last_acid, 0);
2027 r1d = Math.pow(10, (TpH - 6.38)); 2015 r1d = Math.pow(10, (TpH - 6.35));
2028 r2d = Math.pow(10, (TpH - 10.38)); 2016 r2d = Math.pow(10, (TpH - 10.33));
2029 f1d = 1 / (1 + r1d + r1d * r2d); 2017 f1d = 1 / (1 + r1d + r1d * r2d);
2030 f2d = f1d * r1d; 2018 f2d = f1d * r1d;
2031 f3d = f2d * r2d; 2019 f3d = f2d * r2d;
2032 switch (BT) { 2020 switch (BT) {
2033 case 0: RA = -protonDeficit / (f1d - f3d); //Sodiumbicarbonate, mmol totaal 2021 case 0:
2034 RA = RA * MMNaHCO3 / 1000; //gram 2022 RA = -protonDeficit / (f1d - f3d); //Sodiumbicarbonate, mmol totaal
2035 $('#wa_base').val(Round(RA, 2)); 2023 RA = RA * MMNaHCO3 / 1000; //gram
2036 setWaterAgent('NaHCO3', Round(RA, 2)); 2024 $('#wa_base').val(Round(RA, 2));
2037 if (liters > 0) { 2025 setWaterAgent('NaHCO3', Round(RA, 2));
2038 // Na 2026 if (liters > 0) {
2039 RA = parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl + 2027 // Na
2040 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMNa / MMNaHCO3; 2028 RA = (parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl * 1000 +
2041 RA = 1000 * RA / liters; 2029 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMNa / MMNaHCO3 * 1000) / liters;
2042 sodium = wg_sodium + RA; 2030 sodium = wg_sodium + RA;
2043 // HCO3 2031 // HCO3
2044 RA = parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3; 2032 RA = (parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3 * 1000) / liters;
2045 RA = 1000 * RA / liters; 2033 bicarbonate = wg_bicarbonate + RA;
2046 bicarbonate = wg_bicarbonate + RA; 2034 total_alkalinity = bicarbonate * 50 / 61;
2047 total_alkalinity = bicarbonate * 50 / 61; 2035 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2048 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium); 2036 }
2049 } 2037 break;
2050 break; 2038 case 1:
2051 case 1: RA = -protonDeficit / (2 * f1d + f2d); // Sodiumcarbonate, mmol totaal 2039 RA = -protonDeficit / (2 * f1d + f2d); // Sodiumcarbonate, mmol totaal
2052 RA = RA * MMNa2CO3 / 1000; //gram 2040 RA = RA * MMNa2CO3 / 1000; //gram
2053 $('#wa_base').val(Round(RA, 2)); 2041 $('#wa_base').val(Round(RA, 2));
2054 setWaterAgent('Na2CO3', Round(RA, 2)); 2042 setWaterAgent('Na2CO3', Round(RA, 2));
2055 if (liters > 0) { 2043 if (liters > 0) {
2056 RA = parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl + 2044 RA = (parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl * 1000 +
2057 parseFloat($('#wa_base').jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3; 2045 parseFloat($('#wa_base').jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3 * 1000) / liters;
2058 RA = 1000 * RA / liters; 2046 sodium = wg_sodium + RA;
2059 sodium = wg_sodium + RA; 2047 // HCO3
2060 // HCO3 2048 RA = (parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3 * 1000) / liters;
2061 RA = parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3; 2049 bicarbonate = wg_bicarbonate + RA;
2062 RA = 1000 * RA / liters; 2050 total_alkalinity = bicarbonate * 50 / 61;
2063 bicarbonate = wg_bicarbonate + RA; 2051 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2064 total_alkalinity = bicarbonate * 50 / 61; 2052 }
2065 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium); 2053 break;
2066 } 2054 case 2:
2067 break; 2055 RA = -protonDeficit * (f1d - f3d); // Calciumcarbonate, mmol totaal
2068 case 2: RA = -protonDeficit * (f1d - f3d); // Calciumcarbonate, mmol totaal 2056 RA = RA * MMCaCO3 / 1000; //gram
2069 RA = RA * MMCaCO3 / 1000; //gram 2057 //but only 1/3 is effective, so add 3 times as much
2070 //but only 1/3 is effective, so add 3 times as much 2058 RA = 3 * RA;
2071 RA = 3 * RA; 2059 $('#wa_base').val(Round(RA, 2));
2072 $('#wa_base').val(Round(RA, 2)); 2060 setWaterAgent('CaCO3', Round(RA, 2));
2073 setWaterAgent('CaCO3', Round(RA, 2)); 2061 if (liters > 0) {
2074 if (liters > 0) { 2062 //Bicarbonate
2075 //Bicarbonate 2063 RA = (parseFloat($('#wa_base').jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3 * 1000) / liters;
2076 RA = parseFloat($('#wa_base').jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3; 2064 bicarbonate = wg_bicarbonate + RA;
2077 RA = 1000 * RA / liters; 2065 total_alkalinity = bicarbonate * 50 / 61;
2078 bicarbonate = wg_bicarbonate + RA; 2066 //Ca precipitates out as Ca10(PO4)6(OH)2
2079 total_alkalinity = bicarbonate * 50 / 61; 2067 RA = (parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 * 1000 +
2080 //Ca precipitates out as Ca10(PO4)6(OH)2 2068 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4 * 1000 +
2081 RA = parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 + 2069 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMCa / MMCaCO3 * 1000) / liters;
2082 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4 + 2070 calcium = wg_calcium + RA;
2083 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMCa / MMCaCO3; 2071 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2084 RA = 1000 * RA / liters; 2072 }
2085 calcium = wg_calcium + RA; 2073 break;
2086 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium); 2074 case 3:
2087 } 2075 RA = -protonDeficit / 19.3; // Calciumhydroxide
2088 break; 2076 $('#wa_base').val(Round(RA, 2));
2089 case 3: RA = -protonDeficit / 19.3; // Calciumhydroxide 2077 setWaterAgent('Ca(OH)2', Round(RA, 2));
2090 $('#wa_base').val(Round(RA, 2)); 2078 if (liters > 0) {
2091 setWaterAgent('Ca(OH)2', Round(RA, 2)); 2079 // Bicarbonate
2092 if (liters > 0) { 2080 RA = -protonDeficit / liters;
2093 // Bicarbonate 2081 total_alkalinity = wg_total_alkalinity + RA;
2094 RA = -protonDeficit / liters; 2082 bicarbonate = total_alkalinity * 61 / 50;
2095 total_alkalinity = wg_total_alkalinity + RA; 2083 // Calcium
2096 bicarbonate = total_alkalinity * 61 / 50; 2084 RA = (parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 * 1000 +
2097 // Calcium 2085 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4 * 1000 +
2098 RA = parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 + 2086 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMCa / MMCaOH2 * 1000) / liters;
2099 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4 + 2087 calcium = wg_calcium + RA;
2100 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMCa / MMCaOH2; 2088 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2101 RA = 1000 * RA / liters; 2089 }
2102 calcium = wg_calcium + RA; 2090 break;
2103 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2104 }
2105 break;
2106 } 2091 }
2107 } 2092 }
2108 ph = TpH; 2093 ph = TpH;
2109 $('#wb_ph').val(Math.round(ph * 10) / 10); 2094 $('#wb_ph').val(Round(ph, 2));
2095 $('#est_mash_ph').val(Round(ph, 2));
2110 } else { // Manual 2096 } else { // Manual
2097 /* Manual calculate pH */
2098 $('.c_mashph').hide();
2111 console.log('calc_acid no'); 2099 console.log('calc_acid no');
2112 // First add base salts 2100 if (parseFloat($('#wa_base').jqxNumberInput('decimal')) > 0 && liters > 0) {
2113 if (parseFloat($('#wa_base').jqxNumberInput('decimal')) > 0) { 2101 /* First add the base salts */
2114 if (liters > 0) { 2102 switch (BT) {
2115 switch (BT) { 2103 case 0: // Sodiumbicarbonate, Na
2116 case 0: // Sodiumbicarbonate, Na 2104 RA = (parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl * 1000 +
2117 RA = parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl + 2105 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMNa / MMNaHCO3 * 1000) / liters;
2118 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMNa / MMNaHCO3; 2106 sodium = wg_sodium + RA;
2119 RA = 1000 * RA / liters; 2107 // HCO3
2120 sodium = wg_sodium + RA; 2108 RA = (parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3 * 1000) / liters;
2121 // HCO3 2109 bicarbonate = wg_bicarbonate + RA;
2122 RA = parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3; 2110 total_alkalinity = bicarbonate * 50 / 61;
2123 RA = 1000 * RA / liters; 2111 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2124 bicarbonate = wg_bicarbonate + RA; 2112 break;
2125 total_alkalinity = bicarbonate * 50 / 61; 2113 case 1: // Sodiumcarbonate
2126 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium); 2114 RA = (parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl * 1000 +
2127 break; 2115 parseFloat($('#wa_base').jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3 * 1000) / liters;
2128 case 1: // Sodiumcarbonate 2116 sodium = wg_sodium + RA;
2129 RA = parseFloat($('#wa_nacl').jqxNumberInput('decimal')) * MMNa / MMNaCl + 2117 // HCO3
2130 parseFloat($('#wa_base').jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3; 2118 RA = (parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3 * 1000) / liters;
2131 RA = 1000 * RA / liters; 2119 bicarbonate = wg_bicarbonate + RA;
2132 sodium = wg_sodium + RA; 2120 total_alkalinity = bicarbonate * 50 / 61;
2133 // HCO3 2121 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2134 RA = parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3; 2122 break;
2135 RA = 1000 * RA / liters; 2123 case 2: // Calciumcarbonate: Bicarbonate
2136 bicarbonate = wg_bicarbonate + RA; 2124 RA = (parseFloat($('#wa_base').jqxNumberInput('decimal')) / 3 * MMHCO3 * 1000 / MMCaCO3) / liters;
2137 total_alkalinity = bicarbonate * 50 / 61; 2125 bicarbonate = wg_bicarbonate + RA;
2138 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium); 2126 total_alkalinity = bicarbonate * 50 / 61;
2139 break; 2127 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
2140 case 2: // Calciumcarbonate: Bicarbonate 2128 // Ca
2141 RA = parseFloat($('#wa_base').jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3; 2129 RA = (parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa * 1000 / MMCaCl2 +
2142 RA = 1000 * RA / liters; 2130 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa * 1000 / MMCaSO4 +
2143 bicarbonate = wg_bicarbonate + RA; 2131 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMCa * 1000 / MMCaCO3) / liters;
2144 total_alkalinity = bicarbonate * 50 / 61; 2132 calcium = wg_calcium + RA;
2145 RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium); 2133 break;
2146 // Ca
2147 RA = parseFloat($('#wa_cacl2').jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
2148 parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
2149 parseFloat($('#wa_base').jqxNumberInput('decimal')) * MMCa / MMCaCO3;
2150 RA = 1000 * RA / liters;
2151 calcium = wg_calcium + RA;
2152 break;
2153 }
2154 } 2134 }
2155 } 2135 }
2156 2136
2157 TpH = parseFloat(dataRecord.mash_ph); 2137 pHa = Round(ph, 3); // Adjusted water pH
2158 pHa = MashpH(); // This one is in demi water, should be in adjusted water??? 2138 // Then calculate the new pH with added acids and malts
2159 // Then calculate the new pH with added acids 2139 console.log('Mash pH: ' + pHa);
2160 if (parseFloat($('#wa_acid').jqxNumberInput('decimal')) > 0) { 2140 Acid = AcidTypeData[AT].AcidSG * (parseFloat(dataRecord.wa_acid_perc) / 100); // ml
2161 console.log('TpH: ' + TpH + ' water: ' + pHa); 2141 Acid *= parseFloat($('#wa_acid').jqxNumberInput('decimal'));
2162 Acid = parseFloat($('#wa_acid').jqxNumberInput('decimal')); 2142 Acid /= AcidTypeData[AT].MolWt; // mg
2163 if (parseFloat($('#wa_acid_perc').jqxNumberInput('decimal')) == 0) 2143 Acidmg = Acid;
2164 $('#wa_acid_perc').val(AcidPrc); 2144
2165 Acid = Acid / AcidPrc * (parseFloat($('#wa_acid_perc').jqxNumberInput('decimal')) / 100); // ml 2145 //find the pH where the protondeficit = protondeficit by the acid
2166 Acid *= AcidSG; // ml 2146 frac = CalcFrac(pHa, AcidTypeData[AT].pK1, AcidTypeData[AT].pK2, AcidTypeData[AT].pK3);
2167 Acid /= MolWt; // mg 2147 protonDeficit = Round(Acid * frac, 3);
2168 Acidmg = Acid; 2148 //console.log('protonDeficit Acid: ' + protonDeficit + ' frac: ' + frac + ' pH: ' + pHa);
2169 2149
2170 //find the pH where the protondeficit = protondeficit by the acid 2150 deltapH = 0.001;
2171 frac = CalcFrac(pHa, pK1, pK2, pK3); 2151 deltapd = 0.1;
2172 protonDeficit = Acid * frac; 2152 pd = Round(ProtonDeficit(pHa), 6);
2173 2153 n = 0;
2174 deltapH = 0.001; 2154 while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 4000)) {
2175 deltapd = 0.1;
2176 pd = ProtonDeficit(pHa);
2177 n = 0;
2178 while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 2000)) {
2179 n++; 2155 n++;
2180 if (pd < (protonDeficit - deltapd)) 2156 if (pd < (protonDeficit - deltapd))
2181 pHa -= deltapH; 2157 pHa -= deltapH;
2182 else if (pd > (protonDeficit + deltapd)) 2158 else if (pd > (protonDeficit + deltapd))
2183 pHa += deltapH; 2159 pHa += deltapH;
2184 frac = CalcFrac(pHa, pK1, pK2, pK3); 2160 frac = CalcFrac(pHa, AcidTypeData[AT].pK1, AcidTypeData[AT].pK2, AcidTypeData[AT].pK3);
2185 protonDeficit = Acid * frac; 2161 protonDeficit = Acid * frac;
2186 pd = ProtonDeficit(pHa); 2162 pd = ProtonDeficit(pHa);
2187 }
2188 console.log('n: ' + n + ' pd: ' + pd + ' protonDeficit: ' + protonDeficit + ' frac: ' + frac + ' pHa: ' + pHa);
2189 RA = wg_bicarbonate - protonDeficit * frac / liters;
2190 bicarbonate = RA;
2191 total_alkalinity = RA * 50 / 61;
2192 ph = pHa;
2193 $('#wb_ph').val(Round(ph, 1));
2194 } 2163 }
2164 //console.log('n: ' + n + ' pd: ' + pd + ' protonDeficit: ' + protonDeficit + ' frac: ' + frac + ' pHa: ' + pHa);
2165 RA = wg_bicarbonate - protonDeficit * frac / liters;
2166 bicarbonate = RA;
2167 total_alkalinity = RA * 50 / 61;
2168 ph = pHa;
2169 $('#wb_ph').val(Round(ph, 2));
2170 $('#est_mash_ph').val(Round(ph, 2));
2195 } 2171 }
2196 2172
2197 if ((AT == 3) && (liters > 0)) { // Sulfuctic / Zwavelzuur 2173 if ((AT == 3) && (liters > 0)) { // Sulfuctic / Zwavelzuur
2198 RA = parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 + 2174 RA = parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
2199 parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 + 2175 parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 +
2303 calcSparge(); 2279 calcSparge();
2304 } 2280 }
2305 2281
2306 2282
2307 function calcSparge() { 2283 function calcSparge() {
2308 var TargetpH, Source_pH, Source_alkalinity, r1, r2, d, f1, f3, 2284
2309 r143, r243, d43, f143, f343, alkalinity, Ct, r1g, r2g, dg, f1g, f3g, 2285 /* Based on the work of ajDeLange. */
2310 Acid, AT, result, pK1, pK2, pK3, MolWt, AcidSG, AcidPrc, fract; 2286 var TargetpH = dataRecord.sparge_ph;
2311 2287 var Source_pH = dataRecord.w1_ph;
2312 // Code from BrewBuddy/Brouwhulp, who got it from http://www.brewery.org/brewery/library/Acidi0,00fWaterAJD0497.html 2288 var Source_alkalinity = dataRecord.w1_total_alkalinity;
2313 TargetpH = dataRecord.sparge_ph;
2314 Source_pH = dataRecord.w1_ph;
2315 Source_alkalinity = dataRecord.w1_total_alkalinity;
2316 // Select watersource or fallback to the first source. 2289 // Select watersource or fallback to the first source.
2317 if (dataRecord.sparge_source == 1) { // Source 2 2290 if (dataRecord.sparge_source == 1) { // Source 2
2318 if (dataRecord.w2_ph > 0.0) { 2291 if (dataRecord.w2_ph > 0.0) {
2319 Source_pH = dataRecord.w2_ph; 2292 Source_pH = dataRecord.w2_ph;
2320 Source_alkalinity = dataRecord.w2_total_alkalinity; 2293 Source_alkalinity = dataRecord.w2_total_alkalinity;
2331 $('#sparge_source').val(0); 2304 $('#sparge_source').val(0);
2332 } 2305 }
2333 } 2306 }
2334 2307
2335 // Step 1: Compute the mole fractions of carbonic (f1o), bicarbonate (f2o) and carbonate(f3o) at the water pH 2308 // Step 1: Compute the mole fractions of carbonic (f1o), bicarbonate (f2o) and carbonate(f3o) at the water pH
2336 r1 = Math.pow(10, Source_pH - 6.38); 2309 var r1 = Math.pow(10, Source_pH - 6.35);
2337 r2 = Math.pow(10, Source_pH - 10.373); 2310 var r2 = Math.pow(10, Source_pH - 10.33);
2338 d = 1 + r1 + r1 * r2; 2311 var d = 1 + r1 + r1 * r2;
2339 f1 = 1 / d; 2312 var f1 = 1 / d;
2340 f3 = r1 * r2 / d; 2313 var f3 = r1 * r2 / d;
2341 2314
2342 //Step 2. Compute the mole fractions at pH = 4.3 (the pH which defines alkalinity) 2315 //Step 2. Compute the mole fractions at pH = 4.3 (the pH which defines alkalinity)
2343 r143 = Math.pow(10, 4.3 - 6.38); 2316 var r143 = Math.pow(10, 4.3 - 6.35);
2344 r243 = Math.pow(10, 4.3 - 10.373); 2317 var r243 = Math.pow(10, 4.3 - 10.33);
2345 d43 = 1 + r143 + r143 * r243; 2318 var d43 = 1 + r143 + r143 * r243;
2346 f143 = 1 / d43; 2319 var f143 = 1 / d43;
2347 f343 = r143 * r243 / d43; 2320 var f343 = r143 * r243 / d43;
2348 2321
2349 //Step 3. Convert the sample alkalinity to milliequivalents/L
2350 alkalinity = Source_alkalinity / 50;
2351 //Step 4. Solve 2322 //Step 4. Solve
2352 Ct = (alkalinity - 1000 * (Math.pow(10, -4.3) - Math.pow(10, -Source_pH))) / ((f143 - f1) + (f3 - f343)); 2323 //var Ct = (alkalinity - 1000 * (Math.pow(10, -4.3) - Math.pow(10, -Source_pH))) / ((f143 - f1) + (f3 - f343));
2324 var Ct = Source_alkalinity / 50 / ((f143 - f1) + (f3 - f343));
2353 2325
2354 //Step 5. Compute mole fractions at desired pH 2326 //Step 5. Compute mole fractions at desired pH
2355 r1g = Math.pow(10, TargetpH - 6.38); 2327 var r1g = Math.pow(10, TargetpH - 6.35);
2356 r2g = Math.pow(10, TargetpH - 10.373); 2328 var r2g = Math.pow(10, TargetpH - 10.33);
2357 dg = 1 + r1g + r1g * r2g; 2329 var dg = 1 + r1g + r1g * r2g;
2358 f1g = 1 / dg; 2330 var f1g = 1 / dg;
2359 f3g = r1g * r2g / dg; 2331 var f3g = r1g * r2g / dg;
2360 2332
2361 //Step 6. Use these to compute the milliequivalents acid required per liter (mEq/L) 2333 //Step 6. Use these to compute the milliequivalents acid required per liter (mEq/L)
2362 Acid = Ct * ((f1g - f1) + (f3 - f3g)) + Math.pow(10, -TargetpH) - Math.pow(10, -Source_pH); //mEq/l 2334 var Acid = Ct * ((f1g - f1) + (f3 - f3g)) + Math.pow(10, -TargetpH) - Math.pow(10, -Source_pH); //mEq/l
2363 Acid += 0.01; // Add acid that would be required for distilled water. 2335 Acid += 0.01; // Add acid that would be required for distilled water.
2364 if (dataRecord.sparge_acid_type < 0 || dataRecord.sparge_acid_type > 3) { 2336
2337 //Step 8. Get the acid data.
2338 AT = dataRecord.sparge_acid_type;
2339 if (AT < 0 || AT >= AcidTypeData.length) {
2340 AT = 0;
2365 dataRecord.sparge_acid_type = 0; 2341 dataRecord.sparge_acid_type = 0;
2366 $('#sparge_acid_type').val(0); 2342 $('#sparge_acid_type').val(0);
2367 } 2343 dataRecord.sparge_acid_perc = AcidTypeData[0].AcidPrc;
2368 2344 $('#sparge_acid_perc').val(dataRecord.sparge_acid_perc);
2369 //Step 8. Get the acid data. 2345 }
2370 AT = dataRecord.sparge_acid_type; 2346 var fract = CalcFrac(TargetpH, AcidTypeData[AT].pK1, AcidTypeData[AT].pK2, AcidTypeData[AT].pK3);
2371 result = GetAcidSpecs(AT);
2372 pK1 = result.pK1;
2373 pK2 = result.pK2;
2374 pK3 = result.pK3;
2375 MolWt = result.MolWt;
2376 AcidSG = result.AcidSG;
2377 AcidPrc = result.AcidPrc;
2378 fract = CalcFrac(TargetpH, pK1, pK2, pK3);
2379 2347
2380 //Step 9. Now divide the mEq required by the "fraction". This is the required number of moles of acid. 2348 //Step 9. Now divide the mEq required by the "fraction". This is the required number of moles of acid.
2381 Acid /= fract; 2349 Acid /= fract;
2382 2350
2383 //Step 10. Multiply by molecular weight of the acid 2351 //Step 10. Multiply by molecular weight of the acid
2384 Acid *= MolWt; //mg 2352 Acid *= AcidTypeData[AT].MolWt; //mg
2385 2353
2386 Acid = Acid / AcidSG; //ml ; 88% lactic solution 2354 //Step 11. Divide by Specific Gravity and Percentage to get the final ml.
2387 f1 = dataRecord.sparge_acid_perc; 2355 Acid = Acid / AcidTypeData[AT].AcidSG / (dataRecord.sparge_acid_perc / 100); //ml
2388 if (f1 <= 0.1) 2356 Acid *= dataRecord.sparge_volume; //ml acid total
2389 f1 = AcidPrc;
2390 Acid = Acid * AcidPrc / (f1 / 100);
2391
2392 Acid *= dataRecord.sparge_volume; //ml lactic acid total
2393 Acid = Round(Acid, 2); 2357 Acid = Round(Acid, 2);
2394 dataRecord.sparge_acid_amount = Acid / 1000; 2358 dataRecord.sparge_acid_amount = Acid / 1000;
2395 $('#sparge_acid_amount').val(Acid); 2359 $('#sparge_acid_amount').val(Acid);
2396 } 2360 }
2397 2361
3748 $('#wg_amount').val(mash_infuse); 3712 $('#wg_amount').val(mash_infuse);
3749 }); 3713 });
3750 3714
3751 // Tab 7, Water 3715 // Tab 7, Water
3752 $('#tgt_bu').jqxNumberInput(Show2wat); 3716 $('#tgt_bu').jqxNumberInput(Show2wat);
3753 $('#tgt_so4_cl').jqxNumberInput(Show1wat); 3717 $('#tgt_so4_cl,#got_so4_cl').jqxNumberInput(Show1wat);
3754 $('#got_so4_cl').jqxNumberInput(Show1wat);
3755 3718
3756 // Water source 1 3719 // Water source 1
3757 $('#w1_name').jqxDropDownList({ 3720 $('#w1_name').jqxDropDownList({
3758 placeHolder: 'Kies hoofd water:', 3721 placeHolder: 'Kies hoofd water:',
3759 theme: theme, 3722 theme: theme,
3793 $('#w1_magnesium').jqxNumberInput(Show1wat); 3756 $('#w1_magnesium').jqxNumberInput(Show1wat);
3794 $('#w1_sodium').jqxNumberInput(Show1wat); 3757 $('#w1_sodium').jqxNumberInput(Show1wat);
3795 $('#w1_total_alkalinity').jqxNumberInput(Show1wat); 3758 $('#w1_total_alkalinity').jqxNumberInput(Show1wat);
3796 $('#w1_chloride').jqxNumberInput(Show1wat); 3759 $('#w1_chloride').jqxNumberInput(Show1wat);
3797 $('#w1_sulfate').jqxNumberInput(Show1wat); 3760 $('#w1_sulfate').jqxNumberInput(Show1wat);
3798 $('#w1_ph').jqxNumberInput(Show1wat); 3761 $('#w1_ph').jqxNumberInput(Show2wat);
3799 // Water source 2 3762 // Water source 2
3800 $('#w2_name').jqxDropDownList({ 3763 $('#w2_name').jqxDropDownList({
3801 placeHolder: 'Kies meng water:', 3764 placeHolder: 'Kies meng water:',
3802 theme: theme, 3765 theme: theme,
3803 source: waterlist, 3766 source: waterlist,
3838 $('#w2_magnesium').jqxNumberInput(Show1wat); 3801 $('#w2_magnesium').jqxNumberInput(Show1wat);
3839 $('#w2_sodium').jqxNumberInput(Show1wat); 3802 $('#w2_sodium').jqxNumberInput(Show1wat);
3840 $('#w2_total_alkalinity').jqxNumberInput(Show1wat); 3803 $('#w2_total_alkalinity').jqxNumberInput(Show1wat);
3841 $('#w2_chloride').jqxNumberInput(Show1wat); 3804 $('#w2_chloride').jqxNumberInput(Show1wat);
3842 $('#w2_sulfate').jqxNumberInput(Show1wat); 3805 $('#w2_sulfate').jqxNumberInput(Show1wat);
3843 $('#w2_ph').jqxNumberInput(Show1wat); 3806 $('#w2_ph').jqxNumberInput(Show2wat);
3844 // Water mixed 3807 // Water mixed
3845 $('#wg_amount').jqxNumberInput(Show1wat); 3808 $('#wg_amount').jqxNumberInput(Show1wat);
3846 $('#wg_calcium').jqxNumberInput(Show1wat); 3809 $('#wg_calcium').jqxNumberInput(Show1wat);
3847 $('#wg_magnesium').jqxNumberInput(Show1wat); 3810 $('#wg_magnesium').jqxNumberInput(Show1wat);
3848 $('#wg_sodium').jqxNumberInput(Show1wat); 3811 $('#wg_sodium').jqxNumberInput(Show1wat);
3849 $('#wg_total_alkalinity').jqxNumberInput(Show1wat); 3812 $('#wg_total_alkalinity').jqxNumberInput(Show1wat);
3850 $('#wg_chloride').jqxNumberInput(Show1wat); 3813 $('#wg_chloride').jqxNumberInput(Show1wat);
3851 $('#wg_sulfate').jqxNumberInput(Show1wat); 3814 $('#wg_sulfate').jqxNumberInput(Show1wat);
3852 $('#wg_ph').jqxNumberInput(Show1wat); 3815 $('#wg_ph').jqxNumberInput(Show2wat);
3853 // Water treated 3816 // Water treated
3854 $('#wb_calcium').jqxTooltip({ content: 'De ideale hoeveelheid Calcium is tussen 40 en 150.'}); 3817 $('#wb_calcium').jqxTooltip({ content: 'De ideale hoeveelheid Calcium is tussen 40 en 150.'});
3855 $('#wb_calcium').jqxNumberInput(Show1wat); 3818 $('#wb_calcium').jqxNumberInput(Show1wat);
3856 $('#wb_magnesium').jqxTooltip({ content: 'De ideale hoeveelheid Magnesium is lager dan 30.'}); 3819 $('#wb_magnesium').jqxTooltip({ content: 'De ideale hoeveelheid Magnesium is lager dan 30.'});
3857 $('#wb_magnesium').jqxNumberInput(Show1wat); 3820 $('#wb_magnesium').jqxNumberInput(Show1wat);
3860 $('#wb_chloride').jqxTooltip({ content: 'De ideale hoeveelheid Chloride is tussen 50 en 100.'}); 3823 $('#wb_chloride').jqxTooltip({ content: 'De ideale hoeveelheid Chloride is tussen 50 en 100.'});
3861 $('#wb_chloride').jqxNumberInput(Show1wat); 3824 $('#wb_chloride').jqxNumberInput(Show1wat);
3862 $('#wb_sulfate').jqxTooltip({ content: 'De ideale hoeveelheid Sulfaat is tussen 50 en 350.'}); 3825 $('#wb_sulfate').jqxTooltip({ content: 'De ideale hoeveelheid Sulfaat is tussen 50 en 350.'});
3863 $('#wb_sulfate').jqxNumberInput(Show1wat); 3826 $('#wb_sulfate').jqxNumberInput(Show1wat);
3864 $('#wb_total_alkalinity').jqxNumberInput(Show1wat); 3827 $('#wb_total_alkalinity').jqxNumberInput(Show1wat);
3865 $('#wb_ph').jqxNumberInput(Show1wat); 3828 $('#wb_ph').jqxNumberInput(Show2wat);
3866 // Water target profile 3829 // Water target profile
3867 $('#pr_name').jqxDropDownList({ 3830 $('#pr_name').jqxDropDownList({
3868 placeHolder: 'Kies doel profiel:', 3831 placeHolder: 'Kies doel profiel:',
3869 theme: theme, 3832 theme: theme,
3870 source: waterprofiles, 3833 source: waterprofiles,

mercurial