module OW_parms

use sep
use OW_type

implicit none

public						:: rec, sou, img, v, h, w, x, xm, z, &
                                                   sh, nref,xmin,xmax,ymin,ymax,zmin,zmax, kxm,wbott,vsal

type (axis) 					:: kxm, h, w, x, xm, z, sh
type (dat_grid)					:: rec, sou
type (mod_grid)					:: img
type (velo)					:: v
integer						:: nref,iw,ikx
real						:: xmin,xmax,ymin,ymax,zmin,zmax,pi,wbott,vsal

contains

subroutine owparam()

 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 (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("nrefvel",nref) 
  call from_param("xmin",xmin) 
  call from_param("xmax",xmax)
  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)
  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.)

write(0,*) wbott

 if (xmin < v%xm%o ) call seperr("Min.x-image space < Min.x-velocity")
 if (xmax > 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")

write(0,*) rec%h%o + rec%x%o , xmin
 if (rec%h%o + rec%x%o < xmin ) call seperr("Min.x-receiver < Min.x-image space")
write(0,*) rec%h%o+(rec%h%n-1)*rec%h%d + rec%x%o+(rec%x%n-1)*rec%x%d , xmax
 if (rec%h%o+(rec%h%n-1)*rec%h%d + rec%x%o+(rec%x%n-1)*rec%x%d > xmax ) call seperr("Max.x-receiver > Max.x-image space")

 if (sou%h%o + sou%x%o < xmin ) call seperr("Min.x-source < Min.x-image space")
 if (sou%h%o+(sou%h%n-1)*sou%h%d + sou%x%o+(sou%x%n-1)*sou%x%d > xmax ) call seperr("Max.x-source < Max.x-image space")

 if (rec%h%d .ne. v%xm%d) call seperr("x-offset interval .ne. velocity x-interval")

 img%xm%n=ceiling((xmax-xmin)/v%xm%d)
 img%xm%d=v%xm%d
 img%xm%o=xmin

 img%z%n=ceiling((zmax-zmin)/v%z%d)
 img%z%o=zmin
 img%z%d=v%z%d

 if (wbott.ne.0.) then
    call to_history("n1",rec%h%n,"dat");call to_history("d1",rec%h%d,"dat");call to_history("o1",rec%h%o,"dat")
    call to_history("n3",rec%w%n,"dat");call to_history("d3",rec%w%d,"dat");call to_history("o3",rec%w%o,"dat")
    call to_history("n4",rec%x%n,"dat");call to_history("d4",rec%x%d,"dat");call to_history("o4",rec%x%o,"dat")  
    call to_history("n2",1,"dat"); call to_history("d2",1,"dat"); call to_history("o2",1,"dat")
    call to_history("n5",1,"dat"); call to_history("d5",1,"dat"); call to_history("o5",1,"dat")  
    call to_history("esize",8,"dat")
 end if

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

pi=4*atan(1.)

!--------------------------------------------------
! Frequency vector
! no zero frequency component
!
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
!
kxm%n = rec%h%n
kxm%d = 1./(kxm%n*rec%h%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         = ",xmin
write(0,*) "max.x-coord         = ",xmax
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
