📄 sandpredview.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 + -