⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shwrjcalfuction.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#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 + -