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

📄 qjyltd.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
字号:
// qjyltd.cpp : implementation file
//

#include "stdafx.h"
#include "Cvenus.h"
#include "qjyltd.h"

#include "yqsxz.h"
#include "qjyljs.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// qjyltd
extern double ptidu[1000],dtidu[1000];
qjyltd::qjyltd()
{
}

qjyltd::~qjyltd()
{
}

extern	char  cGraphColor[][16];
extern	int   iGraphColorNum;
extern	int	g_iProgress ;	// 计算进度
extern	bool	bFinishThread;

/////////////////////////////////////////////////////////////////////////////
// qjyltd message handlers

void qjyltd::qjyltdjs(CString zqjcqj)//气井压力梯度
{
	  //P井底   [[[[  pjingdi  
	  //G最小产气量   [[[[   gzxcql  
	  //G最大产气量   [[[[   gzdcql  
	  //曲线条数      [[[[   qxts   
	  //T地层         [[[[   tdiceng
	  //T井口         [[[[   tjingkou
	  //P井口         [[[[   pjingkou
	  //P梯度(3000)    [[[[  ptidu[3000]
	  //D梯度(3000)      [[[[  dtidu[3000]
	  // 压力梯度(3000)  [[[[  yltd[3000]
	  //深度梯度(3000)   [[[[  sdtd[3000]
	  //曲线条数         [[[[  qxts
	  //N总段数          [[[[  nzds
	  //G产气量          [[[[  gcql
	  double pjingdi,gzxcql,gzdcql,tdiceng,tjingkou,pjingkou;
	  double sdtd[3000],yltd[3000];
	  double gcql,DVW,GG,DIC,DIT1,DVT1,DIT2,DVT2,DIT3;
	  double DVT3,RR,H2S,CO2,N2,LGR,GL,TG,PC,TC;
	  double RG,PN,P0,T0,DOL,L,DIL,NaCl;
	  CString GTY[2000],HZ,G4,G2,G3,templs1;
	  char temp[150];
	  int qxts,KK,i,FD,j,IJ,NP,I1,I0,nzds,ISTEP,CD;
	  CString fileDialogFilter2,fileDialogExt2,feng[51],gd1;
	  CString title,title1,title2;

	  int		iColorIndex = 0; // 颜色索引 lzj

//	  SetCursor(LoadCursor(NULL, IDC_WAIT));
	g_iProgress = 35;	// 计算进度
	ENDCOMPUTE;
      //赋初值
	  for(i=0;i<3000;i++)
	  {
			sdtd[i]=0;
			yltd[i]=0;
	  }
	  pjingdi=0;gzxcql=0;gzdcql=0;tdiceng=0;tjingkou=0;pjingkou=0;
	  gcql=0;DVW=0;GG=0;DIC=0;DIT1=0;DVT1=0;DIT2=0;DVT2=0;DIT3=0;
	  DVT3=0;RR=0;H2S=0;CO2=0;N2=0;LGR=0;GL=0;TG=0;PC=0;TC=0;
	  RG=0;PN=0;P0=0;T0=0;DOL=0;L=0;DIL=0;NaCl=0;
	  qxts=0;KK=0;i=0;FD=0;j=0;IJ=0;NP=0;I1=0;I0=0;nzds=0;ISTEP=0;CD=0;

	  yqsxz yqsxz;
	  qjyljs qjyljsz;

	   CString str;
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(1, 5);
	   DVW=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(2, 5);
	   tdiceng=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(3, 5);
	   pjingdi=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(4, 5);
	   tjingkou=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(5, 5);
	   pjingkou=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(6, 5);
	   GG=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(7, 5);
	   DIC=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(8, 5);
	   DIT1=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(9, 5);
	   DVT1=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(10, 5);
	   DIT2=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(11, 5);
	   DVT2=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(12, 5);
	   DIT3=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(13, 5);
	   DVT3=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(14, 5);
	   RR=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(15, 5);
	   H2S=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(16, 5);
	   CO2=atof(str);
	   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(17, 5);
	   N2=atof(str);

        if(zqjcqj== "采气井")
		{
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
		   LGR=atof(str);
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
		   GL=atof(str);
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(20, 5);
		   gzxcql=atof(str);
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(21, 5);
		   gzdcql=atof(str);
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(22, 5);
		   qxts=atoi(str);
		}
		else
		{
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(18, 5);
		   gzxcql=atof(str);
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(19, 5);
		   gzdcql=atof(str);
		   str = ((CCVenusApp*)AfxGetApp())->m_pMainDlg->m_grid.GetTextRC(20, 5);
		   qxts=atoi(str);
		}
	  //基本参数单位变换及确定有关计算用参数
	  NP = 40;
	  H2S = H2S / 100;
	  N2 = N2 / 100;
	  CO2 = CO2 / 100;
	  LGR = LGR / 10000;
	  DIT1 = DIT1 / 1000;
	  DIT2 = DIT2 / 1000;
	  DIT3 = DIT3 / 1000;
	  DIC = DIC / 1000;
	  tdiceng = tdiceng + 273.15;
	  tjingkou = tjingkou + 273.15;
	  TG = (tdiceng - tjingkou) / DVW;
	  //天然气的临界参数(PC, TC, G气, H2S, CO2, "干气");       问题->G气变GG?
      yqsxz.trqnjcs(GG, H2S, CO2,1);//临界参数
	  PC=yqsxz.Pc;//对比压力
	  TC=yqsxz.Tc;//对比温度

	  if( pjingkou == 0)
	  {
		//从下向上计算压力梯度
		CD = -1;
		ptidu[0] = pjingdi;
		dtidu[0] = DVW;
	  }
	  else
	  {
		//从上向下计算压力梯度
		CD = 1;
		ptidu[0] = pjingkou;
		dtidu[0] = 0;
	  }
	  yltd[0] = ptidu[0];
	  sdtd[0] = dtidu[0];
  
      //打开保存数据结果的文件
	  
	g_iProgress = 50;	// 计算进度
	ENDCOMPUTE;
       CStdioFile f3;
	   CFileException exception3;
	   BOOL status1;		  
/*	   if(zqjcqj== "注气井")
	   {
          fileDialogFilter2 ="Data files (*.RIG)|*.RIG|All files (*.*)|*.*||";
		  fileDialogExt2 = "RIG";
		  CFileDialog fileDialog2( FALSE, 
				fileDialogExt2, NULL,
				0, fileDialogFilter2 );
		  fileDialog2.m_ofn.lpstrTitle="保存计算结果";
		  if( fileDialog2.DoModal() == IDCANCEL )
		  {
			   return;
		  }
	      status1 = f3.Open(fileDialog2.GetPathName(),CFile::modeCreate|CFile::modeWrite);	
		  title=fileDialog2.GetPathName();
          title2=fileDialog2.GetFileTitle();
	   }
	   else
	   {
          fileDialogFilter2 ="Data files (*.RGG)|*.RGG|All files (*.*)|*.*||";
		  fileDialogExt2 = "RGG";
		  CFileDialog fileDialog2( FALSE, 
				fileDialogExt2, NULL,
				0, fileDialogFilter2 );
		  fileDialog2.m_ofn.lpstrTitle="保存计算结果";
		  if( fileDialog2.DoModal() == IDCANCEL )
		  {
			   return;
		  }
	      status1 = f3.Open(fileDialog2.GetPathName(),CFile::modeCreate|CFile::modeWrite);	
		  title=fileDialog2.GetPathName();
		  title2=fileDialog2.GetFileTitle();
	   }*/
  	   templs1 = ((CCVenusApp*)AfxGetApp())->GetMyAppPath();
	   templs1  += "\\tempfile.txt";	
       status1 = f3.Open(templs1,CFile::modeCreate|CFile::modeWrite);
	   if (!status1)
		{
			sprintf(temp, "Error opening file for reading. Code:%d",
				exception3.m_cause);
			AfxMessageBox(temp);
			return;
		}
	   //打开保存图形结果的文件
       CStdioFile f4;
	   CFileException exception4;
	   BOOL status2;
/*	   title1=title.Left(title.GetLength()-3);
	   if(zqjcqj== "注气井")
	   {
		   title=title1+"GIG";			  
	       status2 = f4.Open(title,CFile::modeCreate|CFile::modeWrite);	
	   }
	   else
	   {
           title=title1+"GGG";
	       status2 = f4.Open(title,CFile::modeCreate|CFile::modeWrite);	
	   }*/
	   templs1.Empty();
  	   templs1 = ((CCVenusApp*)AfxGetApp())->GetMyAppPath();
	   templs1  += "\\tempfile.gra";	
       status2 = f4.Open(templs1,CFile::modeCreate|CFile::modeWrite);
	   if (!status2)
		{
			sprintf(temp, "Error opening file for reading. Code:%d",
				exception4.m_cause);
			AfxMessageBox(temp);
			return;
		}       

	  CString AA;
	  if( qxts > 6)
	  {
		  AA ="\t";
	  }
	  else
	  {
		  AA = "\t";
	  }
	  if( zqjcqj == "注气井")
	  {
		FD = -1;
		try
		{
//			title="";
			f3.WriteString("\n");            
			title="\t\t$$注气压力梯度计算结果$0\n";
			f3.WriteString(title);
			f3.WriteString("\n");            
		}
		catch (CFileException exception3)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		try
		{
            title="";
			title=title+"$$"+"注气压力梯度计算结果图\n";
			f4.WriteString(title);
		}
		catch (CFileException exception4)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		G2="";
		G2=G2+" 深 度$7" + "\t" + "    在下列产气量的流动压下力(MPa)$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12";			
		G4 = "  (m)$11";
	  }
	  else
	  {
		FD = 1;
		try
		{
            title="";
			title=title+"$$"+"采气压力梯度计算结果图\n";
			f4.WriteString(title);
		}
		catch (CFileException exception4)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		try
		{
//			title="";
			title="\t$$采气压力梯度计算结果$0\n";
			f3.WriteString("\n");            
            f3.WriteString(title);			
			f3.WriteString("\n");            
		}
		catch (CFileException exception3)
		{
			AfxMessageBox("Error reading file");
			return;
		}
		G2="";
		G2=G2+" 深 度$7" + "\t" + "  在下列产气量下的流动压力(MPa)$13" + "\t" + "$12" + "\t" + "$12" + "\t" + "$12";
		G4 = "  (m)$11";
	  }
	  try
	  {
		  f4.WriteString("深度最小值,m:\n");	
		  f4.WriteString("深度最大值,m:\n");	
		  f4.WriteString("压力最小值,MPa:\n");	
		  f4.WriteString("压力最大值,MPa:\n");	
		  f4.WriteString("H\n");	
		  f4.WriteString("P\n");	
		  f4.WriteString("H__m\n");	
		  f4.WriteString("P__MPa\n");
		  f4.WriteString(" 0\n");
	  }
      catch (CFileException exception4)
	  {
		AfxMessageBox("Error reading file");
		return;
	  }
      if( gzdcql < gzxcql + qxts * 2)
	  {
		gzdcql = gzxcql + qxts * 2;
	  }
	g_iProgress = 75;	// 计算进度
	ENDCOMPUTE;
	  for(KK=1;KK<=qxts;KK++)
	  {
	  	nzds = 0;
		gcql = gzxcql + (KK - 1) * (gzdcql - gzxcql) / (qxts - 1);
		gcvt(gcql,30,temp);
        G3=temp;
		G4 =G4+"\t"+G3;
		if( KK >= 5 && qxts > 5 && KK < qxts)
		{
		  G2 = G2 + "\t" + "$12";
		}
		else if( KK == qxts)
		{
		  G2 = G2 + "\t" + "$14";
		}
		RG = 10000 * gcql;
		PN = 0;
        for(i=1;i<=4;i++)//最多计算3级油管
		{
			  if( CD == 1)//从上向下计算
			  {                    
				if( i == 1)//计算第1级油管
				{                   
				  P0 = pjingkou;
				  T0 = tjingkou;
				  DOL = DIT1;
				  L = DVT1;
				}
				else if( i == 2)//计算第2级油管
				{                 
				  P0 = PN;
				  T0 = tjingkou + TG * DVT1;
				  DOL = DIT2;
				  L = DVT2;
				}
				else if( i == 3)//计算第3级油管
				{                 
				  P0 = PN;
				  T0 = tjingkou + TG * (DVT1 + DVT2);
				  DOL = DIT3;
				  L = DVT3;
				}
				else//计算套管
				{
				  P0 = PN;
				  T0 = tjingkou + TG * (DVT1 + DVT2 + DVT3);
				  DOL = DIC;
				  L = (DVW - (DVT1 + DVT2 + DVT3));
				}
			  }
			  else//从下向上计算
			  {
				if( i == 1)//计算套管
				{                   
				  P0 = pjingdi;
				  T0 = tdiceng;
				  DOL = DIC;
				  L = (DVW - (DVT1 + DVT2 + DVT3));
				}
				else if( i == 2)//计算第3级油管
				{
				  P0 = PN;
				  T0 = tjingkou + TG * (DVT1 + DVT2 + DVT3);
				  DOL = DIT3;
				  L = DVT3;
				}
				else if( i == 3)//计算第2级油管
				{                
				  P0 = PN;
				  T0 = tjingkou + TG * (DVT1 + DVT2);
				  DOL = DIT2;
				  L = DVT2;
				}
				else//计算第1级油管
				{
				  P0 = PN;
				  T0 = tjingkou + TG * DVT1;
				  DOL = DIT1;
				  L = DVT1;
				}
			  }
		  if( L > 0)
		  {
			nzds = nzds + NP;
			DIL = 0;
			//调用函数--气井压力
			PN=qjyljsz.qjyl(P0, T0, TG, L, DOL, 0, RR, RG, GG, LGR, GL, H2S, N2, CO2,NaCl,NP, CD, FD);
			if( CD == 1)
			{
			  for(j=1;j<=NP;j++)
			  {
			  	IJ = (i - 1) * NP + j;
				yltd[IJ] = int(100 * ptidu[j]);
				yltd[IJ]=yltd[IJ]/ 100.0;
				sdtd[IJ] = int(10 * (sdtd[IJ - 1] + CD * L / NP));
				sdtd[IJ]=sdtd[IJ]/ 10.0;
			  }
			}
			else
			{
			  for(j=1;j<=NP;j++)
			  {
			  	IJ = (4 - i) * NP + j;
				yltd[IJ] = int(100 * ptidu[j]);
				yltd[IJ]=yltd[IJ]/ 100.0;
				sdtd[IJ] = int(10 * (sdtd[IJ - 1] + CD * L / NP));
				sdtd[IJ]=sdtd[IJ]/ 10.0;
			  }
			}
		  }
		  else
		  {
			PN = P0;
		  }
		}
		if( NP > 1 && PN >= 0)
		{
		  for(i=0;i<=nzds;i++)
		  {
            try
			{
				gcvt(sdtd[i],50,temp);
				char temp1[50];
				gcvt(yltd[i],50,temp1);
				CString temp2,temp3;
                temp2=temp;
				temp3=temp1;
                temp3=" "+temp3+" "+temp2+"\n";
				f4.WriteString(temp3);
			}
            catch (CFileException exception4)
			{
			AfxMessageBox("Error reading file");
			return;
			}
			yltd[i] = int(1000 * yltd[i] + 0.5);
			yltd[i]=yltd[i]/ 1000.0;
			if( KK == 1)
			{
				gcvt(sdtd[i],50,temp);
				GTY[i] = temp;
			}
			gcvt(yltd[i],50,temp);
			GTY[i] = GTY[i] + "\t" + temp;
		  }
		  try
		  {
		     f4.WriteString("-1 -1\n");
//			 f4.WriteString(" 0             1\n");
				f4.WriteString(cGraphColor[iColorIndex++]);
				iColorIndex %= iGraphColorNum;
			 gcvt(gcql,50,temp);
             CString content=temp;
			 content="Qg="+content+"×10^4m^3/d\n";
             f4.WriteString(content);
		  }
          catch (CFileException exception4)
		  {
			AfxMessageBox("Error reading file");
			return;
		  }
		}
	  }
      try
	  {  
		 f4.WriteString("-10 -10\n");
	  }
      catch (CFileException exception4)
	  {
		AfxMessageBox("Error reading file");
		return;
	  }
	  if( sdtd[0] == 0)
	  {
		I0 = 0;
		I1 = nzds;
		ISTEP = 1;
	  }
	  else
	  {
		I0 = nzds;
		I1 = 0;
		ISTEP = -1;
	  }
	  if( qxts < 5) 
	  {
		for(KK=qxts + 1;KK<=5;KK++)
		{
		  G4 = G4 + "\t" + "   /$15";
		  for(i=0;i<=nzds;i++)
		  {
		  	GTY[i] = GTY[i] + "\t" + "   /$15";
		  }
		}
	  }
      G2=G2+"\n";
      G4=G4+"\n";
	  try
	  {
		f3.WriteString(G2);  
		f3.WriteString(G4);		
	  }
	  catch (CFileException exception3)
	  {
		AfxMessageBox("Error reading file");
		return;
	  }
      for(i=I0;i<=I1;i=i+ISTEP)
	  {
	  	  GTY[i]=GTY[i]+"\n";
		  try
		  {
			f3.WriteString(GTY[i]);
		  }
		  catch (CFileException exception3)
		  {
			AfxMessageBox("Error reading file");
			return;
		  }
	  }
	  try
	  {
//        f3.WriteString("8\n");
	  }
	  catch (CFileException exception3)
	  {
		AfxMessageBox("Error reading file");
		return;
	  }
	g_iProgress = 100;	// 计算进度
	  f3.Close();
	  f4.Close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -