Changeset 12449 for NEMO/branches/UKMO
- Timestamp:
- 2020-02-24T18:04:40+01:00 (4 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/cfgs/SHARED/field_def_nemo-ice.xml
r12439 r12449 115 115 <field id="sfxres" long_name="ice-ocean salt flux from undiagnosed processes" unit="kg/m2/s" /> 116 116 <field id="sfxsub" long_name="ice-ocean salt flux from ice sublimation" unit="kg/m2/s" /> 117 <field id="sfxpnd" long_name="ice-ocean salt flux from meltponds leaking into the ocean" unit="kg/m2/s" /> 117 118 118 119 <!-- mass fluxes --> -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/ice.F90
r12439 r12449 266 266 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx_res !: salt flux due to correction on ice thick. (residual) [pss.kg.m-2.s-1 => g.m-2.s-1] 267 267 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx_sub !: salt flux due to ice sublimation [pss.kg.m-2.s-1 => g.m-2.s-1] 268 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx_pnd !: salt flux due to melt ponds leaking into the ocean [pss.kg.m-2.s-1 => g.m-2.s-1] 268 269 269 270 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hfx_bog !: total heat flux causing bottom ice growth [W.m-2] … … 418 419 & sfx_res (jpi,jpj) , sfx_bri (jpi,jpj) , sfx_dyn(jpi,jpj) , sfx_sub(jpi,jpj) , sfx_lam(jpi,jpj) , & 419 420 & sfx_bog (jpi,jpj) , sfx_bom (jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) , & 421 & sfx_pnd (jpi,jpj) , & 420 422 & hfx_res (jpi,jpj) , hfx_snw (jpi,jpj) , hfx_sub(jpi,jpj) , & 421 423 & qt_atm_oi (jpi,jpj) , qt_oce_ai (jpi,jpj) , fhld (jpi,jpj) , & -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/ice1d.F90
r12439 r12449 93 93 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_lam_1d 94 94 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_dyn_1d 95 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_pnd_1d 95 96 96 97 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sprecip_1d … … 207 208 & sfx_bri_1d (jpij) , sfx_bog_1d (jpij) , sfx_bom_1d (jpij) , sfx_sum_1d (jpij), & 208 209 & sfx_sni_1d (jpij) , sfx_opw_1d (jpij) , sfx_res_1d (jpij) , sfx_sub_1d (jpij), & 209 & sfx_lam_1d (jpij) , sfx_dyn_1d(jpij) , STAT=ierr(ii) )210 & sfx_lam_1d (jpij) , sfx_dyn_1d(jpij) , sfx_pnd_1d (jpij) , STAT=ierr(ii) ) 210 211 ! 211 212 ii = ii + 1 … … 216 217 & a_ip_1d (jpij) , v_ip_1d (jpij) , v_i_1d (jpij) , v_s_1d (jpij) , lh_ip_1d(jpij) , & 217 218 & h_ip_1d (jpij) , a_ip_frac_1d(jpij) , dh_i_pnd(jpij) , a_pnd_avail_1d(jpij) , & 219 & dh_s_pnd(jpij) , & 218 220 & sv_i_1d (jpij) , oa_i_1d (jpij) , o_i_1d (jpij) , STAT=ierr(ii) ) 219 221 ! -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/icectl.F90
r11081 r12449 87 87 pdiag_fs = glob_sum( 'icectl', & 88 88 & ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + & 89 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_sub(:,:) + sfx_lam(:,:) 90 & ) * e1e2t(:,:) ) * zconv89 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_sub(:,:) + sfx_lam(:,:) + & 90 & sfx_pnd(:,:) ) * e1e2t(:,:) ) * zconv 91 91 ! 92 92 ! ! heat flux … … 116 116 zfs = glob_sum( 'icectl', & 117 117 & ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + & 118 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_sub(:,:) + sfx_lam(:,:) 119 & ) * e1e2t(:,:) ) * zconv - pdiag_fs118 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_sub(:,:) + sfx_lam(:,:) + & 119 & sfx_pnd(:,:) ) * e1e2t(:,:) ) * zconv - pdiag_fs 120 120 121 121 ! heat flux -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/icestp.F90
r12369 r12449 486 486 sfx_bom(:,:) = 0._wp ; sfx_sum(:,:) = 0._wp 487 487 sfx_res(:,:) = 0._wp ; sfx_sub(:,:) = 0._wp 488 sfx_pnd(:,:) = 0._wp 488 489 ! 489 490 wfx_snw(:,:) = 0._wp ; wfx_ice(:,:) = 0._wp -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/icethd.F90
r12439 r12449 455 455 CALL tab_2d_1d( npti, nptidx(1:npti), sfx_sub_1d (1:npti), sfx_sub ) 456 456 CALL tab_2d_1d( npti, nptidx(1:npti), sfx_lam_1d (1:npti), sfx_lam ) 457 CALL tab_2d_1d( npti, nptidx(1:npti), sfx_pnd_1d (1:npti), sfx_pnd ) 457 458 ! 458 459 CALL tab_2d_1d( npti, nptidx(1:npti), hfx_thd_1d (1:npti), hfx_thd ) … … 548 549 CALL tab_1d_2d( npti, nptidx(1:npti), sfx_sub_1d (1:npti), sfx_sub ) 549 550 CALL tab_1d_2d( npti, nptidx(1:npti), sfx_lam_1d (1:npti), sfx_lam ) 551 CALL tab_1d_2d( npti, nptidx(1:npti), sfx_pnd_1d (1:npti), sfx_pnd ) 550 552 ! 551 553 CALL tab_1d_2d( npti, nptidx(1:npti), hfx_thd_1d (1:npti), hfx_thd ) -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/icethd_dh.F90
r12439 r12449 99 99 REAL(wp), DIMENSION(jpij,nlay_i) :: zh_i ! ice layer thickness 100 100 REAL(wp), DIMENSION(jpij,nlay_i) :: zdeltah 101 REAL(wp), DIMENSION(jpij,nlay_i) :: zdeltah_pnd ! Change in thickness due to melting into ponds 101 102 INTEGER , DIMENSION(jpij,nlay_i) :: icount ! number of layers vanished by melting 102 103 … … 281 282 zdeltah (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji,jk) ) ! bound melting 282 283 zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,jk) 284 zdeltah_pnd(ji,jk) = zdeltah (ji,jk) * a_pnd_avail_1d(ji) 283 285 284 286 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d (ji,jk) * r1_rdtice ! heat used to melt snow(W.m-2, >0) 285 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice ! snow melting only = water into the ocean (then without snow precip)287 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * (zdeltah(ji,jk) - zdeltah_pnd(ji,jk)) * r1_rdtice ! snow melting only = water into the ocean (then without snow precip) 286 288 287 289 ! updates available heat + thickness 288 290 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,jk) 289 dh_s_pnd(ji) = dh_s_pnd(ji) + zdeltah (ji,jk) * a_pnd_avail_1d(ji)! Cumulate surface melt on areas contributing to melt ponds291 dh_s_pnd(ji) = dh_s_pnd(ji) + zdeltah_pnd(ji,jk) ! Cumulate surface melt on areas contributing to melt ponds 290 292 zq_top (ji) = MAX( 0._wp , zq_top(ji) + zdeltah(ji,jk) * e_s_1d(ji,jk) ) 291 293 h_s_1d (ji) = MAX( 0._wp , h_s_1d(ji) + zdeltah(ji,jk) ) 292 h_i_1d (ji) = MAX( 0._wp , h_i_1d(ji) - zdeltah(ji,jk) * a_pnd_avail_1d(ji) * rhos * r1_rhoi ) ! Snow melt trapped in ponds contrbutes to ice thickness293 294 zh_s (ji,jk) = MAX( 0._wp , zh_s(ji,jk) + zdeltah(ji,jk) ) 295 296 ! Snow melt trapped in ponds contrbutes to ice thickness and snow to ice conversion 297 h_i_1d (ji) = MAX( 0._wp , h_i_1d(ji) - zdeltah_pnd(ji,jk) * rhos * r1_rhoi ) 298 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * zdeltah_pnd(ji,jk) * rhos * r1_rdtice 299 wfx_snw_sni_1d(ji) = wfx_snw_sni_1d(ji) + a_i_1d(ji) * zdeltah_pnd(ji,jk) * rhos * r1_rdtice 294 300 ! 295 301 ENDIF … … 400 406 zdE = zEi - zEw ! Specific enthalpy difference < 0 401 407 402 zfmdt = - zq_top(ji) / zdE ! Mass flux to the ocean [kg/m2, >0] 403 404 zdeltah(ji,jk) = - zfmdt * r1_rhoi ! Melt of layer jk [m, <0] 408 zfmdt = - zq_top(ji) / zdE ! Mass flux to the ocean or meltponds [kg/m2, >0] 409 410 zdeltah(ji,jk) = - zfmdt * r1_rhoi * (1._wp - a_pnd_avail_1d(ji)) ! Melt of layer jk [m, <0] into the ocean 411 zdeltah_pnd(ji,jk) = - zfmdt * r1_rhoi * a_pnd_avail_1d(ji) ! Melt of layer jk [m, <0] into meltponds 405 412 406 413 zdeltah(ji,jk) = MIN( 0._wp , MAX( zdeltah(ji,jk) , - zh_i(ji,jk) ) ) ! Melt of layer jk cannot exceed the layer thickness [m, <0] … … 408 415 zq_top(ji) = MAX( 0._wp , zq_top(ji) - zdeltah(ji,jk) * rhoi * zdE ) ! update available heat 409 416 410 dh_i_sum(ji) = dh_i_sum(ji) + zdeltah(ji,jk) * (1._wp - a_pnd_avail_1d(ji))! Cumulate surface melt on areas not contributing to melt ponds411 dh_i_pnd(ji) = dh_i_pnd(ji) + zdeltah (ji,jk) * a_pnd_avail_1d(ji)! Cumulate surface melt on areas contributing to melt ponds417 dh_i_sum(ji) = dh_i_sum(ji) + zdeltah(ji,jk) ! Cumulate surface melt on areas not contributing to melt ponds 418 dh_i_pnd(ji) = dh_i_pnd(ji) + zdeltah_pnd(ji,jk) ! Cumulate surface melt on areas contributing to melt ponds 412 419 413 420 zfmdt = - rhoi * zdeltah(ji,jk) ! Recompute mass flux [kg/m2, >0] -
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 -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/icethd_sal.F90
r10888 r12449 59 59 INTEGER :: ji, jk ! dummy loop indices 60 60 REAL(wp) :: iflush, igravdr ! local scalars 61 REAL(wp) :: zs_sni, zs_i_gd, zs_i_fl, zs_i_si, zs_i_bg ! local scalars61 REAL(wp) :: zs_sni, zs_i_gd, zs_i_fl, zs_i_si, zs_i_bg, zs_i_sp ! local scalars 62 62 REAL(wp) :: z1_time_gd, z1_time_fl 63 63 !!--------------------------------------------------------------------- … … 79 79 zs_sni = sss_1d(ji) * ( rhoi - rhos ) * r1_rhoi ! Salinity of snow ice 80 80 zs_i_si = ( zs_sni - s_i_1d(ji) ) * dh_snowice(ji) / h_i_1d(ji) ! snow-ice 81 zs_i_sp = ( 0._wp - s_i_1d(ji) ) * dh_s_pnd(ji) / h_i_1d(ji) ! snow-pond 81 82 zs_i_bg = ( s_i_new(ji) - s_i_1d(ji) ) * dh_i_bog (ji) / h_i_1d(ji) ! bottom growth 82 83 ! Update salinity (nb: salt flux already included in icethd_dh) 83 s_i_1d(ji) = s_i_1d(ji) + zs_i_bg + zs_i_si 84 s_i_1d(ji) = s_i_1d(ji) + zs_i_bg + zs_i_si + zs_i_sp 84 85 ENDIF 85 86 ! … … 100 101 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoi * a_i_1d(ji) * h_i_1d(ji) * ( zs_i_fl + zs_i_gd ) * r1_rdtice 101 102 ENDIF 103 ! 102 104 END DO 103 105 ! -
NEMO/branches/UKMO/NEMO_4.0_add_pond_lids_prints/src/ICE/iceupdate.F90
r12394 r12449 165 165 !------------------------------------------ 166 166 sfx(ji,jj) = sfx_bog(ji,jj) + sfx_bom(ji,jj) + sfx_sum(ji,jj) + sfx_sni(ji,jj) + sfx_opw(ji,jj) & 167 & + sfx_res(ji,jj) + sfx_dyn(ji,jj) + sfx_bri(ji,jj) + sfx_sub(ji,jj) + sfx_lam(ji,jj) 167 & + sfx_res(ji,jj) + sfx_dyn(ji,jj) + sfx_bri(ji,jj) + sfx_sub(ji,jj) + sfx_lam(ji,jj) + sfx_pnd(ji,jj) 168 168 169 169 ! Mass of snow and ice per unit area … … 197 197 ! 198 198 ! --- salt fluxes [kg/m2/s] --- ! 199 ! ! sfxice = sfxbog + sfxbom + sfxsum + sfxsni + sfxopw + sfxres + sfxdyn + sfxbri + sfxsub + sfxlam 199 ! ! sfxice = sfxbog + sfxbom + sfxsum + sfxsni + sfxopw + sfxres + sfxdyn + sfxbri + sfxsub + sfxlam + sfxpnd 200 200 IF( iom_use('sfxice' ) ) CALL iom_put( "sfxice", sfx * 1.e-03 ) ! salt flux from total ice growth/melt 201 201 IF( iom_use('sfxbog' ) ) CALL iom_put( "sfxbog", sfx_bog * 1.e-03 ) ! salt flux from bottom growth … … 209 209 IF( iom_use('sfxres' ) ) CALL iom_put( "sfxres", sfx_res * 1.e-03 ) ! salt flux from undiagnosed processes 210 210 IF( iom_use('sfxsub' ) ) CALL iom_put( "sfxsub", sfx_sub * 1.e-03 ) ! salt flux from sublimation 211 IF( iom_use('sfxpnd' ) ) CALL iom_put( "sfxpnd", sfx_pnd * 1.e-03 ) ! salt flux from melt ponds leaking into the ocean 211 212 212 213 ! --- mass fluxes [kg/m2/s] --- !
Note: See TracChangeset
for help on using the changeset viewer.