- Timestamp:
- 2019-12-05T12:06:36+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/ICE/icethd.F90
r10534 r12065 95 95 IF( ln_timing ) CALL timing_start('icethd') ! timing 96 96 IF( ln_icediachk ) CALL ice_cons_hsm(0, 'icethd', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation 97 IF( ln_icediachk ) CALL ice_cons2D (0, 'icethd', diag_v, diag_s, diag_t, diag_fv, diag_fs, diag_ft) ! conservation 97 98 98 99 IF( kt == nit000 .AND. lwp ) THEN … … 102 103 ENDIF 103 104 104 CALL ice_var_glo2eqv105 106 105 !---------------------------------------------! 107 106 ! computation of friction velocity at T points … … 162 161 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr ) 163 162 164 ! If there is ice and leads are warming, then transfer energy from the lead budget and use it for bottom melting 165 IF( zqld > 0._wp ) THEN 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 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 167 qlead(ji,jj) = 0._wp … … 178 178 ! In case we bypass open-water ice formation 179 179 IF( .NOT. ln_icedO ) qlead(:,:) = 0._wp 180 ! In case we bypass growing/melting from top and bottom : we suppose ice is impermeable => ocean is isolated from atmosphere180 ! In case we bypass growing/melting from top and bottom 181 181 IF( .NOT. ln_icedH ) THEN 182 qt_atm_oi (:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:)183 182 qsb_ice_bot(:,:) = 0._wp 184 183 fhld (:,:) = 0._wp … … 221 220 dh_i_sub (1:npti) = 0._wp ; dh_i_bog(1:npti) = 0._wp 222 221 dh_snowice(1:npti) = 0._wp ; dh_s_mlt(1:npti) = 0._wp 223 ! 224 IF( ln_icedH ) THEN ! --- growing/melting --- ! 225 CALL ice_thd_zdf ! Ice/Snow Temperature profile 226 CALL ice_thd_dh ! Ice/Snow thickness 227 CALL ice_thd_pnd ! Melt ponds formation 228 CALL ice_thd_ent( e_i_1d(1:npti,:) ) ! Ice enthalpy remapping 222 ! 223 CALL ice_thd_zdf ! --- Ice-Snow temperature --- ! 224 ! 225 IF( ln_icedH ) THEN ! --- Growing/Melting --- ! 226 CALL ice_thd_dh ! Ice-Snow thickness 227 CALL ice_thd_pnd ! Melt ponds formation 228 CALL ice_thd_ent( e_i_1d(1:npti,:) ) ! Ice enthalpy remapping 229 229 ENDIF 230 !231 230 CALL ice_thd_sal( ln_icedS ) ! --- Ice salinity --- ! 232 231 ! 233 CALL ice_thd_temp ! --- temperature update --- !232 CALL ice_thd_temp ! --- Temperature update --- ! 234 233 ! 235 234 IF( ln_icedH .AND. ln_virtual_itd ) & 236 & CALL ice_thd_mono ! --- extra lateral melting if virtual_itd --- !237 ! 238 IF( ln_icedA ) CALL ice_thd_da ! --- lateral melting --- !235 & CALL ice_thd_mono ! --- Extra lateral melting if virtual_itd --- ! 236 ! 237 IF( ln_icedA ) CALL ice_thd_da ! --- Lateral melting --- ! 239 238 ! 240 239 CALL ice_thd_1d2d( jl, 2 ) ! --- Change units of e_i, e_s from J/m3 to J/m2 --- ! 241 240 ! ! --- & Move to 2D arrays --- ! 242 !243 241 ENDIF 244 242 ! 245 243 END DO 246 ! update ice age (in case a_i changed, i.e. becomes 0 or lateral melting) 247 oa_i(:,:,:) = o_i(:,:,:) * a_i(:,:,:) 248 244 ! 249 245 IF( ln_icediachk ) CALL ice_cons_hsm(1, 'icethd', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) 250 ! 251 CALL ice_var_zapsmall ! --- remove very small ice concentration (<1e-10) --- ! 252 ! ! & make sure at_i=SUM(a_i) & ato_i=1 where at_i=0 246 IF( ln_icediachk ) CALL ice_cons2D (1, 'icethd', diag_v, diag_s, diag_t, diag_fv, diag_fs, diag_ft) 253 247 ! 254 IF( jpl > 1 ) CALL ice_itd_rem( kt )! --- Transport ice between thickness categories --- !255 ! 256 IF( ln_icedO ) CALL ice_thd_do ! --- frazil ice growingin leads --- !248 IF( jpl > 1 ) CALL ice_itd_rem( kt ) ! --- Transport ice between thickness categories --- ! 249 ! 250 IF( ln_icedO ) CALL ice_thd_do ! --- Frazil ice growth in leads --- ! 257 251 ! 258 252 ! controls … … 418 412 CALL tab_2d_1d( npti, nptidx(1:npti), sst_1d(1:npti), sst_m ) 419 413 CALL tab_2d_1d( npti, nptidx(1:npti), sss_1d(1:npti), sss_m ) 420 414 ! 415 ! to update ice age 416 CALL tab_2d_1d( npti, nptidx(1:npti), o_i_1d (1:npti), o_i (:,:,kl) ) 417 CALL tab_2d_1d( npti, nptidx(1:npti), oa_i_1d(1:npti), oa_i(:,:,kl) ) 418 ! 421 419 ! --- Change units of e_i, e_s from J/m2 to J/m3 --- ! 422 420 DO jk = 1, nlay_i … … 443 441 sv_i_1d(1:npti) = s_i_1d (1:npti) * v_i_1d (1:npti) 444 442 v_ip_1d(1:npti) = h_ip_1d(1:npti) * a_ip_1d(1:npti) 443 oa_i_1d(1:npti) = o_i_1d (1:npti) * a_i_1d (1:npti) 445 444 446 445 CALL tab_1d_2d( npti, nptidx(1:npti), at_i_1d(1:npti), at_i ) … … 516 515 CALL tab_1d_2d( npti, nptidx(1:npti), sv_i_1d(1:npti), sv_i(:,:,kl) ) 517 516 CALL tab_1d_2d( npti, nptidx(1:npti), v_ip_1d(1:npti), v_ip(:,:,kl) ) 517 CALL tab_1d_2d( npti, nptidx(1:npti), oa_i_1d(1:npti), oa_i(:,:,kl) ) 518 518 ! 519 519 END SELECT … … 541 541 REWIND( numnam_ice_ref ) ! Namelist namthd in reference namelist : Ice thermodynamics 542 542 READ ( numnam_ice_ref, namthd, IOSTAT = ios, ERR = 901) 543 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd in reference namelist' , lwp)543 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd in reference namelist' ) 544 544 REWIND( numnam_ice_cfg ) ! Namelist namthd in configuration namelist : Ice thermodynamics 545 545 READ ( numnam_ice_cfg, namthd, IOSTAT = ios, ERR = 902 ) 546 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namthd in configuration namelist' , lwp)546 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namthd in configuration namelist' ) 547 547 IF(lwm) WRITE( numoni, namthd ) 548 548 !
Note: See TracChangeset
for help on using the changeset viewer.