Changeset 9922 for NEMO/trunk/src/ICE/icethd_dh.F90
- Timestamp:
- 2018-07-10T19:15:48+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/icethd_dh.F90
r9916 r9922 85 85 86 86 REAL(wp), DIMENSION(jpij) :: zqprec ! energy of fallen snow (J.m-3) 87 REAL(wp), DIMENSION(jpij) :: zq_ su! heat for surface ablation (J.m-2)88 REAL(wp), DIMENSION(jpij) :: zq_bo 87 REAL(wp), DIMENSION(jpij) :: zq_top ! heat for surface ablation (J.m-2) 88 REAL(wp), DIMENSION(jpij) :: zq_bot ! heat for bottom ablation (J.m-2) 89 89 REAL(wp), DIMENSION(jpij) :: zq_rema ! remaining heat at the end of the routine (J.m-2) 90 90 REAL(wp), DIMENSION(jpij) :: zf_tt ! Heat budget to determine melting or freezing(W.m-2) … … 131 131 ! 132 132 DO ji = 1, npti 133 zq_ su(ji)= MAX( 0._wp, qml_ice_1d(ji) * rdt_ice )133 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice ) 134 134 END DO 135 135 ! 136 CASE( np_jules_ EMULE )136 CASE( np_jules_OFF , np_jules_EMULE ) 137 137 ! 138 138 DO ji = 1, npti 139 139 zdum = qns_ice_1d(ji) + qsr_ice_1d(ji) - qtr_ice_top_1d(ji) - qcn_ice_top_1d(ji) 140 140 qml_ice_1d(ji) = zdum * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 141 zq_su(ji) = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice ) 142 END DO 143 ! 144 CASE( np_jules_OFF ) 145 ! 146 DO ji = 1, npti 147 zdum = qns_ice_1d(ji) + qsr_ice_1d(ji) - qtr_ice_top_1d(ji) - qcn_ice_top_1d(ji) 148 qml_ice_1d(ji) = zdum * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 149 zq_su(ji) = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice ) 141 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice ) 150 142 END DO 151 143 ! … … 154 146 DO ji = 1, npti 155 147 zf_tt(ji) = qcn_ice_bot_1d(ji) + qsb_ice_bot_1d(ji) + fhld_1d(ji) 156 zq_bo (ji)= MAX( 0._wp, zf_tt(ji) * rdt_ice )148 zq_bot(ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 157 149 END DO 158 150 … … 210 202 ! --- melt of falling snow --- 211 203 rswitch = MAX( 0._wp , SIGN( 1._wp , zqprec(ji) - epsi20 ) ) 212 zdeltah (ji,1) = - rswitch * zq_ su(ji) / MAX( zqprec(ji) , epsi20 ) ! thickness change213 zdeltah (ji,1) = MAX( - zdh_s_pre(ji), zdeltah(ji,1) ) ! bound melting204 zdeltah (ji,1) = - rswitch * zq_top(ji) / MAX( zqprec(ji) , epsi20 ) ! thickness change 205 zdeltah (ji,1) = MAX( - zdh_s_pre(ji), zdeltah(ji,1) ) ! bound melting 214 206 hfx_snw_1d (ji) = hfx_snw_1d (ji) - zdeltah(ji,1) * a_i_1d(ji) * zqprec(ji) * r1_rdtice ! heat used to melt snow (W.m-2, >0) 215 207 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice ! snow melting only = water into the ocean (then without snow precip), >0 … … 217 209 ! updates available heat + precipitations after melting 218 210 dh_s_mlt (ji) = dh_s_mlt(ji) + zdeltah(ji,1) 219 zq_ su (ji) = MAX( 0._wp , zq_su(ji) + zdeltah(ji,1) * zqprec(ji) )211 zq_top (ji) = MAX( 0._wp , zq_top (ji) + zdeltah(ji,1) * zqprec(ji) ) 220 212 zdh_s_pre(ji) = zdh_s_pre(ji) + zdeltah(ji,1) 221 213 … … 240 232 ! Snow melting 241 233 ! ------------ 242 ! If heat still available (zq_ su> 0), then melt more snow234 ! If heat still available (zq_top > 0), then melt more snow 243 235 zdeltah(1:npti,:) = 0._wp 244 236 zdh_s_mel(1:npti) = 0._wp 245 237 DO jk = 1, nlay_s 246 238 DO ji = 1, npti 247 IF( zh_s(ji,jk) > 0._wp .AND. zq_ su(ji) > 0._wp ) THEN239 IF( zh_s(ji,jk) > 0._wp .AND. zq_top(ji) > 0._wp ) THEN 248 240 ! 249 241 rswitch = MAX( 0._wp, SIGN( 1._wp, e_s_1d(ji,jk) - epsi20 ) ) 250 zdeltah (ji,jk) = - rswitch * zq_ su(ji) / MAX( e_s_1d(ji,jk), epsi20 ) ! thickness change251 zdeltah (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji,jk) ) ! bound melting242 zdeltah (ji,jk) = - rswitch * zq_top(ji) / MAX( e_s_1d(ji,jk), epsi20 ) ! thickness change 243 zdeltah (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji,jk) ) ! bound melting 252 244 zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,jk) 253 245 … … 257 249 ! updates available heat + thickness 258 250 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,jk) 259 zq_ su (ji) = MAX( 0._wp , zq_su(ji) + zdeltah(ji,jk) * e_s_1d(ji,jk) )251 zq_top (ji) = MAX( 0._wp , zq_top(ji) + zdeltah(ji,jk) * e_s_1d(ji,jk) ) 260 252 h_s_1d (ji) = MAX( 0._wp , h_s_1d(ji) + zdeltah(ji,jk) ) 261 253 zh_s (ji,jk) = MAX( 0._wp , zh_s(ji,jk) + zdeltah(ji,jk) ) … … 349 341 zdE = zEi - zEw ! Specific enthalpy difference < 0 350 342 351 zfmdt = - zq_ su(ji) / zdE! Mass flux to the ocean [kg/m2, >0]343 zfmdt = - zq_top(ji) / zdE ! Mass flux to the ocean [kg/m2, >0] 352 344 353 345 zdeltah(ji,jk) = - zfmdt * r1_rhoic ! Melt of layer jk [m, <0] … … 355 347 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] 356 348 357 zq_ su(ji) = MAX( 0._wp , zq_su(ji) - zdeltah(ji,jk) * rhoic * zdE ) ! update available heat349 zq_top(ji) = MAX( 0._wp , zq_top(ji) - zdeltah(ji,jk) * rhoic * zdE ) ! update available heat 358 350 359 351 dh_i_sum(ji) = dh_i_sum(ji) + zdeltah(ji,jk) ! Cumulate surface melt … … 515 507 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) 516 508 517 zfmdt = - zq_bo (ji) / zdE! Mass flux x time step (kg/m2, >0)509 zfmdt = - zq_bot(ji) / zdE ! Mass flux x time step (kg/m2, >0) 518 510 519 511 zdeltah(ji,jk) = - zfmdt * r1_rhoic ! Gross thickness change … … 521 513 zdeltah(ji,jk) = MIN( 0._wp , MAX( zdeltah(ji,jk), - zh_i(ji,jk) ) ) ! bound thickness change 522 514 523 zq_bo (ji) = MAX( 0._wp , zq_bo(ji) - zdeltah(ji,jk) * rhoic * zdE )! update available heat. MAX is necessary for roundup errors524 525 dh_i_bom(ji) = dh_i_bom(ji) + zdeltah(ji,jk) ! Update basal melt515 zq_bot(ji) = MAX( 0._wp , zq_bot(ji) - zdeltah(ji,jk) * rhoic * zdE ) ! update available heat. MAX is necessary for roundup errors 516 517 dh_i_bom(ji) = dh_i_bom(ji) + zdeltah(ji,jk) ! Update basal melt 526 518 527 519 zfmdt = - zdeltah(ji,jk) * rhoic ! Mass flux x time step > 0 … … 556 548 zdeltah(1:npti,:) = 0._wp ! important 557 549 DO ji = 1, npti 558 zq_rema (ji) = zq_ su(ji) + zq_bo(ji)550 zq_rema (ji) = zq_top(ji) + zq_bot(ji) 559 551 rswitch = 1._wp - MAX( 0._wp, SIGN( 1._wp, - h_s_1d(ji) ) ) ! =1 if snow 560 552 rswitch = rswitch * MAX( 0._wp, SIGN( 1._wp, e_s_1d(ji,1) - epsi20 ) )
Note: See TracChangeset
for help on using the changeset viewer.