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 8142 – NEMO

Changeset 8142


Ignore:
Timestamp:
2017-06-06T09:39:43+02:00 (7 years ago)
Author:
vancop
Message:

Melt pond interfaces practically operational

Location:
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref

    r8065 r8142  
    4646!------------------------------------------------------------------------------ 
    4747                  ! -- limistate -- ! 
    48    ln_limini      = .false.         !  activate ice initialization (T) or not (F) 
     48   ln_limini      = .true.          !  activate ice initialization (T) or not (F) 
    4949   ln_limini_file = .false.         !  netcdf file provided for initialization (T) or not (F) 
    5050   rn_thres_sst   =  0.5            !  maximum water temperature with initial ice (degC) 
     
    169169!------------------------------------------------------------------------------ 
    170170                 ! -- limmp      -- ! 
    171    ln_pnd         = .true.          !  activate melt ponds 
    172    nn_pnd_scheme  = 1               !  type of melt pond scheme:   =0 prescribed ( Tsu>0 ), =1 empirical, =2 topographic 
    173    nn_pnd_cpl     = 3               !  type of melt pond coupling: =0 passive, =1 full, =2 radiation only, =3 freshwater only 
    174    rn_apnd        = 0.0             !  prescribed pond fraction (0<rn_apnd<1), only if nn_pnd_scheme = 0 
     171   ln_pnd         = .false.         !  active melt ponds 
     172   ln_pnd_rad     = .false.         !  active melt ponds radiative coupling 
     173   ln_pnd_fw      = .false.         !  active melt ponds freshwater coupling 
     174   nn_pnd_scheme  = 0               !  type of melt pond scheme  : =0 prescribed ( Tsu=0 ), =1 empirical, =2 topographic 
     175   rn_apnd        = 0.2             !  prescribed pond fraction, at Tsu=0  : (0<rn_apnd<1, nn_pnd_scheme = 0) 
     176   rn_hpnd        = 0.05            !  prescribed pond depth, at Tsu=0     : (0<rn_apnd<1, nn_pnd_scheme = 0) 
    175177/ 
    176178!------------------------------------------------------------------------------ 
     
    188190   rn_por_rdg     =   0.3           !     (ln_ridging = T) porosity of newly ridged ice (Lepparanta et al., 1995) 
    189191   rn_fsnowrdg    =   0.5           !     (ln_ridging = T) snow volume fraction that survives in ridging 
     192   rn_fpondrdg    =   1.0           !     (ln_ridging = T) pond fraction that survives in ridging (small a priori) 
    190193   ln_rafting     =   .true.        !  rafting activated (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO 
    191194   rn_hraft       =   0.75          !     (ln_rafting = T) threshold thickness for rafting (m) 
    192195   rn_craft       =   5.0           !     (ln_rafting = T) squeezing coefficient used in the rafting function 
    193196   rn_fsnowrft    =   0.5           !     (ln_rafting = T) snow volume fraction that survives in rafting 
     197   rn_fpondrft    =   1.0           !     (ln_rafting = T) pond fraction that survives in rafting (0.5 a priori) 
    194198/ 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/CONFIG/SHARED/namelist_ref

    r7159 r8142  
    2525!----------------------------------------------------------------------- 
    2626   nn_no       =       0   !  job number (no more used...) 
    27    cn_exp      =  "ORCA2"  !  experience name 
     27   cn_exp      =  "ORCA2"   !  experience name 
    2828   nn_it000    =       1   !  first time step 
    2929   nn_itend    =    5475   !  last  time step (std 5475) 
     
    506506&namsbc_alb    !   albedo parameters 
    507507!----------------------------------------------------------------------- 
    508    nn_ice_alb  =    0   !  parameterization of ice/snow albedo 
    509                         !     0: Shine & Henderson-Sellers (JGR 1985) 
    510                         !     1: "home made" based on Brandt et al. (J. Climate 2005) 
    511                         !                         and Grenfell & Perovich (JGR 2004) 
    512    rn_albice   =  0.53  !  albedo of bare puddled ice (values from 0.49 to 0.58) 
    513                         !     0.53 (default) => if nn_ice_alb=0 
    514                         !     0.50 (default) => if nn_ice_alb=1 
     508   nn_ice_alb   =    0   !  parameterization of ice/snow albedo 
     509                         !     0: Shine & Henderson-Sellers (JGR 1985), giving clear-sky albedo 
     510                         !     1: "home made" based on Brandt et al. (JClim 2005) and Grenfell & Perovich (JGR 2004), 
     511                         !        giving cloud-sky albedo 
     512                         !     2: "homme made", "1" rewritten, more naturally based on specific areas of ponds, snow & bare ice 
     513   rn_alb_sdry  =  0.85  !  dry snow albedo         : 0.80 (nn_ice_alb = 0); 0.85 (nn_ice_alb = 1/2); obs 0.85-0.87 (cloud-sky) 
     514   rn_alb_smlt  =  0.75  !  melting snow albedo     : 0.65 ( '' )          ; 0.75 ( '' )            ; obs 0.72-0.82 ( '' ) 
     515   rn_alb_idry  =  0.60  !  dry ice albedo          : 0.72 ( '' )          ; 0.60 ( '' )            ; obs 0.54-0.65 ( '' ) 
     516   rn_alb_imlt  =  0.50  !  bare puddled ice albedo : 0.53 ( '' )          ; 0.50 ( '' )            ; obs 0.49-0.58 ( '' ) -> used only if no ponds 
     517   rn_alb_dpnd  =  0.27  !  bare puddled ice albedo : 0.25 ( '' )          ; 0.27 ( '' )            ; obs 0.10-0.30 ( '' ) 
    515518/ 
    516519!----------------------------------------------------------------------- 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r8125 r8142  
    509509      ! MV MP 2016 
    510510      REAL(wp), POINTER, DIMENSION(:) ::   vprdg            ! pond volume of ridging ice 
     511      REAL(wp), POINTER, DIMENSION(:) ::   aprdg1           ! pond area of ridging ice 
     512      REAL(wp), POINTER, DIMENSION(:) ::   aprdg2           ! pond area of ridging ice 
    511513      ! END MV MP 2016 
    512514      REAL(wp), POINTER, DIMENSION(:) ::   dhr   , dhr2     ! hrmax - hrmin  &  hrmax^2 - hrmin^2 
     
    525527      ! MV MP 2016 
    526528      REAL(wp), POINTER, DIMENSION(:) ::   vprft            ! pond volume of rafting ice 
     529      REAL(wp), POINTER, DIMENSION(:) ::   aprft1           ! pond area of rafted ice 
     530      REAL(wp), POINTER, DIMENSION(:) ::   aprft2           ! pond area of new rafted ice 
    527531      ! END MV MP 2016 
    528532      REAL(wp), POINTER, DIMENSION(:) ::   esrft , smrft    ! snow energy & salinity of rafting ice 
     
    539543      ! MV MP 2016 
    540544      !CALL wrk_alloc( jpij,        afrac, ardg1, ardg2, vsrdg, esrdg, dhr, dhr2 ) 
    541       CALL wrk_alloc( jpij,        afrac, ardg1, ardg2, vsrdg, esrdg, vprdg, dhr, dhr2 ) 
     545      CALL wrk_alloc( jpij,        afrac, ardg1, ardg2, vsrdg, esrdg, vprdg, aprdg1, aprdg2, dhr, dhr2 ) 
    542546      ! END MV MP 2016 
    543547      CALL wrk_alloc( jpij,        vrdg1, vrdg2, vsw  , srdg1, srdg2, smsw, oirdg1, oirdg2 ) 
    544548      ! MV MP 2016 
    545549      !CALL wrk_alloc( jpij,        afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 
    546       CALL wrk_alloc( jpij,        afrft, arft1, arft2, virft, vsrft, esrft, vprft, smrft, oirft1, oirft2 ) 
     550      CALL wrk_alloc(  jpij,        afrft, arft1, arft2, virft, vsrft, esrft, aprft1, aprft2) 
     551      CALL wrk_alloc ( jpij,        vprft, smrft, oirft1, oirft2 ) 
    547552      ! END MV MP 2016 
    548553      CALL wrk_alloc( jpij,nlay_i, eirft, erdg1, erdg2, ersw ) 
     
    598603 
    599604            !-------------------------------------------------------------------------- 
    600             ! 3.4) Subtract area, volume, and energy from ridging  
     605            ! 3.4) Substract area, volume, and energy from ridging  
    601606            !     / rafting category n1. 
    602607            !-------------------------------------------------------------------------- 
     
    609614            !MV MP 2016 
    610615            IF ( nn_pnd_scheme > 0 ) THEN 
    611                vprdg(ij) = v_ip(ji,jj, jl1) * afrac(ij) 
     616               aprdg1(ij) = a_ip(ji,jj, jl1) * afrac(ij) 
     617               aprdg2(ij) = a_ip(ji,jj, jl1) * afrac(ij) * krdg(ji,jj,jl1) 
     618               vprdg(ij)  = v_ip(ji,jj, jl1) * afrac(ij) 
    612619            ENDIF 
    613620            ! END MV MP 2016 
     
    621628            !MV MP 2016 
    622629            IF ( nn_pnd_scheme > 0 ) THEN 
    623                vprft(ij) = v_ip(ji,jj,jl1) * afrft(ij) 
     630               aprft1(ij) = a_ip (ji,jj,  jl1) * afrft(ij) 
     631               aprft2(ij) = a_ip (ji,jj,  jl1) * afrft(ij) * kraft 
     632               vprft(ij)  = v_ip(ji,jj,jl1)    * afrft(ij) 
    624633            ENDIF 
    625634            ! END MV MP 2016 
     
    690699            IF ( nn_pnd_scheme > 0 ) THEN 
    691700               v_ip (ji,jj,jl1) = v_ip (ji,jj,jl1) - vprdg (ij) - vprft (ij) 
     701               a_ip (ji,jj,jl1) = a_ip (ji,jj,jl1) - aprdg1(ij) - aprft1(ij) 
    692702            ENDIF 
    693703            ! END MV MP 2016 
     
    758768               ! MV MP 2016 
    759769               IF ( nn_pnd_scheme > 0 ) THEN 
    760                   v_ip (ji,jj,jl2) = v_ip (ji,jj,jl2)  + ( vprdg (ij) * rn_fpondrdg * fvol(ij)  +  & 
    761                   &                                        vprft (ij) * rn_fpondrft * zswitch(ij) ) 
     770                  v_ip (ji,jj,jl2) = v_ip (ji,jj,jl2)  + ( vprdg (ij) * rn_fpondrdg * fvol(ij)  +   & 
     771                                                       &   vprft (ij) * rn_fpondrft * zswitch(ij) ) 
     772                  a_ip (ji,jj,jl2) = a_ip(ji,jj,jl2)   + ( aprdg2(ij) * rn_fpondrdg * farea +       &  
     773                                                       &   aprft2(ij) * rn_fpondrft * zswitch(ji) ) 
    762774               ENDIF 
    763775               ! END MV MP 2016 
     
    782794      ! MV MP 2016 
    783795      !CALL wrk_dealloc( jpij,        afrac, ardg1, ardg2, vsrdg, esrdg, dhr, dhr2 ) 
    784       CALL wrk_dealloc( jpij,        afrac, ardg1, ardg2, vsrdg, esrdg, vprdg, dhr, dhr2 ) 
     796      CALL wrk_dealloc( jpij,        afrac, ardg1, ardg2, vsrdg, esrdg, vprdg, aprdg1, aprdg2,  dhr, dhr2 ) 
    785797      ! END MV MP 2016 
    786798      CALL wrk_dealloc( jpij,        vrdg1, vrdg2, vsw  , srdg1, srdg2, smsw, oirdg1, oirdg2 ) 
    787799      ! MV MP 2016 
    788800      !CALL wrk_dealloc( jpij,        afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 
    789       CALL wrk_dealloc( jpij,        afrft, arft1, arft2, virft, vsrft, esrft, vprft, smrft, oirft1, oirft2 ) 
     801      CALL wrk_dealloc( jpij,        afrft, arft1, arft2, virft, vsrft, esrft, aprft1, aprft2, vprft ) 
     802      CALL wrk_dealloc( jpij,        smrft, oirft1, oirft2 ) 
    790803      CALL wrk_dealloc( jpij,nlay_i, eirft, erdg1, erdg2, ersw ) 
    791804      ! 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limmp.F90

    r8125 r8142  
    66   !! history :       ! Original code by Daniela Flocco and Adrian Turner 
    77   !!            1.0  ! 2012    (O. Lecomte) Adaptation for scientific tests (NEMO3.1) 
    8    !!            2.0  ! 2016    (O. Lecomte, C. Rousset, M. Vancoppenolle) Implementation in NEMO3.6 
     8   !!            2.0  ! 2017    (M. Vancoppenolle, O. Lecomte, C. Rousset) Implementation in NEMO3.6 
     9   !!                 ! NB: Only lim_mp_cstt and lim_mp_cesm work in this 
     10   !!                       version 
    911   !!---------------------------------------------------------------------- 
    1012#if defined key_lim3 
     
    137139    
    138140 
    139  
    140141   SUBROUTINE lim_mp( kt ) 
    141142      !!------------------------------------------------------------------- 
     
    153154      INTEGER  ::   ji, jj, jl     ! dummy loop indices 
    154155 
    155 !     REAL(wp), POINTER, DIMENSION(:,:) ::   zfsurf  ! surface heat flux(obsolete, should be droped) 
    156       ! 
    157156      !!------------------------------------------------------------------- 
    158  
    159       IF( nn_timing == 1 )  CALL timing_start('limthd') 
    160157 
    161158      IF( nn_timing == 1 )  CALL timing_start('lim_mp') 
     
    180177      END SELECT 
    181178 
    182       ! we should probably not aggregate here since we do it in lim_var_agg 
    183       ! before output, unless we need the total volume and faction else where 
    184  
    185       ! we should also make sure a_ip and v_ip are properly updated at the end 
    186       ! of the routine 
     179      IF( nn_timing == 1 )  CALL timing_stop('lim_mp') 
    187180 
    188181   END SUBROUTINE lim_mp  
     
    237230       !!                 surface is freezing. 
    238231       !! 
    239        !! ** Tunable parameters : (no expertise yet) 
     232       !! ** Tunable parameters : (no real expertise yet, ideas?) 
    240233       !!  
    241234       !! ** Note       : Stolen from CICE for quick test of the melt pond 
     
    272265       !!------------------------------------------------------------------- 
    273266 
    274        CALL wrk_alloc( jpi*jpj, indxi, indxj) 
    275        CALL wrk_alloc( jpi,jpj,     zwfx_mlw ) 
    276        CALL wrk_alloc( jpi,jpj,jpl, zrfrac   ) 
    277  
    278        z1_rhofw       = 1. / rhofw  
    279        z1_zpnd_aspect = 1. / zpnd_aspect 
    280        zTp            = -2.  
    281  
    282        !------------------------------------------------------------------ 
    283        ! Available melt water for melt ponding and corresponding fraction 
    284        !------------------------------------------------------------------ 
    285  
    286        zwfx_mlw(:,:) = wfx_sum(:,:) + wfx_snw(:,:)        ! available meltwater for melt ponding 
    287  
    288        zrfrac(:,:,:) = zrmin + ( zrmax - zrmin ) * a_i(:,:,:)   
    289  
    290        DO jl = 1, jpl    
    291  
    292           ! v_ip(:,:,jl) ! Initialize things 
    293           ! a_ip(:,:,jl) 
    294           ! volpn(:,:) = hpnd(:,:) * apnd(:,:) * aicen(:,:) 
    295  
    296           !------------------------------------------------------------------------------ 
    297           ! Identify grid cells where ponds should be updated (can probably be improved) 
    298           !------------------------------------------------------------------------------ 
    299  
    300           indxi(:) = 0 
    301           indxj(:) = 0 
    302           icells   = 0 
    303  
    304           DO jj = 1, jpj 
    305             DO ji = 1, jpi 
    306                IF ( a_i(ji,jj,jl) > epsi10 ) THEN 
    307                   icells = icells + 1 
    308                   indxi(icells) = ji 
    309                   indxj(icells) = jj 
    310                ENDIF 
    311             END DO                 ! ji 
    312          END DO                    ! jj 
    313  
    314          DO ij = 1, icells 
    315  
    316             ji = indxi(ij) 
    317             jj = indxj(ij) 
    318  
    319             zhi = v_i(ji,jj,jl) / a_i(ji,jj,jl) 
    320             zhs = v_s(ji,jj,jl) / a_i(ji,jj,jl) 
    321  
    322             IF ( zhi < rn_himin) THEN   !--- Remove ponds on thin ice if ice is too thin 
    323  
    324                a_ip(ji,jj,jl)      = 0._wp                               !--- Dump ponds 
    325                v_ip(ji,jj,jl)      = 0._wp 
    326                a_ip_frac(ji,jj,jl) = 0._wp 
    327                h_ip(ji,jj,jl)      = 0._wp 
    328  
    329                IF ( ln_pnd_fw ) & !--- Give freshwater to the ocean 
    330                   wfx_pnd(ji,jj)   = wfx_pnd(ji,jj) + v_ip(ji,jj,jl)  
    331  
    332  
    333             ELSE                        !--- Update pond characteristics 
    334  
    335                !--- Add retained melt water to melt ponds 
    336                v_ip(ji,jj,jl)      = v_ip(ji,jj,jl) + zrfrac(ji,jj,jl) * z1_rhofw * zwfx_mlw(ji,jj) * a_i(ji,jj,jl) * rdt_ice 
    337  
    338                !--- Shrink pond due to refreezing 
    339                zdTs                = MAX ( zTp - t_su(ji,jj,jl) + rt0 , 0. ) 
    340                 
    341                zvpold              = v_ip(ji,jj,jl) 
    342  
    343                v_ip(ji,jj,jl)      = v_ip(ji,jj,jl) * EXP( zrexp * zdTs / zTp ) 
    344  
    345                !--- Dump meltwater due to refreezing ( of course this is wrong 
    346                !--- but this parameterization is too simple ) 
    347                IF ( ln_pnd_fw ) & 
    348                   wfx_pnd(ji,jj)   = wfx_pnd(ji,jj) + rhofw * ( v_ip(ji,jj,jl) - zvpold ) * r1_rdtice 
    349  
    350                a_ip_frac(ji,jj,jl) = MIN( 1._wp , SQRT( v_ip(ji,jj,jl) * z1_zpnd_aspect / a_i(ji,jj,jl) ) ) 
    351  
    352                h_ip(ji,jj,jl)      = zpnd_aspect * a_ip_frac(ji,jj,jl) 
    353  
    354                a_ip(ji,jj,jl)      = a_ip_frac(ji,jj,jl) * a_i(ji,jj,jl) 
    355  
    356             !----------------------------------------------------------- 
    357             ! Limit pond depth 
    358             !----------------------------------------------------------- 
    359             ! hpondn = min(hpondn, dpthhi*hi) 
    360  
    361             !--- Give freshwater to the ocean ? 
    362  
    363             ENDIF 
    364  
    365           END DO 
    366  
    367        END DO ! jpl 
    368  
    369        !--- Remove retained meltwater from surface fluxes  
    370  
    371        IF ( ln_pnd_fw ) THEN 
    372  
    373            wfx_snw(:,:) = wfx_snw(:,:) *  ( 1. - zrmin - ( zrmax - zrmin ) * at_i(:,:) ) 
    374  
    375            wfx_sum(:,:) = wfx_sum(:,:) *  ( 1. - zrmin - ( zrmax - zrmin ) * at_i(:,:) ) 
    376  
    377        ENDIF 
     267        CALL wrk_alloc( jpi*jpj, indxi, indxj) 
     268        CALL wrk_alloc( jpi,jpj,     zwfx_mlw ) 
     269        CALL wrk_alloc( jpi,jpj,jpl, zrfrac   ) 
     270 
     271        z1_rhofw       = 1. / rhofw  
     272        z1_zpnd_aspect = 1. / zpnd_aspect 
     273        zTp            = -2.  
     274 
     275        a_ip_frac(:,:,:) = 0._wp 
     276        h_ip     (:,:,:) = 0._wp 
     277  
     278        !------------------------------------------------------------------ 
     279        ! Available melt water for melt ponding and corresponding fraction 
     280        !------------------------------------------------------------------ 
     281  
     282        zwfx_mlw(:,:) = MAX( wfx_sum(:,:) + wfx_snw(:,:), 0._wp )        ! available meltwater for melt ponding 
     283 
     284                ! NB: zwfx_mlw can be slightly negative for very small values (why?) 
     285                ! This can in some occasions give negative 
     286                ! v_ip in the first category, which then gives crazy pond 
     287                ! fractions and crashes the code as soon as the melt-pond 
     288                ! radiative coupling is activated 
     289                ! if we understand and remove why wfx_sum or wfx_snw could be 
     290                ! negative, then, we can remove the MAX 
     291  
     292        zrfrac(:,:,:) = zrmin + ( zrmax - zrmin ) * a_i(:,:,:)   
     293  
     294        DO jl = 1, jpl    
     295 
     296           !------------------------------------------------------------------------------ 
     297           ! Identify grid cells where ponds should be updated (can probably be improved) 
     298           !------------------------------------------------------------------------------ 
     299  
     300           indxi(:) = 0 
     301           indxj(:) = 0 
     302           icells   = 0 
     303  
     304           DO jj = 1, jpj 
     305             DO ji = 1, jpi 
     306                IF ( a_i(ji,jj,jl) > epsi10 ) THEN 
     307                   icells = icells + 1 
     308                   indxi(icells) = ji 
     309                   indxj(icells) = jj 
     310                ENDIF 
     311             END DO                 ! ji 
     312          END DO                    ! jj 
     313  
     314          DO ij = 1, icells 
     315  
     316             ji = indxi(ij) 
     317             jj = indxj(ij) 
     318  
     319             zhi = v_i(ji,jj,jl) / a_i(ji,jj,jl) 
     320             zhs = v_s(ji,jj,jl) / a_i(ji,jj,jl) 
     321  
     322             IF ( zhi < rn_himin) THEN   !--- Remove ponds on thin ice if ice is too thin 
     323  
     324                a_ip(ji,jj,jl)      = 0._wp                               !--- Dump ponds 
     325                v_ip(ji,jj,jl)      = 0._wp 
     326                a_ip_frac(ji,jj,jl) = 0._wp 
     327                h_ip(ji,jj,jl)      = 0._wp 
     328  
     329                IF ( ln_pnd_fw ) & !--- Give freshwater to the ocean 
     330                   wfx_pnd(ji,jj)   = wfx_pnd(ji,jj) + v_ip(ji,jj,jl)  
     331  
     332  
     333             ELSE                        !--- Update pond characteristics 
     334  
     335                !--- Add retained melt water to melt ponds 
     336                ! v_ip should never be positive, otherwise code crashes 
     337                ! MV: as far as I saw, UM5 can create very small negative v_ip values 
     338                ! hence I added the max, which was not required with Prather (1 yr run) 
     339                v_ip(ji,jj,jl)      = MAX( v_ip(ji,jj,jl), 0._wp ) + zrfrac(ji,jj,jl) * z1_rhofw * zwfx_mlw(ji,jj) * a_i(ji,jj,jl) * rdt_ice 
     340  
     341                !--- Shrink pond due to refreezing 
     342                zdTs                = MAX ( zTp - t_su(ji,jj,jl) + rt0 , 0. ) 
     343                 
     344                zvpold              = v_ip(ji,jj,jl) 
     345  
     346                v_ip(ji,jj,jl)      = v_ip(ji,jj,jl) * EXP( zrexp * zdTs / zTp ) 
     347  
     348                !--- Dump meltwater due to refreezing ( of course this is wrong 
     349                !--- but this parameterization is too simple ) 
     350                IF ( ln_pnd_fw ) & 
     351                   wfx_pnd(ji,jj)   = wfx_pnd(ji,jj) + rhofw * ( v_ip(ji,jj,jl) - zvpold ) * r1_rdtice 
     352  
     353                a_ip_frac(ji,jj,jl) = MIN( 1._wp , SQRT( v_ip(ji,jj,jl) * z1_zpnd_aspect / a_i(ji,jj,jl) ) ) 
     354  
     355                h_ip(ji,jj,jl)      = zpnd_aspect * a_ip_frac(ji,jj,jl) 
     356  
     357                a_ip(ji,jj,jl)      = a_ip_frac(ji,jj,jl) * a_i(ji,jj,jl) 
     358  
     359             !----------------------------------------------------------- 
     360             ! Limit pond depth 
     361             !----------------------------------------------------------- 
     362             ! The original version has pond depth limitation, which I did not 
     363             ! keep here. Maybe we need it later on 
     364             ! 
     365              
     366             ENDIF 
     367  
     368           END DO 
     369  
     370        END DO ! jpl 
     371  
     372        !--- Remove retained meltwater from surface fluxes  
     373  
     374        IF ( ln_pnd_fw ) THEN 
     375  
     376            wfx_snw(:,:) = wfx_snw(:,:) *  ( 1. - zrmin - ( zrmax - zrmin ) * at_i(:,:) ) 
     377  
     378            wfx_sum(:,:) = wfx_sum(:,:) *  ( 1. - zrmin - ( zrmax - zrmin ) * at_i(:,:) ) 
     379  
     380        ENDIF 
     381 
     382       CALL wrk_dealloc( jpi*jpj, indxi, indxj) 
     383       CALL wrk_dealloc( jpi,jpj,     zwfx_mlw ) 
     384       CALL wrk_dealloc( jpi,jpj,jpl, zrfrac   ) 
    378385 
    379386   END SUBROUTINE lim_mp_cesm 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r8106 r8142  
    124124      ELSEWHERE                       ;  zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) / at_i_b 
    125125      END WHERE 
    126       IF( iom_use('alb_ice' ) )  CALL iom_put( "alb_ice"  , zalb(:,:) )           ! ice albedo output 
     126      IF( iom_use('alb_ice' ) )         CALL iom_put( "alb_ice"  , zalb(:,:) )           ! ice albedo output 
    127127 
    128128      zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) + 0.066_wp * ( 1._wp - at_i_b )       
    129       IF( iom_use('albedo'  ) )  CALL iom_put( "albedo"  , zalb(:,:) )           ! ice albedo output 
     129      IF( iom_use('albedo'  ) )        CALL iom_put( "albedo"  , zalb(:,:) )           ! surface albedo output 
    130130 
    131131      CALL wrk_dealloc( jpi,jpj, zalb )     
     
    174174            wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj)   & 
    175175                           + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) + wfx_lam(ji,jj)  
     176 
     177            IF ( ln_pnd_fw ) & 
     178               wfx_ice(ji,jj) = wfx_ice(ji,jj) + wfx_pnd(ji,jj) 
    176179 
    177180            ! mass flux at the ocean/ice interface 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r8098 r8142  
    566566               zvs  = v_s  (ji,jj,  jl) 
    567567               zes  = e_s  (ji,jj,1,jl) 
    568                IF ( ln_pnd ) zvp  = v_ip (ji,jj  ,jl) 
     568               IF ( ( nn_pnd_scheme > 0 ) .AND. ln_pnd_fw )  zvp  = v_ip (ji,jj  ,jl) 
    569569               !----------------------------------------------------------------- 
    570570               ! Zap snow energy  
     
    588588                  a_ip (ji,jj,jl) = a_ip (ji,jj,jl) * rswitch 
    589589                  v_ip (ji,jj,jl) = v_ip (ji,jj,jl) * rswitch 
    590                   wfx_res(ji,jj)  = wfx_res(ji,jj) - ( v_ip(ji,jj,jl)  - zvp  ) * rhofw * r1_rdtice 
     590                  IF ( ln_pnd_fw )   wfx_res(ji,jj)  = wfx_res(ji,jj) - ( v_ip(ji,jj,jl)  - zvp  ) * rhofw * r1_rdtice 
    591591               ENDIF 
    592592               ! END MV MP 2016 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r8098 r8142  
    236236      ! MV MP 2016 
    237237      IF ( ln_pnd ) THEN 
    238          IF ( iom_use( "iceamp_cat"  ) )  CALL iom_put( "iceamp_cat"     , a_ip   * zswi2   )       ! melt pond frac for categories 
    239          IF ( iom_use( "icevmp_cat"  ) )  CALL iom_put( "icevmp_cat"     , v_ip   * zswi2   )       ! melt pond frac for categories 
     238         IF ( iom_use( "iceamp_cat"  ) )  CALL iom_put( "iceamp_cat"     , a_ip       * zswi2   )       ! melt pond frac for categories 
     239         IF ( iom_use( "icevmp_cat"  ) )  CALL iom_put( "icevmp_cat"     , v_ip       * zswi2   )       ! melt pond frac for categories 
     240         IF ( iom_use( "icehmp_cat"  ) )  CALL iom_put( "icehmp_cat"     , h_ip       * zswi2   )       ! melt pond frac for categories 
     241         IF ( iom_use( "iceafp_cat"  ) )  CALL iom_put( "iceafp_cat"     , a_ip_frac  * zswi2   )       ! melt pond frac for categories 
    240242      ENDIF 
    241243      ! END MV MP 2016 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90

    r8125 r8142  
    110110      !!--------------------------------------------------------------------- 
    111111 
    112       WRITE(numout,*) ' albedo_ice ' 
    113       WRITE(numout,*) ' ld_pnd     : ', ld_pnd 
    114       WRITE(numout,*) ' nn_ice_alb : ', nn_ice_alb 
    115  
    116112      ijpl = SIZE( pt_ice, 3 )                     ! number of ice categories 
    117113       
     
    326322 
    327323          ! Depth-dependent ponded ice albedo 
    328           zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
    329           zalb_pnd  = ralb_dp - ( ralb_dp - zalb_ice ) * EXP( - ph_pnd / zhref_pnd )  
     324          IF ( ld_pnd ) THEN 
     325             zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
     326             zalb_pnd  = ralb_dp - ( ralb_dp - zalb_ice ) * EXP( - ph_pnd / zhref_pnd )  
     327          ELSE 
     328             zalb_pnd  = ralb_dp 
     329          ENDIF 
    330330 
    331331          ! Surface albedo is weighted mean of snow, ponds and bare ice contributions 
Note: See TracChangeset for help on using the changeset viewer.