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

CHARACTER (LEN=5), PUBLIC :: caso, csvm
CHARACTER (LEN=12), PUBLIC :: grdtim
CHARACTER (LEN=25), PUBLIC :: dnfnb
CHARACTER (LEN=49), PUBLIC :: datain
CHARACTER (LEN=49), PUBLIC :: vrtdec, vrtdecb
CHARACTER (LEN=49), PUBLIC :: energn, energnb
CHARACTER (LEN=49), PUBLIC :: enercl, enerclb, enercg, enercgb
CHARACTER (LEN=128), PUBLIC :: dirdpr, dirvdo, dirvmd

INTEGER (KIND=ki8), PUBLIC :: Kmaxm, Kmaxp

REAL (KIND=kr8), PUBLIC :: rd, gv

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

CHARACTER (LEN=6) :: Rhomb
CHARACTER (LEN=5) :: prev
CHARACTER (LEN=9) :: pref
CHARACTER (LEN=10) :: datei, datef

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

NAMELIST /dcvnml/ csvm, Kmax, caso, datei, datef, Mmax, dirdpr, dirvdo, dirvmd

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'
  caso='MONAN'
  Kmax=37
  Mmax=126
  datei='2021062600'
  datef='2021062900'
  dirdpr='../../Data_Pressure/ '
  dirvdo='../dataout/ '
  dirvmd='../../Vertical_Modes/dataout/ '

  OPEN  (UNIT=55, FILE='./NameList', STATUS='OLD')
  READ  (UNIT=55, NML=dcvnml)
  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=65, FILE='../../Get_Rhomb_Res_GLats/dataout/'//Rhomb, STATUS='OLD')
  READ  (UNIT=65, FMT='(2I5)') Imax, Jmax
  CLOSE (UNIT=65)

  ! Other Parameters
  rd=287.05
  gv=9.80665
  pref='ENER'//caso
  IF (datei==datef) THEN
    prev='P.icn'
  ELSE
    prev='P.fct'
  ENDIF
  Kmaxm = Kmax-1
  Kmaxp = Kmax+1

  grdtim='  z         '
  dnfnb='Vertical_Modes_'//csvm//'.L   '
  datain=pref//datei//datef//prev//'.'//Rhomb//'L   .dat'
  vrtdec='UVHN                                      '
  energn='ENEC                                      '
  enercl='ENCL                                      '
  enercg='ENCG                                      '

  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 (UNIT=dnfnb(23:25), FMT='(I3.3)') Kmax
  WRITE (UNIT=datain(43:45), FMT='(I3.3)') Kmax

  vrtdec(5:49)=datain(5:49)
  vrtdecb(1:46)=vrtdec(1:46)
  vrtdecb(47:49)='ctl'
  energn(5:49)=datain(5:49)
  energnb(1:46)=energn(1:46)
  energnb(47:49)='ctl'
  enercl(5:49)=datain(5:49)
  enercg(5:49)=datain(5:49)
  enerclb(1:46)=enercl(1:46)
  enerclb(47:49)='ctl'
  enercgb(1:46)=enercg(1:46)
  enercgb(47:49)='ctl'

  WRITE (UNIT=*, FMT='(A)')    ' &dcvnml'
  WRITE (UNIT=*, FMT='(2A)')   '  csvm   = ', csvm
  WRITE (UNIT=*, FMT='(A,I5)') '  Kmax   = ', Kmax
  WRITE (UNIT=*, FMT='(2A)')   '  caso   = ', caso
  WRITE (UNIT=*, FMT='(A,I5)') '  Mmax   = ', Mmax
  WRITE (UNIT=*, FMT='(A,I5)') '  Imax   = ', Imax
  WRITE (UNIT=*, FMT='(A,I5)') '  Jmax   = ', Jmax
  WRITE (UNIT=*, FMT='(2A)')  '  grdtim = ', grdtim
  WRITE (UNIT=*, FMT='(2A)')  '  dnfnb  = ', TRIM(dnfnb)
  WRITE (UNIT=*, FMT='(2A)')  '  datain = ', TRIM(datain)
  WRITE (UNIT=*, FMT='(2A)')  '  dirdpr = ', TRIM(dirdpr)
  WRITE (UNIT=*, FMT='(2A)')  '  dirvdo = ', TRIM(dirvdo)
  WRITE (UNIT=*, FMT='(2A)')  '  dirvmd = ', TRIM(dirvmd)
  WRITE (UNIT=*, FMT='(2A)')  '  vrtdec = ', TRIM(vrtdec)
  WRITE (UNIT=*, FMT='(2A)')  '  vrtdec = ', TRIM(vrtdecb)
  WRITE (UNIT=*, FMT='(2A)')  '  energn = ', TRIM(energn)
  WRITE (UNIT=*, FMT='(2A)')  '  energn = ', TRIM(energnb)
  WRITE (UNIT=*, FMT='(2A)')  '  energg = ', TRIM(enercl)
  WRITE (UNIT=*, FMT='(2A)')  '  energg = ', TRIM(enerclb)
  WRITE (UNIT=*, FMT='(2A)')  '  energg = ', TRIM(enercg)
  WRITE (UNIT=*, FMT='(2A)')  '  energg = ', TRIM(enercgb)
  WRITE (UNIT=*, FMT='(A)')   ' /'

  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
