Changeset 12566
- Timestamp:
- 2020-03-17T17:09:23+01:00 (3 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/cfgs/SHARED/field_def_nemo-ice.xml
r12483 r12566 255 255 <field id="icehpnd_cat" long_name="Ice melt pond thickness per category" unit="m" detect_missing_value="true" /> 256 256 <field id="iceafpnd_cat" long_name="Ice melt pond fraction per category" unit="" /> 257 <field id="iceaepnd_cat" long_name="Ice melt pond effective fraction per category" unit="" /> 257 258 <field id="icelhpnd_cat" long_name="Ice melt pond lid thickness per category" unit="m" detect_missing_value="true" /> 258 259 <field id="icemask_cat" long_name="Fraction of time step with sea ice (per category)" unit="" /> -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/ice.F90
r12500 r12566 340 340 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: v_ip !: melt pond volume per grid cell area [m] 341 341 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_ip_frac !: melt pond fraction (a_ip/a_i) 342 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_ip_eff !: melt pond effective fraction (not covered up by lid) (a_ip/a_i) 342 343 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: h_ip !: melt pond depth [m] 343 344 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: lh_ip !: melt pond lid thickness [m] … … 461 462 462 463 ii = ii + 1 463 ALLOCATE( a_ip(jpi,jpj,jpl) , v_ip(jpi,jpj,jpl) , a_ip_frac(jpi,jpj,jpl) , h_ip(jpi,jpj,jpl), lh_ip(jpi,jpj,jpl) , STAT = ierr(ii) ) 464 ALLOCATE( a_ip(jpi,jpj,jpl) , v_ip(jpi,jpj,jpl) , a_ip_frac(jpi,jpj,jpl) , h_ip(jpi,jpj,jpl), & 465 & lh_ip(jpi,jpj,jpl), a_ip_eff(jpi,jpj,jpl) , STAT = ierr(ii) ) 464 466 465 467 ii = ii + 1 -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/ice1d.F90
r12500 r12566 128 128 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: h_ip_1d !: 129 129 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_ip_frac_1d !: 130 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_ip_eff_1d !: 130 131 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: lh_ip_1d !: Ice pond lid thickness [m] 131 132 … … 211 212 & dh_i_sub(jpij) , dh_s_mlt(jpij) , dh_snowice(jpij) , s_i_1d (jpij) , s_i_new (jpij) , & 212 213 & a_ip_1d (jpij) , v_ip_1d (jpij) , v_i_1d (jpij) , v_s_1d (jpij) , lh_ip_1d(jpij) , & 213 & h_ip_1d (jpij) , a_ip_frac_1d(jpij) , 214 & h_ip_1d (jpij) , a_ip_frac_1d(jpij) , a_ip_eff_1d(jpij) , & 214 215 & sv_i_1d (jpij) , oa_i_1d (jpij) , o_i_1d (jpij) , STAT=ierr(ii) ) 215 216 ! -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icealb.F90
r12402 r12566 45 45 CONTAINS 46 46 47 SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, p lh_pnd, palb_cs, palb_os )47 SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, palb_cs, palb_os ) 48 48 !!---------------------------------------------------------------------- 49 49 !! *** ROUTINE ice_alb *** … … 96 96 LOGICAL , INTENT(in ) :: ld_pnd_alb ! effect of melt ponds on albedo 97 97 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pafrac_pnd ! melt pond relative fraction (per unit ice area) 98 ! This is the effective fraction not covered up by a pond lid 98 99 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_pnd ! melt pond depth 99 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: plh_pnd ! melt pond lid thickness100 100 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_cs ! albedo of ice under clear sky 101 101 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_os ! albedo of ice under overcast sky 102 !103 REAL(wp), PARAMETER :: pnd_lid_max = 0.015 ! pond lid thickness above which the ponds disappear from the albedo calculation104 REAL(wp), PARAMETER :: pnd_lid_min = 0.005 ! pond lid thickness below which the full pond area is used in the albedo calculation105 ! Note: these two variables are mirrored in sbccpl.F90 (maybe put them in one place...)106 102 ! 107 103 INTEGER :: ji, jj, jl ! dummy loop indices … … 111 107 REAL(wp) :: zalb_ice, zafrac_ice ! bare sea ice albedo & relative ice fraction 112 108 REAL(wp) :: zalb_snw, zafrac_snw ! snow-covered sea ice albedo & relative snow fraction 113 REAL(wp) :: lfrac_pnd ! The fraction of the meltpond exposed (not inder a frozen lid)114 109 !!--------------------------------------------------------------------- 115 110 ! … … 129 124 zafrac_snw = 0._wp 130 125 IF( ld_pnd_alb ) THEN 131 IF ( plh_pnd(ji,jj,jl) > pnd_lid_max ) THEN 132 lfrac_pnd = 0._wp 133 ELSE 134 IF ( plh_pnd(ji,jj,jl) < pnd_lid_min ) THEN 135 lfrac_pnd = 1._wp 136 ELSE 137 lfrac_pnd = ( plh_pnd(ji,jj,jl) - pnd_lid_min ) / (pnd_lid_max - pnd_lid_min) 138 END IF 139 END IF 140 zafrac_pnd = pafrac_pnd(ji,jj,jl) * lfrac_pnd 126 zafrac_pnd = pafrac_pnd(ji,jj,jl) 141 127 ELSE 142 128 zafrac_pnd = 0._wp -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/iceistate.F90
r12402 r12566 160 160 lh_ip (:,:,:) = 0._wp 161 161 a_ip_frac(:,:,:) = 0._wp 162 a_ip_eff (:,:,:) = 0._wp 162 163 h_ip (:,:,:) = 0._wp 163 164 ! … … 366 367 a_ip_frac(:,:,:) = 0._wp 367 368 END WHERE 369 a_ip_eff(:,:,:) = a_ip_frac(:,:,:) 368 370 v_ip(:,:,:) = h_ip(:,:,:) * a_ip(:,:,:) 369 371 -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icerst.F90
r12500 r12566 251 251 v_ip(:,:,:) = 0._wp 252 252 ENDIF 253 a_ip_eff(:,:,:) = a_ip(:,:,:) 253 254 ! melt pond lids 254 255 id5 = iom_varid( numrir, 'lh_ip' , ldstop = .FALSE. ) -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icesbc.F90
r12402 r12566 132 132 133 133 ! --- cloud-sky and overcast-sky ice albedos --- ! 134 CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_ frac, h_ip, lh_ip, zalb_cs, zalb_os )134 CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_eff, h_ip, zalb_cs, zalb_os ) 135 135 136 136 ! albedo depends on cloud fraction because of non-linear spectral effects -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icethd.F90
r12500 r12566 355 355 CALL tab_2d_1d( npti, nptidx(1:npti), h_ip_1d (1:npti), h_ip (:,:,kl) ) 356 356 CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_frac_1d(1:npti), a_ip_frac(:,:,kl) ) 357 CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_eff_1d (1:npti), a_ip_eff (:,:,kl) ) 357 358 CALL tab_2d_1d( npti, nptidx(1:npti), lh_ip_1d (1:npti), lh_ip (:,:,kl) ) 358 359 ! … … 462 463 CALL tab_1d_2d( npti, nptidx(1:npti), h_ip_1d (1:npti), h_ip (:,:,kl) ) 463 464 CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_frac_1d(1:npti), a_ip_frac(:,:,kl) ) 465 CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_eff_1d (1:npti), a_ip_eff (:,:,kl) ) 464 466 CALL tab_1d_2d( npti, nptidx(1:npti), lh_ip_1d (1:npti), lh_ip (:,:,kl) ) 465 467 ! -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icethd_pnd.F90
r12509 r12566 38 38 INTEGER, PARAMETER :: np_pndH12 = 2 ! Evolutive pond scheme (Holland et al. 2012) 39 39 40 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_max = 0.015_wp ! pond lid thickness above which the ponds disappear from the albedo calculation41 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_min = 0.005_wp ! pond lid thickness below which the full pond area is used in the albedo calculation42 43 40 REAL(wp), PARAMETER :: viscosity_dyn = 1.79e-3_wp 44 41 … … 94 91 IF( a_i_1d(ji) > 0._wp .AND. t_su_1d(ji) >= rt0 ) THEN 95 92 a_ip_frac_1d(ji) = rn_apnd 93 a_ip_eff_1d(ji) = rn_apnd 96 94 h_ip_1d(ji) = rn_hpnd 97 95 a_ip_1d(ji) = a_ip_frac_1d(ji) * a_i_1d(ji) 98 96 ELSE 99 97 a_ip_frac_1d(ji) = 0._wp 98 a_ip_eff_1d(ji) = 0._wp 100 99 h_ip_1d(ji) = 0._wp 101 100 a_ip_1d(ji) = 0._wp … … 135 134 REAL(wp), PARAMETER :: zTp = -2._wp ! reference temperature 136 135 REAL(wp), PARAMETER :: max_h_diff_s = -1.0E-6 ! Maximum meltpond depth change due to leaking or overflow (m s-1) 136 REAL(wp), PUBLIC, PARAMETER :: pnd_lid_max = 0.015_wp ! pond lid thickness above which the ponds disappear from the albedo calculation 137 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 137 138 ! 138 139 REAL(wp) :: tot_mlt ! Total ice and snow surface melt (some goes into ponds, some into the ocean) … … 158 159 REAL(wp) :: za_ip ! Temporary pond fraction 159 160 REAL(wp) :: max_h_diff_ts ! Maximum meltpond depth change due to leaking or overflow (m per ts) 161 REAL(wp), DIMENSION(jpi,jpj,jpl) :: lfrac_pnd ! The fraction of the meltpond exposed (not inder a frozen lid) 160 162 161 163 ! … … 335 337 ! 336 338 ENDIF 339 340 ! Calculate how much meltpond is exposed to the atmosphere (not under a frozen lid) 341 IF ( lh_ip_1d(ji) < pnd_lid_min ) THEN ! Pond lid is very thin. Expose all the pond. 342 lfrac_pnd = 1.0 343 ELSE 344 IF ( lh_ip_1d(ji) > pnd_lid_max ) THEN ! Pond lid is very thick. Cover all the pond up with ice and nosw. 345 lfrac_pnd = 0.0 346 ELSE ! Pond lid is of intermediate thickness. Expose part of the melt pond. 347 lfrac_pnd = ( lh_ip_1d(ji) - pnd_lid_min ) / (pnd_lid_max - pnd_lid_min) 348 ENDIF 349 ENDIF 350 351 ! Calculate the melt pond effective area 352 a_ip_eff_1d(ji) = a_ip_frac_1d(ji) * lfrac_pnd 337 353 338 354 END DO -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/iceupdate.F90
r12402 r12566 185 185 ! Snow/ice albedo (only if sent to coupler, useless in forced mode) 186 186 !------------------------------------------------------------------ 187 CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_ frac, h_ip, lh_ip, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos187 CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_eff, h_ip, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 188 188 ! 189 189 alb_ice(:,:,:) = ( 1._wp - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/ICE/icewri.F90
r12483 r12566 162 162 IF( iom_use('icettop_cat' ) ) CALL iom_put( 'icettop_cat' , ( t_su - rt0 ) * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! surface temperature 163 163 IF( iom_use('icebrv_cat' ) ) CALL iom_put( 'icebrv_cat' , bv_i * 100. * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! brine volume 164 IF( iom_use('iceapnd_cat' ) ) CALL iom_put( 'iceapnd_cat' , a_ip * zmsk00l ) ! melt pond fracfor categories165 IF( iom_use('icehpnd_cat' ) ) CALL iom_put( 'icehpnd_cat' , h_ip * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! melt pond fracfor categories164 IF( iom_use('iceapnd_cat' ) ) CALL iom_put( 'iceapnd_cat' , a_ip * zmsk00l ) ! melt pond area for categories 165 IF( iom_use('icehpnd_cat' ) ) CALL iom_put( 'icehpnd_cat' , h_ip * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! melt pond depth for categories 166 166 IF( iom_use('iceafpnd_cat') ) CALL iom_put( 'iceafpnd_cat', a_ip_frac * zmsk00l ) ! melt pond frac for categories 167 IF( iom_use('iceaepnd_cat') ) CALL iom_put( 'iceaepnd_cat', a_ip_eff * zmsk00l ) ! melt pond effective frac for categories 167 168 IF( iom_use('icealb_cat' ) ) CALL iom_put( 'icealb_cat' , alb_ice * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! ice albedo for categories 168 169 -
NEMO/branches/UKMO/NEMO_4.0.1_fix_cpl/src/OCE/SBC/sbccpl.F90
r12402 r12566 2122 2122 INTEGER, INTENT(in) :: kt 2123 2123 ! 2124 REAL(wp), PARAMETER :: pnd_lid_max = 0.015 ! pond lid thickness above which the ponds disappear from the albedo calculation2125 REAL(wp), PARAMETER :: pnd_lid_min = 0.005 ! pond lid thickness below which the full pond area is used in the albedo calculation2126 ! Note: these two variables are mirrored in icealb.F90 (maybe put them in one place...)2127 2124 ! 2128 2125 INTEGER :: ji, jj, jl ! dummy loop indices … … 2130 2127 REAL(wp) :: zumax, zvmax 2131 2128 REAL(wp), DIMENSION(jpi,jpj) :: zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 2132 REAL(wp), DIMENSION(jpi,jpj,jpl) :: ztmp3, ztmp4 2133 REAL(wp), DIMENSION(jpi,jpj,jpl) :: lfrac_pnd ! The fraction of the meltpond exposed (not inder a frozen lid) 2129 REAL(wp), DIMENSION(jpi,jpj,jpl) :: ztmp3, ztmp4 2134 2130 2135 2131 !!---------------------------------------------------------------------- … … 2348 2344 CASE( 'yes' ) 2349 2345 2350 ! Calculate how much meltpond is exposed (not under a frozen lid) 2351 lfrac_pnd(:,:,1:jpl) = 1.0 2352 WHERE( lh_ip(:,:,1:jpl) > pnd_lid_max ) 2353 lfrac_pnd(:,:,1:jpl) = 0.0 2354 END WHERE 2355 WHERE( lh_ip(:,:,1:jpl) > pnd_lid_min .AND. lh_ip(:,:,1:jpl) <= pnd_lid_max ) 2356 lfrac_pnd(:,:,1:jpl) = ( lh_ip(:,:,1:jpl) - pnd_lid_min ) / (pnd_lid_max - pnd_lid_min) 2357 END WHERE 2358 2359 ztmp3(:,:,1:jpl) = a_ip_frac(:,:,1:jpl) * lfrac_pnd(:,:,1:jpl) 2346 ztmp3(:,:,1:jpl) = a_ip_eff(:,:,1:jpl) 2360 2347 ztmp4(:,:,1:jpl) = h_ip(:,:,1:jpl) 2361 2348
Note: See TracChangeset
for help on using the changeset viewer.