📄 shwrjcalfuction.cpp
字号:
#include "stdafx.h"
#include "cvenus.h"
#include <math.h>
#include "ShwrjCalFuction.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
double zdyl(double x,double rg)
{
double y;
double y1, y2, rg1, rg2;
if (rg > 0.9 && rg <= 1 ) //相对密度为1.0
{
if (x >= 34.3 && x <= 61.4) y = exp(0.0789 * x) * 3.7973;
else if (x > 61.4 && x <= 79.3) y = exp(0.1178 * x) * 0.3416;
if (fabs(rg - 1) <= 0.0001) return(y);
rg2 = 1;
y2 = y;
}
if (rg > 0.8 && rg < 1) //相对密度为0.9
{
if (x >= 33.9 && x <= 62.1) y = exp(0.0758 * x) * 5.1738;
else if (x > 62.1 && x <= 78.6) y = exp(0.1156 * x) * 0.4382;
if (fabs(rg - 0.9) <= 0.0001) return(y);
if (rg > 0.9)
{
rg1 = 0.9;
y1 = y;
}
else
{
rg2 = 0.9;
y2 = y;
}
}
if (rg > 0.9 && rg < 1) //相对密度在0.9和1.0之间
y = y1 - (y1 - y2) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.7 && rg < 0.9) //相对密度为0.8
{
if (x >= 32.9 && x <= 64.3) y = exp(0.0732 * x) * 6.9808;
else if (x > 64.3 && x <= 77.9) y = exp(0.1162 * x) * 0.4608;
if (fabs(rg - 0.8) <= 0.0001) return(y);
if (rg > 0.8)
{
rg1 = 0.8;
y1 = y;
}
else
{
rg2 = 0.8;
y2 = y;
}
}
if (rg > 0.8 && rg < 0.9) //相对密度在0.8和0.9之间
y = y1 - (y1 - y2) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.6 && rg < 0.8) //相对密度为0.7
{
if (x >= 32.9 && x<= 65) y = exp(0.0712 * x) * 9.4891;
else if (x > 65 && x <= 77) y = exp(0.1159 * x) * 0.5338;
if (fabs(rg - 0.7) <= 0.0001) return(y);
if (rg > 0.7)
{
rg1 = 0.7;
y1 = y;
}
else
{
rg2 = 0.7;
y2 = y;
}
}
if (rg > 0.7 && rg < 0.8) //相对密度在0.7和0.8之间
y = y1 - (y1 - y2) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.55 && rg < 0.7) //相对密度为0.6
{
if (x >= 32.7 && x <= 67.1) y = exp(0.0671 * x) * 16.5738;
else if (x > 67.1 && x <= 74.5) y = exp(0.1331 * x) * 0.199;
if (fabs(rg - 0.6) <= 0.0001) return(y);
if (rg > 0.6)
{
rg1 = 0.6;
y1 = y;
}
else
{
rg2 = 0.6;
y2 = y;
}
}
if (rg > 0.6 && rg < 0.7) //相对密度在0.6和0.7之间
y = y1 - (y1 - y2) * (rg1 - rg) / (rg1 - rg2);
if (rg >= 0.55 && rg < 0.6) //相对密度为0.55
{
if (x >= 32.9 && x <= 58.6) y = exp(0.0584 * x) * 57.9679;
else if (x > 58.6 && x <= 69.3 ) y = exp(0.0771 * x) * 19.0849;
if (fabs(rg - 0.55) <= 0.0001) return(y);
rg1 = 0.55;
y1 = y;
}
if (rg > 0.55 && rg < 0.6) //相对密度在0.55和0.6之间
y = y1 - (y1 - y2) * (rg1 - rg) / (rg1 - rg2);
if (rg < 0.55 || rg > 1)
AfxMessageBox("输入的数据超过范围");
return(y);
}
double zdwd(double y,double rg)
{
double x;
double x1, x2, rg1, rg2;
if (rg >= 0.55 && rg < 0.6) //天然气相对密度为0.55
{
if (y >= 400 && y <= 1750) x = log(y / 57.9679) / 0.0584;
else if (y > 1750 && y <= 4000) x = log(y / 19.0849) / 0.0771;
if (fabs(rg - 0.55) <= 0.0001) return(x);
rg1 = 0.55;
x1 = x;
}
if (rg > 0.55 && rg < 0.7) //天然气相对密度为0.6
{
if (y >= 150 && y <= 1500) x = log(y / 16.5738) / 0.0671;
else if (y > 1500 && y <= 4000) x = log(y / 0.199) / 0.1331;
if (fabs(rg - 0.6) <= 0.0001) return(x);
if (rg > 0.6)
{
rg1 = 0.6;
x1 = x;
}
else
{
rg2 = 0.6;
x2 = x;
}
}
if (rg > 0.55 && rg < 0.6) //天然气相对密度在0.55和0.6之间
x = x1 + (x2 - x1) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.6 && rg < 0.8) //天然气相对密度为0.7
{
if (y >= 100 && y <= 1000) x = log(y / 9.4891) / 0.0712;
else if (y > 1000 && y <= 4000) x = log(y / 0.5338) / 0.1159;
if (fabs(rg - 0.7) <= 0.0001) return(x);
if (rg > 0.7)
{
rg1 = 0.7;
x1 = x;
}
else
{
rg2 = 0.7;
x2 = x;
}
}
if (rg > 0.6 && rg < 0.7) //天然气相对密度在0.6与0.7之间
x = x1 + (x2 - x1) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.7 && rg < 0.9) //天然气相对密度为0.8
{
if (y >= 80 && y <= 800) x = log(y / 6.9808) / 0.0732;
else if (y > 800 && y <= 4000) x = log(y / 0.4608) / 0.1162;
if (fabs(rg - 0.8) <= 0.0001) return(x);
if (rg > 0.8)
{
rg1 = 0.8;
x1 = x;
}
else
{
rg2 = 0.8;
x2 = x;
}
}
if (rg > 0.7 && rg < 0.8) //天然气相对密度在0.7与0.8之间
x = x1 + (x2 - x1) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.8 && rg < 1) //天然气相对密度为0.9
{
if (y >= 70 && y <= 600) x = log(y / 5.1738) / 0.0758;
else if (y > 600 && y <= 4000) x = log(y / 0.4382) / 0.1156;
if (fabs(rg - 0.9) <= 0.0001) return(x);
if (rg > 0.9)
{
rg1 = 0.9;
x1 = x;
}
else
{
rg2 = 0.9;
x2 = x;
}
}
if (rg > 0.8 && rg < 0.9) //天然气相对密度在0.8与0.9之间
x = x1 + (x2 - x1) * (rg1 - rg) / (rg1 - rg2);
if (rg > 0.9 && rg <= 1) //天然气相对密度为1
{
if (y >= 60 && y <= 500) x = log(y / 3.7973) / 0.0789;
else if (y > 500 && y <= 4000) x = log(y / 0.3416) / 0.1178;
if (fabs(rg - 1) <= 0.0001) return(x);
rg2 = 1;
x2 = x;
}
if (rg > 0.9 && rg < 1) //天然气相对密度在0.9与1之间
x = x1 + (x2 - x1) * (rg1 - rg) / (rg1 - rg2);
if (rg < 0.55 || rg > 1) AfxMessageBox( "输入的数据超出要求范围");
return(x);
}
//图6-19 相对密度为0.6天然气在不形成水化物条件下允许达到的膨胀程度
double xdmd66(double x,double wd)
{
double y;
if (wd == 40) //节流前温度为40
{
if (x >= 260)
{
if (x <= 265)
y = -10 * x + 2800;
if (y >= 150 && y <= 200)
; //null
else if (x <= 275)
y = 5 * x - 1100;
else
y=0;
}
else
y=0;
}
else if (wd == 50) //节流前温度为50
{
if (x >= 400 && x <= 500)
y = -0.01854 * pow(x,2) + 20.1531 * x - 4943.61;
else
y=0;
}
else if (wd == 60) //节流前温度为60
{
if (x >= 570)
{
if (x <= 600)
y = -1.6667 * x + 1150;
if (y >= 150 && y <= 200)
; //null
else if (x <= 880)
y = -0.0039 * pow(x,2) + 7.6659 * x - 2915.77;
else
y=0;
}
else
y=0;
}
else if (wd == 70) //节流前温度为70
{
if (x >= 742.9)
{
if (x <= 771.4)
y = -1.7544 * x + 1503.33;
if (y >= 150 && y <= 200)
; //null
else if (x <= 1857.1)
y = (-0.00000000099422) * pow(x,4) + 0.0000063458 * pow(x,3) - 0.01454 * pow(x,2) + 15.4738 * x - 5567.23;
else
y=0;
}
else
y=0;
}
else if (wd == 80) //节流前温度为80
{
if (x >= 870)
{
if (x <= 880) y = -5 * x + 4550;
if (y >= 150 && y <= 200) ; //null
else if (x <= 4000)
y = -0.000000022731 * pow(x,3) - 0.000015946 * pow(x,2) + 1.5305 * x - 1145.47;
else if (x > 4000 && x <= 10000)
y = -0.000000025478 * pow(x,2) + 0.4696 * x + 1982.29;
}
else
y=0;
}
else if (wd == 90) //节流前温度为90
{
if (x >= 1130)
{
if (x <= 1150) y = -2.5 * x + 3025;
if (y >= 150 && y <= 200)
; //null
else if (x <= 1714.3)
y = -0.0011 * pow(x,2) + 4.5354 * x - 3507.45;
else if (x > 1714.3 && x <= 10000)
y = -0.000000052345 * pow(x,3) + 0.00023 * pow(x,2) + 0.7476 * x - 698.967;
}
else
y=0;
}
else if (wd == 100) //节流前温度为100
{
if (x >= 1350)
{
if (x <= 1400) y = -3 * x + 4350;
if (y >= 150 && y <= 300)
; //null
else if (x <= 4000) y = -0.00023 * pow(x,2) + 1.9254 * x - 1883.82;
else if (x > 4000 && x <= 10000) y = -0.00003161 * pow(x,2) + 0.4352 * x + 991.045;
}
else
y=0;
}
else if (wd == 110) //节流前温度为110
{
if (x >= 1642.8 && x <= 1714.3) y = 3.4965 * x - 5594.06;
else if (x > 1714.3 && x <= 4600)
y = (-0.000000000055089) * pow(x,4) + 0.0000007273 * pow(x,3) - 0.00366 * pow(x,2) + 8.7713 * x - 7070.84;
else if (x > 4600 && x <= 10000)
y= -0.000021046 * pow(x,2) + 0.2885 * x + 1128.7;
else
y=0;
}
else if (wd == 120) //节流前温度为120
{
if (x >= 1892)
{
if (x <= 1892.9) y = -55.554 * x + 105308;
if (y >= 150 && y <= 200)
; //null
else if (x <= 3714.2) y = -0.0003 * pow(x,2) + 2.4421 * x - 3249.65;
else if (x > 3714.2 && x <= 6000)
y = -0.000057651 * pow(x,2) + 0.6969 * x - 293.328;
else if (x > 6000 && x <= 10000)
y = -0.000014513 * pow(x,2) + 0.1898 * x + 1196.3;
}
else
y=0;
}
else if (wd == 130) //节流前温度为130
{
if (x >= 2200 && x <= 2250) y = 5 * x - 10837.5;
else if (x > 2250 && x <= 4000)
y = 0.000000025174 * pow(x,3) - 0.0004 * pow(x,2) + 2.4808 * x - 3235.54;
else if (x > 4000 && x <= 10000)
y = -0.0000041667 * pow(x,2) + 0.0000012628 * x + 1766.66;
else
y=0;
}
else if (wd == 140) //节流前温度为140
{
if (x >= 2500 && x <= 2600) y = 2.5 * x - 6100;
else if (x > 2600 && x <= 4000)
y = 0.000000029834 * pow(x,3) - 0.0005 * pow(x,2) + 2.882 * x - 4132.48;
else if (x > 4000 && x <= 10000)
y = -0.000010633 * pow(x,2) + 0.1289 * x + 924.328;
else
y=0;
}
else if (wd == 150) //节流前温度为150
{
if (x >= 2850 && x <= 3428.6)
y = -0.0004 * pow(x,2) + 3.2907 * x - 5913.87;
else if (x > 3428.6 && x <= 10000)
y = -0.0000000010526 * pow(x,3) + 0.0000023307 * pow(x,2) + 0.1422 * x + 256.841;
else
y=0;
}
else if (wd == 160) //节流前温度为160
{
if (x >= 3428.6 && x <= 4000)
y = 0.7605 * x - 2421.33;
else if (x > 4000 && x <= 10000)
y = -0.000020816 * pow(x,2) + 0.3036 * x - 255.604;
else
y=0;
}
else if (wd == 170) //节流前温度为170
{
if (x >= 5000 && x <= 5800)
y = -0.000375 * pow(x,2) + 4.3625 * x - 12287.5;
else if (x > 5800 && x <= 8000)
y = -0.000055583 * pow(x,2) + 0.7671 * x - 2179.07;
else
y=0;
}
return(y);
}
//图6-20 相对密度为0.7天然气在不形成水化物条件下允许达到的膨胀程度
//x——节流前压力,psia
//y——节流后压力,psia
//wd——节流前温度,oF
double xdmd77(double x, double wd)
{
double y;
if (wd == 40) //节流前温度为40
{
if (x >= 164.3 && x <= 167.9)
y = 13.3056 * x - 2066.11;
else
y=0;
}
else if (wd == 50) //节流前温度为50
{
if (x >= 290)
{
if (x <= 300) y = -8 * x + 252;
if (y >= 120 && y <= 200) ; //null
else if (x <= 357.1) y = -0.04656 * pow(x,2) + 32.4718 * x - 5300.92;
else
y=0;
}
else
y=0;
}
else if (wd == 60) //节流前温度为60
{
if (x >= 420)
{
if (x <= 440) y = -4 * x + 1880;
if (y >= 120 && y <= 200) ; //null
else if (x <= 650) y = 3.099 * pow(x,3) - 0.0525 * pow(x,2) + 31.08 * x - 5889.42;
else
y=0;
}
else
y=0;
}
else if (wd == 70) //节流前温度为70
{
if (x >= 562.5)
{
if (x <= 575) y = -6.4 * x + 3800;
if (y >= 120 && y <= 200) ; //null
else if (x <= 1450)
y = 0.0000014162 * pow(x,3) - 0.0046 * pow(x,2) + 6.048 * x - 1971.77;
else
y=0;
}
else
y=0;
}
else if(wd == 80) //节流前温度为80
{
if (x>= 700 && x <= 800) y = 2.8 * x - 1826.67;
else if (x > 800 && x <= 1300) y = 1.1792 * x - 563.441;
else if (x> 1300 && x <= 6000)
y = -0.0000000072432 * pow(x,3) - 0.000055342 * pow(x,2) + 1.31041 * x - 599.739;
else if (x > 6000 && x <= 10000)
y = 0.000000019042 * pow(x,3) - 0.00047 * pow(x,2) + 3.4818 * x - 4542.85;
else
y=0;
}
else if (wd == 90) //节流前温度为90
{
if (x >= 866.7)
{
if (x <= 900) y = -2.4024 * x + 2282.16;
if (y >= 120 && y <= 200) ; //null
else if (x <= 5000)
y = 0.0000000035313 * pow(x,3) - 0.0002 * pow(x,2) + 1.6326 * x - 1058.74;
else if (x > 5000 && x <= 10000)
y = 0.00000000092593 * pow(x, 3) - 0.000044048 * pow(x,2) + 0.3741 * x + 1835.87;
}
else
y=0;
}
else if (wd == 100) //节流前温度为100
{
if (x >= 1075)
{
if (x <= 1100) y = -3.2 * x + 3640;
if (y >= 120 && y <= 200) ; //null
else if (x <= 2000)
y = 0.000000028656 * pow(x,3) - 0.0004 * pow(x,2) + 2.2257 * x - 1686.88;
else if (x > 2000 && x <= 10000)
y = 0.000000001425 * pow(x,3) - 0.000053186 * pow(x,2) + 0.4859 * x + 892.107;
}
else
y=0;
}
else if (wd == 110) //节流前温度为110
{
if (x >= 1275 && x <= 1300) y = 7.2 * x - 9060;
else if (x > 1300 && x <= 6000)
y = 0.000000033447 * pow(x,3) - 0.00049 * pow(x,2) + 2.4212 * x - 2036.03;
else if (x > 6000 && x <= 10000)
y = -0.0000066143 * pow(x,2) + 0.0465 * x + 1954.39;
else
y=0;
}
else if (wd == 120) //节流前温度为120
{
if (x >= 1425)
{
if (x <= 1500) y = 0.01867 * pow(x,2) - 55.6666 * x + 41620;
if (y >= 120 && y <= 200) ; //null
else if (x < 6000)
y = 0.0000000327 * pow(x,3) - 0.0005 * pow(x,2) + 2.5126 * x - 2467.01;
else if (x > 6000 && x <= 10000)
y = -0.0000102 * pow(x,2) + 0.1132 * x + 1460.22;
}
else
y=0;
}
else if (wd == 130) //节流前温度为130
{
if (x >= 1714.2)
{
if (x <= 1750) y = -2.2346 * x + 4030.61;
if (y >= 120 && y <= 200) ; //null
else if (x <= 3000)
y = -0.00038 * pow(x,2) + 2.5881 * x - 3088.37;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -