! $Id: $

MODULE vertical_layers_mod

   REAL,SAVE             :: preff  ! reference surface pressure (Pa)
   REAL,SAVE             :: scaleheight ! atmospheric reference scale height (km)
   REAL,SAVE,ALLOCATABLE :: ap(:) ! hybrid (pressure contribution) coordinate 
                                  ! at layer interfaces (Pa)
   REAL,SAVE,ALLOCATABLE :: bp(:) ! hybrid (sigma contribution) coordinate 
                                  ! at layer interfaces (Pa)
   REAL,SAVE,ALLOCATABLE :: aps(:) ! hybrid (pressure contribution) coordinate 
                                   ! at mid-layer (Pa)
   REAL,SAVE,ALLOCATABLE :: bps(:) ! hybrid (sigma contribution) coordinate 
                                   ! at mid-layer
   REAL,SAVE,ALLOCATABLE :: presnivs(:) ! reference pressure at mid-layer (Pa),
                                        ! based on preff, ap and bp
   REAL,SAVE,ALLOCATABLE :: presinter(:) ! reference pressure at interface (Pa),
                                        ! based on preff, ap and bp
   REAL,SAVE,ALLOCATABLE :: pseudoalt(:) ! pseudo-altitude of model layers (km),
                                         ! based on preff and scaleheight
   
!$OMP THREADPRIVATE(preff,scaleheight,ap,bp,aps,bps,presnivs,presinter,pseudoalt)


CONTAINS

  SUBROUTINE init_vertical_layers(nlayer,preff_,scaleheight_,ap_,bp_,&
                                 aps_,bps_,presnivs_, presinter_, pseudoalt_)
    IMPLICIT NONE
    INTEGER,INTENT(IN) :: nlayer ! number of atmospheric layers
    REAL,INTENT(IN)    :: preff_ ! reference surface pressure (Pa)
    REAL,INTENT(IN)    :: scaleheight_ ! atmospheric scale height (km)
    REAL,INTENT(IN)    :: ap_(nlayer+1) ! hybrid coordinate at interfaces
    REAL,INTENT(IN)    :: bp_(nlayer+1) ! hybrid coordinate at interfaces
    REAL,INTENT(IN)    :: aps_(nlayer) ! hybrid coordinate at mid-layer
    REAL,INTENT(IN)    :: bps_(nlayer) ! hybrid coordinate at mid-layer
    REAL,INTENT(IN)    :: presnivs_(nlayer) ! Appproximative pressure of atm. layers (Pa)
    REAL,INTENT(IN)    :: presinter_(nlayer+1) ! Appproximative pressure of atm. layers (Pa)
    REAL,INTENT(IN)    :: pseudoalt_(nlayer) ! pseudo-altitude of atm. layers (km)
  
    ALLOCATE(ap(nlayer+1))
    ALLOCATE(bp(nlayer+1))
    ALLOCATE(aps(nlayer))
    ALLOCATE(bps(nlayer))
    ALLOCATE(presnivs(nlayer))
    ALLOCATE(presinter(nlayer+1))
    ALLOCATE(pseudoalt(nlayer))
  
    preff = preff_
    scaleheight=scaleheight_
    ap(:) = ap_(:)
    bp(:) = bp_(:)
    aps(:) = aps_(:)
    bps(:) = bps_(:)
    presnivs(:) = presnivs_(:)
    presinter(:) = presinter_(:)
    pseudoalt(:) = pseudoalt_(:)

  END SUBROUTINE init_vertical_layers

END MODULE vertical_layers_mod
