Changeset 9922
- Timestamp:
- 2018-07-10T19:15:48+02:00 (5 years ago)
- Location:
- NEMO/trunk/src/ICE
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/ice.F90
r9916 r9922 256 256 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hfx_err_dif !: heat flux remaining due to change in non-solar flux [W.m-2] 257 257 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hfx_err_rem !: heat flux error after heat remapping [W.m-2] 258 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qt_atm_oi 258 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qt_atm_oi !: heat flux available for thermo transformations [W.m-2] 259 259 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qt_oce_ai !: heat flux remaining at the end of thermo transformations [W.m-2] 260 260 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_err_sub !: mass flux error after sublimation [kg.m-2.s-1] -
NEMO/trunk/src/ICE/icestp.F90
r9916 r9922 189 189 IF( ln_icethd ) CALL ice_thd( kt ) ! -- Ice thermodynamics 190 190 ! 191 !192 191 IF( ln_icethd ) CALL ice_cor( kt , 2 ) ! -- Corrections 193 192 ! … … 431 430 432 431 tau_icebfr(:,:) = 0._wp ! landfast ice param only (clem: important to keep the init here) 433 cnd_ice (:,:,:) = 0._wp ! initialisation of the effective conductivity at the top of ice/snow (Jules coupling) 432 cnd_ice (:,:,:) = 0._wp ! initialisation: effective conductivity at the top of ice/snow (Jules coupling) 433 qtr_ice_bot(:,:,:) = 0._wp ! initialization: part of solar radiation transmitted through the ice needed at least for outputs 434 434 ! 435 435 ! for control checks (ln_icediachk) -
NEMO/trunk/src/ICE/icethd.F90
r9916 r9922 128 128 CALL lbc_lnk( zfric, 'T', 1. ) 129 129 ! 130 qtr_ice_bot(:,:,:) = 0._wp ! initialization (part of solar radiation transmitted through the ice)131 132 130 !--------------------------------------------------------------------! 133 131 ! Partial computation of forcing for the thermodynamic sea ice model … … 143 141 ! ! temperature and turbulent mixing (McPhee, 1992) 144 142 ! 145 ! --- Energy received in the lead , zqld is defined everywhere (J.m-2) --- !143 ! --- Energy received in the lead from atm-oce exchanges, zqld is defined everywhere (J.m-2) --- ! 146 144 zqld = tmask(ji,jj,1) * rdt_ice * & 147 145 & ( ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) * frq_m(ji,jj) + & 148 146 & ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) 149 147 150 ! --- Energy needed to bring ocean surface layer until its freezing (<0, J.m-2) --- ! 151 ! includes supercooling potential energy (>0) or "above-freezing" energy (<0) 152 zqfr = tmask(ji,jj,1) * rau0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) 153 154 ! --- Above-freezing sensible heat content (J/m2 grid) 155 zqfr_neg = tmask(ji,jj,1) * rau0 * rcp * e3t_m(ji,jj) * MIN( ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ), 0._wp ) 156 157 ! --- Sensible ocean-to-ice heat flux (W/m2) 158 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 148 ! --- Energy needed to bring ocean surface layer until its freezing (mostly<0 but >0 if supercooling, J.m-2) --- ! 149 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) 150 zqfr_neg = MIN( zqfr , 0._wp ) ! only < 0 151 152 ! --- Sensible ocean-to-ice heat flux (mostly>0 but <0 if supercooling, W/m2) 153 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 159 154 qsb_ice_bot(ji,jj) = rswitch * rau0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 160 155 … … 380 375 CALL tab_2d_1d( npti, nptidx(1:npti), qsr_ice_1d (1:npti), qsr_ice (:,:,kl) ) 381 376 CALL tab_2d_1d( npti, nptidx(1:npti), qns_ice_1d (1:npti), qns_ice (:,:,kl) ) 382 CALL tab_2d_1d( npti, nptidx(1:npti), qtr_ice_bot_1d(1:npti), qtr_ice_bot (:,:,kl) )383 377 CALL tab_2d_1d( npti, nptidx(1:npti), evap_ice_1d (1:npti), evap_ice(:,:,kl) ) 384 378 CALL tab_2d_1d( npti, nptidx(1:npti), dqns_ice_1d (1:npti), dqns_ice(:,:,kl) ) -
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 ) ) -
NEMO/trunk/src/ICE/iceupdate.F90
r9916 r9922 109 109 qt_atm_oi (:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 110 110 qt_oce_ai (:,:) = ( 1._wp - at_i_b(:,:) ) * qns_oce(:,:) + qemp_oce(:,:) 111 qtr_ice_bot(:,:,:) = 0._wp112 111 emp_ice (:,:) = 0._wp 113 112 qemp_ice (:,:) = 0._wp
Note: See TracChangeset
for help on using the changeset viewer.