subroutine gengrid_vars
!$$$  subprogram documentation block
!                .      .    .                                       .
! subprogram:    gengrid_vars
!   prgmmr: treadon          org: np23                date: 2003-11-24 
!
! abstract: initialize and define grid related variables
!
! program history log:
!   2003-11-24  treadon
!   2004-05-13  kleist, documentation and cleanup
!   2004-08-04  treadon - add only on use declarations; add intent in/out
!   2006-04-12  treadon - remove nsig,sigl (not used)
!   2006-10-17  kleist  - add coriolis parameter
!   2010-01-12  treadon - add hires_b section
!   2010-03-10  lueken - remove hires_b section
!   2010-03-31  treadon - replace specmod components with sp_a structure
!   2019-03-05  martin - add wgtfactlats for factqmin/factqmax scaling
!
!   input argument list:
!
!   output argument list:
!
! remarks:  see modules used
!
! attributes:
!   language: f90
!   machine:  ibm RS/6000 SP
!
!$$$
  use kinds, only: r_kind,i_kind
  use gridmod, only: sinlon,coslon,region_lat,rbs2,&
       rlons,rlats,corlats,nlon,nlat,regional,wgtlats,sp_a,wgtfactlats
  use constants, only: zero,half,one,four,pi,two,omega
  implicit none

! Declare local variables
  integer(i_kind) i,i1
  real(r_kind) anlon,dlon,pih

  if(regional) then
! This is regional run, so transfer previously defined regional lats, lons
     do i=1,nlon
        rlons(i)=i
     end do

     do i=1,nlat
        rlats(i)=i
     end do

     i1=nlon/4
     do i=1,nlat
        wgtlats(i)=zero
        wgtfactlats(i) = one
        rbs2(i)=one/cos(region_lat(i,i1))**2
     end do

  else

! This is global run, so get global lons, lats, wgtlats, wgtfactlats

! Set local constants
     anlon=float(nlon)
     pih=half*pi
     dlon=two*pi/anlon

! Load grid lat,lon arrays.  rbs2 is used in pcp.
     do i=1,nlon
        rlons(i)=float(i-1)*dlon
        coslon(i)=cos(rlons(i))
        sinlon(i)=sin(rlons(i))
     end do

     do i=sp_a%jb,sp_a%je
        i1=i+1
        rlats(i1)=-asin(sp_a%slat(i))
        rbs2(i1)=one/cos(rlats(i1))**2
        wgtlats(i1)=sp_a%wlat(i)

        i1=nlat-i
        rlats(i1)=asin(sp_a%slat(i))
        rbs2(i1)=one/cos(rlats(i1))**2
        wgtlats(i1)=sp_a%wlat(i)
     end do

     rlats(1)=-pih
     rlats(nlat)=pih
   
     wgtlats(1)=zero
     wgtlats(nlat)=zero

     rbs2(1)=zero
     rbs2(nlat)=zero

     do i=1,nlat
        corlats(i)=two*omega*sin(rlats(i))
        wgtfactlats(i)=wgtlats(i)
     end do

  end if  !end if global

  return
end subroutine gengrid_vars