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

📄 oilproj.c

📁 石油大学油藏工程毕业设计的计算工具,用此工具几秒钟就完成平时需要20天的计算量.懒得做毕业设计的学生有福了.
💻 C
字号:
# include "stdio.h"
# include "math.h"

main()
{
 FILE *fp;
 static float
 sw[]={0,0.3200,0.3520,0.3840,0.4160,0.4480,0.4800,0.5120,0.5440,0.5760,0.6080,0.6400,0.6720,0.7040,0.7360,0.7680,0.80},
kro[]={0,0.6500,0.5861,0.5244,0.4651,0.4082,0.3538,0.3021,0.2532,0.2072,0.1644,0.1251,0.0895,0.0581,0.0316,0.0112,0.00},
krw[]={0,0.0000,0.0017,0.0059,0.0120,0.0198,0.0292,0.0402,0.0527,0.0666,0.0818,0.0984,0.1162,0.1353,0.1557,0.1773,0.20},
	fw[20],
	fwi[20],
	I[20],
	E[20],
	F[20],
	Tde[20],
	Qld[20],
	Qod[20],
	Vod[20],
	Vwd[20],
	swf[20],
	Td[20],		/*见水前开发时间(排)*/
	Tdi[20],	/*见后前开发时间*/
	Ql[20],		/*见水前产液量*/
	Qli[20],	/*见水后产液量*/
	V[20],		/*累注水量*/
	Vi[20],
	Qo[20],		/*年产油量*/
	Qoi[20],
	Vo[20],		/*累积产油量*/
	Voi[20],
	k[20],		/*采出程度*/
	ki[20],
	Ql2[200],	/*插值后*/
	V2[200],	/*插值后*/
	Vo2[200],	/*插值后*/
	Qo2[200],	/*插值后*/
	k2[200],
	ti[40],		/*开发时间(面)*/
	Qw[40],		/*注水速度(面)*/
	Qoh[40],	/*采油速度(面)*/
	rf[40],		/*含水前缘位置*/
	Wi[20],		/*累积注水量(面)*/
	Np[20],		/*累积产油量(面)*/
	Wi2[100],	/*插值后*/
	Np2[100],	/*插值后*/
	Qw2[100],	/*插值后*/
	Qoh2[100],	/*插值后*/
	Ml[100],	/*注水费*/
	Mt[100],	/*输油费*/
	Ms[100],	/*收入*/
	Mc[100],	/*净现*/
	Min[100],	/*投资*/
	Ml2[100],	/*注水费*/
	Mt2[100],	/*输油费*/
	Ms2[100],	/*收入*/
	Mc2[100],	/*净现*/
	Min2[100];	/*投资*/

float	Uo,
	Uw,
	Qi1,		/*见水前qi */
	Qi2,		/*见水后qi */
	kr=0.44287,	/*平均渗透率 */
	d,		/*排状井距 */
	d2,		/*面积井距 */
	L,
	S,		/*单井控面积*/
	A1,
	Tdf,
	Tf,
	Tf2,		/*见水时间 */
	swf_max=0,
	Fy=0.3399,	/*孔隙度 */
	A,
	A2,
	B,
	B2,
	C,
	C2,
	D,
	E2,
	Ma,		/*钻井总费用(排)*/
	Ma2,		/*钻井总费用(面)*/
	Mw,		/*作业费(排)*/
	Mw2		/*作业费(面)*/
	


	
	/* ,NA=5743.63*/;	/*含油面积 */

 double sqrt(),
	fabs(),
	pow(),
	log();


 long   No;        /*学号*/
 int    Noo,       /*班内号*/
	Cl,        /*班号*/
	N=17,      /*原始数据个数*/
	n,	   /*排状井数*/
	n2,	   /*面积井数*/
	i,
	j,
	m,
	Nk,
	nkk,
	Ntd,	   /*见水前个数*/
	Ntdi,	   /*见水后个数*/
	Yn;	   /*开发年数*/


 printf("Enter School Number As:9902***\n");
	scanf("%ld",&No);
	while(9900000>No||No>9999999)
	 {
	  printf("Ero!\n");
	   scanf("%ld",&No);
	 }
	  printf("\nNo.%ld\t",No);
	  No=No-9902000;
	  Noo=No%50;
	  Cl=((No-Noo)/50+1);
	  printf("Class:%d\n%d\n",Cl,Noo);
	 
	Uo=(float)Noo/5+20;
	Uw=(float)Cl/20+0.5;



/*排状*/
	Qi1=kr*0.65*3555*30/Uo/2*0.0864; /* 立方米/天 */
	n=(int)(5000/(Qi1*0.9*2)+1);
	S=3500000/n;    /*单井控面积*/
	d=sqrt(S/2); /*井距*/
	A1=d*35.55;  /* 截面积*/
	L=2*d;       /*排距*/






/* fw */
 for(i=1;i<N;i++)
    { fw[i]=(krw[i]/Uw)/(krw[i]/Uw+kro[i]/Uo); }

/* fwi */
 fwi[1]=0;
 for(i=2;i<(N-1);i++)
      {	fwi[i]=(fw[i+1]-fw[i-1])/(sw[i+1]-sw[i-1]); }

/* swf,swf_max */
 for(i=1;i<N;i++)
   {
    swf[i]=(fw[i]/(sw[i]-0.32));
    if(swf_max<swf[i])
      {swf_max=swf[i];Nk=i;}
   }

/* I */
  I[Nk]=0;
  for(i=Nk;i<(N-1);i++)
  {
   I[i]=0;
   for(j=i;j<(N-1);j++)
    I[i]=(I[i]+(fwi[j]-fwi[j+1])/(kro[j]+Uo*krw[j]/Uw));
  }

/* F,Tde */
 F[Nk]=0;F[Nk+1]=0;
 for(i=(Nk+1);i<(N-1);i++)
  {
   F[i]=0;
   for(j=(Nk+1);j<=i;j++)
    F[i]=(F[i]+(fwi[j]-fwi[j-1])*I[j]/(fwi[j]*fwi[j]*fwi[j]));
    Tde[i]=-0.65*F[i];
  }


/* Qld,Qod,Vod,Vwd,T,E */
 for(i=Nk;i<(N-1);i++)
  {
   Qld[i]=(fwi[i]/(0.65*I[i]));
   Qod[i]=(Qld[i]*(1-fw[i]));
   Vod[i]=(sw[i]+(1-fw[i])/fwi[i]-0.32);
   Vwd[i]=1/fwi[i]-Vod[i];

/*   T[i]=(Tde[i]*0.001133*A1*L/Qi1);  Vwd[i]=(1/fwi[i]-Vod[i])*/

  } 
   E[Nk]=(0.65*I[Nk]-fwi[Nk]);
   Vwd[Nk]=0;

/* Tdf,见水时间Tf(年) */

 Tdf=(fwi[Nk]+E[Nk]/2)/(fwi[Nk]*fwi[Nk]);
 Tf=Tdf*Fy*A1*L/(Qi1*300);

/*开发时间Td(年) 产液量Ql(方/天) 累注水V(方) 年产油Qo(方) 累产油Vo(方) 采出程度k(%)*/
 for(i=1;i<(Tf+2);i++)
  {
   Td[i]=(i-1); if(i>(Tf+1))  Td[i]=Tf;
   Ql[i]=Qi1*2/sqrt((1+2*E[Nk]*Qi1*300*Td[i]/(Fy*A1*L)));
   V[i]=2*(sqrt((1+2*E[Nk]*Qi1*300*Td[i]/(Fy*A1*L)))-1)*Fy*A1*L/E[Nk]/10000;
   Qo[i]=Ql[i];
   Vo[i]=V[i];
   k[i]=Vo[i]*10000/5743.63/2;
  } 
   Ntd=i-1;

  for(i=1;fw[Nk+i-1]<0.99;i++)
   {
    Tdi[i]=(Fy*A1*L*Tde[Nk+i-1]/(Qi1*300)+Tf); if(i==1) Tdi[1]=Tf;
    Qli[i]=Qld[Nk+i-1]*Qi1*2;
    Vi[i]=2*Fy*A1*L/fwi[Nk+i-1]/10000;
    Qoi[i]=Qli[i]*(1-fw[Nk+i-1]);
    Voi[i]=2*Vod[Nk+i]*Fy*A1*L/10000;   /* **** */
    ki[i]=Voi[i]*100/(5743.63/n);
   }
    Ntdi=(i-1);
 



/* 插值(排) */

 for(i=0;i<Ntd-1;i++)
  {
   Ql2[i]=Ql[i+1];
   V2[i]=V[i+1];
   Qo2[i]=Qo[i+1];
   Vo2[i]=Vo[i+1];
   k2[i]=k[i+1];
  }
 j=(int)(Tdi[1]+1);
 for(i=1;i<(Ntdi);i++)
  {
   for(;((j>Tdi[i])&&(j<Tdi[i+1]));j++)
    {
     Ql2[j]=((Qli[i+1]-Qli[i])*(j-Tdi[i])/(Tdi[i+1]-Tdi[i])+Qli[i]);
     V2[j]=((Vi[i+1]-Vi[i])*(j-Tdi[i])/(Tdi[i+1]-Tdi[i])+Vi[i]);
     Qo2[j]=((Qoi[i+1]-Qoi[i])*(j-Tdi[i])/(Tdi[i+1]-Tdi[i])+Qoi[i]);
     Vo2[j]=((Voi[i+1]-Voi[i])*(j-Tdi[i])/(Tdi[i+1]-Tdi[i])+Voi[i]);
     k2[j]=((ki[i+1]-ki[i])*(j-Tdi[i])/(Tdi[i+1]-Tdi[i])+ki[i]);
    }
  }



/*面积*/
	d2=100;
	 while(fabs(7000*3.14*3555*442.9*0.65*30/(2*Uo*d2*d2*(log((d2/0.1))-0.619))-64300)>1&&(d2<300))
	  d2=d2+0.001;

	Qi2=3.14*3555*442.9*0.001*0.65*30/(Uo*(log((d2/0.1))-0.619))*0.0864;
	n2=(int)(5000/Qi2/0.9+1);
	A=Uw*0.65/(Uo*0.2);
	B=1;
	C=log(d2/0.4);
	D=C+B*log(d2*100)-A*log(10);
	E2=Fy*(sw[Nk]-0.32)*Uo/(kr*0.65*30);
	A2=Uw*Fy*d2*d2*10000/(2*kr*0.2*30);
	B2=log(d2/0.1);
	C2=0.2*log(d2/0.4);

/*开发时间Ti(年) 注水量Qw(方/天) 产油量Qoh(方/天) */
	for(j=2500,i=2;j<d2*100;j=j+2500,i++)
	 {
	  ti[i]=E2*j*j*0.5*((A-B)*(log(j)-0.5)+D)/300/86400;
	  rf[i]=j;
	  Qw[i]=2*3.14*3555*kr*0.65*30/(Uo*(Uw*0.65/(Uo*0.2)*log(rf[i]/10)+log(d2*100/rf[i])+log(d2/0.4)))*0.0864;
	  Qoh[i]=Qw[i];
	 }
	  ti[1]=0; Qw[1]=Qi2; Qoh[1]=Qi2;
	  ti[i]=E2*d2*d2*10000*0.5*((A-B)*(log(d2*100)-0.5)+D)/300/86400;
	  Tf2=ti[i]; nkk=i;
	  rf[i]=d2*100;
	  Qw[i]=2*3.14*3555*kr*0.65*30/(Uo*(Uw*0.65/(Uo*0.2)*log(rf[i]/10)+log(d2*100/rf[i])+log(d2/0.4)))*0.0864;
	  Qoh[i]=Qw[i];
	 
	  i++;
	for(;(fw[Nk+i-nkk])<=(fw[13]);i++)
	 {
	  ti[i]=0;
	   for(m=1;m<=(i-nkk);m++) 
	    ti[i]=(ti[i]+(sw[Nk+m]-sw[Nk+m-1])*(B2+C2/krw[Nk+m])/(1-fw[Nk+m]));
	   ti[i]=(ti[i]*A2/(300*86400)+Tf2);
	    Qw[i]=2*3.14*3555*kr*0.2*30/(Uw*(log(d2/0.1)+0.2/krw[Nk+i-nkk]*log(d2/0.4)))*0.0864;
	    Qoh[i]=Qw[i]*(1-fw[Nk+i-nkk]);
	  } nkk=i-1;

/*累注水Wi(万方) 累产油Np(万方) */
	  Wi[0]=0; Np[0]=0; ti[0]=0;
	for(i=1;i<=nkk;i++)
	 {
	  Wi[i]=((Qw[i]+Qw[i-1])*(ti[i]-ti[i-1])*0.03*0.5+Wi[i-1]);
	  Np[i]=((Qoh[i]+Qoh[i-1])*(ti[i]-ti[i-1])*0.03*0.5+Np[i-1]);
	 }



/* 插值(面积) */

   Qw2[0]=Qw[1];
   Qoh2[0]=Qoh[1];
   Wi2[0]=0;
   Np2[0]=0;

 j=1;
 for(i=1;i<nkk;i++)
  {
   for(;((j>ti[i])&&(j<ti[i+1]));j++)
    {
     Wi2[j]=Wi[i]+(Wi[i+1]-Wi[i])*(j-ti[i])/(ti[i+1]-ti[i]);
     Np2[j]=Np[i]+(Np[i+1]-Np[i])*(j-ti[i])/(ti[i+1]-ti[i]);
     Qw2[j]=Qw[i]+(Qw[i+1]-Qw[i])*(j-ti[i])/(ti[i+1]-ti[i]);
     Qoh2[j]=Qoh[i]+(Qoh[i+1]-Qoh[i])*(j-ti[i])/(ti[i+1]-ti[i]);
    }
  }




/* 经济评价(排状)
     钻井总费用Ma 作业费Mw 注水费Ml 输油费Mt 投资Min(亿元) 收入Ms(亿元) 净现Mc(亿元) */

 Ma=(2257+4.23)*1000*(2*n)*0.0001*0.0001;
 Mw=2*2*n*0.0001;
  Min[0]=1.3*Ma;
  Mc[0]=-1.3*Ma;
  Mt[0]=0;
  Ml[0]=0;
  Ms[0]=0;
 for(i=1;i<Tdi[Ntdi];i++)
  {
   Ml[i]=(V2[i]-V2[i-1])*6*n*0.0001;
   Mt[i]=(Vo2[i]-Vo2[i-1])*210*0.9*n*0.0001;
   Min[i]=(Mw+Ml[i]+Mt[i]);
   Ms[i]=(Vo2[i]-Vo2[i-1])*1200*0.9*0.95*n*0.0001;
   Mc[i]=(Ms[i]-Min[i])/(pow(1.08,i))+Mc[i-1];
  }


/* 经济评价(面积)
     钻井总费用Ma 作业费Mw 注水费Ml 输油费Mt 投资Min(亿元) 收入Ms(亿元) 净现Mc(亿元) */

 Ma2=(2257+4.23)*1000*(2*n2)*0.0001*0.0001;
 Mw2=2*2*n2*0.0001;
  Min2[0]=1.3*Ma2;
  Mc2[0]=-1.3*Ma2;
  Mt2[0]=0;
  Ml2[0]=0;
  Ms2[0]=0;
 for(i=1;i<ti[nkk];i++)
  {
   Ml2[i]=(Wi2[i]-Wi2[i-1])*6*n2*0.0001;
   Mt2[i]=(Np2[i]-Np2[i-1])*210*0.9*n2*0.0001;
   Min2[i]=Mw2+Ml2[i]+Mt2[i];
   Ms2[i]=(Np2[i]-Np2[i-1])*1200*0.9*0.95*n2*0.0001;
   Mc2[i]=(Ms2[i]-Min2[i])/(pow(1.08,i))+Mc2[i-1];
  }



/* 保存数据SAVE */

 fp=fopen("Dat.txt","w");

 fprintf(fp,"学号:9902%d\n\n",No);
  fprintf(fp,"Uo:%f\nUw:%f\nNk:%d\n\n",Uo,Uw,Nk);

  fprintf(fp,"\n排状:\nE:%f",E[Nk]);
  fprintf(fp,"\nQi1:%f立方米/天",Qi1);
  fprintf(fp,"\n井数:%d",n);
  fprintf(fp,"\n单井控面积A:%f平方米",S);
  fprintf(fp,"\n井距d:%f米",d);
  fprintf(fp,"\n排距L:%f米",L);

  fprintf(fp,"\n截面积A1:%f平方米",A1);
  fprintf(fp,"\nTdf:%f",Tdf);
  fprintf(fp,"\n见水时间Tf:%f年",Tf);


 fprintf(fp,"\n\n面积:\n井距d2:%f米\n",d2);   
  fprintf(fp,"Qi2:%f立方厘米/秒\n",Qi2);   
  fprintf(fp,"井数n2:%d\n",n2);
  fprintf(fp,"A:%f\n",A);  
  fprintf(fp,"B:%f\n",B);  
  fprintf(fp,"C:%f\n",C);  
  fprintf(fp,"D:%f\n",D);

  fprintf(fp,"A2:%f\n",A2);
  fprintf(fp,"B2:%f\n",B2);
  fprintf(fp,"C2:%f\n",C2);
  fprintf(fp,"E2:%f\n",E2);


 fprintf(fp,"\nNum\tsw\t\tkro\t\tkrw\t\tfw\t\tfw'\t\tswf\n");
 for(i=1;i<N;i++)
  fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\t%f\n",i,sw[i],kro[i],krw[i],fw[i],fwi[i],swf[i]);

 fprintf(fp,"\n\tsw\t\tI\t\tF\t\tTde\n");
 for(i=Nk;i<N-1;i++)
  fprintf(fp,"%d \t%f\t%f\t%f\t%f\n",i,sw[i],I[i],F[i],Tde[i]);

 fprintf(fp,"\n\tsw\t\tQld\t\tQod\t\tVod\t\tVwd\n");
 for(i=Nk;i<(N-1);i++)
  fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\n",i,sw[i],Qld[i],Qod[i],Vod[i],Vwd[i]);


 fprintf(fp,"\n\n序号\t开发时间(年)\t产液量(方/天)\t累注水(方)\t年产油(方)\t累产油(方)\t采出程度(%)\n");
 for(i=1;i<=Ntd;i++)
  fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\t%f\n",i,Td[i],Ql[i],V[i],Qo[i],Vo[i],k[i]);
 for(i=1;i<=Ntdi;i++)
  fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",(i+Ntd),Tdi[i],Qli[i],Vi[i],Qoi[i],Voi[i],ki[i],fw[Nk+i-1]);

 fprintf(fp,"\n\n插值后\n时间\t产液量(方/天)\t累注水(万方)\t年产油(万方)\t累产油(万方)\t采出程度(%)\t投资(亿元)\t收入(亿元)\t净现(亿元)\n");
 for(i=0;i<Tdi[Ntdi];i++)
  fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",i,Ql2[i],V2[i],Qo2[i],Vo2[i],k2[i],Min[i],Ms[i],Mc[i]);

 fprintf(fp,"\n\t前缘位置(米)\t开发时间(年)\t注水量(方/天)\t产油量(方/天)\t累注水(万方)\t累产油(万方)\n");
  for(i=1;i<(int)(d2/25+2);i++)
    fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\t%f\n",i,rf[i]/100,ti[i],Qw[i],Qoh[i],Wi[i],Np[i]);
    fprintf(fp,"%d\t%f\t%f\t%f\t%f\t%f\t%f\n",i,d2,ti[i],Qw[i],Qoh[i],Wi[i],Np[i]);
  i++;
   for(;i<=nkk;i++)
    fprintf(fp,"%d\t\t\t%f\t%f\t%f\t%f\t%f\n",i,ti[i],Qw[i],Qoh[i],Wi[i],Np[i]);

 fprintf(fp,"\n插值后:\n年\t注水量(方/天)\t产油量(方/天)\t累注水(万方)\t累产油(万方)\t投资(亿元)\t收入(亿元)\t净现(亿元)\n");
   for(i=0;i<ti[nkk];i++)
    fprintf(fp,"%d\t%f\t%f\t\%f\t%f\t%f\t%f\t%f\n",i,Qw2[i],Qoh2[i],Wi2[i],Np2[i],Min2[i],Ms2[i],Mc2[i]);


/* fprintf(fp,"\n%f\n",Mw); */


 fprintf(fp,"\n\n\t\t\tEND\n");

 fclose (fp);

 printf("\nOK!\n");



}













⌨️ 快捷键说明

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