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

Ignore:
Timestamp:
2020-05-07T16:11:23+02:00 (4 years ago)
Author:
clem
Message:

1) implement the optional nn_snwfra, i.e. the fraction of ice covered by sea ice. 2) change some namelists parameters names to avoid confusion. 3) correct a bug at ice initialization

File:
1 edited

Legend:

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

    r12854 r12890  
    5252   !!   ice_var_itd       : convert N-cat to M-cat 
    5353   !!   ice_var_snwfra    : fraction of ice covered by snow 
     54   !!   ice_var_snwblow   : distribute snow fall between ice and ocean 
    5455   !!---------------------------------------------------------------------- 
    5556   USE dom_oce        ! ocean space and time domain 
     
    7980   PUBLIC   ice_var_itd 
    8081   PUBLIC   ice_var_snwfra 
     82   PUBLIC   ice_var_snwblow 
    8183 
    8284   INTERFACE ice_var_itd 
     
    8688   INTERFACE ice_var_snwfra 
    8789      MODULE PROCEDURE ice_var_snwfra_1d, ice_var_snwfra_2d, ice_var_snwfra_3d 
     90   END INTERFACE 
     91 
     92   INTERFACE ice_var_snwblow 
     93      MODULE PROCEDURE ice_var_snwblow_1d, ice_var_snwblow_2d 
    8894   END INTERFACE 
    8995 
     
    10091015         pt_su(:,jl) = ptmsu(:) 
    10101016         ps_i (:,jl) = psmi (:) 
    1011          ps_i (:,jl) = psmi (:)          
    10121017      END DO 
    10131018      ! 
     
    10591064      !! 
    10601065      !!               2) Expand the filling to the cat jlmin-1 and jlmax+1 
    1061        !!                   by removing 25% ice area from jlmin and jlmax (resp.)  
     1066      !!                   by removing 25% ice area from jlmin and jlmax (resp.)  
    10621067      !!               
    10631068      !!               3) Expand the filling to the empty cat between jlmin and jlmax  
     
    12931298   !!------------------------------------------------------------------- 
    12941299   SUBROUTINE ice_var_snwfra_3d( ph_s, pa_s_fra ) 
    1295       !!------------------------------------------------------------------- 
    12961300      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   ph_s        ! snow thickness 
    12971301      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(:,:,:) ) 
     1302      IF    ( nn_snwfra == 0 ) THEN   ! basic 0 or 1 snow cover 
     1303         WHERE( ph_s > 0._wp ) ; pa_s_fra = 1._wp 
     1304         ELSEWHERE             ; pa_s_fra = 0._wp 
     1305         END WHERE 
     1306      ELSEIF( nn_snwfra == 1 ) THEN   ! snow cover depends on hsnow (met-office style) 
     1307         pa_s_fra = 1._wp - EXP( -0.2_wp * rhos * ph_s ) 
     1308      ELSEIF( nn_snwfra == 2 ) THEN   ! snow cover depends on hsnow (cice style) 
     1309         pa_s_fra = ph_s / ( ph_s + 0.02_wp ) 
     1310      ENDIF 
    13001311   END SUBROUTINE ice_var_snwfra_3d 
    13011312 
    13021313   SUBROUTINE ice_var_snwfra_2d( ph_s, pa_s_fra ) 
    1303       !!------------------------------------------------------------------- 
    13041314      REAL(wp), DIMENSION(:,:), INTENT(in   ) ::   ph_s        ! snow thickness 
    13051315      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(:,:) ) 
     1316      IF    ( nn_snwfra == 0 ) THEN   ! basic 0 or 1 snow cover 
     1317         WHERE( ph_s > 0._wp ) ; pa_s_fra = 1._wp 
     1318         ELSEWHERE             ; pa_s_fra = 0._wp 
     1319         END WHERE 
     1320      ELSEIF( nn_snwfra == 1 ) THEN   ! snow cover depends on hsnow (met-office style) 
     1321         pa_s_fra = 1._wp - EXP( -0.2_wp * rhos * ph_s ) 
     1322      ELSEIF( nn_snwfra == 2 ) THEN   ! snow cover depends on hsnow (cice style) 
     1323         pa_s_fra = ph_s / ( ph_s + 0.02_wp ) 
     1324      ENDIF 
    13081325   END SUBROUTINE ice_var_snwfra_2d 
    13091326 
    13101327   SUBROUTINE ice_var_snwfra_1d( ph_s, pa_s_fra ) 
    1311       !!------------------------------------------------------------------- 
    13121328      REAL(wp), DIMENSION(:), INTENT(in   ) ::   ph_s        ! snow thickness 
    13131329      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(:) ) 
     1330      IF    ( nn_snwfra == 0 ) THEN   ! basic 0 or 1 snow cover 
     1331         WHERE( ph_s > 0._wp ) ; pa_s_fra = 1._wp 
     1332         ELSEWHERE             ; pa_s_fra = 0._wp 
     1333         END WHERE 
     1334      ELSEIF( nn_snwfra == 1 ) THEN   ! snow cover depends on hsnow (met-office style) 
     1335         pa_s_fra = 1._wp - EXP( -0.2_wp * rhos * ph_s ) 
     1336      ELSEIF( nn_snwfra == 2 ) THEN   ! snow cover depends on hsnow (cice style) 
     1337         pa_s_fra = ph_s / ( ph_s + 0.02_wp ) 
     1338      ENDIF 
    13161339   END SUBROUTINE ice_var_snwfra_1d 
    13171340    
     1341   !!-------------------------------------------------------------------------- 
     1342   !! INTERFACE ice_var_snwblow 
     1343   !! 
     1344   !! ** Purpose :   Compute distribution of precip over the ice 
     1345   !! 
     1346   !!                Snow accumulation in one thermodynamic time step 
     1347   !!                snowfall is partitionned between leads and ice. 
     1348   !!                If snow fall was uniform, a fraction (1-at_i) would fall into leads 
     1349   !!                but because of the winds, more snow falls on leads than on sea ice 
     1350   !!                and a greater fraction (1-at_i)^beta of the total mass of snow  
     1351   !!                (beta < 1) falls in leads. 
     1352   !!                In reality, beta depends on wind speed,  
     1353   !!                and should decrease with increasing wind speed but here, it is  
     1354   !!                considered as a constant. an average value is 0.66 
     1355   !!-------------------------------------------------------------------------- 
     1356!!gm  I think it can be usefull to set this as a FUNCTION, not a SUBROUTINE.... 
     1357   SUBROUTINE ice_var_snwblow_2d( pin, pout ) 
     1358      REAL(wp), DIMENSION(:,:), INTENT(in   ) :: pin   ! previous fraction lead ( 1. - a_i_b ) 
     1359      REAL(wp), DIMENSION(:,:), INTENT(inout) :: pout 
     1360      pout = ( 1._wp - ( pin )**rn_snwblow ) 
     1361   END SUBROUTINE ice_var_snwblow_2d 
     1362 
     1363   SUBROUTINE ice_var_snwblow_1d( pin, pout ) 
     1364      REAL(wp), DIMENSION(:), INTENT(in   ) :: pin 
     1365      REAL(wp), DIMENSION(:), INTENT(inout) :: pout 
     1366      pout = ( 1._wp - ( pin )**rn_snwblow ) 
     1367   END SUBROUTINE ice_var_snwblow_1d 
    13181368 
    13191369#else 
Note: See TracChangeset for help on using the changeset viewer.