- Timestamp:
- 2020-02-24T18:04:40+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/icethd_pnd.F90
r12439 r12449 39 39 40 40 REAL(wp), PUBLIC, PARAMETER :: a_pnd_avail = 0.7_wp ! Fraction of sea ice available for melt ponding 41 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_max = 0.015 ! pond lid thickness above which the ponds disappear from the albedo calculation 42 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_min = 0.005 ! pond lid thickness below which the full pond area is used in the albedo calculation 43 44 REAL(wp), PARAMETER :: snow_lid_min = 0.15 ! Snow thickness above which form a lid of size pnd_lid_min on the melt ponds 45 REAL(wp), PARAMETER :: snow_lid_max = 0.25 ! Snow thickness above which form a lid of size pnd_lid_max on the melt ponds 41 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_max = 0.015_wp ! pond lid thickness above which the ponds disappear from the albedo calculation 42 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_min = 0.005_wp ! pond lid thickness below which the full pond area is used in the albedo calculation 43 44 REAL(wp), PARAMETER :: viscosity_dyn = 1.79e-3_wp 46 45 47 46 !! * Substitutions … … 138 137 ! 139 138 REAL(wp) :: zfr_mlt ! fraction of available meltwater retained for melt ponding 140 REAL(wp) :: zd h_mlt ! available meltwater for melt ponding (equivalent thicknesschange)139 REAL(wp) :: zdv_mlt ! available meltwater for melt ponding (equivalent volume change) 141 140 REAL(wp) :: z1_Tp ! inverse reference temperature 142 141 REAL(wp) :: z1_rhow ! inverse freshwater density … … 151 150 REAL(wp) :: dh_i_pndleak ! Grid box mean change in water depth due to leaking back to the ocean 152 151 REAL(wp) :: weighted_lid_snow ! Lid to go on ponds under snow if snow thickness exceeds snow_lid_min 153 ! 154 INTEGER :: ji ! loop indices 152 REAL(wp) :: h_gravity_head ! Height above sea level of the top of the melt pond 153 REAL(wp) :: h_percolation ! Distance between the base of the melt pond and the base of the sea ice 154 REAL(wp) :: Sbr ! Brine salinity 155 REAL(wp), DIMENSION(nlay_i) :: phi ! liquid fraction 156 REAL(wp) :: perm ! Permeability of the sea ice 157 REAL(wp) :: drain ! Amount of melt pond draining the sea ice per m2 158 REAL(wp) :: za_ip ! Temporary pond fraction 159 160 ! 161 INTEGER :: ji, jk ! loop indices 155 162 !!------------------------------------------------------------------- 156 163 z1_rhow = 1._wp / rhow … … 168 175 END IF 169 176 170 ! !--------------------------------!171 IF( h_i_1d(ji) < rn_himin ) THEN ! Case ice thickness < rn_himin!172 ! !--------------------------------!173 !--- Remove ponds on thin ice 177 ! !----------------------------------------------------! 178 IF( h_i_1d(ji) < rn_himin .OR. a_i_1d(ji) < epsi10 ) THEN ! Case ice thickness < rn_himin or tiny ice fraction ! 179 ! !----------------------------------------------------! 180 !--- Remove ponds on thin ice or tiny ice fractions 174 181 a_ip_1d(ji) = 0._wp 175 182 a_ip_frac_1d(ji) = 0._wp … … 177 184 lh_ip_1d(ji) = 0._wp 178 185 179 zd h_mlt = 0._wp186 zdv_mlt = 0._wp 180 187 zdh_frz = 0._wp 181 188 ! !--------------------------------! … … 183 190 ! !--------------------------------! 184 191 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) ! record pond volume at previous time step 192 193 ! To avoid divide by zero errors in some calculations we will use a temporary pond fraction variable that has a minimum value of epsi06 194 za_ip = a_ip_1d(ji) 195 IF ( za_ip < epsi06 ) za_ip = epsi06 185 196 ! 186 197 ! available meltwater for melt ponding 187 ! This is the change in ice thickness due to melt scaled up by the realive areas of the meltpond 188 ! and the area of sea ice feeding the melt ponds. 189 zdh_mlt = -(dh_i_pnd(ji)*rhoi + dh_s_pnd(ji)*rhos) * z1_rhow * a_i_1d(ji) / a_ip_1d(ji) 198 ! This is the change in ice volume due to melt 199 zdv_mlt = -(dh_i_pnd(ji)*rhoi + dh_s_pnd(ji)*rhos) * z1_rhow * a_i_1d(ji) 190 200 ! 191 201 !--- Pond gowth ---! 192 v_ip_1d(ji) = v_ip_1d(ji) + zd h_mlt * a_ip_1d(ji)202 v_ip_1d(ji) = v_ip_1d(ji) + zdv_mlt 193 203 ! 194 204 !--- Lid shrinking. ---! 195 lh_ip_1d(ji) = lh_ip_1d(ji) - zd h_mlt205 lh_ip_1d(ji) = lh_ip_1d(ji) - zdv_mlt / za_ip 196 206 ! 197 207 ! … … 231 241 h_ip_1d(ji) = zpnd_aspect * a_ip_frac_1d(ji) 232 242 243 ! If pond area exceeds a_pnd_avail_1d(ji) * a_i_1d(ji) then reduce the pond volume 244 IF ( a_ip_1d(ji) > a_pnd_avail_1d(ji) * a_i_1d(ji) ) THEN 245 v_ip_old = v_ip_1d(ji) ! Save original volume before leak for future use 246 h_ip_1d(ji) = zpnd_aspect * a_pnd_avail_1d(ji) 247 a_ip_1d(ji) = a_pnd_avail_1d(ji) * a_i_1d(ji) 248 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) 249 a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 250 251 ! A change in volume of a melt pond is equivalent to a change in water depth in the grid box mean. 252 ! Scale this up to make water depth meaned over sea ice. 253 dh_i_pndleak = (v_ip_1d(ji) - v_ip_old) / a_i_1d(ji) ! This will be a negative number 254 255 ! Output this water loss as a mass flux diagnostic 256 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * r1_rdtice 257 258 ! Reduce the ice thickness using densities to convert from a water depth difference to a sea ice thickness difference 259 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_pndleak * rhow * z1_rhoi ) 260 261 ! Pass this as a salinity flux to the ocean 262 sfx_pnd_1d(ji) = sfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * s_i_1d(ji) * r1_rdtice 263 ENDIF 264 265 ! If pond depth exceeds half the ice thickness then reduce the pond volume 266 IF ( h_ip_1d(ji) > 0.5_wp * h_i_1d(ji) ) THEN 267 v_ip_old = v_ip_1d(ji) ! Save original volume before leak for future use 268 h_ip_1d(ji) = 0.5_wp * h_i_1d(ji) 269 a_ip_frac_1d(ji) = h_ip_1d(ji) / zpnd_aspect 270 a_ip_1d(ji) = a_ip_frac_1d(ji) * a_i_1d(ji) 271 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) 272 273 ! A change in volume of a melt pond is equivalent to a change in water depth in the grid box mean. 274 ! Scale this up to make water depth meaned over sea ice. 275 dh_i_pndleak = (v_ip_1d(ji) - v_ip_old) / a_i_1d(ji) ! This will be a negative number 276 277 ! Output this water loss as a mass flux diagnostic 278 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * r1_rdtice 279 280 ! Reduce the ice thickness using densities to convert from a water depth difference to a sea ice thickness difference 281 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_pndleak * rhow * z1_rhoi ) 282 283 ! Pass this as a salinity flux to the ocean 284 sfx_pnd_1d(ji) = sfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * s_i_1d(ji) * r1_rdtice 285 ENDIF 286 287 !-- Vertical flushing of pond water --! 288 ! The height above sea level of the top of the melt pond is the ratios of density of ice and water times the ice depth. 289 ! This assumes the pond is sitting on top of the ice. 290 h_gravity_head = h_i_1d(ji) * (rhow - rhoi) * z1_rhow 291 292 ! The depth through which water percolates is the distance under the melt pond 293 h_percolation = h_i_1d(ji) - h_ip_1d(ji) 294 295 ! Calculate the permeability of the ice (Assur 1958) 296 DO jk = 1, nlay_i 297 Sbr = - 1.2_wp & 298 - 21.8_wp * (t_i_1d(ji,jk)-rt0) & 299 - 0.919_wp * (t_i_1d(ji,jk)-rt0)**2 & 300 - 0.01878_wp * (t_i_1d(ji,jk)-rt0)**3 301 phi(jk) = sz_i_1d(ji,jk)/Sbr 302 END DO 303 perm = 3.0e-08_wp * (minval(phi))**3 304 305 ! Do the drainage using Darcy's law 306 IF ( perm > 0._wp ) THEN 307 drain = perm*rhow*grav*h_gravity_head*rdt_ice / (viscosity_dyn*h_percolation) 308 309 v_ip_old = v_ip_1d(ji) ! Save original volume before leak for future use 310 h_ip_1d(ji) = h_ip_1d(ji) - drain 311 a_ip_frac_1d(ji) = h_ip_1d(ji) / zpnd_aspect 312 a_ip_1d(ji) = a_ip_frac_1d(ji) * a_i_1d(ji) 313 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) 314 315 ! A change in volume of a melt pond is equivalent to a change in water depth in the grid box mean. 316 ! Scale this up to make water depth meaned over sea ice. 317 dh_i_pndleak = (v_ip_1d(ji) - v_ip_old) / a_i_1d(ji) ! This will be a negative number 318 319 ! Output this water loss as a mass flux diagnostic 320 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * r1_rdtice 321 322 ! Reduce the ice thickness using densities to convert from a water depth difference to a sea ice thickness difference 323 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_pndleak * rhow * z1_rhoi ) 324 325 ! Pass this as a salinity flux to the ocean 326 sfx_pnd_1d(ji) = sfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * s_i_1d(ji) * r1_rdtice 327 ENDIF 328 233 329 ! If lid thickness is ten times greater than pond thickness then remove pond 234 330 IF ( lh_ip_1d(ji) > h_ip_1d(ji) * 10._wp ) THEN … … 240 336 END IF 241 337 242 ! If pond area exceeds a_pnd_avail_1d(ji) * a_i_1d(ji) then reduce the pond volume 243 IF ( a_ip_1d(ji) > a_pnd_avail_1d(ji) * a_i_1d(ji) ) THEN 244 v_ip_old = v_ip_1d(ji) ! Save original volume before leak for future use 245 h_ip_1d(ji) = zpnd_aspect * a_pnd_avail_1d(ji) 246 a_ip_1d(ji) = a_pnd_avail_1d(ji) * a_i_1d(ji) 247 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) 248 a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 249 250 ! A change in volume of a melt pond is equivalent to a change in water depth in the grid box mean. 251 ! Scale this up to make water depth meaned over sea ice. 252 dh_i_pndleak = (v_ip_1d(ji) - v_ip_old) / a_i_1d(ji) ! This will be a negative number 253 254 ! Output this water loss as a mass flux diagnostic 255 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * r1_rdtice 256 257 ! Reduce the ice thickness using densities to convert from a water depth difference to a sea ice thickness difference 258 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_pndleak * rhow * z1_rhoi ) 259 ENDIF 260 261 ! If pond depth exceeds half the ice thickness then reduce the pond volume 262 IF ( h_ip_1d(ji) > 0.5_wp * h_i_1d(ji) ) THEN 263 v_ip_old = v_ip_1d(ji) ! Save original volume before leak for future use 264 h_ip_1d(ji) = 0.5_wp * h_i_1d(ji) 265 a_ip_frac_1d(ji) = h_ip_1d(ji) / zpnd_aspect 266 a_ip_1d(ji) = a_ip_frac_1d(ji) * a_i_1d(ji) 267 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) 268 269 ! A change in volume of a melt pond is equivalent to a change in water depth in the grid box mean. 270 ! Scale this up to make water depth meaned over sea ice. 271 dh_i_pndleak = (v_ip_1d(ji) - v_ip_old) / a_i_1d(ji) ! This will be a negative number 272 273 ! Output this water loss as a mass flux diagnostic 274 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - rhow * a_i_1d(ji) * dh_i_pndleak * r1_rdtice 275 276 ! Reduce the ice thickness using densities to convert from a water depth difference to a sea ice thickness difference 277 h_i_1d(ji) = MAX( 0._wp , h_i_1d(ji) + dh_i_pndleak * rhow * z1_rhoi ) 278 ENDIF 279 280 ! If any of the previous two IF tests has removed all the ice thickness then remove ice area. 338 ! If any of the previous changes has removed all the ice thickness then remove ice area. 281 339 IF ( h_i_1d(ji) == 0._wp ) THEN 282 340 a_i_1d(ji) = 0._wp … … 284 342 ENDIF 285 343 286 ! If snow thickness exceeds snow_lid_min then form a very thin lid (so snow can go over the top)287 IF ( h_s_1d(ji) > snow_lid_min .AND. h_s_1d(ji) < snow_lid_max ) THEN288 weighted_lid_snow = (snow_lid_max - h_s_1d(ji))/(snow_lid_max-snow_lid_min) * pnd_lid_min + &289 (h_s_1d(ji) - snow_lid_min)/(snow_lid_max-snow_lid_min) * pnd_lid_max290 lh_ip_1d(ji) = MAX(lh_ip_1d(ji), weighted_lid_snow)291 ENDIF292 IF ( h_s_1d(ji) >= snow_lid_max ) THEN293 lh_ip_1d(ji) = MAX(lh_ip_1d(ji), pnd_lid_max)294 ENDIF295 296 344 ! 297 345 ENDIF … … 299 347 IF (to_print(ji) == 10) THEN 300 348 write(numout,*)'icethd_pnd: h_ip_1d(ji), zpnd_aspect, a_ip_frac_1d(ji), a_ip_1d(ji) = ',h_ip_1d(ji), zpnd_aspect, a_ip_frac_1d(ji), a_ip_1d(ji) 301 write(numout,*)'icethd_pnd: a_i_1d(ji), v_ip_1d(ji), t_su_1d(ji), zfr_mlt, zd h_mlt = ',a_i_1d(ji), ' ', v_ip_1d(ji), ' ', t_su_1d(ji), ' ', zfr_mlt, ' ', zdh_mlt349 write(numout,*)'icethd_pnd: a_i_1d(ji), v_ip_1d(ji), t_su_1d(ji), zfr_mlt, zdv_mlt = ',a_i_1d(ji), ' ', v_ip_1d(ji), ' ', t_su_1d(ji), ' ', zfr_mlt, ' ', zdv_mlt 302 350 write(numout,*)'icethd_pnd: meltt = ', -( dh_i_sum(ji)*rhoi + dh_s_mlt(ji)*rhos ) / rhoi 303 write(numout,*)'icethd_pnd: lh_ip_1d(ji), zdh_mlt, zdh_frz, t_su_1d(ji) = ',lh_ip_1d(ji), ' ', zdh_mlt, ' ', zdh_frz, ' ', t_su_1d(ji)351 write(numout,*)'icethd_pnd: lh_ip_1d(ji), sfx_pnd_1d(ji), zdh_frz, t_su_1d(ji) = ',lh_ip_1d(ji), ' ', sfx_pnd_1d(ji), ' ', zdh_frz, ' ', t_su_1d(ji) 304 352 write(numout,*)'icethd_pnd: a_pnd_avail_1d(ji), at_i_1d(ji), wfx_pnd_1d(ji), h_i_1d(ji) = ', a_pnd_avail_1d(ji), ' ', at_i_1d(ji), ' ', wfx_pnd_1d(ji), ' ', h_i_1d(ji) 353 write(numout,*)'icethd_pnd: drain, perm, h_percolation, h_gravity_head = ',drain, ' ', perm, ' ', h_percolation, ' ', h_gravity_head 354 write(numout,*)'icethd_pnd: t_i_1d(ji,1), sz_i_1d(ji,1) = ',t_i_1d(ji,1), ' ', sz_i_1d(ji,1) 305 355 END IF 306 356
Note: See TracChangeset
for help on using the changeset viewer.