www/js/prod_edit.js

changeset 349
0e44535f7435
parent 348
5fc0f4b42224
child 352
9d2a4703bdac
equal deleted inserted replaced
348:5fc0f4b42224 349:0e44535f7435
1006 } 1006 }
1007 } 1007 }
1008 } 1008 }
1009 1009
1010 function setRangeIndicator(ion, rangeCode) { 1010 function setRangeIndicator(ion, rangeCode) {
1011 if (rangeCode == "laag") 1011 if ((rangeCode == "laag") || (rangeCode == "hoog"))
1012 $("#wr_"+ion).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+rangeCode + "</span>"); 1012 $("#wr_"+ion).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+rangeCode + "</span>");
1013 else if (rangeCode == "hoog")
1014 $("#wr_"+ion).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+rangeCode+"</span>");
1015 else 1013 else
1016 $("#wr_"+ion).html("<img src='images/dialog-ok-apply.png'>"); 1014 $("#wr_"+ion).html("<img src='images/dialog-ok-apply.png'>");
1017 } 1015 }
1018 1016
1019 function mix(v1, v2, c1, c2) { 1017 function mix(v1, v2, c1, c2) {
1119 } 1117 }
1120 1118
1121 function GetAcidSpecs(AT) { 1119 function GetAcidSpecs(AT) {
1122 switch(AT) { 1120 switch(AT) {
1123 case 0: return { // Melkzuur 1121 case 0: return { // Melkzuur
1124 pK1: 3.08, 1122 pK1: 3.86,
1125 pK2: 20, 1123 pK2: 20,
1126 pK3: 20, 1124 pK3: 20,
1127 MolWt: 90.08, 1125 MolWt: 90.08,
1128 AcidSG: 1214, 1126 AcidSG: 1214, // 1214 1209
1129 AcidPrc: 0.88 1127 AcidPrc: 0.88 // 0.88 0.80
1130 }; 1128 };
1131 case 1: return { // Zoutzuur 1129 case 1: return { // Zoutzuur
1132 pK1: -10, 1130 pK1: -7,
1133 pK2: 20, 1131 pK2: 20,
1134 pK3: 20, 1132 pK3: 20,
1135 MolWt: 36.46, 1133 MolWt: 36.46,
1136 AcidSG: 1142, 1134 AcidSG: 1142,
1137 AcidPrc: 0.28 1135 AcidPrc: 0.28
1143 MolWt: 98.00, 1141 MolWt: 98.00,
1144 AcidSG: 1170, 1142 AcidSG: 1170,
1145 AcidPrc: 0.25 1143 AcidPrc: 0.25
1146 }; 1144 };
1147 case 3: return { // Zwavelzuur 1145 case 3: return { // Zwavelzuur
1148 pK1: -10, 1146 pK1: -1,
1149 pK2: 1.92, 1147 pK2: 1.92,
1150 pK3: 20, 1148 pK3: 20,
1151 MolWt: 98.07, 1149 MolWt: 98.07,
1152 AcidSG: 1700, 1150 AcidSG: 1700,
1153 AcidPrc: 0.93 1151 AcidPrc: 0.93
1589 } else { 1587 } else {
1590 dataRecord.sparge_source = 0; 1588 dataRecord.sparge_source = 0;
1591 $("#sparge_source").val(0); 1589 $("#sparge_source").val(0);
1592 } 1590 }
1593 } 1591 }
1594 1592 //console.log("calcSparge() target pH: "+TargetpH+" Source: "+Source_pH+" alkalinity: "+Source_alkalinity);
1595 console.log("calcSparge() target pH: "+TargetpH+" Source: "+Source_pH+" alkalinity: "+Source_alkalinity);
1596 1593
1597 // Step 1: Compute the mole fractions of carbonic (f1o), bicarbonate (f2o) and carbonate(f3o) at the water pH 1594 // Step 1: Compute the mole fractions of carbonic (f1o), bicarbonate (f2o) and carbonate(f3o) at the water pH
1598 var r1 = Math.pow(10, Source_pH - 6.38); 1595 var r1 = Math.pow(10, Source_pH - 6.38);
1599 var r2 = Math.pow(10, Source_pH - 10.33); 1596 var r2 = Math.pow(10, Source_pH - 10.373);
1600 var d = 1 + r1 + r1*r2; 1597 var d = 1 + r1 + r1*r2;
1601 var f1 = 1/d; 1598 var f1 = 1/d;
1602 var f2 = r1/d; 1599 var f2 = r1/d;
1603 var f3 = r1 * r2 / d; 1600 var f3 = r1 * r2 / d;
1604 1601
1605 //Step 2. Compute the mole fractions at pH = 4.3 (the pH which defines alkalinity) 1602 //Step 2. Compute the mole fractions at pH = 4.3 (the pH which defines alkalinity)
1606 var r143 = Math.pow(10, 4.3 - 6.38); 1603 var r143 = Math.pow(10, 4.3 - 6.38);
1607 var r243 = Math.pow(10, 4.3 - 10.33); 1604 var r243 = Math.pow(10, 4.3 - 10.373);
1608 var d43 = 1 + r143 + r143*r243; 1605 var d43 = 1 + r143 + r143*r243;
1609 var f143 = 1/d43; 1606 var f143 = 1/d43;
1610 var f243 = r143 / d43; 1607 var f243 = r143 / d43;
1611 var f343 = r143 * r243 / d43; 1608 var f343 = r143 * r243 / d43;
1612 1609
1613 //Step 3. Convert the sample alkalinity to milliequivalents/L 1610 //Step 3. Convert the water alkalinity to milliequivalents/L
1614 var alkalinity = Source_alkalinity / 50; 1611 var alkalinity = Source_alkalinity / 50;
1612
1615 //Step 4. Solve 1613 //Step 4. Solve
1616 alkalinity = alkalinity / ((f143-f1)+(f3-f343)); 1614 var Ct = (alkalinity - 1000 * (Math.pow(10, -4.3) - Math.pow(10, -Source_pH))) / ((f143-f1)+(f3-f343));
1617 1615
1618 //Step 5. Compute mole fractions at desired pH 1616 //Step 5. Compute mole fractions at desired pH
1619 var r1g = Math.pow(10, TargetpH - 6.38); 1617 var r1g = Math.pow(10, TargetpH - 6.38);
1620 var r2g = Math.pow(10, TargetpH - 10.33); 1618 var r2g = Math.pow(10, TargetpH - 10.373);
1621 var dg = 1 + r1g + r1g*r2g; 1619 var dg = 1 + r1g + r1g*r2g;
1622 var f1g = 1/dg; 1620 var f1g = 1/dg;
1623 var f2g = r1g / dg; 1621 var f2g = r1g / dg;
1624 var f3g = r1g * r2g / dg; 1622 var f3g = r1g * r2g / dg;
1625 1623
1626 //Step 6. Use these to compute the milliequivalents acid required per liter (mEq/L) 1624 //Step 6. Use these to compute the milliequivalents acid required per liter (mEq/L)
1627 var Acid = alkalinity * ((f1g-f1)+(f3-f3g)) + Math.pow(10, -TargetpH) - Math.pow(10, -Source_pH); //mEq/l 1625 var Acid = Ct * ((f1g-f1)+(f3-f3g)) + Math.pow(10, -TargetpH) - Math.pow(10, -Source_pH); //mEq/l
1626 Acid += 0.01; // Add acid that would be required for distilled water.
1628 if (dataRecord.sparge_acid_type < 0 || dataRecord.sparge_acid_type > 3) { 1627 if (dataRecord.sparge_acid_type < 0 || dataRecord.sparge_acid_type > 3) {
1629 dataRecord.sparge_acid_type = 0; 1628 dataRecord.sparge_acid_type = 0;
1630 $("#sparge_acid_type").val(0); 1629 $("#sparge_acid_type").val(0);
1631 } 1630 }
1631
1632 //Step 8. Get the acid data.
1632 var AT = dataRecord.sparge_acid_type; 1633 var AT = dataRecord.sparge_acid_type;
1633 var result = GetAcidSpecs(AT); 1634 var result = GetAcidSpecs(AT);
1634 var pK1 = result.pK1; 1635 var pK1 = result.pK1;
1635 var pK2 = result.pK2; 1636 var pK2 = result.pK2;
1636 var pK3 = result.pK3; 1637 var pK3 = result.pK3;

mercurial