module OW_parms

use sep
use OW_type

implicit none

type (axis) 					:: kxm, h, w, x, xm, z, sh
type (dat_grid)					:: rec, sou
type (mod_grid)					:: img
type (velo)					:: v
integer,public					:: nref,ngap,nreal,subf,node,padtraces,tapertr
integer,public					:: rndcte,shift,nshots,npath,jshift,nzmin,nzmax
real,public					:: ymin,ymax,zmin,zmax,pi,wbott,vsal,eps,wpath,vrange,fac
real,public,allocatable				:: weight(:)
logical,public					:: random,gold,encode,encall,linint,path,perfect,marine

contains

subroutine owparam()

integer						:: iw,ikx,i
integer						:: nzref
real						:: dzref,ozref

 call from_history("n1",rec%h%n);	call from_history("d1",rec%h%d);	call from_history("o1",rec%h%o)
 call from_history("n3",rec%w%n);	call from_history("d3",rec%w%d);	call from_history("o3",rec%w%o)
 call from_history("n4",rec%x%n);	call from_history("d4",rec%x%d);	call from_history("o4",rec%x%o)  

 call from_aux("sou","n1",sou%h%n);	call from_aux("sou","d1",sou%h%d);	call from_aux("sou","o1",sou%h%o)
 call from_aux("sou","n3",sou%w%n);	call from_aux("sou","d3",sou%w%d);	call from_aux("sou","o3",sou%w%o)
 call from_aux("sou","n4",sou%x%n);	call from_aux("sou","d4",sou%x%d);	call from_aux("sou","o4",sou%x%o)  

 call from_aux("vel","n1",v%z%n);	call from_aux("vel","d1",v%z%d);	call from_aux("vel","o1",v%z%o)
 call from_aux("vel","n2",v%xm%n);	call from_aux("vel","d2",v%xm%d);	call from_aux("vel","o2",v%xm%o)

if (exist_file("vref")) then
 call from_aux("vref","n1",nref)
 call from_aux("vref","n3",nzref);	call from_aux("vref","d3",dzref);	call from_aux("vref","o3",ozref)

 if (dzref .ne. v%z%d) then
    call seperr("depth interval vref different from vel file")
 end if
 if (ozref .ne. v%z%o) then
    call seperr("depth origin vref different from vel file")
 end if
else
  call from_param("nrefvel",nref) 
end if

 if (sou%w%n .ne. rec%w%n) then
    call seperr("# source freq. .ne. # receiver freq.")
 end if
 if (sou%w%d .ne. rec%w%d) then
    call seperr("source freq.interval .ne. receiver freq.interval")
 end if
 if (sou%w%o .ne. rec%w%o) then
    call seperr("source freq.origin .ne. receiver freq.origin")
 end if

 !!  get parameters
  call from_param("ymin",ymin,0.)
  call from_param("ymax",ymax,0.)
  call from_param("zmin",zmin,0.)
  call from_param("zmax",zmax)
  call from_param("wbott",wbott,0.)
  call from_param("nh",img%sh%n,1)
  call from_param("oh",img%sh%o,0.)
  call from_param("dh",img%sh%d,0.)
  call from_param("wbott",wbott,0.)
  call from_param("vsal",vsal,14000.)
  call from_param("node",node,9999)
  call from_param("rndcte",rndcte,1371)
  call from_param("jshift",jshift,1)
  call from_param("fac",fac,1.)
  call from_param("padtraces",padtraces,0)
  call from_param("traces_in_taper",tapertr,0)

! read encode prameters
  call from_param("marine",marine,.false.)

if (marine) then
   img%xm%n=rec%h%n+2*padtraces+2*tapertr+(rec%x%n-1)*rec%x%d/rec%h%d
else
   img%xm%n=rec%h%n+2*padtraces+2*tapertr
end if
img%xm%d=rec%h%d
img%xm%o=rec%h%o-(padtraces+tapertr)*img%xm%d+rec%x%o

 img%z%n=(zmax-zmin)/v%z%d+1.5
 img%z%o=zmin
 img%z%d=v%z%d
 nzmin=zmin/v%z%d+1.5
 nzmax=zmax/v%z%d+1.5

 write(0,*) nzmin,nzmax,img%z%n

 if (img%xm%o < v%xm%o ) call seperr("Min.x-image space < Min.x-velocity")
 if ((img%xm%n-1)*img%xm%d + img%xm%o > v%xm%o+(v%xm%n-1)*v%xm%d ) call seperr("Max.x-image space > Max.x-velocity")
 if (zmin < v%xm%o ) call seperr("Min.z-image space < Min.z-velocity")
 if (zmax > v%z%o+(v%z%n-1)*v%z%d ) call seperr("Max.z-image space > Max.z-velocity")
 if (rec%h%d .ne. v%xm%d) call seperr("x-offset interval .ne. velocity x-interval")

 call to_history("n1",img%xm%n,"image"); call to_history("d1",img%xm%d,"image"); call to_history("o1",img%xm%o,"image")  
 call to_history("n2",img%sh%n,"image"); call to_history("d2",img%sh%d,"image"); call to_history("o2",img%sh%o,"image")
 call to_history("n3",img%z%n,"image") ; call to_history("d3",img%z%d,"image") ; call to_history("o3",img%z%o,"image")
 call to_history("n4",1,"image"); call to_history("d4",1,"image"); call to_history("o4",1,"image")
 call to_history("n5",1,"image"); call to_history("d5",1,"image"); call to_history("o5",1,"image")
 call to_history("esize",4,"image")

pi=4*atan(1.)

!--------------------------------------------------
! Frequency vector
! 
rec%w%o   = 2*pi * rec%w%o
rec%w%d   = 2*pi * rec%w%d
allocate(rec%w%all(rec%w%n))
do iw = 1,rec%w%n
   rec%w%all(iw) = rec%w%o + (iw - 1) * rec%w%d
end do
!--------------------------------------------------
! Wavenumber vector
!
if (marine) then
   kxm%n = rec%h%n+2*padtraces+2*tapertr
else
   kxm%n = img%xm%n
end if
kxm%d = 1./(kxm%n*img%xm%d)
kxm%o = 1./(2*rec%h%d)-kxm%d
allocate(kxm%all(kxm%n))
do ikx=1,kxm%n
   kxm%all(ikx) = mod(kxm%o+(ikx-1)*kxm%d,1./rec%h%d)-kxm%o
end do
kxm%all = 2*pi * kxm%all

write(0,*) "   PARM   "
write(0,*) "=========="
write(0,*) "PARAMETERS"
write(0,*) "=========="
write(0,*) //
write(0,*) "no.ref.velocities   = ",nref
write(0,*) "min.x-coord         = ",img%xm%o
write(0,*) "max.x-coord         = ",(img%xm%n-1)*img%xm%d+img%xm%o
write(0,*) "min.y-coord         = ",ymin
write(0,*) "max.y-coord         = ",ymax
write(0,*) "min.depth           = ",zmin
write(0,*) "max.depth           = ",zmax
write(0,*) "no.subsurf.offset   = ",img%sh%n
write(0,*) "min.subsurf.offset  = ",img%sh%o
write(0,*) "subsurf.offset int. = ",img%sh%d
write(0,*) //
write(0,*) "============"
write(0,*) "HEADER WORDS"
write(0,*) "============"
write(0,*) //
write(0,*) "SHOTS"
write(0,*) "====="
write(0,*) "number of recv  = ", rec%h%n
write(0,*) "recv spacing    = ", rec%h%d
write(0,*) "min.recv offset = ", rec%h%o
write(0,*) "number of freq  = ", rec%w%n
write(0,*) "freq spacing    = ", rec%w%d
write(0,*) "minimum freq    = ", rec%w%o
write(0,*) "number of shots = ", rec%x%n
write(0,*) "shot spacing    = ", rec%x%d
write(0,*) "min.shot-x      = ", rec%x%o
write(0,*) //
write(0,*) "SOURCE FUNCTION"
write(0,*) "==============="
write(0,*) "no.of traces    = ", sou%h%n
write(0,*) "trace spacing   = ", sou%h%d
write(0,*) "min.trace-x     = ", sou%h%o
write(0,*) "number of freq  = ", sou%w%n
write(0,*) "freq spacing    = ", sou%w%d
write(0,*) "minimum freq    = ", sou%w%o
write(0,*) "no.of s.fnct    = ", sou%x%n
write(0,*) "s.fnct spacing  = ", sou%x%d
write(0,*) "min.s.fnct-x    = ", sou%x%o
write(0,*) //
write(0,*) "VELOCITY MODEL"
write(0,*) "=============="
write(0,*) "no.of traces    = ", v%xm%n
write(0,*) "trace spacing   = ", v%xm%d
write(0,*) "min.trace-x     = ", v%xm%o
write(0,*) "no.depth samples= ", v%z%n
write(0,*) "depth interval  = ", v%z%d
write(0,*) "minimum depth   = ", v%z%o
write(0,*) //
write(0,*) "IMAGE SPACE"
write(0,*) "==========="
write(0,*) "no.of traces    = ", img%xm%n
write(0,*) "trace spacing   = ", img%xm%d
write(0,*) "min.trace-x     = ", img%xm%o
write(0,*) "no.depth samples= ", img%z%n
write(0,*) "depth interval  = ", img%z%d
write(0,*) "minimum depth   = ", img%z%o
write(0,*) //



end subroutine

end module
