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