module lmdz_blosno_ini

   implicit none

   real, save, protected :: RCPD, RV, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG, RPI
   real, save, protected :: coef_sub_bs, fallv_bs, zeta_bs, c_esalt_bs
   real, save, protected :: prt_bs, pbst_bs, qbst_bs, r_bs
   integer, save, protected :: iflag_saltation_bs, iflag_sedim_bs, iflag_sublim_bs

   !$OMP THREADPRIVATE(RCPD, RV, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG, RPI)
   !$OMP THREADPRIVATE(coef_sub_bs, fallv_bs, r_bs, zeta_bs, c_esalt_bs)
   !$OMP THREADPRIVATE(pbst_bs, prt_bs, qbst_bs)
   !$OMP THREADPRIVATE(iflag_saltation_bs,iflag_sedim_bs, iflag_sublim_bs)

   real, save, protected :: tbsmelt = 278.15    ! parameter to calculate melting fraction of BS sedimentation
   real, save, protected :: taumeltbs0 = 600.0  ! Melting time scale of blowing snow at 273.15K
   real, save, protected :: qbmin = 1.E-10      ! Minimum blowing snow specific content
   !$OMP THREADPRIVATE(tbsmelt, taumeltbs0, qbmin)

   real, save, protected :: tau_dens0_bs = 864000.      ! 10 days by default, in s
   real, save, protected :: tau_densmin_bs = 21600.    ! 1/4 days according to in situ obs by C. Amory during blowing snow +
   ! Marshall et al. 1999 (snow densification during rain)
   real, save, protected :: tau_eqsalt_bs = 10.        ! Nemoto and Nishimura 2004 show that steady-state saltation is achieved within a time tau_eqsalt of about 10s
   real, save, protected :: rhofresh_bs = 300.0       ! fresh snow density kg/m3
   real, save, protected :: rhohard_bs = 450.0       ! hard snow density kg/m3
   real, save, protected :: rhoice_bs = 920.0         ! ice density kg/m3
   real, save, protected :: rhobs = 900.0               ! blowing snow density (kg/m3) following Bintanja et al. 2001 part I
   !$OMP THREADPRIVATE(rhoice_bs, rhofresh_bs, rhohard_bs, tau_dens0_bs, tau_densmin_bs, tau_eqsalt_bs, rhobs)

contains

   subroutine blosno_ini(RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, &
                               RVTMP2_in, RTT_in, RD_in, RG_in, RV_in, RPI_in)

      USE ioipsl_getin_p_mod, ONLY: getin_p

      real, intent(in) :: RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, RPI_in
      real, intent(in) ::  RVTMP2_in, RTT_in, RD_in, RG_in, RV_in

      RG = RG_in
      RD = RD_in
      RV = RV_in
      RCPD = RCPD_in
      RLVTT = RLVTT_in
      RLSTT = RLSTT_in
      RLMLT = RLMLT_in
      RTT = RTT_in
      RG = RG_in
      RVTMP2 = RVTMP2_in
      RPI = RPI_in

      c_esalt_bs = 3.25
      CALL getin_p('c_esalt_bs', c_esalt_bs)

      qbst_bs = 0.001
      CALL getin_p('qbst_bs', qbst_bs)

      pbst_bs = 0.00003
      CALL getin_p('pbst_bs', pbst_bs)

      prt_bs = 0.00003
      CALL getin_p('prt_bs', prt_bs)

      zeta_bs = 1.
      CALL getin_p('zeta_bs', zeta_bs)

      fallv_bs = 0.5
      CALL getin_p('fallv_bs', fallv_bs)

      coef_sub_bs = 0.01
      CALL getin_p('coef_sub_bs', coef_sub_bs)

      iflag_sublim_bs = 1
      CALL getin_p('iflag_sublim_bs', iflag_sublim_bs)

      iflag_sedim_bs = 1
      CALL getin_p('iflag_sedim_bs', iflag_sedim_bs)

      r_bs = 50.0e-6
      CALL getin_p('r_bs', r_bs)

   end subroutine blosno_ini

end module lmdz_blosno_ini
