--Data and functions for determining mass flow rate for orifice meters --with flange taps --Read Data Tables for Air ZTBL=read("z_air.Z") ZROW=read("z_air.row") ZCOL=read("z_air.col") --Define pos(x) function pos(x) = x when x > 0, 0 otherwise --pos(5):5; pos(-5):0--Test pos(x) function --Define lookup(x,vec) function lookup(x,vec) = k:=1, k:=k+1 while x >= vec[k], k-1 --Define 2D interpolation function interp2D(r,rvec,c,cvec,ztbl) = i:= lookup(r,rvec), j:= lookup(c,cvec), p := (r - rvec[i])/(rvec[i+1] - rvec[i]), q := (c - cvec[j])/(cvec[j+1] - cvec[j]), z := p*(q*ztbl[i+1,j+1] + (1-q)*ztbl[i+1,j]) + (1-p)*(q*ztbl[i,j+1] + (1-q)*ztbl[i,j]),z --Define Constants Rg = 53.3525; gamma = 1.4 --Define gas functions for dry air vis(t) = (7.3026e-7 * t^1.5) / (t + 198.6); vis(520):0.0000 Z(p,t) = interp2D(t,ZROW,p,ZCOL,ZTBL); Z(14.7,520):0.9996 -- Thermal expansion factor for steel Fa(t) = 0.99328+9.153e-6*t+7.9122e-9*t^2-1.5241e-12*t^3; Fa(520):1.0000 --Define discharge coefficient equations for flange taps Ke = 0.5993 + 0.007/D1 + (0.364+0.076/sqrt(D1))*beta^4 + 0.4*(1.6 - 1/D1)^5*pos((0.07+0.5/D1)-beta)^(5/2) - (0.009+0.034/D1)*pos(0.5-beta)^(3/2)+(65/D1^2+3) * pos(beta-0.7)^(5/2) A = D2*(830-5000*beta+9000*beta^2-4200*beta^3+530/sqrt(D1)) Ko = Ke*(1e6*D2/(1e6*D2+15*A)) C(re) = Ko*(1+A/re)*sqrt(1-beta^4) D2 = beta*D1 --Test Discharge Equations beta := 0.6:; D1 := 2.067:; D2:1.2402; C(50000):0.6158; C(75000):0.6132 beta := 0.5:; D1 := 2.067:; D2:1.0335; C(50000):0.6102; C(75000):0.6085 ~ LEGAL NOTICE: Use of this program and the accompanying data is at the user's own risk. ~