MODULE m_Parameters

IMPLICIT NONE

PRIVATE
  
PUBLIC :: Get_Parameters

INTEGER, PARAMETER, PUBLIC :: ik4=6, rk4=6, ik8=14, rk8=14
INTEGER, PARAMETER, PUBLIC :: ki4=SELECTED_INT_KIND(ik4), kr4=SELECTED_REAL_KIND(rk4)
INTEGER, PARAMETER, PUBLIC :: ki8=SELECTED_INT_KIND(ik8), kr8=SELECTED_REAL_KIND(rk8)

INTEGER (KIND=ki8), PUBLIC :: Kmax, im, jm, jg, Mmax, Mmax4, nm, na, no, nb, nq, np, ne

INTEGER (KIND=ki8), PUBLIC :: nHn, ipr

REAL (KIND=kr8), PUBLIC :: cutcft, Hn, epsl, rad

LOGICAL (KIND=ki4), PUBLIC :: test

CHARACTER (LEN=5), PUBLIC :: csvm

CHARACTER (LEN=6), PUBLIC :: rhomb

CHARACTER (LEN=17), PUBLIC :: exth

CHARACTER (LEN=128), PUBLIC :: dirhgf, dirvmd

INTEGER (KIND=ki8) :: n

CHARACTER (LEN=25) :: dnfnb

NAMELIST /hgfnml/ csvm, Kmax, Mmax, nHn, ipr, cutcft, test, dirhgf, dirvmd


CONTAINS


SUBROUTINE Get_Parameters

  IMPLICIT NONE

  csvm='ERA_5'
  Kmax=37
  Mmax=125
  nHn=1
  ipr=0
  cutcft=0.001_kr8
  test=.TRUE.
  dirhgf='../dataout/ '
  dirvmd='../../Vertical_Modes/dataout/ '

  OPEN  (UNIT=50, FILE='./NameList', STATUS='OLD')
  READ  (UNIT=50, NML=hgfnml)
  CLOSE (UNIT=50)

  ! Getting Imax and Jmax for Quadratic Rhomboibal Truncation RB(Mmax-1)
  rhomb='RB    '
  WRITE (UNIT=rhomb(3:6), FMT='(I4.4)') Mmax-1
  OPEN  (UNIT=55, FILE='../../Get_Rhomb_Res_GLats/dataout/'//rhomb, STATUS='OLD')
  READ  (UNIT=55, FMT='(2I5)') im, jm
  CLOSE (UNIT=55)

  exth='.RB    L   _'//csvm
  WRITE (UNIT=exth(4:7), FMT='(I4.4)') Mmax-1
  WRITE (UNIT=exth(9:11), FMT='(I3.3)') Kmax

  dnfnb='Vertical_Modes_'//csvm//'.L   '
  WRITE (UNIT=dnfnb(23:25), FMT='(I3.3)') Kmax

  WRITE (UNIT=*, FMT='(/,A)') ' &hgfnml'
  WRITE (UNIT=*, FMT='(2A)')   '  csvm   = ', csvm
  WRITE (UNIT=*, FMT='(A,I5)') '  Kmax   = ', Kmax
  WRITE (UNIT=*, FMT='(A,I5)') '  Mmax   = ', Mmax
  WRITE (UNIT=*, FMT='(A,I5)') '  nHn    = ', nHn
  WRITE (UNIT=*, FMT='(A,I5)') '  ipr    = ', ipr
  WRITE (UNIT=*, FMT='(A,F12.5)') '  cutcft = ', cutcft
  WRITE (UNIT=*, FMT='(A,L5)') '  test   = ', test
  WRITE (UNIT=*, FMT='(2A)')  '  dirhgf = ', TRIM(dirhgf)
  WRITE (UNIT=*, FMT='(2A)')  '  dirvmd = ', TRIM(dirvmd)
  WRITE (UNIT=*, FMT='(A)')   ' /'

  Mmax4=Mmax/4
  IF (MOD(Mmax4,2) /= 0) Mmax4=Mmax4+1
  Mmax4=MAX(Mmax4,8)
  jg=jm/2
  nm=3*(Mmax/2+Mmax4)
  na=nm/3
  no=3*Mmax/2
  nb=no/3
  nq=2*nm
  np=nq+1
  ne=np+1

  WRITE (UNIT=*, FMT='(/,A,I5)') '  jm     = ', jm
  WRITE (UNIT=*, FMT='(A,I5)')   '  jg     = ', jg
  WRITE (UNIT=*, FMT='(A,I5)')   '  Mmax4    = ', Mmax4
  WRITE (UNIT=*, FMT='(A,I5)')   '  nm     = ', nm
  WRITE (UNIT=*, FMT='(A,I5)')   '  na     = ', na
  WRITE (UNIT=*, FMT='(A,I5)')   '  no     = ', no
  WRITE (UNIT=*, FMT='(A,I5)')   '  nb     = ', nb
  WRITE (UNIT=*, FMT='(A,I5)')   '  nq     = ', nq
  WRITE (UNIT=*, FMT='(A,I5)')   '  np     = ', np
  WRITE (UNIT=*, FMT='(A,I5,/)') '  ne     = ', ne
  WRITE (UNIT=*, FMT='(2A)')     '  exth   = ', exth
  WRITE (UNIT=*, FMT='(2A)')     '  dnfnb  = ', TRIM(dnfnb)

  OPEN (UNIT=10, FILE=TRIM(dirvmd)//dnfnb, STATUS='OLD', FORM='UNFORMATTED')
  READ (UNIT=10)
  DO n=1,nHn
    READ (UNIT=10) Hn
    READ (UNIT=10)
  END DO
  CLOSE (UNIT=10)

  epsl=1.0_kr8/(1.135E-5_kr8*Hn)
  rad=45.0_kr8/ATAN(1.0_kr8)

  WRITE (UNIT=0, FMT='(/,A,F12.5)') '  Hn     = ', Hn
  WRITE (UNIT=0, FMT='(A,F18.5,/)') '  epsl   = ', epsl
  WRITE (UNIT=*, FMT='(/,A,F12.5)') '  Hn     = ', Hn
  WRITE (UNIT=*, FMT='(A,F18.5,/)') '  epsl   = ', epsl

  WRITE (UNIT=*, FMT='(/,A,I5)') '  ik4    = ', ik4
  WRITE (UNIT=*, FMT='(A,I5)')   '  rk4    = ', rk4
  WRITE (UNIT=*, FMT='(A,I5)')   '  ki4    = ', ki4
  WRITE (UNIT=*, FMT='(A,I5)')   '  kr4    = ', kr4
  WRITE (UNIT=*, FMT='(/,A,I5)') '  ik8    = ', ik8
  WRITE (UNIT=*, FMT='(A,I5)')   '  rk8    = ', rk8
  WRITE (UNIT=*, FMT='(A,I5)')   '  ki8    = ', ki8
  WRITE (UNIT=*, FMT='(A,I5,/)') '  kr8    = ', kr8

END SUBROUTINE Get_Parameters


END MODULE m_Parameters
