diff -r 265e3d50d3ee -r 61436d428454 www/js/global.js --- a/www/js/global.js Thu Jul 11 16:53:34 2019 +0200 +++ b/www/js/global.js Sun Jul 14 15:25:23 2019 +0200 @@ -725,6 +725,49 @@ +function Round(n,d) { +var m, i; +for (i = 0, m = 1; i < d; i++, m *= 10); +return Math.round(n * m) / m; +} + + +/* + * From "Rekenen aan bier" by Hans Halberstadt. + */ +var K1s = 0.384; +var K1a = -0.177; +var K1e = 0.241; +var K1g = 0.247; +var Ks = 0.1415; +var Ka1 = 0.058; +var Ka2 = 0.078; +var Ke = 0.174; +var Kg = 0.109; + +// =E2/E6+(E3/E6)*$B$24/$B$23+(E3/E6)*(E3/E6)*$B$25/$B$23+E4/E6*$B$26/$B$23+E5/E6*$B$27/$B$23 +// For Brix +function A(sugar, volume, alc, eiwit, glycerol) { + + var vol = volume * 1000; + var A = sugar/vol + (alc/vol)*Ka1/Ks + (alc/vol)*(alc/vol) * Ka2/Ks + eiwit/vol * Ke/Ks + glycerol/vol * Kg/Ks; + + console.log("A("+sugar+"."+volume+","+alc+","+eiwit+","+glycerol+"):"+A); + return A; +} + +// =E2/E6+(E3/E6)*$B$20/$B$19+E4/E6*$B$21/$B$19+E5/E6*$B$22/$B$19 +// for Plato +function B(sugar, volume, alc, eiwit, glycerol) { + + var vol = volume * 1000; + var B = sugar/vol + (alc/vol)*K1a/K1s + eiwit/vol*K1e/K1s + glycerol/vol*K1g/K1s; + + console.log("B("+sugar+"."+volume+","+alc+","+eiwit+","+glycerol+"):"+B); + return B; +} + + function ebc_to_srm(ebc) { var srm = -1.32303E-12 * Math.pow(ebc, 4) - 0.00000000291515 * Math.pow(ebc, 3) + 0.00000818515 * Math.pow(ebc, 2) + 0.372038 * ebc + 0.596351; if ((ebc < 0) || (srm < 0)) @@ -786,23 +829,12 @@ * Kleurwerking naar SRM. Niet voor Halberstadt, Naudts */ function kw_to_srm(colormethod, c) { - if(colormethod==0)// Morey - return 1.4922*Math.pow(c,0.6859); - if(colormethod==1)// Mosher - return 0.3*c+4.7; - if(colormethod==2)// Daniels - return 0.2*c+8.4; - if(colormethod==3)// Halberstadt - return 0; - if(colormethod==4)// Naudts - return 0; +if(colormethod==0)return 1.4922*Math.pow(c,0.6859);//Morey +if(colormethod==1)return 0.3*c+4.7;//Mosher +if(colormethod==2)return 0.2*c+8.4;//Daniels +return 0;//Halberstadt,Naudts } - - - -function kw_to_ebc(colormethod, c) { - return srm_to_ebc(kw_to_srm(colormethod,c)); -} +function kw_to_ebc(colormethod, c){return srm_to_ebc(kw_to_srm(colormethod,c));} @@ -811,86 +843,80 @@ */ function toIBU(Use, Form, SG, Volume, Amount, Boiltime, Alpha, Method) { - var gravity = parseFloat(SG); - var liters = parseFloat(Volume); - var alpha = parseFloat(Alpha)/100; - var mass = parseFloat(Amount) * 1000; - var time = parseFloat(Boiltime); - var fmoment = 1.0; - var pfactor = 1.0; - var ibu = 0; +var gravity=parseFloat(SG); +var liters=parseFloat(Volume); +var alpha=parseFloat(Alpha)/100; +var mass=parseFloat(Amount)*1000; +var time=parseFloat(Boiltime); +var fmoment=1.0; +var pfactor=1.0; +var ibu=0; - if ((Use == 3) || (Use == 4) || (Use == 5)) { // Aroma, Whirlpool or Dry hop. - fmoment = 0.0; - } else if (Use == 0) { // Mash - fmoment += my_factor_mashhop / 100; // Brouwhulp - } else if (Use == 1) { // First wort - fmoment += my_factor_fwh / 100; // Brouwhulp, Louis, Ozzie - } +if((Use==3)||(Use==4)||(Use==5)){// Aroma, Whirlpool or Dry hop. +fmoment=0.0; +}else if(Use==0){// Mash +fmoment+=my_factor_mashhop/100;// Brouwhulp +}else if(Use==1){// First wort +fmoment+=my_factor_fwh/100;// Brouwhulp, Louis, Ozzie +} - if (Form == 0) { // Pellet - pfactor += my_factor_pellet / 100; - } - if (Form == 1 ) { // Plug - pfactor += my_factor_plug / 100; - } - if (Form == 3) { // Wet leaf - pfactor += my_factor_wethop / 100; // From https://github.com/chrisgilmerproj/brewday/blob/master/brew/constants.py - } +if(Form==0){// Pellet +pfactor+=my_factor_pellet/100; +} +if(Form==1){// Plug +pfactor+=my_factor_plug/100; +} +if(Form==3){// Wet leaf +pfactor+=my_factor_wethop/100;// From https://github.com/chrisgilmerproj/brewday/blob/master/brew/constants.py +} - if (Method == 0) { // Tinseth + if(Method==0){// Tinseth /* http://realbeer.com/hops/research.html */ var AddedAlphaAcids = (alpha * mass * 1000) / liters; var Bigness_factor = 1.65 * Math.pow( 0.000125, gravity - 1); var BoilTime_factor = ((1 - Math.exp(-0.04 * time)) / 4.15); var utiisation = Bigness_factor * BoilTime_factor; - ibu = Math.round(utiisation * AddedAlphaAcids * fmoment * pfactor * 10) / 10.0; + ibu = Round(utiisation * AddedAlphaAcids * fmoment * pfactor,1); } - if (Method == 2) { // Daniels + if(Method==2){// Daniels var boilfactor; var sgfactor; - if (Form == 2) // Leaf + if (Form==2)// Leaf boilfactor = -(0.0041*time*time)+(0.6162*time)+1.5779; else boilfactor = -(0.0051*time*time)+(0.7835*time)+1.9348; - if (gravity < 1050) - sgfactor = 0; + if (gravity<1050) + sgfactor=0; else - sgfactor = (gravity - 1050) / 200; - ibu = Math.round(fmoment * ((mass * (alpha * 100) * boilfactor * 0.1) / (liters * (1 + sgfactor))) * 10) / 10; + sgfactor=(gravity-1050)/200; + ibu = Round(fmoment*((mass*(alpha*100)*boilfactor* 0.1)/(liters*(1+sgfactor))),1); } - if (Method == 1) { // Rager + if(Method==1){// Rager var boilfactor; var sgfactor; - boilfactor = fmoment * 18.11 + 13.86 * Math.tanh((time * 31.32) / 18.27); - if (gravity < 1050) - sgfactor = 0; + boilfactor = fmoment*18.11+13.86*Math.tanh((time*31.32)/18.27); + if (gravity<1050) + sgfactor=0; else - sgfactor = (gravity - 1050) / 200; - ibu = Math.round((mass * (alpha * 100) * boilfactor * 0.1) / (liters * (1 + sgfactor)) * 10) / 10; + sgfactor=(gravity-1050)/200; + ibu = Round((mass*(alpha*100)*boilfactor*0.1)/(liters*(1+sgfactor)),1); } -// console.log("toIBU("+Use+","+Form+","+SG+","+Volume+","+Amount+","+Boiltime+","+Alpha+","+Method+"):"+ibu+" fm:"+fmoment+" pf:"+pfactor); + //console.log("toIBU("+Use+","+Form+","+SG+","+Volume+","+Amount+","+Boiltime+","+Alpha+","+Method+"):"+ibu+" fm:"+fmoment+" pf:"+pfactor); return ibu; } -function ebc_to_color(ebc) { - return srm_to_color(ebc_to_srm(ebc)); +function ebc_to_color(ebc){return srm_to_color(ebc_to_srm(ebc));} +function srm_to_color(srm){ +var i = Math.round(srm * 10); +if(i<0){ +i=0; } - - - -function srm_to_color(srm) { - - var i = Math.round(srm * 10); - if (i < 0) { - i = 0; - } - if (i > 299) { - i = 299; - } +if(i>299){ +i=299; +} /* Table copied from Brouwhulp/BrewBuddy */ var R = [ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, // 0 @@ -941,13 +967,13 @@ 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2 ]; - var color = R[i] * 65536 + G[i] * 256 + B[i]; - var result = color.toString(16).toUpperCase(); - if (result.length < 6) { - result = '0' + result; - } - result = '#' + result; - return result; +var color=R[i]*65536+G[i]*256+B[i]; +var result=color.toString(16).toUpperCase(); +if(result.length<6) { +result='0'+result; +} +result='#'+result; +return result; } @@ -967,7 +993,7 @@ plato = 100 * sugars / (batch_size * sg); sg = plato_to_sg(plato); } - return Math.round(sg * 10000) / 10000; + return Round(sg,4); } @@ -1006,7 +1032,7 @@ // 0.00553 Attenuation factor percentage simple sugars // 0.547 Attenuation factor constant var AttBeer = 0.00825 * attenuation + 0.00817 * BD - 0.00684 * Temp + 0.00026 * TotTme - 0.00356 * percCara + 0.00553 * percSugar + 0.547; - var fg = Math.round((1 + (1 - AttBeer) * (og - 1)) * 10000) / 10000; + var fg = Round(1 + (1 - AttBeer) * (og - 1),4); console.log("estimate_fg("+percSugar+","+percCara+","+BD+","+TotTme+","+Temp+","+attenuation+","+og+") AttBeer:"+AttBeer+" fg:"+fg); return fg;