Changeset 13284 for NEMO/releases/r4.0/r4.0-HEAD/src/ICE/icealb.F90
- Timestamp:
- 2020-07-09T17:12:23+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/releases/r4.0/r4.0-HEAD/src/ICE/icealb.F90
r11536 r13284 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 … … 45 46 CONTAINS 46 47 47 SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, p alb_cs, palb_os)48 SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, pcloud_fra, palb_ice ) 48 49 !!---------------------------------------------------------------------- 49 50 !! *** ROUTINE ice_alb *** … … 97 98 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pafrac_pnd ! melt pond relative fraction (per unit ice area) 98 99 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_pnd ! melt pond depth 99 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_cs ! albedo of ice under clear sky 100 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_os ! albedo of ice under overcast sky 101 ! 100 REAL(wp), INTENT(in ), DIMENSION(:,:) :: pcloud_fra ! cloud fraction 101 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_ice ! albedo of ice 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 … … 106 108 REAL(wp) :: zalb_ice, zafrac_ice ! bare sea ice albedo & relative ice fraction 107 109 REAL(wp) :: zalb_snw, zafrac_snw ! snow-covered sea ice albedo & relative snow fraction 110 REAL(wp) :: zalb_cs, zalb_os ! albedo of ice under clear/overcast sky 108 111 !!--------------------------------------------------------------------- 109 112 ! … … 116 119 z1_c4 = 1. / 0.03 117 120 ! 121 CALL ice_var_snwfra( ph_snw, za_s_fra ) ! calculate ice fraction covered by snow 122 ! 118 123 DO jl = 1, jpl 119 124 DO jj = 1, jpj 120 125 DO ji = 1, jpi 121 ! !--- Specific snow, ice and pond fractions (for now, we prevent melt ponds and snow at the same time) 122 IF( ph_snw(ji,jj,jl) == 0._wp ) THEN 123 zafrac_snw = 0._wp 124 IF( ld_pnd_alb ) THEN 125 zafrac_pnd = pafrac_pnd(ji,jj,jl) 126 ELSE 127 zafrac_pnd = 0._wp 128 ENDIF 129 zafrac_ice = 1._wp - zafrac_pnd 126 ! 127 !---------------------------------------------! 128 !--- Specific snow, ice and pond fractions ---! 129 !---------------------------------------------! 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 130 133 ELSE 131 zafrac_snw = 1._wp ! Snow fully "shades" melt ponds and ice132 134 zafrac_pnd = 0._wp 133 zafrac_ice = 0._wp 134 ENDIF 135 ! 135 ENDIF 136 zafrac_ice = MAX( 0._wp, 1._wp - zafrac_pnd - zafrac_snw ) ! max for roundoff errors 137 ! 138 !---------------! 139 !--- Albedos ---! 140 !---------------! 136 141 ! !--- Bare ice albedo (for hi > 150cm) 137 142 IF( ld_pnd_alb ) THEN 138 143 zalb_ice = rn_alb_idry 139 144 ELSE 140 IF( ph_snw(ji,jj,jl) == 0._wp .AND. pt_su(ji,jj,jl) >= rt0 ) THEN ; zalb_ice = rn_alb_imlt141 ELSE ; zalb_ice = rn_alb_idry ; ENDIF145 IF( ph_snw(ji,jj,jl) == 0._wp .AND. pt_su(ji,jj,jl) >= rt0 ) THEN ; zalb_ice = rn_alb_imlt 146 ELSE ; zalb_ice = rn_alb_idry ; ENDIF 142 147 ENDIF 143 148 ! !--- Bare ice albedo (for hi < 150cm) … … 155 160 ENDIF 156 161 ! !--- Ponded ice albedo 157 IF( ld_pnd_alb ) THEN 158 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd(ji,jj,jl) * z1_href_pnd ) 159 ELSE 160 zalb_pnd = rn_alb_dpnd 161 ENDIF 162 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd(ji,jj,jl) * z1_href_pnd ) 163 ! 162 164 ! !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 163 palb_os(ji,jj,jl) = ( zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice ) * tmask(ji,jj,1) 164 ! 165 palb_cs(ji,jj,jl) = palb_os(ji,jj,jl) & 166 & - ( - 0.1010 * palb_os(ji,jj,jl) * palb_os(ji,jj,jl) & 167 & + 0.1933 * palb_os(ji,jj,jl) - 0.0148 ) * tmask(ji,jj,1) 168 ! 165 zalb_os = ( zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice ) * tmask(ji,jj,1) 166 ! 167 zalb_cs = zalb_os - ( - 0.1010 * zalb_os * zalb_os & 168 & + 0.1933 * zalb_os - 0.0148 ) * tmask(ji,jj,1) 169 ! 170 ! albedo depends on cloud fraction because of non-linear spectral effects 171 palb_ice(ji,jj,jl) = ( 1._wp - pcloud_fra(ji,jj) ) * zalb_cs + pcloud_fra(ji,jj) * zalb_os 172 169 173 END DO 170 174 END DO
Note: See TracChangeset
for help on using the changeset viewer.