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

📄 boastview.cpp

📁 石油开发软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      facz=1.0;
		if(i>1 && i<ii)
			facx=4.*dx[i][j][k]/(2.*dx[i][j][k]+dx[i+1][j][k]+dx[i-1][j][k]);
		if(j>1 && j<jj)
			facy=4.*dy[i][j][k]/(2.*dy[i][j][k]+dy[i][j+1][k]+dy[i][j-1][k]);
		if(k>1 && k<kk)
	 facz=4.*dz[i][j][k]/(2.*dz[i][j][k]+dz[i][j][k+1]+dz[i][j][k-1]);

      a1[i][j][k]=facx*kx[i][j][k]*dy[i][j][k]*dz[i][j][k];
      a2[i][j][k]=facy*ky[i][j][k]*dx[i][j][k]*dz[i][j][k];
		a3[i][j][k]=facz*kz[i][j][k]*dx[i][j][k]*dy[i][j][k];
     }

 if(ii==1) goto Mark501;
 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++)   
	 for(i=2;i<=ii;i++)
      tx[i][j][k]=.012656*a1[i-1][j][k]*a1[i][j][k]/(dx[i-1][j][k]*a1[i][j][k]
						    +dx[i][j][k]*a1[i-1][j][k]);

Mark501:  
 if(jj==1) goto Mark551;
 for(k=1;k<=kk;k++)
  for(j=2;j<=jj;j++)   
    for(i=1;i<=ii;i++)
		ty[i][j][k]=.012656*a2[i][j-1][k]*a2[i][j][k]/(dy[i][j-1][k]*a2[i][j][k]
						    +dy[i][j][k]*a2[i][j-1][k]);

Mark551:
 if(kk==1) goto Mark660;
 for(k=2;k<=kk;k++)
  for(j=1;j<=jj;j++)   
    for(i=1;i<=ii;i++)
     tz[i][j][k]=.012656*a3[i][j][k-1]*a3[i][j][k]/(dz[i][j][k-1]*a3[i][j][k]
													+dz[i][j][k]*a3[i][j][k-1]);
Mark660: 
/*
    fprintf(fw,"    i    j    k       a1  	a2	a3	tx	ty	tz\n");
    for(k=1;k<=kk;k++)
     for(j=1;j<=jj;j++)
		for(i=1;i<=ii;i++)
	fprintf(fw,"%5d%5d%5d %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f\n",i,j,k,a1[i][j][k],
		a2[i][j][k],a3[i][j][k],tx[i][j][k],ty[i][j][k],tz[i][j][k]);
 */
 	int NUMTX,NUMTY,NUMTZ,ITCODE,I,J,K,L;
      fscanf(fr,"%s",ssn);
	  fprintf(fw,"%s\n",ssn);
	  fscanf(fr,"%d",&NUMTX);
	  fscanf(fr,"%d",&NUMTY);
	  fscanf(fr,"%d",&NUMTZ);
      fscanf(fr,"%d",&ITCODE);
      if(NUMTX==0) goto M100;
      fprintf(fw,"**********TRANSMISSIBILITY (TX) NODE MODIFICATIONS\n");
      fprintf(fw,"**********      I    J    K          NEW TX VALUE\n");
      for( L=1;L<=NUMTX;L++)
	  {
  	  fscanf(fr,"%d",&I);
      fscanf(fr,"%d",&J);
	  fscanf(fr,"%d",&K);
      fscanf(fr,"%f",&tx[I][J][K]);
	  fprintf(fw,"%d   %d   %d   %f\n",I,J,K,tx[I][J][K]);
	  
}
M100: 
      if(NUMTY==0)goto lgz110;
      fprintf(fw,"**********TRANSMISSIBILITY (TY) NODE MODIFICATIONS\n");
      fprintf(fw,"**********      I    J    K          NEW TX VALUE\n");
      for(L=1;L<=NUMTY;L++)
	  {
  	  fscanf(fr,"%d",&I);
      fscanf(fr,"%d",&J);
	  fscanf(fr,"%d",&K);
      fscanf(fr,"%f",&ty[I][J][K]);
	  fprintf(fw,"%d   %d   %d   %f\n",I,J,K,ty[I][J][K]);
}
lgz110:
      if(NUMTZ==0)goto lgz120;
      fprintf(fw,"**********TRANSMISSIBILITY (TZ) NODE MODIFICATIONS\n");
      fprintf(fw,"**********      I    J    K          NEW TX VALUE\n");
      for(L=1;L<=NUMTY;L++)
	  {
  	  fscanf(fr,"%d",&I);
      fscanf(fr,"%d",&J);
	  fscanf(fr,"%d",&K);
      fscanf(fr,"%f",&tz[I][J][K]);
	  fprintf(fw,"%d   %d   %d   %f\n",I,J,K,tz[I][J][K]);
	  }
lgz120:
 
  return;

}


					/*------------------- pvt data ---------------------*/

void CBOASTView::table(float sat[maxpvt],float krot[maxpvt],float krwt[maxpvt]
		   ,float krgt[maxpvt],float pcowt[maxpvt],float pcgot[maxpvt],float pot[maxpvt]
		   ,float muot[maxpvt],float bot[maxpvt],float bopt[maxpvt],float rsot[maxpvt],
float rsopt[maxpvt],float pwt[maxpvt],float muwt[maxpvt],float bwt[maxpvt],float bwpt[maxpvt],
float rswt[maxpvt],float  rswpt[maxpvt],
float pgt[maxpvt],float mugt[maxpvt],float bgt[maxpvt],float bgpt[maxpvt],float crt[maxpvt])
{
  int   i,j,k;
  char  words[maxword];
  float cpress=(float)0.0068948,div;
			/****  relative permeability & capillary pressure table--*/
 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 for(i=1;i<=25;i++)
  {
	 fscanf(fr,"%f%f%f%f%f%f",&sat[i],&krot[i],&krwt[i],&krgt[i],&pcowt[i],&pcgot[i]);
	 fprintf(fw,"%8.3f%8.3f%8.3f%8.3f%8.3f%8.3f\n",sat[i],krot[i],krwt[i],krgt[i],pcowt[i],pcgot[i]);
    pcowt[i]=pcowt[i]/cpress;
    pcgot[i]=pcgot[i]/cpress;
    if(sat[i]>=1.10) { msat=i; break; }
   }
 
			/****  bubble point & maximum pressures------------*/
 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 fscanf(fr,"%f%f%f%f%f%d",&pbo,&vslope,&bslope,&rslope,&pmaxt,&ireprs);
 fprintf(fw,"%8.4f%8.4f%8.4f%8.4f%8.4f%5d\n",pbo,vslope,bslope,rslope,pmaxt,ireprs);
 pbo=pbo/cpress;
 pmaxt=pmaxt/cpress;
 vslope=vslope*cpress;
 bslope=bslope*cpress;
 rslope=rslope*cpress;

			/*---------------  oil data table-------------------------*/
  fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 for(i=1;i<=25;i++)
	{ fscanf(fr,"%f%f%f%f",&pot[i],&muot[i],&bot[i],&rsot[i]);
     fprintf(fw,"%10.4f%10.4f%10.4f%10.4f\n",pot[i],muot[i],bot[i],rsot[i]);
     rsot[i]=0.17809*rsot[i];
	  pot[i]=pot[i]/cpress;
     if(pot[i]>=pmaxt) { mpot=i; break;}
   }
			/*---------------  water data table-------------------------*/

 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 for(i=1;i<=25;i++)
	{ fscanf(fr,"%f%f%f%f",&pwt[i],&muwt[i],&bwt[i],&rswt[i]);
     fprintf(fw,"%10.4f%10.4f%10.4f%10.4f\n",pwt[i],muwt[i],bwt[i],rswt[i]);
     rswt[i]=0.17809*rswt[i];
     pwt[i]=pwt[i]/cpress;
	  if(pwt[i]>=pmaxt) { mpwt=i; break;}
   }
			/*---------------  water data table-------------------------*/

 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 for(i=1;i<=25;i++)
	{ fscanf(fr,"%f%f%f%f",&pgt[i],&mugt[i],&bgt[i],&crt[i]);
     fprintf(fw,"%10.4f%10.4f%10.4f%10.4f\n",pgt[i],mugt[i],bgt[i],crt[i]);
     pgt[i]=pgt[i]/cpress;
     crt[i]=crt[i]*cpress;
     if(pgt[i]>=pmaxt) { mpgt=i; break;}
	}

 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 fscanf(fr,"%f%f%f",&rhosco,&rhoscw,&rhoscg);
 fprintf(fw,"%10.4f%10.4f%10.4f%\n",rhosco,rhoscw,rhoscg);
 rhosco=rhosco/0.01602;
 rhoscw=rhoscw/0.01602;
 rhoscg=rhoscg/0.01602;

			/**** calculate slopes dbo/dp, drso/dp, dbw/dp, drsw/dp, dbg/dp */

 fprintf(fw,"%s\n","calculate slopes oil p       B      dbo/dp, drsot/dp");
 for(i=2;i<=mpot;i++)
  {
      div=1.0/(pot[i]-pot[i-1]);
      bopt[i]=(bot[i]-bot[i-1])*div;
		rsopt[i]=(rsot[i]-rsot[i-1])*div;
		fprintf(fw,"%10.4f%10.4f%10.4f%10.4f%10.4f\n",pot[i]*cpress,bot[i],bopt[i]/cpress,
						      rsot[i],rsopt[i]/cpress );
   }
 fprintf(fw,"%s\n","calculate slopes water  p       B      dbo/dp,      rso drsot/dp");
 for(i=2;i<=mpwt;i++)
   {
		div=1.0/(pwt[i]-pwt[i-1]);
      bwpt[i]=(bwt[i]-bwt[i-1])*div;
      rswpt[i]=(rswt[i]-rswt[i-1])*div;
      fprintf(fw,"%10.4f%10.4f%10.4f%10.4f%10.4f\n",pwt[i]*cpress,bwt[i],bwpt[i]/cpress,
											rswt[i],rswpt[i]/cpress);
   }

 fprintf(fw,"%s\n","calculate slopes water  p       B      dbo/dp");
 for(i=2;i<=mpgt;i++)
   {
      bgpt[i]=(bgt[i]-bgt[i-1])/(pgt[i]-pgt[i-1]);
      fprintf(fw,"%10.4f%10.4f%10.4f\n",pgt[i]*cpress,bgt[i],bgpt[i]/cpress);
	}

 bgpt[1]=bgpt[2];
 bopt[1]=bopt[2];
 bwpt[1]=bwpt[2];
 rswpt[1]=rswpt[2];
 rsopt[1]=rsopt[2];


			/* initialize bubble  point pressure array */

 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++)
    for(i=1;i<=ii;i++)
	 pbot[i][j][k]=pbo;

 return;
}




				/****  establish initial conditions */


void CBOASTView::uinit1()
{
 int    i,j,k;
 char   words[maxword];
 float  cpress=(float)0.0068948;

 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);
 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++) {
	for(i=1;i<=ii;i++)
	  { fscanf(fr,"%f",&pn[i][j][k]);
       fprintf(fw,"%8.2f",pn[i][j][k]);
       if(i%10==0) fprintf(fw,"\n");
	pn[i][j][k]=pn[i][j][k]/cpress;
     }
    fprintf(fw,"\n");
	}
			/**** initialize n+1 pressure array. */
 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++) 
   for(i=1;i<=ii;i++)
		p[i][j][k]=pn[i][j][k];


 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++) {
   for(i=1;i<=ii;i++)
     { fscanf(fr,"%f",&so[i][j][k]);
		 fprintf(fw,"%8.2f",so[i][j][k]);
       if(i%10==0) fprintf(fw,"\n");
     }
    fprintf(fw,"\n");
	}
 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++) {
   for(i=1;i<=ii;i++)
     { fscanf(fr,"%f",&sw[i][j][k]);
       fprintf(fw,"%8.2f",sw[i][j][k]);
       if(i%10==0) fprintf(fw,"\n");
     }
	 fprintf(fw,"\n");
   }

 for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++) {
   for(i=1;i<=ii;i++)
	  { sg[i][j][k]=1.0-so[i][j][k]-sw[i][j][k];
	if(sg[i][j][k]<0.0) sg[i][j][k]=0.0;
       fprintf(fw,"%8.2f",sg[i][j][k]);
       if(i%10==0) fprintf(fw,"\n");
      
      son[i][j][k]=so[i][j][k];
		swn[i][j][k]=sw[i][j][k];
      sgn[i][j][k]=sg[i][j][k];

     }
    fprintf(fw,"\n");
   }

return;

}


			/*----------------- read well data ---------------*/

void CBOASTView::nodes()
{
 int        j,k,iq3,lay;
 char       words[maxword];

 fscanf(fr,"%s",words);
 fprintf(fw,"%s\n",words);

 fscanf(fr,"%d",&nvqn);
 if(nvqn==0) return;

 for(j=1;j<=nvqn;j++)
 {
	fscanf(fr,"%s%d%d%d%d%d%f%f%f%f",wellid[j],&iqn1[j],&iqn2[j],&iqn3[j],&layer[j],&kip[j],
								&qvo[j],&qvw[j],&qvg[j],&qvt[j]);
 /*  fprintf(fw,"%10s%5d%5d%5d%5d%5d%10.2f%10.2f%10.2f%10.2f\n",wellid[j],iqn1[j],iqn2[j],
					 iqn3[j],layer[j],kip[j],qvo[j],qvw[j],qvg[j],qvt[j]);
*/
	iq3=iqn3[j];
	lay=iq3+(layer[j]-1);
	for(k=iq3;k<=lay;k++)
	  { fscanf(fr,"%f%f",&pid[j][k],&pwf[j][k]);
		 fprintf(fw,"%5d%5d%5d%10.2f%10.2f%10.2f%10.2f%10.2f%10.2f\n",iqn1[j],iqn2[j],k,
			qvo[j],qvw[j],qvg[j],qvt[j],pwf[j][k],pid[j][k]);
	pid[j][k]=pid[j][k]/0.3048;
		  pwf[j][k]=pwf[j][k]/0.0068948;
		}
	 qvo[j]=qvo[j]*1000./(158.988);
//	 qvo[j]=qvo[j]*1000./(158.988*rhosco*0.01602);
	 qvw[j]=qvw[j]*1000./(158.988*rhoscw*0.01602);
	 qvg[j]=qvg[j]/0.02832;
	 qvt[j]=qvt[j]*1000/158.988;
 }

 return;
}



			/*.... ......................................................interp--*/
float CBOASTView::interp(float x[maxpvt],float y[maxpvt],int n,float xo,float yo)
/* float x[maxpvt],y[maxpvt],xo,yo;
int n; */
{
 int i;
 if(xo>=x[n]){ yo=y[n]; return(yo);}
 for(i=2;i<=n;i++)
 {
	if(xo>=x[i]) continue;
	yo=y[i-1]+(xo-x[i-1])*(y[i]-y[i-1])/(x[i]-x[i-1]);
	break;
  }
return(yo);

}
			/*.... ........................................................intpvt--*/
float CBOASTView::intpvt(float bpt,float rm,float x[maxpvt],float y[maxpvt],
					 int n,float xo,float yo)
/*
float bpt,x[maxpvt],y[maxpvt],xo,yo,rm;
int   n; */
{
 int   i;
 float yobp;
 if(xo>bpt) goto M100;
 if(xo>=x[n]) {yo=y[n]; return(yo);}
 for(i=2;i<=n;i++)
 {
  if(xo>=x[i]) continue;
  yo=y[i-1]+(xo-x[i-1])*(y[i]-y[i-1])/(x[i]-x[i-1]);
	break;
  }
return(yo);
M100:
  for(i=2;i<=n;i++)
	{
	 if(bpt>=x[i]) continue;
	 yobp=y[i-1]+(bpt-x[i-1])*(y[i]-y[i-1])/(x[i]-x[i-1]);
	 yo=yobp+rm*(xo-bpt);
	break;
  }
return(yo);


}



		/*.... ..........................................................prt*/
void CBOASTView::prtps(int nloop,int ipmap,int isomap,int iswmap,int isgmap,int ipbmap,
			  float delt0,float eti)
/*int    nloop,ipmap,isomap,iswmap,isgmap,ipbmap;
float  delt0,eti; */
{
float      ppm=0.;
float      som=0.;
float      swm=0.;
float      sgm=0.;
float      dpo,dso,dsw,dsg,gorm;
int        ipm=0,jpm=0,kpm=0;
int        iom=0,jom=0,kom=0;
int        iwm=0,jwm=0,kwm=0;
int        igm=0,jgm=0,kgm=0;
int        i,j,k,nlm;      

for(k=1;k<=kk;k++)
  for(j=1;j<=jj;j++)
     for(i=1;i<=ii;i++)
      {
      dpo=p[i][j][k]-pn[i][j][k];
      dso=so[i][j][k]-son[i][j][k];
      dsw=sw[i][j][k]-swn[i][j][k];
      dsg=sg[i][j][k]-sgn[i][j][k];
      if(fabs(dpo)<=fabs(ppm)) goto M210;
      ppm=dpo;
		ipm=i;
      jpm=j;
      kpm=k;
  M210:
    if(fabs(dso)<=fabs(som)) goto M220;
      som=dso;
      iom=i;
      jom=j;
      kom=k;
  M220:
    if(fabs(dsw)<=fabs(swm)) goto M230;
		swm=dsw;
      iwm=i;
      jwm=j;
      kwm=k;
  M230: 
    if(fabs(dsg)<=fabs(sgm)) continue;
      sgm=dsg;
      igm=i;
      jgm=j;
      kgm=k;
     }
       nlm=nloop-1;
      gorm=1000.*gor;
  fprintf(fw,"\n\n");
  fprintf(fw,"----------------------------the--summary--report--------------------------------\n\n");

  fprintf(fw,"elapsed time (days) : %8.2f,  time step number :   %8d    time step size : %8.2f\n\n",eti,nlm,delt0);

  fprintf(fw,"current avg pressure: %8.2f,  previous pressure:   %8.2f  max place:(%2d %2d %2d)%8.4f\n\n",
			pavg*0.0068948,pavg0*0.0068948,ipm,jpm,kpm,ppm*0.0068948);

  fprintf(fw,"oil dsmax:(%2d %2d %2d):%8.4f   water dsmax:(%2d %2d %2d):%8.4f  gas dsmax:(%2d %2d %2d):%8.4f\n\n",
											iom,jom,kom,som,iwm,jwm,kwm,swm,igm,jgm,kgm,sgm);

  fprintf(fw,"oil production rate: %8.2f    cum oil production : %8.2e\n",opr*158.988*rhosco*0.01602/1000.,
									cop*158.988*rhosco*0.01602/1000.);

  fprintf(fw,"water product  rate: %8.2f    cum water product  : %8.2e\n",wpr*158.988*rhoscw*0.01602/1000.,
									cwp*158.988*rhoscw*0.01602/1000.);

  fprintf(fw,"gas production rate: %8.2f    cum gas production : %8.2e\n\n",gpr*0.02832,cgp*0.02832);

  fprintf(fw,"gas  injection  rate: %10.2f    cum gas   injection : %10.2e\n",gir*0.02832,cgi*0.02832);
  fprintf(fw,"water injection rate: %10.2f    cum water injection : %10.2e\n\n",wir*158.988*rhoscw*0.01602/1000.,
									      cwi*rhoscw*0.01602*158.988/1000.);

  fprintf(fw,"oil material balance: %10.4f    water mater balance : %10.4f    gas material balance:%10.4f\n\n",
										mbeo,mbew,mbeg);
  fprintf(fw,"production wor (m^3): %10.4f    cum wor		 : %10.4f\n",wor,cwor);
  fprintf(fw,"production gor (m^3): %10.4f    cum gor     	 : %10.4f\n\n\n",gorm*0.1781,cgor*0.1781);



⌨️ 快捷键说明

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