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

Ignore:
Timestamp:
2017-12-05T18:24:20+01:00 (6 years ago)
Author:
clem
Message:

make melt ponds from Holland2012 and associated freshwater flux conservative

File:
1 edited

Legend:

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

    r8882 r8906  
    125125      !!                 pond contraction: Vp = Vp * exp(0.01*MAX(Tp-Tsu,0)/Tp) 
    126126      !!                    with Tp = -2degC 
    127       !! 
     127      !!   
    128128      !! ** Tunable parameters : (no real expertise yet, ideas?) 
    129129      !!  
     
    136136      !!     
    137137      !!------------------------------------------------------------------- 
    138       REAL(wp), PARAMETER ::   zrmin  = 0.15_wp  ! minimum fraction of available meltwater retained for melt ponding 
    139       REAL(wp), PARAMETER ::   zrmax  = 0.70_wp  ! maximum   ''           ''       ''        ''            '' 
    140       REAL(wp), PARAMETER ::   zpnd_aspect = 0.8_wp ! pond aspect ratio 
    141       REAL(wp), PARAMETER ::   zTp = -2._wp !  
    142  
    143       REAL(wp) ::   zfr_mlt            ! fraction of available meltwater retained for melt ponding 
     138      REAL(wp), PARAMETER ::   zrmin       = 0.15_wp  ! minimum fraction of available meltwater retained for melt ponding 
     139      REAL(wp), PARAMETER ::   zrmax       = 0.70_wp  ! maximum   ''           ''       ''        ''            '' 
     140      REAL(wp), PARAMETER ::   zpnd_aspect = 0.8_wp   ! pond aspect ratio 
     141      REAL(wp), PARAMETER ::   zTp         = -2._wp   ! reference temperature 
     142 
     143      REAL(wp) ::   zfr_mlt          ! fraction of available meltwater retained for melt ponding 
    144144      REAL(wp) ::   zdv_mlt          ! available meltwater for melt ponding 
    145       REAL(wp) ::   z1_Tp        ! reference temperature 
    146       REAL(wp) ::   z1_rhofw          ! inverse freshwater density 
    147       REAL(wp) ::   z1_zpnd_aspect    ! inverse pond aspect ratio 
    148       REAL(wp) ::   zvpnd            ! dummy pond volume 
     145      REAL(wp) ::   z1_Tp            ! inverse reference temperature 
     146      REAL(wp) ::   z1_rhofw         ! inverse freshwater density 
     147      REAL(wp) ::   z1_zpnd_aspect   ! inverse pond aspect ratio 
    149148      REAL(wp) ::   zfac, zdum 
    150149 
    151       INTEGER  ::   ji        ! loop indices 
     150      INTEGER  ::   ji   ! loop indices 
    152151      !!------------------------------------------------------------------- 
    153152      z1_rhofw       = 1. / rhofw  
     
    159158         IF( h_i_1d(ji) < rn_himin) THEN                          ! Case ice thickness < rn_himin  ! 
    160159            !                                                     !--------------------------------! 
    161             !--- Remove ponds on thin ice and send water into the ocean 
    162             IF( ln_pnd_fwb ) THEN 
    163                wfx_pnd_1d(ji) = wfx_pnd_1d(ji) + h_ip_1d(ji) * a_ip_1d(ji) * rhofw * r1_rdtice 
    164             ENDIF 
     160            !--- Remove ponds on thin ice 
    165161            a_ip_1d(ji)      = 0._wp 
    166162            a_ip_frac_1d(ji) = 0._wp 
     
    170166            !                                                     !--------------------------------! 
    171167            v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji)   ! record pond volume at previous time step 
    172             zvpnd       = v_ip_1d(ji) 
    173168 
    174169            ! available meltwater for melt ponding [m, >0] and fraction 
    175170            zdv_mlt = -( dh_i_surf(ji)*rhoic + dh_s_mlt(ji)*rhosn ) * z1_rhofw * a_i_1d(ji) 
    176             zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji)  !!clem CICE doc 
    177 !!!            zfr_mlt = zrmin + zrmax * a_i_1d(ji)  !!clem Holland paper  
    178  
    179             !--- Pond gowth 
     171            zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji)  ! from CICE doc 
     172            !zfr_mlt = zrmin + zrmax * a_i_1d(ji)             ! from Holland paper  
     173 
     174            !--- Pond gowth ---! 
    180175            ! v_ip should never be negative, otherwise code crashes 
    181176            ! MV: as far as I saw, UM5 can create very small negative v_ip values (not Prather) 
    182177            v_ip_1d(ji) = MAX( 0._wp, v_ip_1d(ji) + zfr_mlt * zdv_mlt ) 
    183178 
     179            ! melt pond mass flux (<0) 
    184180            IF( ln_pnd_fwb .AND. zdv_mlt > 0._wp ) THEN 
    185                ! melt ponds mass flux (<0) 
    186181               zfac = zfr_mlt * zdv_mlt * rhofw * r1_rdtice 
    187182               wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 
    188183 
    189                ! adjust ice/snow melting (>0) to take into account ponding 
     184               ! adjust ice/snow melting flux to balance melt pond flux (>0) 
    190185               zdum = zfac / ( wfx_snw_sum_1d(ji) + wfx_sum_1d(ji) ) 
    191186               wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) * (1._wp + zdum) 
     
    193188            ENDIF 
    194189 
    195             !--- Pond contraction (due to refreezing) 
    196             v_ip_1d(ji)      = v_ip_1d(ji) * EXP( 0.01_wp * MAX( zTp+rt0 - t_su_1d(ji), 0._wp ) * z1_Tp ) 
    197  
    198             ! --- Set new pond area and depth assuming linear relation between h_ip and a_ip_frac 
    199             !        h_ip = zpnd_aspect * a_ip_frac = zpnd_aspect * a_ip/a_i 
     190            !--- Pond contraction (due to refreezing) ---! 
     191            v_ip_1d(ji) = v_ip_1d(ji) * EXP( 0.01_wp * MAX( zTp+rt0 - t_su_1d(ji), 0._wp ) * z1_Tp ) 
     192 
     193            ! Set new pond area and depth assuming linear relation between h_ip and a_ip_frac 
     194            !    h_ip = zpnd_aspect * a_ip_frac = zpnd_aspect * a_ip/a_i 
    200195            a_ip_1d(ji)      = SQRT( v_ip_1d(ji) * z1_zpnd_aspect * a_i_1d(ji) ) 
    201             !NB: the SQRT has been a recurring source of crash when v_ip or a_i tuns to be even only slightly negative 
    202196            a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 
    203197            h_ip_1d(ji)      = zpnd_aspect * a_ip_frac_1d(ji) 
    204  
    205             !! clem: there is no clever way to conserve mass here... 
    206              
    207 !            IF( ln_pnd_fwb ) THEN 
    208 !               ! melt ponds mass flux (>0 when ponds shrink) 
    209 !               zfac = ( v_ip_1d(ji) - zvpnd ) * rhofw * r1_rdtice 
    210 !               wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac!! 
    211 ! 
    212 !               ! adjust ice/snow 
    213 !               zfac = ( v_ip_1d(ji) - zvpnd ) * rhofw / ( a_i_1d(ji)*h_s_1d(ji)*rhosn + a_i_1d(ji)*h_i_1d(ji)*rhoic )! 
    214 ! 
    215 !               wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + h_s_1d(ji) * zfac * a_i_1d(ji) * rhosn * r1_rdtice 
    216 !               wfx_sum_1d(ji)     = wfx_sum_1d(ji)     + h_i_1d(ji) * zfac * a_i_1d(ji) * rhoic * r1_rdtice 
    217 !                
    218 !               !!h_s_1d(ji) = h_s_1d(ji) * ( 1._wp + zfac ) 
    219 !               !!h_i_1d(ji) = h_i_1d(ji) * ( 1._wp + zfac )! 
    220 ! 
    221 !            ENDIF 
    222198 
    223199         ENDIF 
Note: See TracChangeset for help on using the changeset viewer.