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 9169 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icethd_pnd.F90 – NEMO

Ignore:
Timestamp:
2017-12-26T17:32:56+01:00 (7 years ago)
Author:
gm
Message:

dev_merge_2017: all SRC: finalize the removal of useless warning when reading namelist_cfg + remove all nn_closea + nn_msh replaced by a logical

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icethd_pnd.F90

    r9019 r9169  
    1212   !!   'key_lim3' :                                     ESIM sea-ice model 
    1313   !!---------------------------------------------------------------------- 
    14    !!   ice_thd_pnd_init      : some initialization and namelist read 
    15    !!   ice_thd_pnd           : main calling routine 
     14   !!   ice_thd_pnd_init : some initialization and namelist read 
     15   !!   ice_thd_pnd      : main calling routine 
    1616   !!---------------------------------------------------------------------- 
    1717   USE phycst         ! physical constants 
     
    3232   PUBLIC   ice_thd_pnd         ! routine called by icestp.F90 
    3333 
    34    INTEGER ::              nice_pnd   ! choice of the type of pond scheme 
    35    !                                               ! associated indices: 
     34   INTEGER ::              nice_pnd    ! choice of the type of pond scheme 
     35   !                                   ! associated indices: 
    3636   INTEGER, PARAMETER ::   np_pndNO  = 0   ! No pond scheme 
    3737   INTEGER, PARAMETER ::   np_pndCST = 1   ! Constant pond scheme 
     
    5454      !!                 
    5555      !! ** Method  :   brut force 
    56       !! 
    57       !! ** Action  : -  
    58       !!              -  
    59       !!------------------------------------------------------------------- 
    60  
     56      !!------------------------------------------------------------------- 
     57      ! 
    6158      SELECT CASE ( nice_pnd ) 
    62  
    63       CASE (np_pndCST) 
    64          !                             !-------------------------------! 
    65          CALL pnd_CST                  ! Constant melt ponds           ! 
    66          !                             !-------------------------------! 
    67       CASE (np_pndH12) 
    68          !                             !-------------------------------! 
    69          CALL pnd_H12                  ! Holland et al 2012 melt ponds ! 
    70          !                             !-------------------------------! 
     59      ! 
     60      CASE (np_pndCST)   ;   CALL pnd_CST    !==  Constant melt ponds  ==! 
     61         ! 
     62      CASE (np_pndH12)   ;   CALL pnd_H12    !==  Holland et al 2012 melt ponds  ==! 
     63         ! 
    7164      END SELECT 
    72  
     65      ! 
    7366   END SUBROUTINE ice_thd_pnd  
    7467 
     68 
    7569   SUBROUTINE pnd_CST  
    7670      !!------------------------------------------------------------------- 
    7771      !!                ***  ROUTINE pnd_CST  *** 
    7872      !! 
    79       !! ** Purpose    : Compute melt pond evolution 
    80       !! 
    81       !! ** Method     : Melt pond fraction and thickness are prescribed  
    82       !!                 to non-zero values when t_su = 0C 
     73      !! ** Purpose Compute melt pond evolution 
     74      !! 
     75      !! ** Method  Melt pond fraction and thickness are prescribed  
     76      !!              to non-zero values when t_su = 0C 
    8377      !! 
    8478      !! ** Tunable parameters : pond fraction (rn_apnd), pond depth (rn_hpnd) 
    8579      !!                 
    86       !! ** Note       : Coupling with such melt ponds is only radiative 
    87       !!                 Advection, ridging, rafting... are bypassed 
     80      !! ** Note   : Coupling with such melt ponds is only radiative 
     81      !!         Advection, ridging, rafting... are bypassed 
    8882      !! 
    8983      !! ** References : Bush, G.W., and Trump, D.J. (2017) 
    90       !!     
    9184      !!------------------------------------------------------------------- 
    9285      INTEGER  ::   ji        ! loop indices 
    9386      !!------------------------------------------------------------------- 
    9487      DO ji = 1, npti 
    95           
     88         ! 
    9689         IF( a_i_1d(ji) > 0._wp .AND. t_su_1d(ji) >= rt0 ) THEN 
    9790            a_ip_frac_1d(ji) = rn_apnd 
     
    10396            a_ip_1d(ji)      = 0._wp 
    10497         ENDIF 
    105           
     98         ! 
    10699      END DO 
    107        
     100      ! 
    108101   END SUBROUTINE pnd_CST 
     102 
    109103 
    110104   SUBROUTINE pnd_H12 
     
    130124      !! 
    131125      !! ** References : Holland, M. M. et al (J Clim 2012) 
    132       !!     
    133126      !!------------------------------------------------------------------- 
    134127      REAL(wp), PARAMETER ::   zrmin       = 0.15_wp  ! minimum fraction of available meltwater retained for melt ponding 
    135       REAL(wp), PARAMETER ::   zrmax       = 0.70_wp  ! maximum   ''           ''       ''        ''            '' 
     128      REAL(wp), PARAMETER ::   zrmax       = 0.70_wp  ! maximum     -           -         -         -            - 
    136129      REAL(wp), PARAMETER ::   zpnd_aspect = 0.8_wp   ! pond aspect ratio 
    137130      REAL(wp), PARAMETER ::   zTp         = -2._wp   ! reference temperature 
    138  
     131      ! 
    139132      REAL(wp) ::   zfr_mlt          ! fraction of available meltwater retained for melt ponding 
    140133      REAL(wp) ::   zdv_mlt          ! available meltwater for melt ponding 
     
    143136      REAL(wp) ::   z1_zpnd_aspect   ! inverse pond aspect ratio 
    144137      REAL(wp) ::   zfac, zdum 
    145  
     138      ! 
    146139      INTEGER  ::   ji   ! loop indices 
    147140      !!------------------------------------------------------------------- 
    148       z1_rhofw       = 1. / rhofw  
    149       z1_zpnd_aspect = 1. / zpnd_aspect 
     141      z1_rhofw       = 1._wp / rhofw  
     142      z1_zpnd_aspect = 1._wp / zpnd_aspect 
    150143      z1_Tp          = 1._wp / zTp  
    151144 
     
    162155            !                                                     !--------------------------------! 
    163156            v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji)   ! record pond volume at previous time step 
    164  
     157            ! 
    165158            ! available meltwater for melt ponding [m, >0] and fraction 
    166159            zdv_mlt = -( dh_i_surf(ji)*rhoic + dh_s_mlt(ji)*rhosn ) * z1_rhofw * a_i_1d(ji) 
    167160            zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji)  ! from CICE doc 
    168161            !zfr_mlt = zrmin + zrmax * a_i_1d(ji)             ! from Holland paper  
    169  
     162            ! 
    170163            !--- Pond gowth ---! 
    171164            ! v_ip should never be negative, otherwise code crashes 
    172165            ! MV: as far as I saw, UM5 can create very small negative v_ip values (not Prather) 
    173166            v_ip_1d(ji) = MAX( 0._wp, v_ip_1d(ji) + zfr_mlt * zdv_mlt ) 
    174  
     167            ! 
    175168            ! melt pond mass flux (<0) 
    176169            IF( ln_pnd_fwb .AND. zdv_mlt > 0._wp ) THEN 
    177170               zfac = zfr_mlt * zdv_mlt * rhofw * r1_rdtice 
    178171               wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 
    179  
     172               ! 
    180173               ! adjust ice/snow melting flux to balance melt pond flux (>0) 
    181174               zdum = zfac / ( wfx_snw_sum_1d(ji) + wfx_sum_1d(ji) ) 
     
    183176               wfx_sum_1d(ji)     = wfx_sum_1d(ji)     * (1._wp + zdum) 
    184177            ENDIF 
    185  
     178            ! 
    186179            !--- Pond contraction (due to refreezing) ---! 
    187180            v_ip_1d(ji) = v_ip_1d(ji) * EXP( 0.01_wp * MAX( zTp+rt0 - t_su_1d(ji), 0._wp ) * z1_Tp ) 
    188  
     181            ! 
    189182            ! Set new pond area and depth assuming linear relation between h_ip and a_ip_frac 
    190183            !    h_ip = zpnd_aspect * a_ip_frac = zpnd_aspect * a_ip/a_i 
     
    192185            a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 
    193186            h_ip_1d(ji)      = zpnd_aspect * a_ip_frac_1d(ji) 
    194  
     187            ! 
    195188         ENDIF 
    196189      END DO 
    197  
     190      ! 
    198191   END SUBROUTINE pnd_H12 
     192 
    199193 
    200194   SUBROUTINE ice_thd_pnd_init  
     
    210204      !! ** input   :   Namelist namthd_pnd   
    211205      !!------------------------------------------------------------------- 
    212       INTEGER  ::   ios, ioptio                 ! Local integer output status for namelist read 
     206      INTEGER  ::   ios, ioptio   ! Local integer 
     207      !! 
    213208      NAMELIST/namthd_pnd/  ln_pnd_H12, ln_pnd_fwb, ln_pnd_CST, rn_apnd, rn_hpnd, ln_pnd_alb 
    214209      !!------------------------------------------------------------------- 
    215  
     210      ! 
    216211      REWIND( numnam_ice_ref )              ! Namelist namthd_pnd  in reference namelist : Melt Ponds   
    217212      READ  ( numnam_ice_ref, namthd_pnd, IOSTAT = ios, ERR = 901) 
    218 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd_pnd  in reference namelist', lwp ) 
    219  
     213901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namthd_pnd  in reference namelist', lwp ) 
    220214      REWIND( numnam_ice_cfg )              ! Namelist namthd_pnd  in configuration namelist : Melt Ponds 
    221215      READ  ( numnam_ice_cfg, namthd_pnd, IOSTAT = ios, ERR = 902 ) 
    222 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd_pnd in configuration namelist', lwp ) 
     216902   IF( ios >  0 )  CALL ctl_nam ( ios , 'namthd_pnd in configuration namelist', lwp ) 
    223217      IF(lwm) WRITE ( numoni, namthd_pnd ) 
    224        
     218      ! 
    225219      IF(lwp) THEN                        ! control print 
    226220         WRITE(numout,*) 
     
    242236      IF( ln_pnd_H12 ) THEN   ;   ioptio = ioptio + 1   ;   nice_pnd = np_pndH12    ;   ENDIF 
    243237      IF( ioptio > 1 )   CALL ctl_stop( 'ice_thd_pnd_init: choose one and only one pond scheme (ln_pnd_H12 or ln_pnd_CST)' ) 
    244  
     238      ! 
    245239      SELECT CASE( nice_pnd ) 
    246240      CASE( np_pndNO )          
Note: See TracChangeset for help on using the changeset viewer.