Changeset 12854
- Timestamp:
- 2020-05-01T19:06:23+02:00 (3 years ago)
- Location:
- NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icealb.F90
r12832 r12854 14 14 !! ice_alb_init : initialisation of albedo computation 15 15 !!---------------------------------------------------------------------- 16 USE ice, ONLY: jpl ! sea-ice: number of categories17 16 USE phycst ! physical constants 18 17 USE dom_oce ! domain: ocean 18 USE ice, ONLY: jpl ! sea-ice: number of categories 19 USE icevar ! sea-ice: operations 19 20 ! 20 21 USE in_out_manager ! I/O manager … … 100 101 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_ice ! albedo of ice 101 102 ! 103 REAL(wp), DIMENSION(jpi,jpj,jpl) :: za_s_fra ! ice fraction covered by snow 102 104 INTEGER :: ji, jj, jl ! dummy loop indices 103 105 REAL(wp) :: z1_c1, z1_c2,z1_c3, z1_c4 ! local scalar … … 107 109 REAL(wp) :: zalb_snw, zafrac_snw ! snow-covered sea ice albedo & relative snow fraction 108 110 REAL(wp) :: zalb_cs, zalb_os ! albedo of ice under clear/overcast sky 109 REAL(wp) :: zhs_min = 0.1_wp ! minimum snow thickness to fully shade melt ponds and ice110 REAL(wp) :: z1_hsmin111 111 !!--------------------------------------------------------------------- 112 112 ! … … 119 119 z1_c4 = 1. / 0.03 120 120 ! 121 CALL ice_var_snwfra( ph_snw, za_s_fra ) ! calculate ice fraction covered by snow 122 ! 121 123 DO jl = 1, jpl 122 124 DO jj = 1, jpj … … 126 128 !--- Specific snow, ice and pond fractions ---! 127 129 !---------------------------------------------! 128 IF( ph_snw(ji,jj,jl) < zhs_min ) THEN !--- thin snow partially shades melt ponds and ice 129 IF( ld_pnd_alb ) THEN ; zafrac_pnd = pafrac_pnd(ji,jj,jl) 130 ELSE ; zafrac_pnd = 0._wp ; ENDIF 131 zafrac_snw = MAX( 0._wp, ( ph_snw(ji,jj,jl) * z1_hsmin ) * ( 1._wp - zafrac_pnd ) ) ! max for roundoff errors 132 zafrac_ice = MAX( 0._wp, 1._wp - zafrac_pnd - zafrac_snw ) ! max for roundoff errors 130 zafrac_snw = za_s_fra(ji,jj,jl) 131 IF( ld_pnd_alb ) THEN 132 zafrac_pnd = MIN( pafrac_pnd(ji,jj,jl), 1._wp - zafrac_snw ) ! make sure (a_ip_eff + a_s_fra) <= 1 133 133 ELSE 134 zafrac_snw = 1._wp !--- thick snow fully shades melt ponds and ice135 134 zafrac_pnd = 0._wp 136 zafrac_ice = 0._wp137 ENDIF135 ENDIF 136 zafrac_ice = MAX( 0._wp, 1._wp - zafrac_pnd - zafrac_snw ) ! max for roundoff errors 138 137 ! 139 138 !---------------! -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icethd_zdf_bl99.F90
r12827 r12854 130 130 REAL(wp), DIMENSION(jpij) :: zq_ini ! diag errors on heat 131 131 REAL(wp), DIMENSION(jpij) :: zghe ! G(he), th. conduct enhancement factor, mono-cat 132 REAL(wp), DIMENSION(jpij) :: za_s_fra ! ice fraction covered by snow 132 133 ! 133 134 ! Mono-category … … 143 144 END DO 144 145 146 CALL ice_var_snwfra( h_s_1d(1:npti), za_s_fra(1:npti) ) ! calculate ice fraction covered by snow 147 145 148 !------------------ 146 149 ! 1) Initialization … … 149 152 150 153 ! If the snow thickness drops below zhs_min then reduce the snow fraction instead 151 IF( h_s_1d(ji) < zhs_min ) THEN 152 isnow(ji) = h_s_1d(ji) / zhs_min 153 zh_s(ji) = zhs_min * r1_nlay_s 154 ELSE 155 isnow(ji) = 1.0_wp 156 zh_s(ji) = h_s_1d(ji) * r1_nlay_s 157 END IF 158 154 !!IF( h_s_1d(ji) < zhs_min ) THEN 155 !! isnow(ji) = h_s_1d(ji) / zhs_min 156 !! zh_s(ji) = zhs_min * r1_nlay_s 157 !!ELSE 158 !! isnow(ji) = 1.0_wp 159 !! zh_s(ji) = h_s_1d(ji) * r1_nlay_s 160 !!END IF 161 isnow(ji) = za_s_fra(ji) !!clem: 2 variables for the same thing 162 zh_s(ji) = h_s_1d(ji) * r1_nlay_s 163 164 159 165 ! layer thickness 160 166 zh_i(ji) = h_i_1d(ji) * r1_nlay_i … … 166 172 END WHERE 167 173 ! 168 WHERE( zh_s(1:npti) > 0._wp) ; z1_h_s(1:npti) = 1._wp / zh_s(1:npti)174 WHERE( zh_s(1:npti) >= epsi10 ) ; z1_h_s(1:npti) = 1._wp / zh_s(1:npti) 169 175 ELSEWHERE ; z1_h_s(1:npti) = 0._wp 170 176 END WHERE … … 881 887 !--- Snow-ice interfacial temperature (diagnostic SIMIP) 882 888 zfac = rn_cnd_s * zh_i(ji) + ztcond_i(ji,1) * zh_s(ji) 883 IF( h_s_1d(ji) >= zhs_min ) THEN 889 IF( h_s_1d(ji) >= zhs_min ) THEN !!clem change that 884 890 t_si_1d(ji) = ( rn_cnd_s * zh_i(ji) * t_s_1d(ji,1) + & 885 891 & ztcond_i(ji,1) * zh_s(ji) * t_i_1d(ji,1) ) / MAX( epsi10, zfac ) -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icevar.F90
r12832 r12854 51 51 !! ice_var_sshdyn : compute equivalent ssh in lead 52 52 !! ice_var_itd : convert N-cat to M-cat 53 !! ice_var_snwfra : fraction of ice covered by snow 53 54 !!---------------------------------------------------------------------- 54 55 USE dom_oce ! ocean space and time domain … … 77 78 PUBLIC ice_var_sshdyn 78 79 PUBLIC ice_var_itd 80 PUBLIC ice_var_snwfra 79 81 80 82 INTERFACE ice_var_itd 81 83 MODULE PROCEDURE ice_var_itd_1c1c, ice_var_itd_Nc1c, ice_var_itd_1cMc, ice_var_itd_NcMc 84 END INTERFACE 85 86 INTERFACE ice_var_snwfra 87 MODULE PROCEDURE ice_var_snwfra_1d, ice_var_snwfra_2d, ice_var_snwfra_3d 82 88 END INTERFACE 83 89 … … 187 193 REAL(wp), PARAMETER :: zhl_max = 0.015_wp ! pond lid thickness above which the ponds disappear from the albedo calculation 188 194 REAL(wp), PARAMETER :: zhl_min = 0.005_wp ! pond lid thickness below which the full pond area is used in the albedo calculation 189 REAL(wp), DIMENSION(jpi,jpj,jpl) :: z1_a_i, z1_v_i, z1_a_ip 195 REAL(wp), DIMENSION(jpi,jpj,jpl) :: z1_a_i, z1_v_i, z1_a_ip, za_s_fra 190 196 !!------------------------------------------------------------------- 191 197 … … 234 240 & ( h_il(:,:,:) - zhl_min ) / ( zhl_max - zhl_min ) 235 241 END WHERE 242 ! 243 CALL ice_var_snwfra( h_s, za_s_fra ) ! calculate ice fraction covered by snow 244 a_ip_eff = MIN( a_ip_eff, 1._wp - za_s_fra ) ! make sure (a_ip_eff + a_s_fra) <= 1 245 ! 236 246 ! !--- salinity (with a minimum value imposed everywhere) 237 247 IF( nn_icesal == 2 ) THEN … … 1268 1278 END SUBROUTINE ice_var_itd_NcMc 1269 1279 1280 !!------------------------------------------------------------------- 1281 !! INTERFACE ice_var_snwfra 1282 !! 1283 !! ** Purpose : fraction of ice covered by snow 1284 !! 1285 !! ** Method : In absence of proper snow model on top of sea ice, 1286 !! we argue that snow does not cover the whole ice because 1287 !! of wind blowing... 1288 !! 1289 !! ** Arguments : ph_s: snow thickness 1290 !! 1291 !! ** Output : pa_s_fra: fraction of ice covered by snow 1292 !! 1293 !!------------------------------------------------------------------- 1294 SUBROUTINE ice_var_snwfra_3d( ph_s, pa_s_fra ) 1295 !!------------------------------------------------------------------- 1296 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: ph_s ! snow thickness 1297 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pa_s_fra ! ice fraction covered by snow 1298 !!------------------------------------------------------------------- 1299 pa_s_fra(:,:,:) = 1._wp - EXP( -0.2_wp * rhos * ph_s(:,:,:) ) 1300 END SUBROUTINE ice_var_snwfra_3d 1301 1302 SUBROUTINE ice_var_snwfra_2d( ph_s, pa_s_fra ) 1303 !!------------------------------------------------------------------- 1304 REAL(wp), DIMENSION(:,:), INTENT(in ) :: ph_s ! snow thickness 1305 REAL(wp), DIMENSION(:,:), INTENT( out) :: pa_s_fra ! ice fraction covered by snow 1306 !!------------------------------------------------------------------- 1307 pa_s_fra(:,:) = 1._wp - EXP( -0.2_wp * rhos * ph_s(:,:) ) 1308 END SUBROUTINE ice_var_snwfra_2d 1309 1310 SUBROUTINE ice_var_snwfra_1d( ph_s, pa_s_fra ) 1311 !!------------------------------------------------------------------- 1312 REAL(wp), DIMENSION(:), INTENT(in ) :: ph_s ! snow thickness 1313 REAL(wp), DIMENSION(:), INTENT( out) :: pa_s_fra ! ice fraction covered by snow 1314 !!------------------------------------------------------------------- 1315 pa_s_fra(:) = 1._wp - EXP( -0.2_wp * rhos * ph_s(:) ) 1316 END SUBROUTINE ice_var_snwfra_1d 1317 1318 1270 1319 #else 1271 1320 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.