#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct logging
{ float depth;
float sp;
float ac;
float gr;
float cal;
float rsfl;
float ilm;
float ild;
float cnl;
float den;
}data[501],*pp;
struct well1
{ float depth;
float shale;
float poreD;
float poreN;
float poreS;
float sat;
}result[501],*qq;
void main()
{ FILE *in,*out;
float sa,sb1,sb2;
float pa1,pa2,pb1,pb2,pc1,pc2,pc3;
float rw,a,m,n;
rw=0.03;
int i;
pp=data;
qq=result;
if((in=fopen("d:\\WELL-1.txt","r"))==NULL)
{ printf("位置错误!请将数据存在D盘根目录下!");
getchar();
exit(0);
}
fseek(in,256L,0);
for(i=0;i<501;i++,pp++)
fscanf(in,"%f%f%f%f%f%f%f%f%f%f",&pp->depth,&pp->sp,&pp->ac,&pp->gr,&pp->cal,&pp-> rsfl,&pp->ilm,&pp->ild,&pp->cnl,&pp->den);
pp=data;
qq=result;
printf("第一步,计算泥质含量\n");printf("1、自然电位法估计泥质含量\n 请输入静自然电位值:");
scanf("%f",&sa);
printf("2、自然伽马法估计泥质含量\n 请输入纯地层的读数纯泥岩层读数:");
scanf("%f%f",&sb1,&sb2);
printf("\n第二步,计算孔隙度\n");printf("1、密度测井计算孔隙度\n 请输入骨架密度流体密度:");
scanf("%f%f",&pa1,&pa2);
printf("2、中子测井计算孔隙度\n 请输入骨架含氢指数流体含氢指数:");
scanf("%f%f",&pb1,&pb2);
printf("3、声波测井计算孔隙度\n 请输入骨架时差流体时差压实系数:");
scanf("%f%f%f",&pc1,&pc2,&pc3);
printf("\n第三步,计算含水饱和度\n");printf("利用阿尔奇公式计算含水饱和度\n 请输入a m n:");
scanf("%f%f%f",&a,&m,&n);
for(i=0;i<501;i++,pp++,qq++)
{ float ai,bi;
(qq->depth)=(pp->depth);
ai=1-(pp->sp)/sa;bi=((pp->gr)-sb1)/(sb1-sb2);
(qq->shale)=ai<bi?ai:bi;
(qq->poreD)=(pa1-(pp->den))/(pa1-pa2);
(qq->poreN)=((pp->cnl)-pb1)/(pb2-pb1);
(qq->poreS)=((pp->ac)-pc1)/((pc2-pc1)*pc3);
(qq->sat)=pow((a*rw)/(pow(qq->poreD,m)*pp->ild),n);
}
pp=data;
qq=result;
if((out=fopen("d:\\result.txt","w"))==NULL)
{ printf("无法创建输出文件!");
exit(1);
}
fprintf(out,"%s %s %s %s %s %s\n","Depth","Vcl","PoreD","PoreN","PoreS","Sw");
for(i=0;i<501;i++,qq++)
fprintf(out,"%.4f %.3f %.3f %.3f %.3f %.3f\n",qq->depth,qq->shale,qq->poreD,qq->poreN,qq ->poreS,qq->sat);
fclose(in);
fclose(out);
printf("\n计算结果文件“result.txt”已保存到D盘根目录中!");。