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, Mmax, Imax, Jmax

CHARACTER (LEN=17), PUBLIC :: exth
CHARACTER (LEN=12), PUBLIC :: grdtim
CHARACTER (LEN=25), PUBLIC :: dnfnb
CHARACTER (LEN=49), PUBLIC :: unvnpn
CHARACTER (LEN=49), PUBLIC :: urvrpr, urvrprb, coeff, coeffb, &
                              enercl, enerclb, enercz, enerczb 
CHARACTER (LEN=128), PUBLIC :: dirhgf, dirvmd, dirvdo, dirhdo

INTEGER (KIND=ki8), PUBLIC :: Imax2, Jmaxh, Jmaxh1, &
                              Lmax, Lmax1, Lmax2, Imxt, &
                              NCmax, NWmax, Ifmx, nvw, nfw, nfe

REAL (KIND=kr8), PUBLIC :: gg, aa, omg, omg2, dx, pi, rad

INTEGER (KIND=ki4) :: yy, mm, dd, hh

CHARACTER (LEN=5), PUBLIC :: caso, csvm
CHARACTER (LEN=6) :: Rhomb
CHARACTER (LEN=10) :: Rhombl
CHARACTER (LEN=6) :: prev
CHARACTER (LEN=10) :: datei, datef

CHARACTER (LEN=3) :: mes(12)

NAMELIST /drhnml/ csvm, Kmax, caso, Mmax, datei, datef, dirhgf, dirvmd, dirvdo, dirhdo


CONTAINS


SUBROUTINE Get_Parameters

  IMPLICIT NONE

  mes=(/ 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dec' /)

  ! Default Values for Namelist
  csvm='ERA_5'
  Kmax=37
  caso='MONAN'
  Mmax=126
  datei='2021062600'
  datef='2021062900'
  dirhgf='../../Hough_Functions/dataout/'
  dirvmd='../../Vertical_Modes/dataout/ '
  dirvdo='../../Vertical_Decomposition/dataout/ '
  dirhdo='../../Horizontal_Decomposition/dataout/ '

  ! Rhomboidal Truncation RB0125

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

  ! 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=57, FILE='../../Get_Rhomb_Res_GLats/dataout/'//Rhomb, STATUS='OLD')
  READ  (UNIT=57, FMT='(2I5)') Imax, Jmax
  CLOSE (UNIT=57)

  ! Other Parameters

  dx=360.0_kr8/REAL(Imax,kr8)
  gg=9.80665_kr8
  aa=6.37E6_kr8
  pi=4.0_kr8*ATAN(1.0_kr8)
  rad=180.0_kr8/pi
  omg=2.0_kr8*pi/86400.0_kr8
  omg2=2.0_kr8*omg*1.0E04_kr8

  Imax2  = Imax+2
  Jmaxh  = Jmax/2
  Jmaxh1 = Jmaxh+1
  Lmax   = 3*Mmax/2
  Lmax1  = Lmax/3
  Lmax2  = 2*Lmax1
  Imxt   = 3*Imax/2+1
  NCmax  = 6
  NWmax  = 10
  Ifmx   = 64
  nvw    = 3
  nfw    = nvw*NCmax
  nfe    = NCmax+2+((NCmax-2)*(NCmax-1)/2)

  IF (datei==datef) THEN
    prev='P.icn.'
  ELSE
    prev='P.fct.'
  ENDIF

  Rhombl=Rhomb//'L   '
  WRITE (UNIT=Rhombl(8:10), FMT='(I3.3)') kmax
  exth='.'//Rhombl//'_'//csvm

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

  unvnpn='UVHN'//caso//datei//datef//prev//Rhombl//'.dat'
  urvrpr='UVHR                                            '
  enercl='ENCL                                            '
  enercz='ENCZ                                            '
  coeff ='ENEC                                            '
  urvrpr(5:49)=unvnpn(5:49)
  urvrprb(1:46)=urvrpr(1:46)
  urvrprb(47:49)='ctl'
  enercl(5:49)=unvnpn(5:49)
  enercz(5:49)=unvnpn(5:49)
  enerclb(1:46)=enercl(1:46)
  enerczb(1:46)=enercz(1:46)
  enerclb(47:49)='ctl'
  enerczb(47:49)='ctl'
  coeff(5:49)=unvnpn(5:49)
  coeffb(1:46)=coeff(1:46)
  coeffb(47:49)='ctl'

  grdtim='  z         '
  READ (UNIT=datef(1:4), FMT='(I4)') yy
  READ (UNIT=datef(5:6), FMT='(I2)') mm
  READ (UNIT=datef(7:8), FMT='(I2)') dd
  READ (UNIT=datef(9:10), FMT='(I2)') hh
  WRITE (UNIT=grdtim(1:2), FMT='(I2.2)') hh
  WRITE (UNIT=grdtim(4:5), FMT='(I2.2)') dd
  WRITE (UNIT=grdtim(6:8), FMT='(A3)') mes(mm)
  WRITE (UNIT=grdtim(9:12), FMT='(I4.4)') yy

  WRITE (*, '(A)')   ' &drhnml'
  WRITE (*, '(2A)')  '  csvm   = ', csvm
  WRITE (*, '(A,I5)') '  Kmax   = ', Kmax
  WRITE (*, '(2A)')  '  caso   = ', caso
  WRITE (*, '(A,I5)') '  Mmax   = ', Mmax
  WRITE (*, '(A,I5)') '  Imax   = ', Imax
  WRITE (*, '(A,I5)') '  Jmax   = ', Jmax
  WRITE (*, '(2A)')  '  exth   = ', exth
  WRITE (*, '(2A)')  '  dirhgf = ', TRIM(dirhgf)
  WRITE (*, '(2A)')  '  dirvmd = ', TRIM(dirvmd)
  WRITE (*, '(2A)')  '  dirvdo = ', TRIM(dirvdo)
  WRITE (*, '(2A)')  '  dirhdo = ', TRIM(dirhdo)
  WRITE (*, '(2A)')  '  dnfnb  = ', dnfnb
  WRITE (*, '(2A)')  '  unvnpn = ', unvnpn
  WRITE (*, '(2A)')  '  urvrpr = ', urvrpr
  WRITE (*, '(2A)')  '  urvrpr = ', urvrprb
  WRITE (*, '(2A)')  '  energy = ', enercl
  WRITE (*, '(2A)')  '  energy = ', enerclb
  WRITE (*, '(2A)')  '  energy = ', enercz
  WRITE (*, '(2A)')  '  energy = ', enerczb
  WRITE (*, '(2A)')  '  energy = ', coeff
  WRITE (*, '(2A)')  '  energy = ', coeffb
  WRITE (*, '(2A)')  '  grdtim = ', grdtim
  WRITE (*, '(A)')   ' /'

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

  WRITE (*, '(/,A,F8.5,/)') ' 2 * omega * 10^4 = ', omg2


END SUBROUTINE Get_Parameters


END MODULE m_Parameters
