#include <misc.h>
#include <params.h>


module comspe 31,4

!----------------------------------------------------------------------- 
! 
! Purpose: Spectral space arrays
! 
! Method: 
! 
! Author: CCM Core Group
! $Author: pworley $
! $Id: comspe.F90,v 1.3.6.2 2003/02/05 21:53:23 pworley Exp $
! 
!-----------------------------------------------------------------------

  use shr_kind_mod, only: r8 => shr_kind_r8
  use infnan
  use pmgrid, only: plev, plat
  use pspect

  implicit none

  real(r8) :: vz(psp,plev)   = inf     ! Vorticity spectral coefficients
  real(r8) :: d(psp,plev)    = inf     ! Divergence spectral coefficients
  real(r8) :: t(psp,plev)    = inf     ! Temperature spectral coefficients
  real(r8) :: q(psp,plev)    = inf     ! Moisture     spectral coefficients
  real(r8) :: alps(psp)      = inf     ! Log-pressure spectral coefficients
  real(r8) :: hs(psp,plev)   = inf     ! hydrostatic matrix for "real" atmosphere
  real(r8) :: hsnm(psp,plev) = inf   ! vertical normal modes of "hs"
  real(r8) :: dsnm(psp,plev) = inf   ! vertical normal modes of "ds"
  real(r8) :: dnm(psp,plev)  = inf   ! vertical normal modes of "d"
  real(r8) :: vznm(psp,plev) = inf   ! vertical normal modes of "vz"
  real(r8) :: lnpstar(psp)   = inf   ! ln (Ps*) (SLD term; Ritchie & Tanguay, 1995)
  real(r8) :: a0nm(psp)      = inf   ! wave # coefs (use in vert normal mode space)
  real(r8) :: bmnm(psp)      = inf   ! wave # coefs (use in vert normal mode space)
  real(r8) :: bpnm(psp)      = inf   ! wave # coefs (use in vert normal mode space)
  real(r8) :: atri(psp)      = inf   ! wave # coefs (use in vert normal mode space)
  real(r8) :: btri(psp)      = inf   ! wave # coefs (use in vert normal mode space)
  real(r8) :: ctri(psp)      = inf   ! wave # coefs (use in vert normal mode space)

  integer :: ncutoff         = bigint   ! Break-even point for vector lengths in GRCALC
  integer :: nalp(pmax)      = bigint   ! Pointer into polynomial arrays
#if ( defined SPMD )
  integer :: numm(0:plat-1)  = bigint  ! number of Fourier wavenumbers owned per task
  integer :: maxm            = bigint  ! max number of Fourier wavenumbers per MPI task
  integer, dimension(:,:), allocatable :: locm ! assignment of wavenumbers to MPI tasks
#else
  integer :: numm(0:0)       = pmmax
  integer :: maxm            = pmmax
  integer, dimension(:,:), allocatable :: locm ! wavenumber ordering
#endif

  integer :: ncoefi(pmaxp)   = bigint   ! Pointer to start of coefficient diagonals
  integer :: nm(pmax)        = bigint   ! Number of coeffs stored on a given diagonal
  integer :: nco2(pmax)      = bigint   ! Complex form of ncoefi
  integer :: nstart(pmmax)   = bigint   ! Starting indices for spectral arrays (real)
  integer :: nlen(pmmax)     = bigint   ! Length vectors for spectral arrays

  real(r8) :: alp(pspt,plat/2)  = inf   ! Legendre polynomials
  real(r8) :: dalp(pspt,plat/2) = inf   ! Legendre polynomial derivatives

end module comspe