MODULE m_Arrays

USE m_Parameters

IMPLICIT NONE

PRIVATE
  
PUBLIC :: Get_Arrays, Free_Arrays

REAL (KIND=kr8), DIMENSION (:), ALLOCATABLE, PUBLIC :: &
                 yg, xg, wg, gams, fr, fi, akeu, akev, ape, et

REAL (KIND=kr8), DIMENSION (:,:), ALLOCATABLE, PUBLIC :: &
                 eps, psm, qsm, w, z, ans, bns, cns, ort, &
                 uh, vh, zh, duh, dvh, dzh, d2uh, d2vh, d2zh


CONTAINS


SUBROUTINE Get_Arrays

  IMPLICIT NONE

  ALLOCATE (gams(Mmax), eps(Mmax,ne))
  ALLOCATE (yg(jg), xg(jg), wg(jg))
  ALLOCATE (psm(np,jg), qsm(nq,jg))
  ALLOCATE (fr(nm), fi(nm), w(nm,nm), z(nm,nm))
  ALLOCATE (ans(nm,no), bns(nm,no), cns(nm,no))
  ALLOCATE (ort(no,no))
  ALLOCATE (akeu(no), akev(no), ape(no), et(no))
  ALLOCATE (uh(no,jg), vh(no,jg), zh(no,jg))
  ALLOCATE (duh(no,jg), dvh(no,jg), dzh(no,jg))
  ALLOCATE (d2uh(no,jg), d2vh(no,jg), d2zh(no,jg))

  CALL Init_Arrays

END SUBROUTINE Get_Arrays


SUBROUTINE Free_Arrays

  IMPLICIT NONE

  DEALLOCATE (gams, eps)
  DEALLOCATE (yg, xg, wg)
  DEALLOCATE (psm, qsm)
  DEALLOCATE (fr, fi, w, z)
  DEALLOCATE (ans, bns, cns)
  DEALLOCATE (ort)
  DEALLOCATE (akeu, akev, ape, et)
  DEALLOCATE (uh, vh, zh)
  DEALLOCATE (duh, dvh, dzh)
  DEALLOCATE (d2uh, d2vh, d2zh)

END SUBROUTINE Free_Arrays


SUBROUTINE Init_Arrays

  IMPLICIT NONE

  gams=0.0_kr8; eps=0.0_kr8
  yg=0.0_kr8; xg=0.0_kr8; wg=0.0_kr8
  psm=0.0_kr8; qsm=0.0_kr8
  fr=0.0_kr8; fi=0.0_kr8; w=0.0_kr8; z=0.0_kr8
  ans=0.0_kr8; bns=0.0_kr8; cns=0.0_kr8
  ort=0.0_kr8
  akeu=0.0_kr8; akev=0.0_kr8; ape=0.0_kr8; et=0.0_kr8
  uh=0.0_kr8; vh=0.0_kr8; zh=0.0_kr8
  duh=0.0_kr8; dvh=0.0_kr8; dzh=0.0_kr8
  d2uh=0.0_kr8; d2vh=0.0_kr8; d2zh=0.0_kr8

END SUBROUTINE Init_Arrays


END MODULE m_Arrays
