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

📄 sandpredview.cpp

📁 预测油田开发中是否出砂的软件
💻 CPP
字号:
// sandpredView.cpp : implementation of the CSandpredView class
//

#include "stdafx.h"
#include "sandpred.h"

#include "sandpredDoc.h"
#include "sandpredView.h"
#include "math.h"
#include "InPut.h"
#include "InPutZ.h"
#include "Inputs.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSandpredView

IMPLEMENT_DYNCREATE(CSandpredView, CView)

BEGIN_MESSAGE_MAP(CSandpredView, CView)
	//{{AFX_MSG_MAP(CSandpredView)
	ON_COMMAND(ID_SAND, OnSand)
	ON_COMMAND(ID_ZUHEMOL, OnZuhemol)
	ON_COMMAND(ID_SLBQ, OnSlbq)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSandpredView construction/destruction

CSandpredView::CSandpredView()
{
	// TODO: add construction code here

}

CSandpredView::~CSandpredView()
{
}

BOOL CSandpredView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSandpredView drawing

void CSandpredView::OnDraw(CDC* pDC)
{
	CSandpredDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CSandpredView printing

BOOL CSandpredView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CSandpredView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CSandpredView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CSandpredView diagnostics

#ifdef _DEBUG
void CSandpredView::AssertValid() const
{
	CView::AssertValid();
}

void CSandpredView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CSandpredDoc* CSandpredView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSandpredDoc)));
	return (CSandpredDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSandpredView message handlers

void CSandpredView::OnSand() 
{
	// TODO: Add your command handler code here
	FILE *fp,*fq;
	float PO;      /*井的地层原油密度  PO*/
	float SD;    /*井的层位深度   SD   */
	float JJ;      /* 井径    JJ*/
	float MD;    /* 岩石密度  MD*/
	float QE;      /* 有效孔隙度 QE */
	float PP;    /* 地层压力   PP*/
	float PW;      /* 井底压力  PW */
	float SP;    /*上覆岩层压力 SP  */
	float YH;  /*  最大水平地应力    YH */
	float YS;  /*  最小水平地应力      YS */
	float YW1;  /* 井眼围岩轴向应力1  YW1  */
	float YW;  /*井眼围岩轴向应力   YW   */
	float BS;  /*岩石波桑系数   BS   */
	double  JD;  /* 最大水平地应力和X轴的夹角  JD  */
	float RO;  /* 距井眼中心的径向距离   RO  */
	float BJ;  /* 井眼的半径(a=d/2)  BJ  */
	float YX;  /*  X轴方向的应力  YX */
	float YY;  /* Y轴方向的应力  YY  */
	//float YR;  /*  井眼围岩的径向应力   YR */
	//float YB;  /* 井眼岩石的切向应力    YB  */
	//float JQ;  /*井眼岩石的剪切应力  JQ*/
	float YMAX;   /*孔壁岩石的最大切向应力  YMAX   */
	float YLC;  /*  孔壁岩石的抗拉强度    YLC */
	float GG;  /*  重力加速度   GG */
	float A, B, C;   /* 当YW<=YB时的参数  */
	float XJ;   /*井斜角  XJ*/
	float PPF;   /*孔道内流体压力 PPF*/
	float bb;
	CInPut dlg;
	
    if((fp=fopen("date.dat","r"))==NULL)
	{
		printf("不能打开输入文件\n");
			return;
	}
    if((fq=fopen("date.out","w"))==NULL)
	{
		printf("不能打开输出文件\n");
			return;
	}
	XJ=0;
    SD=2269;
    BJ=108;
    PP=25;
    PW=14;
    QE=0.233;
    PPF=10;
    MD=2.26;
    PO=0.85;
    JD=30;
    RO=554;

    dlg.m_edit1=XJ;
    dlg.m_edit2=SD;
    dlg.m_edit3=BJ;
    dlg.m_edit4=PP;
    dlg.m_edit5=PW;
    dlg.m_edit6=QE;
    dlg.m_edit7=PPF;
    dlg.m_edit8=MD;
    dlg.m_edit9=PO;
    dlg.m_edit10=JD;
    dlg.m_edit11=RO;
	if(dlg.DoModal()==IDOK)
	{
    XJ=dlg.m_edit1;
    SD=dlg.m_edit2;
    BJ=dlg.m_edit3;
    PP=dlg.m_edit4;
    PW=dlg.m_edit5;
    QE=dlg.m_edit6;
    PPF=dlg.m_edit7;
    MD=dlg.m_edit8;
    PO=dlg.m_edit9;
    JD=dlg.m_edit10;
    RO=dlg.m_edit11;
	}


	/*
  ///*输入已知的计算参数	
	fprintf(fq,"     油井出砂预测\n");
	fprintf(fq,"  请输入以下参数\n");
	fprintf(fq,"1.该井的地层原油密度 PO (克/平方厘米)\n  PO=",  PO);
	fscanf(fp,"%f",&PO);
	fprintf(fq,"2.该井的井眼半径   BJ (毫米)\n   BJ=",BJ);
	fscanf(fp,"%f",&BJ);
	fprintf(fq,"3.井的层位深度 SD  (米)\n  SD=",SD);
	fscanf(fp,"%f",&SD);
    fprintf(fq,"4.井斜角  XJ  (度)\n  XJ=",XJ);
	fscanf(fp,"%f",&XJ);
	fprintf(fq,"5.产层的岩石密度 MD (克/平方厘米)\n  MD=",MD);
    fscanf(fp,"%f",&MD);
	fprintf(fq,"6.有效孔隙度  QE\n   QE=",QE);
	fscanf(fp,"%f",&QE);
	fprintf(fq,"7.地层压力   PP  (兆帕)\n   PP=",PP);
	fscanf(fp,"%f",&PP);
	fprintf(fq,"8.井底压力   PW  (兆帕)\n    PW=",PW);
	fscanf(fp,"%f",&PW);
    fprintf(fq,"9.孔道内流体压力   PPF  (兆帕)\n    PPF=",PW);
	fscanf(fp,"%f",&PPF);
	fprintf(fq,"10.最大水平地应力和X轴的夹角  JD (度)\n   JD=",JD);
	fscanf(fp,"%lf",&JD);
	fprintf(fq,"11.炮眼一点距井眼中心的径向距离   RO (毫米)\n  RO=",RO);
	fscanf(fp,"%f",&RO);
	fprintf(fq,"    计算得到以下参数\n");
	*/
/*计算上覆岩层压力 SP  */
	{
		SP=0.00981*SD*((1-QE)*MD+QE*PO);   
	    fprintf(fq,"上覆岩层压力 SP=%f(兆帕)\n",SP);
	}
/* 计算最大水平应力YH和最小水平应力YS */
	{
		YH=0.0266*SD-2.34;
		YS=0.0182*SD-0.977;
		fprintf(fq,"最大水平应力  YH=%f(兆帕)\n", YH);
		fprintf(fq,"最小水平应力  YS=%f(兆帕)\n", YS);
	}
/*计算地层 X轴方向的应力YX和 Y轴方向的应力YY*/
	{
		YX=YH-PP;
		YY=YS-PP;
		fprintf(fq,"地层X轴方向的应力  YX=%f(兆帕)\n", YX);
		fprintf(fq,"地层Y轴方向的应力  YY=%f(兆帕)\n", YY);
	}
/*计算井眼围岩轴向应力1  YW1和井眼围岩轴向应力  YW*/	
	{
		float AR,PI;
		AR=(BJ*BJ)/(RO*RO);
		PI=3.1415926/180.;
		YW1=SP-PP;
		YW=YW1-2*0.3*(YX-YY)*BJ*BJ*cos(2*JD)/(RO*RO);  /*0.3是岩石的波桑系数取值*/
		fprintf(fq,"井眼围岩轴向应力  YW=%f(兆帕)\n",YW);
	}
/*计算井眼围岩的径向应力YR   井眼岩石的切向应力YB 和 井眼岩石的剪切应力JQ*/
        double YR;  /*  井眼围岩的径向应力   YR */
        double YB;  /* 井眼岩石的切向应力    YB  */
        double JQ;  /*井眼岩石的剪切应力  JQ*/
		float AR,JIA,CHA,PI;
		AR=(BJ*BJ)/(RO*RO);
		JIA=(YX+YY)/2;
		CHA=(YX-YY)/2;
		PI=3.1415926/180.;
		fprintf(fq,"COS=%10.4f\n",cos(2*JD*PI));
		YR=JIA*(1-AR)+CHA*(1+3*AR*AR-4*AR)*cos(2*JD*PI)-AR*PW;
		YB=JIA*fabs(1+AR)-CHA*fabs(1+3*AR*AR)*cos(2*JD*PI)-AR*PW;
		JQ=-CHA*fabs(1-3*AR*AR+2*AR)*sin(2*JD*PI);
	    fprintf(fq,"井眼围岩的径向应力  YR=%6.4f (兆帕)\n",YR);
		fprintf(fq,"井眼岩石的切向应力  YB= %6.4f(兆帕)\n",YB);
		fprintf(fq,"井眼围岩的剪切应力  JQ= %6.4f(兆帕)\n",JQ);
/*比较井眼岩石的切向应力  YB 与井眼围岩轴向应力  YW 的大小选择参数*/
/*求出孔壁岩石的最大切向应力  YMAX */
		float HS,SH,BJ1,BJ4;  //BJ4是半径的4次方,并将BJ的单位换算成米
		HS=YH-YS;
		SH=YH+YS;
		fprintf(fq,"HS=%3.5f\n",HS);
		fprintf(fq,"SH=%3.5f\n",SH);
		BJ1=0.001*BJ;
		BJ4=BJ1*BJ1*BJ1*BJ1;

	if(YB>=YW)
		{
			A=-4.5*BJ4*cos(2*JD*PI)*HS;
		    B=(3*((SH-2*PP)/2-PW)+2*0.3*HS*cos(2*JD*PI))*BJ1*BJ1;
			C=1.5*fabs(SH-2*PP-HS*cos(2*JD*PI))-YW1-PPF;
		}
	 else
		 {
			
			A=1.5*BJ4*cos(2*JD*PI)*HS;
	        B=fabs(-6*0.3*HS*cos(2*JD*PI)-0.5*(SH-2*PP)+PW)*BJ1*BJ1;
			C=3*YW1-0.5*(SH-2*PP)+0.5*HS*cos(2*JD*PI)-PPF;
		}
		fprintf(fq,"A=%3.5f\n",A);
		fprintf(fq,"B=%3.5f\n",B);
		fprintf(fq,"C=%4.4f\n",C);
        YMAX=C-((B*B)/(4*A));
		fprintf(fq,"孔壁岩石的最大切向应力  YMAX=%6.4f(兆帕)\n",YMAX);
/*计算孔壁岩石的抗拉强度 YLC*/
		YLC=(0.001*MD*9.8*SD-1.1*PP)*fabs(3*fabs(sin(XJ*PI)+3*cos(XJ*PI)/7)-3*(sin(XJ*PI)+cos(XJ*PI))/7)+2*(PP-PW);
		fprintf(fq,"孔壁岩石的抗拉强度 YLC=%6.4f(兆帕)\n",YLC);
/*比较孔壁岩石的最大切向应力YMAX与孔壁岩石的抗拉强度YLC 的结果得出结论*/
         
		if(YMAX>=YLC){
		   fprintf(fq,"该油井出砂\n");
		   AfxMessageBox("该油井出砂");
		}
		else {
		   AfxMessageBox("该油井不出砂");
		   fprintf(fq,"该井不出砂\n");
		}
		fclose(fp);
		fclose(fq);
	
}

void CSandpredView::OnZuhemol() 
{
	// TODO: Add your command handler code here
    CInPutz dlg;
	float a1,a2;
    a1=2;
	a2=1;
	dlg.m_edit1=2;
	dlg.m_edit2=1;
	if(dlg.DoModal()==IDOK)
	{
		a1=dlg.m_edit1;
		a2=dlg.m_edit2;
	}
	AfxMessageBox(" 组合");

}

void CSandpredView::OnSlbq() 
{
	Cinputs dlg;
	float a1,a2,a3,a4;
	a1=1;
	a2=2;
	a3=3;
	a4=4;
	dlg.m_edit1=a1;
	dlg.m_edit2=a2;
	dlg.m_edit3=a3;
	dlg.m_edit4=a4;
	if(dlg.DoModal()==IDOK)
	{
		a1=dlg.m_edit1;
		a2=dlg.m_edit2;
		a3=dlg.m_edit3;
		a4=dlg.m_edit4;
	}
	AfxMessageBox(" 组合");


	// TODO: Add your command handler code here
	
}

⌨️ 快捷键说明

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