Changeset 8085


Ignore:
Timestamp:
2017-05-29T16:58:42+02:00 (3 years ago)
Author:
vancop
Message:

More on melt ponds in LIM

Location:
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90

    r8061 r8085  
    8787      INTEGER    :: ji, jj, jk, jl             ! dummy loop indices 
    8888      REAL(wp)   :: ztmelts, zdh 
    89       INTEGER    :: i_hemis, i_fill, jl0   
    90       REAL(wp)   :: zarg, zV, zconv, zdv  
     89      INTEGER    :: i_hemis, i_fill, jl0 
     90      REAL(wp)   :: zarg, zV, zconv, zdv, z1_jpl  
    9191      REAL(wp), POINTER, DIMENSION(:,:)   :: zswitch    ! ice indicator 
    9292      REAL(wp), POINTER, DIMENSION(:,:)   :: zht_i_ini, zat_i_ini, zvt_i_ini            !data from namelist or nc file 
     
    378378         tn_ice (:,:,:) = t_su (:,:,:) 
    379379 
     380         ! MV MP 2016 
     381         ! Melt pond volume and fraction 
     382          
     383         z1_jpl =  1. / REAL(jpl) 
     384    
     385         SELECT CASE ( nn_pnd_scheme ) 
     386    
     387            CASE ( 0 )           !--- Prescribed melt ponds 
     388    
     389               DO jl = 1, jpl 
     390    
     391                  a_ip(:,:,jl) = rn_apnd * z1_jpl * zswitch(:,:) 
     392                  v_ip(:,:,jl) = 0.1 * zswitch(:,:) * a_ip(:,:,jl) 
     393    
     394               END DO 
     395    
     396            CASE ( 1, 2 )        !--- Prognostic melt ponds 
     397    
     398               DO jl = 1, jpl 
     399    
     400                  a_ip(:,:,jl) = 0.1 * zswitch(:,:) 
     401                  v_ip(:,:,jl) = 0.1 * zswitch(:,:) * a_ip(:,:,jl) 
     402    
     403               END DO 
     404    
     405         END SELECT 
     406    
     407         ! END MV MP 2016 
     408 
    380409      ELSE ! if ln_limini=false 
    381410         a_i  (:,:,:) = 0._wp 
     
    401430         END DO 
    402431 
     432         ! MV MP 2016 
     433         a_ip(:,:,:)      = 0._wp 
     434         v_ip(:,:,:)      = 0._wp 
     435         h_ip(:,:,:)      = 0._wp 
     436         a_ip_frac(:,:,:) = 0._wp 
     437         ! END MV MP 2016 
     438 
    403439      ENDIF ! ln_limini 
    404440       
     
    408444      END DO 
    409445 
    410       ! MV MP 2016 
    411  
    412       ! For now, we just assume that melt ponds are absent initially 
    413       ! We probably have to revise this and code it as for all other sea ice variables later on 
    414       ! 
    415       !-------------------------------------------------------------------- 
    416       ! X) Melt pond variables 
    417       !-------------------------------------------------------------------- 
    418       ! 
    419       !IF ( ln_pnd   ) THEN 
    420       SELECT CASE ( nn_pnd_scheme ) 
    421  
    422          z1_jpl =  1 / REAL(jpl) 
    423  
    424          CASE ( 0 )           !--- Prescribed melt ponds 
    425  
    426             DO jl = 1, jpl 
    427  
    428                a_ip(:,:,jl) = rn_apnd * z1_jpl * zswitch(:,:) 
    429                h_ip(:,:,jl) = 0.1 * zswitch(:,:) 
    430  
    431             END DO 
    432  
    433          CASE ( 1, 2 )        !--- Prognostic melt ponds 
    434  
    435             DO jl = 1, jpl 
    436  
    437                a_ip(:,:,jl) = 0.1 * zswitch(:,:) 
    438                h_ip(:,:,jl) = 0.1 * zswitch(:,:) 
    439  
    440             END DO 
    441  
    442       END SELECT 
    443  
    444       v_ip(:,:,:)      = a_ip(:,:,:)  * h_i_p(:,:,:) 
    445       a_ip_frac(:,:,:) = a_ip(:,:,:) / a_i(:,:,:) 
    446  
    447       ! END MV MP 2016 
    448  
    449446      !-------------------------------------------------------------------- 
    450447      ! 4) Global ice variables for output diagnostics                    |  
     
    491488 
    492489      ! MV MP 2016 
    493       IF ( nn_pnd_scheme > 1 ) THEN 
     490      IF ( nn_pnd_scheme >= 1 ) THEN 
    494491         sxap  (:,:,:) = 0._wp    ; sxvp  (:,:,:) = 0._wp  
    495492         syap  (:,:,:) = 0._wp    ; syvp  (:,:,:) = 0._wp  
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r8063 r8085  
    608608            esrdg (ij) = e_s  (ji,jj,1,jl1) * afrac(ij) 
    609609            !MV MP 2016 
    610             IF ( nn_pnd_scheme > 1 ) THEN 
     610            IF ( nn_pnd_scheme > 0 ) THEN 
    611611               vprdg(ij) = v_ip(ji,jj, jl1) * afrac(ij) 
    612612            ENDIF 
     
    620620            vsrft (ij) = v_s  (ji,jj,  jl1) * afrft(ij) 
    621621            !MV MP 2016 
    622             IF ( nn_pnd_scheme > 1 ) THEN 
     622            IF ( nn_pnd_scheme > 0 ) THEN 
    623623               vprft(ij) = v_ip(ji,jj,jl1) * afrft(ij) 
    624624            ENDIF 
     
    665665            !------------------------------------------             
    666666            !  Place part of the melt pond volume into the ocean.  
    667             IF ( ( nn_pnd_scheme > 0 ) .AND. ( ( nn_pnd_cpl == 1 ) .OR. ( nn_pnd_cpl == 3 ) ) ) 
     667            IF ( ( nn_pnd_scheme > 0 ) .AND. ( ( nn_pnd_cpl == 1 ) .OR. ( nn_pnd_cpl == 3 ) ) ) THEN 
    668668               wfx_pnd(ji,jj) = wfx_pnd(ji,jj) + ( rhofw * vprdg(ij) * ( 1._wp - rn_fpondrdg )   &  
    669669               &                                 + rhofw * vprft(ij) * ( 1._wp - rn_fpondrft ) ) * r1_rdtice  ! fresh water source for ocean 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limmp.F90

    r8063 r8085  
    101101         WRITE(numout,*)'    Activate melt ponds                                         ln_pnd        = ', ln_pnd 
    102102         WRITE(numout,*)'    Type of melt pond scheme =0 presc, =1 empirical = 2 topo    nn_pnd_scheme = ', nn_pnd_scheme 
    103          WRITE(numout,*)'    Type of melt pond coupling =0 pass., =1 full, =2 rad, 3=fw  nn_pnd_cpl    = ', nn_pnd_cp 
     103         WRITE(numout,*)'    Type of melt pond coupling =0 pass., =1 full, =2 rad, 3=fw  nn_pnd_cpl    = ', nn_pnd_cpl 
    104104         WRITE(numout,*)'    Prescribed pond fraction                                    rn_apnd       = ', rn_apnd 
     105      ENDIF 
     106 
     107      IF ( ln_pnd == .FALSE. ) THEN 
     108         WRITE(numout) ' Melt ponds are not activated ' 
     109         WRITE(numout) ' nn_pnd_scheme, nn_pnd_cpl and rn_apnd are set to zero ' 
     110         nn_pnd_scheme = 0 
     111         nn_pnd_cpl    = 0 
     112         rn_apnd       = 0._wp 
    105113      ENDIF 
    106114      ! 
     
    134142      SELECT CASE ( nn_pnd_scheme ) 
    135143 
    136           CASE (1) 
    137  
    138              CALL lim_mp_cesm ! empirical melt ponds 
    139  
    140           CASE (2) 
    141  
    142              CALL lim_mp_topo    (at_i, a_i,                                       & 
    143                        &          vt_i, v_i, v_s,            t_i, s_i, a_ip_frac,  & 
    144                        &          h_ip,     t_su) 
     144         CASE (1) 
     145 
     146            CALL lim_mp_cesm ! empirical melt ponds 
     147 
     148         CASE (2) 
     149 
     150            CALL lim_mp_topo    (at_i, a_i,                                       & 
     151                      &          vt_i, v_i, v_s,            t_i, s_i, a_ip_frac,  & 
     152                      &          h_ip,     t_su) 
    145153 
    146154      END SELECT 
     
    193201       REAL(wp)                            :: z1_rhofw          ! inverse freshwater density 
    194202       REAL(wp)                            :: z1_zpnd_aspect    ! inverse pond aspect ratio 
    195        REAL(wp)                            :: zvold             ! dummy pond volume 
     203       REAL(wp)                            :: zvpold            ! dummy pond volume 
    196204 
    197205       INTEGER                             :: ji, jj, jl, ij    ! loop indices 
     
    261269            ELSE                        !--- Update pond characteristics 
    262270 
    263                !--- Add retained melt water 
     271               !--- Add retained melt water to melt ponds 
    264272               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 
    265273 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r8063 r8085  
    526526      !!------------------------------------------------------------------- 
    527527      INTEGER  ::   ji, jj, jl, jk   ! dummy loop indices 
    528       REAL(wp) ::   zsal, zvi, zvs, zei, zes 
     528      REAL(wp) ::   zsal, zvi, zvs, zei, zes, zvp 
    529529      !!------------------------------------------------------------------- 
    530530      at_i (:,:) = 0._wp 
     
    566566               zvs  = v_s  (ji,jj,  jl) 
    567567               zes  = e_s  (ji,jj,1,jl) 
     568               zvp  = v_ip (ji,jj  ,jl) 
    568569               !----------------------------------------------------------------- 
    569570               ! Zap snow energy  
     
    582583               oa_i (ji,jj,jl) = oa_i (ji,jj,jl) * rswitch 
    583584               smv_i(ji,jj,jl) = smv_i(ji,jj,jl) * rswitch 
     585 
     586               ! MV MP 2016 
     587               a_ip (ji,jj,jl) = a_ip (ji,jj,jl) * rswitch 
     588               v_ip (ji,jj,jl) = v_ip (ji,jj,jl) * rswitch 
     589               wfx_res(ji,jj)  = wfx_res(ji,jj) - ( v_ip(ji,jj,jl)  - zvp  ) * rhofw * r1_rdtice 
     590               ! END MV MP 2016 
    584591 
    585592               ! update exchanges with ocean 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r8063 r8085  
    171171      CALL iom_put( "vfxice"     , wfx_ice * ztmp       )        ! total ice growth/melt  
    172172 
    173       IF ( nn_pnd_scheme >= 0 ) & 
     173      IF ( ln_pnd .AND. ( nn_pnd_scheme >= 0 ) ) & 
    174174         CALL iom_put( "vfxpnd"  , wfx_pnd * ztmp       )        ! melt pond water flux 
    175175 
     
    211211 
    212212      ! MV MP 2016 
    213       IF ( nn_pnd_scheme >= 0 ) THEN ! change once we are sure 
     213      IF ( ln_pnd ) THEN 
    214214         CALL iom_put( "iceamp"  , at_ip  * zswi        )   ! melt pond total fraction 
    215215         CALL iom_put( "icevmp"  , vt_ip  * zswi        )   ! melt pond total volume per unit area 
     
    235235 
    236236      ! MV MP 2016 
    237       IF ( nn_pnd_scheme >= 0 ) THEN ! change once we are sure that case = 0 works 
     237      IF ( ln_pnd .AND. ( nn_pnd_scheme >= 0 ) ) THEN 
    238238         IF ( iom_use( "iceamp_cat"  ) )  CALL iom_put( "iceamp_cat"     , a_ip   * zswi2   )       ! melt pond frac for categories 
    239239         IF ( iom_use( "icevmp_cat"  ) )  CALL iom_put( "icevmp_cat"     , v_ip   * zswi2   )       ! melt pond frac for categories 
     
    304304 
    305305      ! MV MP 2016 
    306       IF ( nn_pnd_scheme >= 0 ) THEN 
     306      IF ( ln_pnd .AND. ( nn_pnd_scheme >= 0 ) ) THEN 
    307307         CALL histdef( kid, "si_amp", "Melt pond fraction"      , "%"      ,   & 
    308308      &         jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
     
    357357 
    358358      ! MV MP 2016 
    359       IF ( nn_pnd_scheme >= 0 ) THEN 
     359      IF ( ln_pnd .AND. ( nn_pnd_scheme >= 0 ) ) THEN 
    360360         CALL histwrite( kid, "si_amp", kt, at_ip         , jpi*jpj, (/1/) ) 
    361361         CALL histwrite( kid, "si_vmp", kt, vt_ip         , jpi*jpj, (/1/) ) 
     
    370370      CALL histwrite( kid, "vfxbom", kt, wfx_bom        , jpi*jpj, (/1/) ) 
    371371      CALL histwrite( kid, "vfxsum", kt, wfx_sum        , jpi*jpj, (/1/) ) 
    372       IF ( nn_pnd_scheme >= 0 ) & 
     372      IF ( ln_pnd .AND. ( nn_pnd_scheme >= 0 ) ) & 
    373373         CALL histwrite( kid, "vfxpnd", kt, wfx_pnd     , jpi*jpj, (/1/) ) 
    374374 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r7325 r8085  
    263263 
    264264         ! MV MP 2016 
    265          IF ( ln_limMP)               CALL lim_mp( kt )         ! -- Melt ponds 
     265         IF ( ln_pnd )                CALL lim_mp( kt )         ! -- Melt ponds 
    266266         ! END MV MP 2016 
    267267 
Note: See TracChangeset for help on using the changeset viewer.