- Timestamp:
- 2017-12-26T17:32:56+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icethd_pnd.F90
r9019 r9169 12 12 !! 'key_lim3' : ESIM sea-ice model 13 13 !!---------------------------------------------------------------------- 14 !! ice_thd_pnd_init 15 !! ice_thd_pnd 14 !! ice_thd_pnd_init : some initialization and namelist read 15 !! ice_thd_pnd : main calling routine 16 16 !!---------------------------------------------------------------------- 17 17 USE phycst ! physical constants … … 32 32 PUBLIC ice_thd_pnd ! routine called by icestp.F90 33 33 34 INTEGER :: nice_pnd ! choice of the type of pond scheme35 ! 34 INTEGER :: nice_pnd ! choice of the type of pond scheme 35 ! ! associated indices: 36 36 INTEGER, PARAMETER :: np_pndNO = 0 ! No pond scheme 37 37 INTEGER, PARAMETER :: np_pndCST = 1 ! Constant pond scheme … … 54 54 !! 55 55 !! ** Method : brut force 56 !! 57 !! ** Action : - 58 !! - 59 !!------------------------------------------------------------------- 60 56 !!------------------------------------------------------------------- 57 ! 61 58 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 ! 71 64 END SELECT 72 65 ! 73 66 END SUBROUTINE ice_thd_pnd 74 67 68 75 69 SUBROUTINE pnd_CST 76 70 !!------------------------------------------------------------------- 77 71 !! *** ROUTINE pnd_CST *** 78 72 !! 79 !! ** Purpose :Compute melt pond evolution80 !! 81 !! ** Method :Melt pond fraction and thickness are prescribed82 !! 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 83 77 !! 84 78 !! ** Tunable parameters : pond fraction (rn_apnd), pond depth (rn_hpnd) 85 79 !! 86 !! ** Note 87 !! 80 !! ** Note : Coupling with such melt ponds is only radiative 81 !! Advection, ridging, rafting... are bypassed 88 82 !! 89 83 !! ** References : Bush, G.W., and Trump, D.J. (2017) 90 !!91 84 !!------------------------------------------------------------------- 92 85 INTEGER :: ji ! loop indices 93 86 !!------------------------------------------------------------------- 94 87 DO ji = 1, npti 95 88 ! 96 89 IF( a_i_1d(ji) > 0._wp .AND. t_su_1d(ji) >= rt0 ) THEN 97 90 a_ip_frac_1d(ji) = rn_apnd … … 103 96 a_ip_1d(ji) = 0._wp 104 97 ENDIF 105 98 ! 106 99 END DO 107 100 ! 108 101 END SUBROUTINE pnd_CST 102 109 103 110 104 SUBROUTINE pnd_H12 … … 130 124 !! 131 125 !! ** References : Holland, M. M. et al (J Clim 2012) 132 !!133 126 !!------------------------------------------------------------------- 134 127 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 - - - - - 136 129 REAL(wp), PARAMETER :: zpnd_aspect = 0.8_wp ! pond aspect ratio 137 130 REAL(wp), PARAMETER :: zTp = -2._wp ! reference temperature 138 131 ! 139 132 REAL(wp) :: zfr_mlt ! fraction of available meltwater retained for melt ponding 140 133 REAL(wp) :: zdv_mlt ! available meltwater for melt ponding … … 143 136 REAL(wp) :: z1_zpnd_aspect ! inverse pond aspect ratio 144 137 REAL(wp) :: zfac, zdum 145 138 ! 146 139 INTEGER :: ji ! loop indices 147 140 !!------------------------------------------------------------------- 148 z1_rhofw = 1. / rhofw149 z1_zpnd_aspect = 1. / zpnd_aspect141 z1_rhofw = 1._wp / rhofw 142 z1_zpnd_aspect = 1._wp / zpnd_aspect 150 143 z1_Tp = 1._wp / zTp 151 144 … … 162 155 ! !--------------------------------! 163 156 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) ! record pond volume at previous time step 164 157 ! 165 158 ! available meltwater for melt ponding [m, >0] and fraction 166 159 zdv_mlt = -( dh_i_surf(ji)*rhoic + dh_s_mlt(ji)*rhosn ) * z1_rhofw * a_i_1d(ji) 167 160 zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji) ! from CICE doc 168 161 !zfr_mlt = zrmin + zrmax * a_i_1d(ji) ! from Holland paper 169 162 ! 170 163 !--- Pond gowth ---! 171 164 ! v_ip should never be negative, otherwise code crashes 172 165 ! MV: as far as I saw, UM5 can create very small negative v_ip values (not Prather) 173 166 v_ip_1d(ji) = MAX( 0._wp, v_ip_1d(ji) + zfr_mlt * zdv_mlt ) 174 167 ! 175 168 ! melt pond mass flux (<0) 176 169 IF( ln_pnd_fwb .AND. zdv_mlt > 0._wp ) THEN 177 170 zfac = zfr_mlt * zdv_mlt * rhofw * r1_rdtice 178 171 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 179 172 ! 180 173 ! adjust ice/snow melting flux to balance melt pond flux (>0) 181 174 zdum = zfac / ( wfx_snw_sum_1d(ji) + wfx_sum_1d(ji) ) … … 183 176 wfx_sum_1d(ji) = wfx_sum_1d(ji) * (1._wp + zdum) 184 177 ENDIF 185 178 ! 186 179 !--- Pond contraction (due to refreezing) ---! 187 180 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 ! 189 182 ! Set new pond area and depth assuming linear relation between h_ip and a_ip_frac 190 183 ! h_ip = zpnd_aspect * a_ip_frac = zpnd_aspect * a_ip/a_i … … 192 185 a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 193 186 h_ip_1d(ji) = zpnd_aspect * a_ip_frac_1d(ji) 194 187 ! 195 188 ENDIF 196 189 END DO 197 190 ! 198 191 END SUBROUTINE pnd_H12 192 199 193 200 194 SUBROUTINE ice_thd_pnd_init … … 210 204 !! ** input : Namelist namthd_pnd 211 205 !!------------------------------------------------------------------- 212 INTEGER :: ios, ioptio ! Local integer output status for namelist read 206 INTEGER :: ios, ioptio ! Local integer 207 !! 213 208 NAMELIST/namthd_pnd/ ln_pnd_H12, ln_pnd_fwb, ln_pnd_CST, rn_apnd, rn_hpnd, ln_pnd_alb 214 209 !!------------------------------------------------------------------- 215 210 ! 216 211 REWIND( numnam_ice_ref ) ! Namelist namthd_pnd in reference namelist : Melt Ponds 217 212 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 213 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd_pnd in reference namelist', lwp ) 220 214 REWIND( numnam_ice_cfg ) ! Namelist namthd_pnd in configuration namelist : Melt Ponds 221 215 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 )216 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namthd_pnd in configuration namelist', lwp ) 223 217 IF(lwm) WRITE ( numoni, namthd_pnd ) 224 218 ! 225 219 IF(lwp) THEN ! control print 226 220 WRITE(numout,*) … … 242 236 IF( ln_pnd_H12 ) THEN ; ioptio = ioptio + 1 ; nice_pnd = np_pndH12 ; ENDIF 243 237 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 ! 245 239 SELECT CASE( nice_pnd ) 246 240 CASE( np_pndNO )
Note: See TracChangeset
for help on using the changeset viewer.