New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11304 – NEMO

Changeset 11304


Ignore:
Timestamp:
2019-07-18T17:17:50+02:00 (5 years ago)
Author:
smasson
Message:

dev_r11265_ABL : si3 compatibility, see #2131

Location:
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icesbc.F90

    r10535 r11304  
    7171      SELECT CASE( ksbc ) 
    7272         CASE( jp_usr     )   ;    CALL usrdef_sbc_ice_tau( kt )                 ! user defined formulation 
    73          CASE( jp_blk     )   ;    CALL blk_ice_tau                              ! Bulk         formulation 
     73         CASE( jp_blk     )   ;    CALL blk_ice_1( sf(jp_wndi)%fnow(:,:,1), sf(jp_wndj)%fnow(:,:,1),   & 
     74            &                                      sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1),   & 
     75            &                                      u_ice, v_ice,   &    ! inputs 
     76            &                                      putaui = utau_ice, pvtaui = vtau_ice )    ! outputs                              ! Bulk         formulation 
    7477         CASE( jp_purecpl )   ;    CALL sbc_cpl_ice_tau( utau_ice , vtau_ice )   ! Coupled      formulation 
    7578      END SELECT 
     
    140143                                  CALL usrdef_sbc_ice_flx( kt, h_s, h_i ) 
    141144      CASE( jp_blk )              !--- bulk formulation 
    142                                   CALL blk_ice_flx    ( t_su, h_s, h_i, alb_ice )    !  
     145                                  CALL blk_ice_2    ( t_su, h_s, h_i, alb_ice, sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1),    & 
     146            &                                           sf(jp_slp)%fnow(:,:,1), sf(jp_qlw)%fnow(:,:,1), sf(jp_prec)%fnow(:,:,1), sf(jp_snow)%fnow(:,:,1) )    !  
    143147         IF( ln_mixcpl        )   CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 
    144148         IF( nn_flxdist /= -1 )   CALL ice_flx_dist   ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
  • NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/OCE/IOM/iom.F90

    r11275 r11304  
    2929   USE lib_mpp           ! MPP library 
    3030#if defined key_iomput 
    31    USE sbc_oce  , ONLY :   nn_fsbc, ght_abl, ghw_abl, e3w_abl, jpka, jpkam1 
     31   USE sbc_oce  , ONLY :   nn_fsbc, ght_abl, ghw_abl, e3t_abl, e3w_abl, jpka, jpkam1 
    3232   USE trc_oce  , ONLY :   nn_dttrc                  ! frequency of step on passive tracers 
    3333   USE icb_oce  , ONLY :   nclasses, class_num       ! iceberg classes 
  • NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/OCE/SBC/sbcblk.F90

    r11275 r11304  
    3131   !!   L_vap         : latent heat of vaporization of water as a function of temperature 
    3232   !!             sea-ice case only :  
    33    !!   blk_ice_tau   : provide the air-ice stress 
    34    !!   blk_ice_flx   : provide the heat and mass fluxes at air-ice interface 
     33   !!   blk_ice_1   : provide the air-ice stress 
     34   !!   blk_ice_2   : provide the heat and mass fluxes at air-ice interface 
    3535   !!   blk_ice_qcn   : provide ice surface temperature and snow/ice conduction flux (emulating conduction flux) 
    3636   !!   Cdn10_Lupkes2012 : Lupkes et al. (2012) air-ice drag 
     
    4848   USE lib_fortran    ! to use key_nosignedzero 
    4949#if defined key_si3 
    50    USE ice     , ONLY :   u_ice, v_ice, jpl, a_i_b, at_i_b, t_su, rn_cnd_s, hfx_err_dif 
     50   USE ice     , ONLY :   jpl, a_i_b, at_i_b, t_su, rn_cnd_s, hfx_err_dif 
    5151   USE icethd_dh      ! for CALL ice_thd_snwblow 
    5252#endif 
     
    7272   PUBLIC   cp_air        ! called in ablmod 
    7373#if defined key_si3 
    74    PUBLIC   blk_ice_tau   ! routine called in icesbc 
    75    PUBLIC   blk_ice_flx   ! routine called in icesbc 
     74   PUBLIC   blk_ice_   ! routine called in icesbc 
     75   PUBLIC   blk_ice_   ! routine called in icesbc 
    7676   PUBLIC   blk_ice_qcn   ! routine called in icesbc 
    7777#endif  
     
    8383  !!Lolo: should ultimately be moved in the module with all physical constants ? 
    8484!!gm  : In principle, yes. 
    85    REAL(wp), PARAMETER ::   Cp_dry = 1005.0       !: Specic heat of dry air, constant pressure      [J/K/kg] 
    86    REAL(wp), PARAMETER ::   Cp_vap = 1860.0       !: Specic heat of water vapor, constant pressure  [J/K/kg] 
    87    REAL(wp), PARAMETER ::   R_dry = 287.05_wp     !: Specific gas constant for dry air              [J/K/kg] 
    88    REAL(wp), PARAMETER ::   R_vap = 461.495_wp    !: Specific gas constant for water vapor          [J/K/kg] 
    89    REAL(wp), PARAMETER ::   reps0 = R_dry/R_vap   !: ratio of gas constant for dry air and water vapor => ~ 0.622 
    90    REAL(wp), PARAMETER ::   rctv0 = R_vap/R_dry   !: for virtual temperature (== (1-eps)/eps) => ~ 0.608 
     85   REAL(wp)        , PARAMETER ::   Cp_dry = 1005.0       !: Specic heat of dry air, constant pressure      [J/K/kg] 
     86   REAL(wp)        , PARAMETER ::   Cp_vap = 1860.0       !: Specic heat of water vapor, constant pressure  [J/K/kg] 
     87   REAL(wp), PUBLIC, PARAMETER ::   R_dry = 287.05_wp     !: Specific gas constant for dry air              [J/K/kg] 
     88   REAL(wp)        , PARAMETER ::   R_vap = 461.495_wp    !: Specific gas constant for water vapor          [J/K/kg] 
     89   REAL(wp)        , PARAMETER ::   reps0 = R_dry/R_vap   !: ratio of gas constant for dry air and water vapor => ~ 0.622 
     90   REAL(wp), PUBLIC, PARAMETER ::   rctv0 = R_vap/R_dry   !: for virtual temperature (== (1-eps)/eps) => ~ 0.608 
    9191 
    9292   INTEGER , PUBLIC, PARAMETER ::   jpfld   =11   !: maximum number of files to read 
     
    118118   LOGICAL  ::   ln_ECMWF       ! "ECMWF"     algorithm   (IFS cycle 31) 
    119119   ! 
    120    REAL(wp) ::   rn_pfac        ! multiplication factor for precipitation 
    121    REAL(wp) ::   rn_efac        ! multiplication factor for evaporation 
    122    REAL(wp) ::   rn_vfac        ! multiplication factor for ice/ocean velocity in the calculation of wind stress 
     120   REAL(wp)         ::   rn_pfac        ! multiplication factor for precipitation 
     121   REAL(wp), PUBLIC ::   rn_efac        !: multiplication factor for evaporation 
     122   REAL(wp), PUBLIC ::   rn_vfac        !: multiplication factor for ice/ocean velocity in the calculation of wind stress 
    123123   REAL(wp) ::   rn_zqt         ! z(q,t) : height of humidity and temperature measurements 
    124124   REAL(wp) ::   rn_zu          ! z(u)   : height of wind measurements 
     
    224224      slf_i(jp_tair) = sn_tair   ;   slf_i(jp_humi) = sn_humi 
    225225      slf_i(jp_prec) = sn_prec   ;   slf_i(jp_snow) = sn_snow 
    226       slf_i(jp_slp) = sn_slp 
     226      slf_i(jp_slp ) = sn_slp 
    227227      slf_i(jp_hpgi) = sn_hpgi   ;   slf_i(jp_hpgj) = sn_hpgj   
    228228      ! 
     
    506506!!gm to be done by someone: check the efficiency of the call of cp_air within do loops  
    507507               psen  (ji,jj) = cp_air( q_zu(ji,jj) ) * zztmp * Ch_atm(ji,jj) * (  zst(ji,jj) - t_zu(ji,jj) ) 
    508                pevp  (ji,jj) = rn_efac*MAX( 0._wp,      zztmp * Ce_atm(ji,jj) * ( pssq(ji,jj) - q_zu(ji,jj) ) ) 
     508               pevp  (ji,jj) = rn_efac*MAX( 0._wp,     zztmp * Ce_atm(ji,jj) * ( pssq(ji,jj) - q_zu(ji,jj) ) ) 
    509509               zztmp         = zztmp * Cd_atm(ji,jj) 
    510510               pcd_du(ji,jj) = zztmp 
     
    615615      zz2 = rn_pfac * rcp 
    616616      zz3 = rn_pfac * rcpi 
     617      zztmp = 1._wp - albo 
    617618      qns(:,:) = (  zqlw(:,:) - psen(:,:) - zqla(:,:)                          &   ! Downward Non Solar 
    618619         &        - psnow(:,:) * zztmp                                         &   ! remove latent melting heat for solid precip 
     
    788789   !!   'key_si3'                                       SI3 sea-ice model 
    789790   !!---------------------------------------------------------------------- 
    790    !!   blk_ice_tau : provide the air-ice stress 
    791    !!   blk_ice_flx : provide the heat and mass fluxes at air-ice interface 
     791   !!   blk_ice_ : provide the air-ice stress 
     792   !!   blk_ice_ : provide the heat and mass fluxes at air-ice interface 
    792793   !!   blk_ice_qcn : provide ice surface temperature and snow/ice conduction flux (emulating conduction flux) 
    793794   !!   Cdn10_Lupkes2012 : Lupkes et al. (2012) air-ice drag 
     
    795796   !!---------------------------------------------------------------------- 
    796797 
    797    SUBROUTINE blk_ice_tau 
    798       !!--------------------------------------------------------------------- 
    799       !!                     ***  ROUTINE blk_ice_tau  *** 
     798   SUBROUTINE blk_ice_1( pwndi, pwndj, ptair, phumi, pslp , puice, pvice,       &    ! inputs 
     799      &                  putaui, pvtaui, pseni, pevpi, ptsui, pssqi, pcd_dui   )    ! outputs 
     800      !!--------------------------------------------------------------------- 
     801      !!                     ***  ROUTINE blk_ice_1  *** 
    800802      !! 
    801803      !! ** Purpose :   provide the surface boundary condition over sea-ice 
     
    805807      !!                NB: ice drag coefficient is assumed to be a constant 
    806808      !!--------------------------------------------------------------------- 
     809      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   pslp    ! sea-level pressure [Pa] 
     810      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   pwndi   ! atmospheric wind at T-point [m/s] 
     811      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   pwndj   ! atmospheric wind at T-point [m/s] 
     812      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   ptair   ! atmospheric wind at T-point [m/s] 
     813      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   phumi   ! atmospheric wind at T-point [m/s]       
     814      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   puice   ! sea-ice velocity on I or C grid [m/s] 
     815      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ) ::   pvice   ! " 
     816      REAL(wp) , INTENT(  out), DIMENSION(:,:  ), OPTIONAL ::   putaui  ! if ln_blk 
     817      REAL(wp) , INTENT(  out), DIMENSION(:,:  ), OPTIONAL ::   pvtaui  ! if ln_blk 
     818      REAL(wp) , INTENT(  out), DIMENSION(:,:  ), OPTIONAL ::   pseni   ! if ln_abl 
     819      REAL(wp) , INTENT(  out), DIMENSION(:,:  ), OPTIONAL ::   pevpi   ! if ln_abl 
     820      REAL(wp) , INTENT(in   ), DIMENSION(:,:  ), OPTIONAL ::   ptsui   ! if ln_abl  
     821      REAL(wp) , INTENT(  out), DIMENSION(:,:  ), OPTIONAL ::   pssqi   ! if ln_abl 
     822      REAL(wp) , INTENT(  out), DIMENSION(:,:  ), OPTIONAL ::   pcd_dui ! if ln_abl  
     823      ! 
    807824      INTEGER  ::   ji, jj    ! dummy loop indices 
    808       REAL(wp) ::   zwndi_f , zwndj_f, zwnorm_f   ! relative wind module and components at F-point 
    809825      REAL(wp) ::   zwndi_t , zwndj_t             ! relative wind components at T-point 
    810826      REAL(wp), DIMENSION(jpi,jpj) ::   zrhoa     ! transfer coefficient for momentum      (tau) 
     827      REAL(wp), DIMENSION(jpi,jpj) ::   zcd_dui     ! transfer coefficient for momentum      (tau) 
    811828      !!--------------------------------------------------------------------- 
    812829      ! 
     
    822839      DO jj = 2, jpjm1 
    823840         DO ji = fs_2, fs_jpim1   ! vect. opt. 
    824             zwndi_t = (  sf(jp_wndi)%fnow(ji,jj,1) - rn_vfac * 0.5 * ( u_ice(ji-1,jj  ) + u_ice(ji,jj) )  ) 
    825             zwndj_t = (  sf(jp_wndj)%fnow(ji,jj,1) - rn_vfac * 0.5 * ( v_ice(ji  ,jj-1) + v_ice(ji,jj) )  ) 
     841            zwndi_t = (  pwndi(ji,jj) - rn_vfac * 0.5_wp * ( puice(ji-1,jj  ) + puice(ji,jj) )  ) 
     842            zwndj_t = (  pwndj(ji,jj) - rn_vfac * 0.5_wp * ( pvice(ji  ,jj-1) + pvice(ji,jj) )  ) 
    826843            wndm_ice(ji,jj) = SQRT( zwndi_t * zwndi_t + zwndj_t * zwndj_t ) * tmask(ji,jj,1) 
    827844         END DO 
     
    842859      ! local scalars ( place there for vector optimisation purposes) 
    843860      ! Computing density of air! Way denser that 1.2 over sea-ice !!! 
    844       zrhoa (:,:) =  rho_air(sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1)) 
    845  
    846       ! ------------------------------------------------------------ ! 
    847       !    Wind stress relative to the moving ice ( U10m - U_ice )   ! 
    848       ! ------------------------------------------------------------ ! 
    849       ! C-grid ice dynamics :   U & V-points (same as ocean) 
    850       DO jj = 2, jpjm1 
    851          DO ji = fs_2, fs_jpim1   ! vect. opt. 
    852             utau_ice(ji,jj) = 0.5 * zrhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji+1,jj  ) + wndm_ice(ji,jj) )            & 
    853                &          * ( 0.5 * (sf(jp_wndi)%fnow(ji+1,jj,1) + sf(jp_wndi)%fnow(ji,jj,1) ) - rn_vfac * u_ice(ji,jj) ) 
    854             vtau_ice(ji,jj) = 0.5 * zrhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji,jj+1  ) + wndm_ice(ji,jj) )            & 
    855                &          * ( 0.5 * (sf(jp_wndj)%fnow(ji,jj+1,1) + sf(jp_wndj)%fnow(ji,jj,1) ) - rn_vfac * v_ice(ji,jj) ) 
     861      zrhoa  (:,:) = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) 
     862      zcd_dui(:,:) = wndm_ice(:,:) * Cd_atm(:,:) 
     863       
     864      IF( ln_blk ) THEN  
     865         ! ------------------------------------------------------------ ! 
     866         !    Wind stress relative to the moving ice ( U10m - U_ice )   ! 
     867         ! ------------------------------------------------------------ ! 
     868         ! C-grid ice dynamics :   U & V-points (same as ocean) 
     869         DO jj = 2, jpjm1 
     870            DO ji = fs_2, fs_jpim1   ! vect. opt. 
     871               putaui(ji,jj) = 0.5_wp * (  zrhoa(ji+1,jj) * zcd_dui(ji+1,jj)             & 
     872                  &                      + zrhoa(ji  ,jj) * zcd_dui(ji  ,jj)  )          & 
     873                  &         * ( 0.5_wp * ( pwndi(ji+1,jj) + pwndi(ji,jj) ) - rn_vfac * puice(ji,jj) ) 
     874               pvtaui(ji,jj) = 0.5_wp * (  zrhoa(ji,jj+1) * zcd_dui(ji,jj+1)             & 
     875                  &                      + zrhoa(ji,jj  ) * zcd_dui(ji,jj  )  )          & 
     876                  &         * ( 0.5_wp * ( pwndj(ji,jj+1) + pwndj(ji,jj) ) - rn_vfac * pvice(ji,jj) ) 
     877            END DO 
    856878         END DO 
    857       END DO 
    858       CALL lbc_lnk_multi( 'sbcblk', utau_ice, 'U', -1., vtau_ice, 'V', -1. ) 
    859       ! 
    860       ! 
    861       IF(ln_ctl) THEN 
    862          CALL prt_ctl(tab2d_1=utau_ice  , clinfo1=' blk_ice: utau_ice : ', tab2d_2=vtau_ice  , clinfo2=' vtau_ice : ') 
    863          CALL prt_ctl(tab2d_1=wndm_ice  , clinfo1=' blk_ice: wndm_ice : ') 
    864       ENDIF 
    865       ! 
    866    END SUBROUTINE blk_ice_tau 
    867  
    868  
    869    SUBROUTINE blk_ice_flx( ptsu, phs, phi, palb ) 
    870       !!--------------------------------------------------------------------- 
    871       !!                     ***  ROUTINE blk_ice_flx  *** 
     879         CALL lbc_lnk_multi( 'sbcblk', putaui, 'U', -1., pvtaui, 'V', -1. ) 
     880         ! 
     881         IF(ln_ctl)   CALL prt_ctl( tab2d_1=putaui  , clinfo1=' blk_ice: putaui : '   & 
     882            &                     , tab2d_2=pvtaui  , clinfo2='          pvtaui : ' ) 
     883      ELSE 
     884         DO jj = 1, jpj 
     885            DO ji = 1, jpi 
     886               pcd_dui(ji,jj) = zcd_dui(ji,jj) 
     887               pseni  (ji,jj) = wndm_ice(ji,jj) * Ch_atm(ji,jj) 
     888               pevpi  (ji,jj) = wndm_ice(ji,jj) * Ce_atm(ji,jj) 
     889               pssqi  (ji,jj) = 11637800.0_wp * EXP( -5897.8_wp / (ptsui(ji,jj)+rt0) ) / zrhoa(ji,jj) 
     890            END DO 
     891         END DO 
     892      ENDIF 
     893      ! 
     894      IF(ln_ctl)  CALL prt_ctl(tab2d_1=wndm_ice  , clinfo1=' blk_ice: wndm_ice : ') 
     895      ! 
     896   END SUBROUTINE blk_ice_1 
     897 
     898 
     899   SUBROUTINE blk_ice_2( ptsu, phs, phi, palb, ptair, phumi, pslp, pqlw, pprec, psnow  ) 
     900      !!--------------------------------------------------------------------- 
     901      !!                     ***  ROUTINE blk_ice_2  *** 
    872902      !! 
    873903      !! ** Purpose :   provide the heat and mass fluxes at air-ice interface 
     
    883913      REAL(wp), DIMENSION(:,:,:), INTENT(in)  ::   phi    ! ice thickness 
    884914      REAL(wp), DIMENSION(:,:,:), INTENT(in)  ::   palb   ! ice albedo (all skies) 
     915      REAL(wp), DIMENSION(:,:  ), INTENT(in)  ::   ptair 
     916      REAL(wp), DIMENSION(:,:  ), INTENT(in)  ::   phumi 
     917      REAL(wp), DIMENSION(:,:  ), INTENT(in)  ::   pslp 
     918      REAL(wp), DIMENSION(:,:  ), INTENT(in)  ::   pqlw 
     919      REAL(wp), DIMENSION(:,:  ), INTENT(in)  ::   pprec 
     920      REAL(wp), DIMENSION(:,:  ), INTENT(in)  ::   psnow 
    885921      !! 
    886922      INTEGER  ::   ji, jj, jl               ! dummy loop indices 
    887923      REAL(wp) ::   zst3                     ! local variable 
    888924      REAL(wp) ::   zcoef_dqlw, zcoef_dqla   !   -      - 
    889       REAL(wp) ::   zztmp, z1_rLsub           !   -      - 
     925      REAL(wp) ::   zztmp, zztmp2, z1_rLsub          !   -      - 
    890926      REAL(wp) ::   zfr1, zfr2               ! local variables 
    891927      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   z1_st         ! inverse of surface temperature 
     
    901937      zcoef_dqla = -Ls * 11637800. * (-5897.8) 
    902938      ! 
    903       zrhoa(:,:) = rho_air( sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) ) 
     939      zrhoa(:,:) = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) 
    904940      ! 
    905941      zztmp = 1. / ( 1. - albo ) 
     
    919955               qsr_ice(ji,jj,jl) = zztmp * ( 1. - palb(ji,jj,jl) ) * qsr(ji,jj) 
    920956               ! Long  Wave (lw) 
    921                z_qlw(ji,jj,jl) = 0.95 * ( sf(jp_qlw)%fnow(ji,jj,1) - Stef * ptsu(ji,jj,jl) * zst3 ) * tmask(ji,jj,1) 
     957               z_qlw(ji,jj,jl) = 0.95 * ( pqlw(ji,jj) - Stef * ptsu(ji,jj,jl) * zst3 ) * tmask(ji,jj,1) 
    922958               ! lw sensitivity 
    923959               z_dqlw(ji,jj,jl) = zcoef_dqlw * zst3 
     
    927963               ! ----------------------------! 
    928964 
    929                ! ... turbulent heat fluxes with Ch_atm recalculated in blk_ice_tau 
     965               ! ... turbulent heat fluxes with Ch_atm recalculated in blk_ice_1 
    930966               ! Sensible Heat 
    931                z_qsb(ji,jj,jl) = zrhoa(ji,jj) * cpa * Ch_atm(ji,jj) * wndm_ice(ji,jj) * (ptsu(ji,jj,jl) - sf(jp_tair)%fnow(ji,jj,1)) 
     967               z_qsb(ji,jj,jl) = zrhoa(ji,jj) * cpa * Ch_atm(ji,jj) * wndm_ice(ji,jj) * (ptsu(ji,jj,jl) - ptair(ji,jj)) 
    932968               ! Latent Heat 
    933                qla_ice(ji,jj,jl) = rn_efac * MAX( 0.e0, zrhoa(ji,jj) * Ls  * Ch_atm(ji,jj) * wndm_ice(ji,jj) *  & 
    934                   &                ( 11637800. * EXP( -5897.8 * z1_st(ji,jj,jl) ) / zrhoa(ji,jj) - sf(jp_humi)%fnow(ji,jj,1) ) ) 
     969               zztmp2 = EXP( -5897.8 * z1_st(ji,jj,jl) ) 
     970               qla_ice(ji,jj,jl) = rn_efac * MAX( 0.e0, zrhoa(ji,jj) * Ls  * Ce_atm(ji,jj) * wndm_ice(ji,jj) *  & 
     971                  &                ( 11637800. * zztmp2 / zrhoa(ji,jj) - phumi(ji,jj) ) ) 
    935972               ! Latent heat sensitivity for ice (Dqla/Dt) 
    936973               IF( qla_ice(ji,jj,jl) > 0._wp ) THEN 
    937                   dqla_ice(ji,jj,jl) = rn_efac * zcoef_dqla * Ch_atm(ji,jj) * wndm_ice(ji,jj) *  & 
    938                      &                 z1_st(ji,jj,jl)*z1_st(ji,jj,jl) * EXP(-5897.8 * z1_st(ji,jj,jl)) 
     974                  dqla_ice(ji,jj,jl) = rn_efac * zcoef_dqla * Ce_atm(ji,jj) * wndm_ice(ji,jj) *  & 
     975                     &                 z1_st(ji,jj,jl) * z1_st(ji,jj,jl) * zztmp2 
    939976               ELSE 
    940977                  dqla_ice(ji,jj,jl) = 0._wp 
     
    943980               ! Sensible heat sensitivity (Dqsb_ice/Dtn_ice) 
    944981               z_dqsb(ji,jj,jl) = zrhoa(ji,jj) * cpa * Ch_atm(ji,jj) * wndm_ice(ji,jj) 
    945  
     982                
    946983               ! ----------------------------! 
    947984               !     III    Total FLUXES     ! 
     
    957994      END DO 
    958995      ! 
    959       tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac * tmask(:,:,1)  ! total precipitation [kg/m2/s] 
    960       sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac * tmask(:,:,1)  ! solid precipitation [kg/m2/s] 
    961       CALL iom_put( 'snowpre', sprecip )                    ! Snow precipitation 
    962       CALL iom_put( 'precip' , tprecip )                    ! Total precipitation 
     996      tprecip(:,:) = pprec(:,:) * rn_pfac * tmask(:,:,1)  ! total precipitation [kg/m2/s] 
     997      sprecip(:,:) = psnow(:,:) * rn_pfac * tmask(:,:,1)  ! solid precipitation [kg/m2/s] 
     998      CALL iom_put( 'snowpre', sprecip )                  ! Snow precipitation 
     999      CALL iom_put( 'precip' , tprecip )                  ! Total precipitation 
    9631000 
    9641001      ! --- evaporation --- ! 
     
    9771014      ! --- heat flux associated with emp --- ! 
    9781015      qemp_oce(:,:) = - ( 1._wp - at_i_b(:,:) ) * zevap(:,:) * sst_m(:,:) * rcp                  & ! evap at sst 
    979          &          + ( tprecip(:,:) - sprecip(:,:) ) * ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp  & ! liquid precip at Tair 
     1016         &          + ( tprecip(:,:) - sprecip(:,:) ) * ( ptair(:,:) - rt0 ) * rcp               & ! liquid precip at Tair 
    9801017         &          +   sprecip(:,:) * ( 1._wp - zsnw ) *                                        & ! solid precip at min(Tair,Tsnow) 
    981          &              ( ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 
     1018         &              ( ( MIN( ptair(:,:), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 
    9821019      qemp_ice(:,:) =   sprecip(:,:) * zsnw *                                                    & ! solid precip (only) 
    983          &              ( ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 
     1020         &              ( ( MIN( ptair(:,:), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 
    9841021 
    9851022      ! --- total solar and non solar fluxes --- ! 
     
    9891026 
    9901027      ! --- heat content of precip over ice in J/m3 (to be used in 1D-thermo) --- ! 
    991       qprec_ice(:,:) = rhos * ( ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 
    992  
     1028      qprec_ice(:,:) = rhos * ( ( MIN( ptair(:,:), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 
     1029       
    9931030      ! --- heat content of evap over ice in W/m2 (to be used in 1D-thermo) --- 
    9941031      DO jl = 1, jpl 
     
    10161053         CALL prt_ctl(tab3d_1=ptsu    , clinfo1=' blk_ice: ptsu     : ', tab3d_2=qns_ice , clinfo2=' qns_ice  : ', kdim=jpl) 
    10171054         CALL prt_ctl(tab2d_1=tprecip , clinfo1=' blk_ice: tprecip  : ', tab2d_2=sprecip , clinfo2=' sprecip  : ') 
    1018       ENDIF 
    1019       ! 
    1020    END SUBROUTINE blk_ice_flx 
     1055      END IF 
     1056      ! 
     1057   END SUBROUTINE blk_ice_2 
    10211058    
    10221059 
Note: See TracChangeset for help on using the changeset viewer.