- Timestamp:
- 2020-01-27T15:31:53+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/ICE/icethd.F90
r12236 r12340 54 54 !! * Substitutions 55 55 # include "vectopt_loop_substitute.h90" 56 # include "do_loop_substitute.h90" 56 57 !!---------------------------------------------------------------------- 57 58 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 109 110 zu_io(:,:) = u_ice(:,:) - ssu_m(:,:) 110 111 zv_io(:,:) = v_ice(:,:) - ssv_m(:,:) 111 DO jj = 2, jpjm1 112 DO ji = fs_2, fs_jpim1 113 zfric(ji,jj) = rn_cio * ( 0.5_wp * & 114 & ( zu_io(ji,jj) * zu_io(ji,jj) + zu_io(ji-1,jj) * zu_io(ji-1,jj) & 115 & + zv_io(ji,jj) * zv_io(ji,jj) + zv_io(ji,jj-1) * zv_io(ji,jj-1) ) ) * tmask(ji,jj,1) 116 END DO 117 END DO 112 DO_2D_00_00 113 zfric(ji,jj) = rn_cio * ( 0.5_wp * & 114 & ( zu_io(ji,jj) * zu_io(ji,jj) + zu_io(ji-1,jj) * zu_io(ji-1,jj) & 115 & + zv_io(ji,jj) * zv_io(ji,jj) + zv_io(ji,jj-1) * zv_io(ji,jj-1) ) ) * tmask(ji,jj,1) 116 END_2D 118 117 ELSE ! if no ice dynamics => transmit directly the atmospheric stress to the ocean 119 DO jj = 2, jpjm1 120 DO ji = fs_2, fs_jpim1 121 zfric(ji,jj) = r1_rau0 * SQRT( 0.5_wp * & 122 & ( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) & 123 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1) ) ) * tmask(ji,jj,1) 124 END DO 125 END DO 118 DO_2D_00_00 119 zfric(ji,jj) = r1_rau0 * SQRT( 0.5_wp * & 120 & ( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) & 121 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1) ) ) * tmask(ji,jj,1) 122 END_2D 126 123 ENDIF 127 124 CALL lbc_lnk( 'icethd', zfric, 'T', 1. ) … … 130 127 ! Partial computation of forcing for the thermodynamic sea ice model 131 128 !--------------------------------------------------------------------! 132 DO jj = 1, jpj 133 DO ji = 1, jpi 134 rswitch = tmask(ji,jj,1) * MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) ) ! 0 if no ice 135 ! 136 ! ! solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 137 ! ! practically no "direct lateral ablation" 138 ! 139 ! ! net downward heat flux from the ice to the ocean, expressed as a function of ocean 140 ! ! temperature and turbulent mixing (McPhee, 1992) 141 ! 142 ! --- Energy received in the lead from atm-oce exchanges, zqld is defined everywhere (J.m-2) --- ! 143 zqld = tmask(ji,jj,1) * rdt_ice * & 144 & ( ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) * frq_m(ji,jj) + & 145 & ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) 146 147 ! --- Energy needed to bring ocean surface layer until its freezing (mostly<0 but >0 if supercooling, J.m-2) --- ! 148 zqfr = rau0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) * tmask(ji,jj,1) ! both < 0 (t_bo < sst) and > 0 (t_bo > sst) 149 zqfr_neg = MIN( zqfr , 0._wp ) ! only < 0 150 151 ! --- Sensible ocean-to-ice heat flux (mostly>0 but <0 if supercooling, W/m2) 152 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 153 qsb_ice_bot(ji,jj) = rswitch * rau0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 154 155 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 156 ! upper bound for qsb_ice_bot: the heat retrieved from the ocean must be smaller than the heat necessary to reach 157 ! the freezing point, so that we do not have SST < T_freeze 158 ! This implies: - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rtdice ) - zqfr >= 0 159 160 !-- Energy Budget of the leads (J.m-2), source of ice growth in open water. Must be < 0 to form ice 161 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr ) 162 163 ! If there is ice and leads are warming => transfer energy from the lead budget and use it for bottom melting 164 ! If the grid cell is fully covered by ice (no leads) => transfer energy from the lead budget to the ice bottom budget 165 IF( ( zqld >= 0._wp .AND. at_i(ji,jj) > 0._wp ) .OR. at_i(ji,jj) >= (1._wp - epsi10) ) THEN 166 fhld (ji,jj) = rswitch * zqld * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90 167 qlead(ji,jj) = 0._wp 168 ELSE 169 fhld (ji,jj) = 0._wp 170 ENDIF 171 ! 172 ! Net heat flux on top of the ice-ocean [W.m-2] 173 ! --------------------------------------------- 174 qt_atm_oi(ji,jj) = qns_tot(ji,jj) + qsr_tot(ji,jj) 175 END DO 176 END DO 129 DO_2D_11_11 130 rswitch = tmask(ji,jj,1) * MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) ) ! 0 if no ice 131 ! 132 ! ! solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 133 ! ! practically no "direct lateral ablation" 134 ! 135 ! ! net downward heat flux from the ice to the ocean, expressed as a function of ocean 136 ! ! temperature and turbulent mixing (McPhee, 1992) 137 ! 138 ! --- Energy received in the lead from atm-oce exchanges, zqld is defined everywhere (J.m-2) --- ! 139 zqld = tmask(ji,jj,1) * rdt_ice * & 140 & ( ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) * frq_m(ji,jj) + & 141 & ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) 142 143 ! --- Energy needed to bring ocean surface layer until its freezing (mostly<0 but >0 if supercooling, J.m-2) --- ! 144 zqfr = rau0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) * tmask(ji,jj,1) ! both < 0 (t_bo < sst) and > 0 (t_bo > sst) 145 zqfr_neg = MIN( zqfr , 0._wp ) ! only < 0 146 147 ! --- Sensible ocean-to-ice heat flux (mostly>0 but <0 if supercooling, W/m2) 148 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 149 qsb_ice_bot(ji,jj) = rswitch * rau0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 150 151 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 152 ! upper bound for qsb_ice_bot: the heat retrieved from the ocean must be smaller than the heat necessary to reach 153 ! the freezing point, so that we do not have SST < T_freeze 154 ! This implies: - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rtdice ) - zqfr >= 0 155 156 !-- Energy Budget of the leads (J.m-2), source of ice growth in open water. Must be < 0 to form ice 157 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr ) 158 159 ! If there is ice and leads are warming => transfer energy from the lead budget and use it for bottom melting 160 ! If the grid cell is fully covered by ice (no leads) => transfer energy from the lead budget to the ice bottom budget 161 IF( ( zqld >= 0._wp .AND. at_i(ji,jj) > 0._wp ) .OR. at_i(ji,jj) >= (1._wp - epsi10) ) THEN 162 fhld (ji,jj) = rswitch * zqld * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90 163 qlead(ji,jj) = 0._wp 164 ELSE 165 fhld (ji,jj) = 0._wp 166 ENDIF 167 ! 168 ! Net heat flux on top of the ice-ocean [W.m-2] 169 ! --------------------------------------------- 170 qt_atm_oi(ji,jj) = qns_tot(ji,jj) + qsr_tot(ji,jj) 171 END_2D 177 172 178 173 ! In case we bypass open-water ice formation … … 202 197 ! select ice covered grid points 203 198 npti = 0 ; nptidx(:) = 0 204 DO jj = 1, jpj 205 DO ji = 1, jpi 206 IF ( a_i(ji,jj,jl) > epsi10 ) THEN 207 npti = npti + 1 208 nptidx(npti) = (jj - 1) * jpi + ji 209 ENDIF 210 END DO 211 END DO 199 DO_2D_11_11 200 IF ( a_i(ji,jj,jl) > epsi10 ) THEN 201 npti = npti + 1 202 nptidx(npti) = (jj - 1) * jpi + ji 203 ENDIF 204 END_2D 212 205 213 206 IF( npti > 0 ) THEN ! If there is no ice, do nothing.
Note: See TracChangeset
for help on using the changeset viewer.