module OW_parms

use sep
use OW_type

implicit none

type (axis) 					:: kxm, h, w, x, xm, z, sh
type (dat_grid)					:: sou
type (mod_grid)					:: img
type (velo)					:: v
integer,public					:: nref,nreal,subf
real,public					:: xmin,xmax,ymin,ymax,zmin,zmax,pi,wbott,vsal
logical,public					:: random,mseq,golay,gold,outcode,noencode,xiao

contains

subroutine owparam()

integer						:: iw,ikx

 call from_history("n1",sou%h%n);	call from_history("d1",sou%h%d);	call from_history("o1",sou%h%o)
 call from_history("n3",sou%w%n);	call from_history("d3",sou%w%d);	call from_history("o3",sou%w%o)
 call from_history("n4",sou%x%n);	call from_history("d4",sou%x%d);	call from_history("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)

 !!  get parameters
  call from_param("nrefvel",nref) 
  call from_param("zmin",zmin,0.)
  call from_param("zmax",zmax)
  call from_param("vsal",vsal,14000.)
  call from_param("nreal",nreal,1)
  call from_param("outcode",outcode,.false.)
!###
! add read encode prameters
  call from_param("random",random,.false.)
  subf=0
  if (not(random)) then
      call from_param("mseq",mseq,.false.)
      subf=1
      if (not(mseq)) then
         call from_param("gold",gold,.false.)
         subf=1
         if (not(gold)) then
            call from_param("golay",golay,.false.)
            subf=0
            if (not(golay)) then
               call from_param("xiao",xiao,.false.)
               subf=2
               if (not(xiao)) then
                  noencode=.true.
                  subf=0
               end if
            end if
         end if
      end if
  end if

 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")

 if (sou%h%o + sou%x%o < xmin ) call seperr("Min.x-receiver < Min.x-image space")

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

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

write(0,*) img%z%n,img%z%o,img%z%d

 call to_history("n1",sou%h%n,"wvfld"); call to_history("d1",sou%h%d,"wvfld"); call to_history("o1",sou%h%o,"wvfld")  
 call to_history("n2",1,"wvfld"); call to_history("d2",0.,"wvfld"); call to_history("o2",1.,"wvfld")
 call to_history("n3",sou%w%n-subf,"wvfld") ; call to_history("d3",sou%w%d,"wvfld") ; call to_history("o3",sou%w%o,"wvfld")
 call to_history("n4",1,"wvfld"); call to_history("d4",1,"wvfld"); call to_history("o4",1,"wvfld")
 call to_history("esize",8,"wvfld")

if (exist_file("decoded")) then
 call to_history("n1",sou%h%n,"decoded"); call to_history("d1",sou%h%d,"decoded"); call to_history("o1",sou%h%o,"decoded")  
 call to_history("n2",1,"decoded"); call to_history("d2",0.,"decoded"); call to_history("o2",1.,"decoded")
 call to_history("n3",sou%w%n-subf,"decoded") ; call to_history("d3",sou%w%d,"decoded") ; call to_history("o3",sou%w%o,"decoded")
 call to_history("n4",sou%x%n,"decoded"); call to_history("d4",sou%x%d,"decoded"); call to_history("o4",sou%x%o,"decoded")
 call to_history("esize",8,"decoded")
end if

pi=4*atan(1.)

!--------------------------------------------------
! Frequency vector
! no zero frequency component
!
sou%w%o   = 2*pi * sou%w%o
sou%w%d   = 2*pi * sou%w%d
allocate(sou%w%all(sou%w%n-subf))
do iw = 1,sou%w%n-subf
   sou%w%all(iw) = sou%w%o + (iw - 1) * sou%w%d
end do
!--------------------------------------------------
! Wavenumber vector
!
kxm%n = sou%h%n
kxm%d = 1./(kxm%n*sou%h%d)
kxm%o = 1./(2*sou%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./sou%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
