Changeset 8125


Ignore:
Timestamp:
2017-06-02T08:53:53+02:00 (3 years ago)
Author:
vancop
Message:

Melt pond podifications

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

Legend:

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

    r8099 r8125  
    283283   LOGICAL , PUBLIC ::   ln_pnd           !: activate ponds or not 
    284284   LOGICAL , PUBLIC ::   ln_pnd_rad       !: ponds radiatively active or not 
     285   LOGICAL , PUBLIC ::   ln_pnd_fw        !: ponds active wrt meltwater or not 
    285286   INTEGER , PUBLIC ::   nn_pnd_scheme    !: type of melt pond scheme:   =0 prescribed, =1 empirical, =2 topographic 
    286    INTEGER , PUBLIC ::   nn_pnd_cpl       !: type of melt pond coupling: =0 passive, =1 full, =2 radiation only, =3 freshwater only 
    287287   REAL(wp), PUBLIC ::   rn_apnd          !: prescribed pond fraction (0<rn_apnd<1), only if nn_pnd_scheme = 0 
    288288   REAL(wp), PUBLIC ::   rn_hpnd          !: prescribed pond depth    (0<rn_hpnd<1), only if nn_pnd_scheme = 0 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r8085 r8125  
    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 ) ) ) THEN 
     667            IF ( ( nn_pnd_scheme > 0 ) .AND. ln_pnd_fw ) 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

    r8106 r8125  
    8383      !!------------------------------------------------------------------- 
    8484      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    85       NAMELIST/namicemp/  ln_pnd, nn_pnd_scheme, nn_pnd_cpl, rn_apnd, rn_hpnd 
     85      NAMELIST/namicemp/  ln_pnd, ln_pnd_rad, ln_pnd_fw, nn_pnd_scheme, rn_apnd, rn_hpnd 
    8686      !!------------------------------------------------------------------- 
    8787 
     
    9595      IF(lwm) WRITE ( numoni, namicemp ) 
    9696       
    97       ! Shortcut for radiatively active melt ponds 
    98       ln_pnd_rad = ln_pnd .AND. ( ( nn_pnd_cpl == 1 ) .OR. ( nn_pnd_cpl == 2 ) ) 
    99  
    10097      IF(lwp) THEN                        ! control print 
    10198         WRITE(numout,*) 
    10299         WRITE(numout,*) 'lim_mp_init : ice parameters for melt ponds' 
    103100         WRITE(numout,*) '~~~~~~~~~~~~' 
    104          WRITE(numout,*)'    Activate melt ponds                                         ln_pnd        = ', ln_pnd 
    105          WRITE(numout,*)'    Type of melt pond scheme =0 presc, =1 empirical = 2 topo    nn_pnd_scheme = ', nn_pnd_scheme 
    106          WRITE(numout,*)'    Type of melt pond coupling =0 pass., =1 full, =2 rad, 3=fw  nn_pnd_cpl    = ', nn_pnd_cpl 
    107          WRITE(numout,*)'    Prescribed pond fraction                                    rn_apnd       = ', rn_apnd 
    108          WRITE(numout,*)'    Prescribed pond depth                                       rn_hpnd       = ', rn_hpnd 
    109          WRITE(numout,*)'    Melt ponds radiatively active                               ln_pnd_rad    = ', ln_pnd_rad 
     101         WRITE(numout,*) '   Active melt ponds                                           ln_pnd        = ', ln_pnd 
     102         WRITE(numout,*) '   Active melt ponds radiative coupling                        ln_pnd_rad    = ', ln_pnd_rad 
     103         WRITE(numout,*) '   Active melt ponds freshwater coupling                       ln_pnd_fw     = ', ln_pnd_fw 
     104         WRITE(numout,*) '   Type of melt pond scheme =0 presc, =1 empirical = 2 topo    nn_pnd_scheme = ', nn_pnd_scheme 
     105         WRITE(numout,*) '   Prescribed pond fraction                                    rn_apnd       = ', rn_apnd 
     106         WRITE(numout,*) '   Prescribed pond depth                                       rn_hpnd       = ', rn_hpnd 
    110107      ENDIF 
    111108 
     
    113110         WRITE(numout,*) 
    114111         WRITE(numout,*) ' Melt ponds are not activated ' 
    115          WRITE(numout,*) ' nn_pnd_scheme, nn_pnd_cpl, rn_apnd and rn_hpnd are set to zero ' 
     112         WRITE(numout,*) ' ln_pnd_rad and ln_pnd_fw set to .FALSE. ' 
     113         WRITE(numout,*) ' nn_pnd_scheme, rn_apnd, rn_hpnd set to zero ' 
     114         ln_pnd_rad    = .FALSE. 
     115         ln_pnd_fw     = .FALSE. 
    116116         nn_pnd_scheme = 0 
    117          nn_pnd_cpl    = 0 
    118117         rn_apnd       = 0._wp 
    119118         rn_hpnd       = 0._wp 
     119 
     120         IF(lwp) THEN                     ! control print 
     121            WRITE(numout,*) '    Active melt ponds radiative coupling                        ln_pnd_rad    = ', ln_pnd_rad 
     122            WRITE(numout,*) '    Active melt ponds freshwater coupling                       ln_pnd_fw     = ', ln_pnd_fw 
     123            WRITE(numout,*) '    Type of melt pond scheme =0 presc, =1 empirical = 2 topo    nn_pnd_scheme = ', nn_pnd_scheme 
     124            WRITE(numout,*) '    Prescribed pond fraction                                    rn_apnd       = ', rn_apnd 
     125            WRITE(numout,*) '    Prescribed pond depth                                       rn_hpnd       = ', rn_hpnd 
     126         ENDIF 
     127      ENDIF 
     128 
     129      IF ( ln_pnd .AND. ( nn_pnd_scheme == 2 ) .AND. ( jpl == 1 ) ) THEN 
     130         WRITE(numout,*) ' Topographic melt ponds are incompatible with jpl = 1 ' 
     131         WRITE(numout,*) ' Run aborted ' 
     132         CALL ctl_stop( 'STOP', 'lim_mp_init: uncompatible options, reset namelist_ice_ref ' ) 
    120133      ENDIF 
    121134 
     
    314327               h_ip(ji,jj,jl)      = 0._wp 
    315328 
    316                IF ( ( nn_pnd_cpl == 1 ) .OR. ( nn_pnd_cpl == 3 ) ) & !--- Give freshwater to the ocean 
     329               IF ( ln_pnd_fw ) & !--- Give freshwater to the ocean 
    317330                  wfx_pnd(ji,jj)   = wfx_pnd(ji,jj) + v_ip(ji,jj,jl)  
    318331 
     
    332345               !--- Dump meltwater due to refreezing ( of course this is wrong 
    333346               !--- but this parameterization is too simple ) 
    334                IF ( ( nn_pnd_cpl == 1 ) .OR. ( nn_pnd_cpl == 3 ) ) THEN 
    335  
     347               IF ( ln_pnd_fw ) & 
    336348                  wfx_pnd(ji,jj)   = wfx_pnd(ji,jj) + rhofw * ( v_ip(ji,jj,jl) - zvpold ) * r1_rdtice 
    337  
    338                ENDIF 
    339349 
    340350               a_ip_frac(ji,jj,jl) = MIN( 1._wp , SQRT( v_ip(ji,jj,jl) * z1_zpnd_aspect / a_i(ji,jj,jl) ) ) 
     
    359369       !--- Remove retained meltwater from surface fluxes  
    360370 
    361        IF ( ( nn_pnd_cpl .EQ. 1 ) .OR. ( nn_pnd_cpl .EQ. 3 ) ) THEN 
     371       IF ( ln_pnd_fw ) THEN 
    362372 
    363373           wfx_snw(:,:) = wfx_snw(:,:) *  ( 1. - zrmin - ( zrmax - zrmin ) * at_i(:,:) ) 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90

    r8106 r8125  
    106106      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zafrac_snw                ! relative snow fraction 
    107107      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zafrac_ice                ! relative ice fraction 
     108      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zafrac_pnd                ! relative ice fraction (effective) 
    108109      !! 
    109110      !!--------------------------------------------------------------------- 
     
    117118      CALL wrk_alloc( jpi,jpj,ijpl, zalb, zalb_it ) 
    118119      CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zalb_ice, zalb_snw ) 
    119       CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice ) 
     120      CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice, zafrac_pnd ) 
    120121 
    121122      IF( albd_init == 0 )   CALL albedo_init      ! initialization  
     
    281282  
    282283      ! MV: I propose this formulation that is more elegant, and more easy to expand towards 
    283       !     varying pond and snow fraction 
    284   
     284      !     varying pond and snow fraction. 
     285      !     Formulation 1 has issues to handle ponds and snow together that 
     286      !     can't easily be fixed. This one handles it better, I believe. 
     287 
    285288          !----------------------------------------- 
    286289          ! Snow, bare ice and ponded ice fractions  
    287290          !----------------------------------------- 
    288291          ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 
    289   
     292 
     293          !--- Effective pond fraction (for now, we prevent melt ponds and snow at the same time) 
     294          zafrac_pnd = 0._wp 
     295          IF ( ld_pnd ) THEN   
     296             WHERE( ph_snw == 0._wp ) ;  zafrac_pnd = pafrac_pnd ;  END WHERE  ! Snow fully "shades" melt ponds 
     297          ENDIF          
     298 
    290299          !--- Specific snow fraction (for now, prescribed) 
    291300          WHERE     ( ph_snw > 0._wp     ) ;  zafrac_snw = 1. 
     
    294303  
    295304          !--- Specific ice fraction  
    296           zafrac_ice = 1. - zafrac_snw - pafrac_pnd 
    297 !          WHERE     ( ph_ice > 1.0e-6_wp ) ;  zafrac_ice = 1. - zafrac_snw - pafrac_pnd 
    298 !         ELSE WHERE                       ;  zafrac_ice = 0. 
    299 !         ENDWHERE 
     305          zafrac_ice = 1. - zafrac_snw - zafrac_pnd 
    300306  
    301307          !-------------------------------------------------- 
     
    324330 
    325331          ! Surface albedo is weighted mean of snow, ponds and bare ice contributions 
    326           pa_ice_os = zafrac_snw * zalb_snw  +  pafrac_pnd * zalb_pnd  +  zafrac_ice * zalb_ice 
     332          pa_ice_os = zafrac_snw * zalb_snw  +  zafrac_pnd * zalb_pnd  +  zafrac_ice * zalb_ice 
    327333           
    328334          pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 
     
    332338      CALL wrk_dealloc( jpi,jpj,ijpl, zalb, zalb_it ) 
    333339      CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zalb_ice, zalb_snw ) 
    334       CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice ) 
     340      CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice, zafrac_pnd ) 
    335341      ! 
    336342   END SUBROUTINE albedo_ice 
Note: See TracChangeset for help on using the changeset viewer.