📄 boastview.cpp
字号:
if(ipmap==1)
{fprintf(fw,"THE-OIL-RESERVOIR-PRESSURE-DISTRIBUTION\n");
for(k=1;k<=kk;k++)
{
fprintf(fw,"\n k=%d\n",k);
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{ fprintf(fw,"%8.2f",p[i][j][k]*0.0068948);
if(i%10==0) fprintf(fw,"\n");
}
fprintf(fw,"\n");
}
}
fprintf(okp,"PRESSURE-DISTRIBUTION-OF-TIME: %8.2f\n",eti);
for(k=1;k<=kk;k++)
{
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{
fprintf(okp,"%8.2f",p[i][j][k]*0.0068948);
if(i%10==0) fprintf(okp,"\n");
}
fprintf(okp,"\n");
}
}
}
if(isomap==1)
{fprintf(fw,"THE-OIL-SATURATION-DISTRIBUTION\n");
for(k=1;k<=kk;k++)
{
fprintf(fw,"\n k=%d\n",k);
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{ fprintf(fw,"%8.2f",so[i][j][k]);
if(i%10==0) fprintf(fw,"\n");
}
fprintf(fw,"\n");
}
}
fprintf(oko,"OIL-SATURATION-OF-TIME: %8.2f\n", eti);
for(k=1;k<=kk;k++)
{
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{
fprintf(oko,"%8.2f",so[i][j][k]);
if(i%10==0) fprintf(oko,"\n");
}
fprintf(oko,"\n");
}
}
}
if(iswmap==1)
{fprintf(fw,"THE-WATER-SATURATION-DISTRIBUTION\n");
for(k=1;k<=kk;k++)
{
fprintf(fw,"\n k=%d\n",k);
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{ fprintf(fw,"%8.2f",sw[i][j][k]);
if(i%10==0) fprintf(fw,"\n");
}
fprintf(fw,"\n");
}
}
fprintf(okw,"WATER-SATURATION-OF-TIME: %8.2f\n", eti);
for(k=1;k<=kk;k++)
{
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{ fprintf(okw,"%8.2f",sw[i][j][k]);
if(i%10==0) fprintf(okw,"\n");
}
fprintf(okw,"\n");
}
}
}
if(isgmap==1)
{fprintf(fw,"THE-GAS-SATURATION-DISTRIBUTION\n");
for(k=1;k<=kk;k++)
{
fprintf(fw,"\n k=%d\n",k);
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{ fprintf(fw,"%8.2f",sg[i][j][k]);
if(i%10==0) fprintf(fw,"\n");
}
fprintf(fw,"\n");
}
}
}
if(ipbmap==1)
{fprintf(fw,"THE-RESER-BUBBLE0POINT-PRESSURE-DISTRIBUTION\n");
for(k=1;k<=kk;k++)
{
fprintf(fw,"\n k=%d\n",k);
for(j=1;j<=jj;j++) {
for(i=1;i<=ii;i++)
{ fprintf(fw,"%8.2f",pbot[i][j][k]*0.0068948);
if(i%10==0) fprintf(fw,"\n");
}
fprintf(fw,"\n");
}
}
}
fprintf(fw," ----------------THE-END-OF-THE-REPORT---------------------\n\n\n\n");
return;
}
/*-------------------------well dealing-------------*/
void CBOASTView::qrate(float sat[maxpvt],float krot[maxpvt],float krwt[maxpvt],
float krgt[maxpvt],float pot[maxpvt],
float muot[maxpvt],float bot[maxpvt],float rsot[maxpvt],
float pwt[maxpvt],float muwt[maxpvt],float bwt[maxpvt],float rswt[maxpvt],
float pgt[maxpvt],float mugt[maxpvt],float bgt[maxpvt])
{
int j,k;
int iq1,iq2,iq3,lay,iterq;
float muo=1.,muw=1.,mug=1.,kro=1.,krw=1.,krg=1.;
float qdenom,alphao,alphaw,alphag;
float bbo=1.,bbw=1.,bbg=1.,rso=1.,rsw=1.,pp,bpt,totor;
float sso,ssw,ssg,gmt,fac,gmtb,soln,qt,ppn;
for(j=1;j<=nvqn;j++)
{
iq1=iqn1[j];
iq2=iqn2[j];
iq3=iqn3[j];
lay=iq3+(layer[j]-1);
for(k=iq3;k<=lay;k++)
{
pwfc[j][k]=-1.0;
pp=p[iq1][iq2][k];
bpt=pbot[iq1][iq2][k];
muo=intpvt(bpt,vslope,pot,muot,mpot,pp,muo);
muw=interp(pwt,muwt,mpwt,pp,muw);
mug=interp(pgt,mugt,mpgt,pp,mug);
sso=so[iq1][iq2][k];
ssw=sw[iq1][iq2][k];
ssg=sg[iq1][iq2][k];
krw=interp(sat,krwt,msat,ssw,krw);
kro=interp(sat,krot,msat,sso,kro);
krg=interp(sat,krgt,msat,ssg,krg);
gmw[j][k]=krw/muw;
gmo[j][k]=kro/muo;
gmg[j][k]=krg/mug;
// if(iq1==16&&iq2==7&&k==4)
// fprintf(fw,"%5d%5d%10.3f,%10.3f%10.3f\n",j,k,gmo[j][k],muw,sso);
}
if(kip[j]<0) continue;
if(kip[j]!=1) goto M1190;
iterq=0;
qdenom=0.0;
alphao=0.0;
alphaw=0.0;
alphag=0.0;
lay=iq3+(layer[j]-1);
M1172:
iterq=iterq+1;
for(k=iq3;k<=lay;k++)
{
pp=p[iq1][iq2][k];
bpt=pbot[iq1][iq2][k];
bbo=intpvt(bpt,bslope,pot,bot,mpot,pp,bbo);
bbw=interp(pwt,bwt,mpwt,pp,bbw);
bbg=interp(pgt,bgt,mpgt,pp,bbg);
rso=intpvt(bpt,rslope,pot,rsot,mpot,pp,rso);
rsw=interp(pwt,rswt,mpwt,pp,rsw);
if(iterq!=1) goto M1174;
qdenom=qdenom+pid[j][k]*gmo[j][k]/bbo;
gmt=gmo[j][k]+gmw[j][k]+gmg[j][k];
alphao=gmo[j][k]/gmt+alphao;
alphaw=gmw[j][k]/gmt+alphaw;
alphag=gmg[j][k]/gmt+alphag;
continue;
M1174:
if(qvt[j]==0.0) goto M1176;
totor=qvt[j]*alphao/(alphao+alphaw+alphag);
goto M1178;
M1176:
totor=qvo[j];
M1178:
qo[iq1][iq2][k]=totor*5.615*pid[j][k]*gmo[j][k]/(bbo*qdenom);
if(gmo[j][k]==0)gmo[j][k]=0.000001;
qw[iq1][iq2][k]=qo[iq1][iq2][k]*gmw[j][k]*bbo/(bbw*gmo[j][k]);
qg[iq1][iq2][k]=qo[iq1][iq2][k]*(gmg[j][k]*bbo/(bbg*gmo[j][k])+rso)+rsw*qw[iq1][iq2][k];
}
if(iterq==1) goto M1172;
continue;
M1190:
lay=iq3+(layer[j]-1);
iterq=0;
qdenom=0.;
M1192:
iterq=iterq+1;
for(k=iq3;k<=lay;k++)
{
if(iterq!=1) goto M1194;
qdenom=qdenom+pid[j][k]*(gmo[j][k]+gmw[j][k]+gmg[j][k]);
continue;
M1194:
if(kip[j]!=2) goto M1196;
qw[iq1][iq2][k]=qvw[j]*5.615*pid[j][k]*(gmo[j][k]+gmw[j][k]+gmg[j][k])/qdenom;
continue;
M1196:
qg[iq1][iq2][k]=qvg[j]*1000.*pid[j][k]*(gmo[j][k]+gmw[j][k]+gmg[j][k])/qdenom;
}
if(iterq==1) goto M1192;
}
for(j=1;j<=nvqn;j++)
{
iq1=iqn1[j];
iq2=iqn2[j];
iq3=iqn3[j];
if(kip[j]<0) continue;
lay=iq3+(layer[j]-1);
for(k=iq3;k<=lay;k++)
{
pwfc[j][k]=0.0;
if(pid[j][k]<0.0001) continue;
pp=p[iq1][iq2][k];
bpt=pbot[iq1][iq2][k];
bbo=intpvt(bpt,bslope,pot,bot,mpot,pp,bbo);
bbw=interp(pwt,bwt,mpwt,pp,bbw);
bbg=interp(pgt,bgt,mpgt,pp,bbg);
rso=intpvt(bpt,rslope,pot,rsot,mpot,pp,rso);
rsw=interp(pwt,rswt,mpwt,pp,rsw);
fac=pid[j][k]*5.615;
gmtb=gmo[j][k]/bbo+gmw[j][k]/bbw+gmg[j][k]/bbg;
soln=rso*qo[iq1][iq2][k]+rsw*qw[iq1][iq2][k];
qt=qo[iq1][iq2][k]+qw[iq1][iq2][k]+qg[iq1][iq2][k];
pwfc[j][k]=pp-(qt-soln)/(fac*gmtb);
}
}
/**** pressure constraint*************/
for(j=1;j<=nvqn;j++)
{
if(kip[j]>=0) continue;
iq1=iqn1[j];
iq2=iqn2[j];
iq3=iqn3[j];
lay=iq3+(layer[j]-1);
for(k=iq3;k<=lay;k++)
{
ppn=pn[iq1][iq2][k];
bpt=pbot[iq1][iq2][k];
bbo=intpvt(bpt,bslope,pot,bot,mpot,ppn,bbo);
bbw=interp(pwt,bwt,mpwt,ppn,bbw);
bbg=interp(pgt,bgt,mpgt,ppn,bbg);
rso=intpvt(bpt,rslope,pot,rsot,mpot,ppn,rso);
rsw=interp(pwt,rswt,mpwt,ppn,rsw);
/**** oil producer*************/
if(kip[j]!=-1) goto M1310;
qo[iq1][iq2][k]=pid[j][k]*5.615*gmo[j][k]*(ppn-pwf[j][k])/bbo;
if(ppn<=pwf[j][k]) qo[iq1][iq2][k]=0.0;
qw[iq1][iq2][k]=qo[iq1][iq2][k]*gmw[j][k]*bbo/(bbw*gmo[j][k]);
qg[iq1][iq2][k]=qo[iq1][iq2][k]*(gmg[j][k]*bbo/(bbg*gmo[j][k])+rso)+rsw*qw[iq1][iq2][k];
continue;
/**** water injector***********/
M1310:
if(kip[j]!=-2) goto M1320;
qw[iq1][iq2][k]=pid[j][k]*5.615*(gmo[j][k]+gmw[j][k]+gmg[j][k])*(ppn-pwf[j][k])/bbw;
if(ppn>=pwf[j][k]) qw[iq1][iq2][k]=0.0;
continue;
/**** gas injector **********/
M1320:
if(kip[j]!=-3) continue;
qg[iq1][iq2][k]=pid[j][k]*5.615*(gmo[j][k]+gmw[j][k]+gmg[j][k])*(ppn-pwf[j][k])/bbg;
if(ppn>=pwf[j][k]) qg[iq1][iq2][k]=0.0;
}
}
return;
}
void CBOASTView::pratei(float pot[maxpvt],float bot[maxpvt],float rsot[maxpvt],
float pwt[maxpvt],float bwt[maxpvt],float rswt[maxpvt],
float pgt[maxpvt],float bgt[maxpvt])
{
int j,k;
int lay,iq1,iq2,iq3;
float p56,ppn,bpt,rso=1.,rsw=1.;
float cpio,cpiw,cpig,cpi,bbo=1.,bbw=1.,bbg=1.;
for(j=1;j<=nvqn;j++)
{
if(kip[j]>=-10) continue;
iq1=iqn1[j];
iq2=iqn2[j];
iq3=iqn3[j];
lay=iq3+(layer[j]-1);
for(k=iq3;k<=lay;k++)
{
p56=pid[j][k]*5.615;
ppn=pn[iq1][iq2][k];
bpt=pbot[iq1][iq2][k];
bbo=intpvt(bpt,bslope,pot,bot,mpot,ppn,bbo);
rso=intpvt(bpt,rslope,pot,rsot,mpot,ppn,rso);
bbw=interp(pwt,bwt,mpwt,ppn,bbw);
bbg=interp(pgt,bgt,mpgt,ppn,bbg);
rsw=interp(pwt,rswt,mpwt,ppn,rsw);
cpio=gmo[j][k]*p56*(bbo-bbg*rso)/bbo;
cpiw=gmw[j][k]*p56*(bbw-bbg*rsw)/bbw;
cpig=gmg[j][k]*p56;
cpi=cpio+cpiw+cpig;
b[iq1][iq2][k]=b[iq1][iq2][k]-cpi*pwf[j][k];
e[iq1][iq2][k]=e[iq1][iq2][k]-cpi;
}
}
return;
}
void CBOASTView::prateo(float pot[maxpvt],float rsot[maxpvt],
float pwt[maxpvt],float rswt[maxpvt])
{
int j,k;
int lay,iq1,iq2,iq3;
float pp,ppn,bpt,rson=1.,rso=1.,rswn=1.,rsw=1.,factor;
float rsoav,rswav;
for(j=1;j<=nvqn;j++)
{
if(kip[j]>=-10) continue;
iq1=iqn1[j];
iq2=iqn2[j];
iq3=iqn3[j];
lay=iq3+(layer[j]-1);
for(k=iq3;k<=lay;k++)
{
pp=p[iq1][iq2][k];
ppn=pn[iq1][iq2][k];
bpt=pbot[iq1][iq2][k];
rson=intpvt(bpt,rslope,pot,rsot,mpot,ppn,rson);
rso=intpvt(bpt,rslope,pot,rsot,mpot,pp,rso);
rswn=interp(pwt,rswt,mpwt,ppn,rswn);
rsw=interp(pwt,rswt,mpwt,pp,rsw);
rsoav=0.5*(rso+rson);
rswav=0.5*(rsw+rswn);
factor=pid[j][k]*5.615*(pp-pwf[j][k]);
if(kip[j]==-13) goto M2053;
qw[iq1][iq2][k]=gmw[j][k]/bw[iq1][iq2][k]*factor;
if(kip[j]==-12) { qw[iq1][iq2][k]=(gmo[j][k]+gmw[j][k]+gmg[j][k])/bw[iq1][iq2][k]*factor;
continue;}
qo[iq1][iq2][k]=gmo[j][k]/bo[iq1][iq2][k]*factor;
qg[iq1][iq2][k]=gmg[j][k]/bg[iq1][iq2][k]*factor+rsoav*qo[iq1][iq2][k]+rswav*qw[iq1][iq2][k];
continue;
M2053:
qg[iq1][iq2][k]=(gmo[j][k]+gmw[j][k]+gmg[j][k])/bg[iq1][iq2][k]*factor;
}
}
return;
}
/*........................................................................sol..............*/
void CBOASTView::solmat(float div1,float d288,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 rsot[maxpvt],float pwt[maxpvt],float muwt[maxpvt],float rswt[maxpvt],
float pgt[maxpvt],float mugt[maxpvt])
/* float div1,d288;
float sat[maxpvt],krot[maxpvt],krwt[maxpvt],krgt[maxpvt],pcowt[maxpvt],pcgot[maxpvt],pot[maxpvt];
float muot[maxpvt],rsot[maxpvt];
float pwt[maxpvt],muwt[maxpvt],rswt[maxpvt];
float pgt[maxpvt],mugt[maxpvt]; */
{
int i,j,k;
float muo4=0.,muw4=0.,mug4=0.,muo5=0.,muw5=0.,mug5=0.,muo6=0.,muw6=0.,mug6=0.;
float kro1=0.,krw1=0.,krg1=0.,kro2=0.,krw2=0.,krg2=0.,kro3=0.,krw3=0.,krg3=0.;
float muo1=0.,muw1=0.,mug1=0.,muo2=0.,muw2=0.,mug2=0.,muo3=0.,muw3=0.,mug3=0.;
float kro4=0.,krw4=0.,krg4=0.,kro5=0.,krw5=0.,krg5=0.,kro6=0.,krw6=0.,krg6=0.;
float mo1=0.,mw1=0.,mg1=0.,mo2=0.,mw2=0.,mg2=0.,mo3=0.,mw3=0.,mg3=0.;
float mo4=0.,mw4=0.,mg4=0.,mo5=0.,mw5=0.,mg5=0.,mo6=0.,mw6=0.,mg6=0.;
float muo=0.,muw=0.,mug=0.;
float rso1=0.0,rso2=0.0,rso3=0.0,rso4=0.0,rso5=0.0,rso6=0.0;
float rsw1=0.0,rsw2=0.0,rsw3=0.0,rsw4=0.0,rsw5=0.0,rsw6=0.0;
float pp=0.,sso=0.,ssw=0.,ssg=0.,rso=0.,rsw=0.,ro=0.,rw=0.,rg=0.;
float bpt=0.,pcow=0.,pcgo=0.,p1=0.,so1s=0.,sw1s=0.,sg1s=0.,pcow1=0.,pcgo1=0.,ro1=0.,rw1=0.,rg1=0.,fact=0.;
float gow1=0.,gww1=0.,ggw1=0.,p11=0.,ho1=0.,hw1=0.,hg1=0.,aow=0.,aww=0.,agw=0.,p2=0.,so2=0.,sw2=0.,sg2=0.,pcow2=0.,pcgo2=0.;
float ro2=0.,rw2=0.,rg2=0.,gow2=0.,gww2=0.,ggw2=0.,p22=0.,ho2=0.,hw2=0.,hg2=0.,aoe=0.,awe=0.,age=0.;
float p3=0.,so3=0.,sw3=0.,sg3=0.,pcow3=0.,pcgo3=0.,ro3=0.,rw3=0.,rg3=0.,gow3=0.,gww3=0.,ggw3=0.,ho3=0.,hw3=0.,hg3=0.;
float aos=0.,aws=0.,ags=0.,p33=0.,p4=0.,so4=0.,sw4=0.,sg4=0.,pcow4=0.,pcgo4=0.,ro4=0.,rw4=0.,rg4=0.,gow4=0.,gww4=0.,ggw4=0.;
float p44=0.,ho4=0.,hw4=0.,hg4=0.,aon=0.,awn=0.,agn=0.,p5=0.,so5=0.,sw5=0.,sg5=0.,pcow5=0.,pcgo5=0.,ro5=0.,rw5=0.,rg5=0.;
float gow5=0.,gww5=0.,ggw5=0.,p55=0.,ho5=0.,hw5=0.,hg5=0.,aot=0.,awt=0.,agt=0.,p6=0.,so6=0.,sw6=0.,sg6=0.,pcow6=0.,pcgo6=0.,ro6=0.;
float rw6=0.,rg6=0.,gow6=0.,gww6=0.,ggw6=0.,p66=0.,ho6=0.,hw6=0.,hg6=0.,aob=0.,awb=0.,agb=0.;
float rso1a=0.,rso2a=0.,rso3a=0.,rso4a=0.,rso5a=0.,rso6a=0.,rsw1a=0.,rsw2a=0.,rsw3a=0.,rsw4a=0.,rsw5a=0.,rsw6a=0.;
float ao1=0.,ao2=0.,ao3=0.,ao4=0.,ao5=0.,ao6=0.,aw1=0.,aw2=0.,aw3=0.,aw4=0.,aw5=0.,aw6=0.;
for(k=1;k<=kk;k++)
for(j=1;j<=jj;j++)
for(i=1;i<=ii;i++)
{
pp=p[i][j][k];
bpt=pbot[i][j][k];
rso=intpvt(bpt,rslope,pot,rsot,mpot,pp,rso);
muo=intpvt(bpt,vslope,pot,muot,mpot,pp,muo);
rsw=interp(pwt,rswt,mpwt,pp,rsw);
muw=interp(pwt,muwt,mpwt,pp,muw);
mug=interp(pgt,mugt,mpgt,pp,mug);
sso=so[i][j][k];
ssw=sw[i][j][k];
ssg=sg[i][j][k];
pcow=interp(sat,pcowt,msat,ssw,pcow);
pcgo=interp(sat,pcgot,msat,ssg,pcgo);
ro=(rhosco + rso*rhoscg)/bo[i][j][k];
rw=(rhoscw + rsw*rhoscg)/bw[i][j][k];
rg=rhoscg/bg[i][j][k];
if(i==1) goto M115;
p1=p[i-1][j][k];
bpt=pbot[i-1][j][k];
rso1=intpvt(bpt,rslope,pot,rsot,mpot,p1,rso1);
muo1=intpvt(bpt,vslope,pot,muot,mpot,p1,muo1);
rsw1=interp(pwt,rswt,mpwt,p1,rsw1);
muw1=interp(pwt,muwt,mpwt,p1,muw1);
mug1=interp(pgt,mugt,mpgt,p1,mug1);
so1s=so[i-1][j][k];
sw1s=sw[i-1][j][k];
sg1s=sg[i-1][j][k];
pcow1=interp(sat,pcowt,msat,sw1s,pcow1);
pcgo1=interp(sat,pcgot,msat,sg1s,pcgo1);
ro1=(rhosco + rso1*rhoscg)/bo[i-1][j][k];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -