1dforward.for ! ldforward.for主程序 real ps(30),r(20),p(30),h(9),sd(9) ! ps(30)电测深视电阻率;r(30)极距;p(10)层电阻率;h(9)层厚度,sd(9)深度 character*50 char,name1,name2 integer nalyer,max write(*,*)"请输入模型文件名:" read(*,*)name1 open(2,file=name1) write(*,*)"请输入视电阻率文件名:" read(*,*)name2 open(1,file=name2) read(2,*) char read(2,*)nlayer read(2,*)char do i=1,nlayer read(2,*)p(i) enddo read(2,*)char do i=1,nlayer-1 read(2,*)h(i) enddo !!!!!!!!!!!!!!!!!!!!!!!计算电测深极距共20个,每个数量级5个极距 max=20 do i=1,max r(i)=10.* *(i/5.) enddo !调用一维正演子程序 zyld() call zyld(p,h,nlayer,r ,max,ps) !输出电测深曲线到文件 do i=1,max write(1,*)r(i),ps(i) enddo !!!!!!!!!!!!!!!画模型 sd(1)=0. do i=2,nlayer sd(i)=sd(i-1)+h(i-1) enddo sd(nlayer+1)=10000. open(25,file="model.dat")!画模型的文件 write(25,*)1,p(1) write(25,*)h(1),p(1) do i=2,nlayer write(25,*)sd(i),p(i) write(25,*)sd(i+1),p(i) enddo write(*,*)"模型曲线的文件为model.dat" pause end !!!!!!!!!!!一维正演子程序 subroutine zyld(p,h,nl,r,max,ps) real ps(max),t(nl),ck(20),r(max),m real p(nl),h(nl-1) integer nl,max !max极距个数;nl层数;ps(max)电测深视电阻率;r(max)极距;p(nl)层电阻率; !h(nl-1)层厚度;t(nl)电阻率转换函数;m汉克尔变换积分变量;ck(20)滤波系数; data ck/0.003042,-0.001198,0.01284,0.0235,0.08688,0.2374,0.6194, &. 1.1817,0.4248,-3.4507,2.7044,-1.1324,0.393,-0.1436,0.05812, &. -0.02521,0.01125,-0.004978,0.002072,-0.000318/ t(nl)=p(nl) do i=1,max ps(i)=0. do k=1,20 m=0.11396*10.* *(k/6.)/r(i) do j=nl-1,1,-1 t(j)=p(j)*((t(j+1)+p(j)+(t(j+1)-p(j))*exp(-2.*m*h(j)))& /((t(j+1)+p(j))-(t(j+1)-p(j))*exp((-2.*m*h(j))) enddo ps(i)=ps(i)+t(1)*ck(k) enddo enddo end
2021-03-21 12:40:42 26KB 大地电磁测深一维 Fortran
1