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 12854 for NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icevar.F90 – NEMO

Ignore:
Timestamp:
2020-05-01T19:06:23+02:00 (4 years ago)
Author:
clem
Message:

1st implementation of snow fraction (impact on albedo). Light transmission is still not ok since we need a non-zero penetration of solar flux when snow thickness is > 0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icevar.F90

    r12832 r12854  
    5151   !!   ice_var_sshdyn    : compute equivalent ssh in lead 
    5252   !!   ice_var_itd       : convert N-cat to M-cat 
     53   !!   ice_var_snwfra    : fraction of ice covered by snow 
    5354   !!---------------------------------------------------------------------- 
    5455   USE dom_oce        ! ocean space and time domain 
     
    7778   PUBLIC   ice_var_sshdyn 
    7879   PUBLIC   ice_var_itd 
     80   PUBLIC   ice_var_snwfra 
    7981 
    8082   INTERFACE ice_var_itd 
    8183      MODULE PROCEDURE ice_var_itd_1c1c, ice_var_itd_Nc1c, ice_var_itd_1cMc, ice_var_itd_NcMc 
     84   END INTERFACE 
     85 
     86   INTERFACE ice_var_snwfra 
     87      MODULE PROCEDURE ice_var_snwfra_1d, ice_var_snwfra_2d, ice_var_snwfra_3d 
    8288   END INTERFACE 
    8389 
     
    187193      REAL(wp), PARAMETER ::   zhl_max =  0.015_wp  ! pond lid thickness above which the ponds disappear from the albedo calculation 
    188194      REAL(wp), PARAMETER ::   zhl_min =  0.005_wp  ! pond lid thickness below which the full pond area is used in the albedo calculation 
    189       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   z1_a_i, z1_v_i, z1_a_ip 
     195      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   z1_a_i, z1_v_i, z1_a_ip, za_s_fra 
    190196      !!------------------------------------------------------------------- 
    191197 
     
    234240         &                                                       ( h_il(:,:,:) - zhl_min ) / ( zhl_max - zhl_min ) 
    235241      END WHERE 
     242      ! 
     243      CALL ice_var_snwfra( h_s, za_s_fra )           ! calculate ice fraction covered by snow 
     244      a_ip_eff = MIN( a_ip_eff, 1._wp - za_s_fra )   ! make sure (a_ip_eff + a_s_fra) <= 1 
     245      ! 
    236246      !                                           !---  salinity (with a minimum value imposed everywhere)      
    237247      IF( nn_icesal == 2 ) THEN 
     
    12681278   END SUBROUTINE ice_var_itd_NcMc 
    12691279 
     1280   !!------------------------------------------------------------------- 
     1281   !! INTERFACE ice_var_snwfra 
     1282   !! 
     1283   !! ** Purpose :  fraction of ice covered by snow 
     1284   !! 
     1285   !! ** Method  :  In absence of proper snow model on top of sea ice, 
     1286   !!               we argue that snow does not cover the whole ice because 
     1287   !!               of wind blowing... 
     1288   !!                 
     1289   !! ** Arguments : ph_s: snow thickness 
     1290   !!                 
     1291   !! ** Output    : pa_s_fra: fraction of ice covered by snow 
     1292   !! 
     1293   !!------------------------------------------------------------------- 
     1294   SUBROUTINE ice_var_snwfra_3d( ph_s, pa_s_fra ) 
     1295      !!------------------------------------------------------------------- 
     1296      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   ph_s        ! snow thickness 
     1297      REAL(wp), DIMENSION(:,:,:), INTENT(  out) ::   pa_s_fra    ! ice fraction covered by snow 
     1298      !!------------------------------------------------------------------- 
     1299      pa_s_fra(:,:,:) = 1._wp - EXP( -0.2_wp * rhos * ph_s(:,:,:) ) 
     1300   END SUBROUTINE ice_var_snwfra_3d 
     1301 
     1302   SUBROUTINE ice_var_snwfra_2d( ph_s, pa_s_fra ) 
     1303      !!------------------------------------------------------------------- 
     1304      REAL(wp), DIMENSION(:,:), INTENT(in   ) ::   ph_s        ! snow thickness 
     1305      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pa_s_fra    ! ice fraction covered by snow 
     1306      !!------------------------------------------------------------------- 
     1307      pa_s_fra(:,:) = 1._wp - EXP( -0.2_wp * rhos * ph_s(:,:) ) 
     1308   END SUBROUTINE ice_var_snwfra_2d 
     1309 
     1310   SUBROUTINE ice_var_snwfra_1d( ph_s, pa_s_fra ) 
     1311      !!------------------------------------------------------------------- 
     1312      REAL(wp), DIMENSION(:), INTENT(in   ) ::   ph_s        ! snow thickness 
     1313      REAL(wp), DIMENSION(:), INTENT(  out) ::   pa_s_fra    ! ice fraction covered by snow 
     1314      !!------------------------------------------------------------------- 
     1315      pa_s_fra(:) = 1._wp - EXP( -0.2_wp * rhos * ph_s(:) ) 
     1316   END SUBROUTINE ice_var_snwfra_1d 
     1317    
     1318 
    12701319#else 
    12711320   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.