Changeset 12377 for NEMO/trunk/src/ICE/iceupdate.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/ICE/iceupdate.F90
r11536 r12377 15 15 !! ice_update_tau : update i- and j-stresses, and its modulus at the ocean surface 16 16 !!---------------------------------------------------------------------- 17 USE oce , ONLY : sshn, sshb18 17 USE phycst ! physical constants 19 18 USE dom_oce ! ocean domain … … 45 44 46 45 !! * Substitutions 47 # include " vectopt_loop_substitute.h90"46 # include "do_loop_substitute.h90" 48 47 !!---------------------------------------------------------------------- 49 48 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 114 113 ENDIF 115 114 116 DO jj = 1, jpj 117 DO ji = 1, jpi 118 119 ! Solar heat flux reaching the ocean = zqsr (W.m-2) 120 !--------------------------------------------------- 121 zqsr = qsr_tot(ji,jj) - SUM( a_i_b(ji,jj,:) * ( qsr_ice(ji,jj,:) - qtr_ice_bot(ji,jj,:) ) ) 122 123 ! Total heat flux reaching the ocean = qt_oce_ai (W.m-2) 124 !--------------------------------------------------- 125 zqmass = hfx_thd(ji,jj) + hfx_dyn(ji,jj) + hfx_res(ji,jj) ! heat flux from snow is 0 (T=0 degC) 126 qt_oce_ai(ji,jj) = qt_oce_ai(ji,jj) + zqmass + zqsr 127 128 ! Add the residual from heat diffusion equation and sublimation (W.m-2) 129 !---------------------------------------------------------------------- 130 qt_oce_ai(ji,jj) = qt_oce_ai(ji,jj) + hfx_err_dif(ji,jj) + & 131 & ( hfx_sub(ji,jj) - SUM( qevap_ice(ji,jj,:) * a_i_b(ji,jj,:) ) ) 132 133 ! New qsr and qns used to compute the oceanic heat flux at the next time step 134 !---------------------------------------------------------------------------- 135 qsr(ji,jj) = zqsr 136 qns(ji,jj) = qt_oce_ai(ji,jj) - zqsr 137 138 ! Mass flux at the atm. surface 139 !----------------------------------- 140 wfx_sub(ji,jj) = wfx_snw_sub(ji,jj) + wfx_ice_sub(ji,jj) 141 142 ! Mass flux at the ocean surface 143 !------------------------------------ 144 ! case of realistic freshwater flux (Tartinville et al., 2001) (presently ACTIVATED) 145 ! ------------------------------------------------------------------------------------- 146 ! The idea of this approach is that the system that we consider is the ICE-OCEAN system 147 ! Thus FW flux = External ( E-P+snow melt) 148 ! Salt flux = Exchanges in the ice-ocean system then converted into FW 149 ! Associated to Ice formation AND Ice melting 150 ! Even if i see Ice melting as a FW and SALT flux 151 ! 152 ! mass flux from ice/ocean 153 wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) & 154 & + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) + wfx_lam(ji,jj) + wfx_pnd(ji,jj) 155 156 ! add the snow melt water to snow mass flux to the ocean 157 wfx_snw(ji,jj) = wfx_snw_sni(ji,jj) + wfx_snw_dyn(ji,jj) + wfx_snw_sum(ji,jj) 158 159 ! mass flux at the ocean/ice interface 160 fmmflx(ji,jj) = - ( wfx_ice(ji,jj) + wfx_snw(ji,jj) + wfx_err_sub(ji,jj) ) ! F/M mass flux save at least for biogeochemical model 161 emp(ji,jj) = emp_oce(ji,jj) - wfx_ice(ji,jj) - wfx_snw(ji,jj) - wfx_err_sub(ji,jj) ! mass flux + F/M mass flux (always ice/ocean mass exchange) 162 163 164 ! Salt flux at the ocean surface 165 !------------------------------------------ 166 sfx(ji,jj) = sfx_bog(ji,jj) + sfx_bom(ji,jj) + sfx_sum(ji,jj) + sfx_sni(ji,jj) + sfx_opw(ji,jj) & 167 & + sfx_res(ji,jj) + sfx_dyn(ji,jj) + sfx_bri(ji,jj) + sfx_sub(ji,jj) + sfx_lam(ji,jj) 168 169 ! Mass of snow and ice per unit area 170 !---------------------------------------- 171 snwice_mass_b(ji,jj) = snwice_mass(ji,jj) ! save mass from the previous ice time step 172 ! ! new mass per unit area 173 snwice_mass (ji,jj) = tmask(ji,jj,1) * ( rhos * vt_s(ji,jj) + rhoi * vt_i(ji,jj) ) 174 ! ! time evolution of snow+ice mass 175 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_rdtice 176 177 END DO 178 END DO 115 DO_2D_11_11 116 117 ! Solar heat flux reaching the ocean = zqsr (W.m-2) 118 !--------------------------------------------------- 119 zqsr = qsr_tot(ji,jj) - SUM( a_i_b(ji,jj,:) * ( qsr_ice(ji,jj,:) - qtr_ice_bot(ji,jj,:) ) ) 120 121 ! Total heat flux reaching the ocean = qt_oce_ai (W.m-2) 122 !--------------------------------------------------- 123 zqmass = hfx_thd(ji,jj) + hfx_dyn(ji,jj) + hfx_res(ji,jj) ! heat flux from snow is 0 (T=0 degC) 124 qt_oce_ai(ji,jj) = qt_oce_ai(ji,jj) + zqmass + zqsr 125 126 ! Add the residual from heat diffusion equation and sublimation (W.m-2) 127 !---------------------------------------------------------------------- 128 qt_oce_ai(ji,jj) = qt_oce_ai(ji,jj) + hfx_err_dif(ji,jj) + & 129 & ( hfx_sub(ji,jj) - SUM( qevap_ice(ji,jj,:) * a_i_b(ji,jj,:) ) ) 130 131 ! New qsr and qns used to compute the oceanic heat flux at the next time step 132 !---------------------------------------------------------------------------- 133 qsr(ji,jj) = zqsr 134 qns(ji,jj) = qt_oce_ai(ji,jj) - zqsr 135 136 ! Mass flux at the atm. surface 137 !----------------------------------- 138 wfx_sub(ji,jj) = wfx_snw_sub(ji,jj) + wfx_ice_sub(ji,jj) 139 140 ! Mass flux at the ocean surface 141 !------------------------------------ 142 ! case of realistic freshwater flux (Tartinville et al., 2001) (presently ACTIVATED) 143 ! ------------------------------------------------------------------------------------- 144 ! The idea of this approach is that the system that we consider is the ICE-OCEAN system 145 ! Thus FW flux = External ( E-P+snow melt) 146 ! Salt flux = Exchanges in the ice-ocean system then converted into FW 147 ! Associated to Ice formation AND Ice melting 148 ! Even if i see Ice melting as a FW and SALT flux 149 ! 150 ! mass flux from ice/ocean 151 wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) & 152 & + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) + wfx_lam(ji,jj) + wfx_pnd(ji,jj) 153 154 ! add the snow melt water to snow mass flux to the ocean 155 wfx_snw(ji,jj) = wfx_snw_sni(ji,jj) + wfx_snw_dyn(ji,jj) + wfx_snw_sum(ji,jj) 156 157 ! mass flux at the ocean/ice interface 158 fmmflx(ji,jj) = - ( wfx_ice(ji,jj) + wfx_snw(ji,jj) + wfx_err_sub(ji,jj) ) ! F/M mass flux save at least for biogeochemical model 159 emp(ji,jj) = emp_oce(ji,jj) - wfx_ice(ji,jj) - wfx_snw(ji,jj) - wfx_err_sub(ji,jj) ! mass flux + F/M mass flux (always ice/ocean mass exchange) 160 161 162 ! Salt flux at the ocean surface 163 !------------------------------------------ 164 sfx(ji,jj) = sfx_bog(ji,jj) + sfx_bom(ji,jj) + sfx_sum(ji,jj) + sfx_sni(ji,jj) + sfx_opw(ji,jj) & 165 & + sfx_res(ji,jj) + sfx_dyn(ji,jj) + sfx_bri(ji,jj) + sfx_sub(ji,jj) + sfx_lam(ji,jj) 166 167 ! Mass of snow and ice per unit area 168 !---------------------------------------- 169 snwice_mass_b(ji,jj) = snwice_mass(ji,jj) ! save mass from the previous ice time step 170 ! ! new mass per unit area 171 snwice_mass (ji,jj) = tmask(ji,jj,1) * ( rhos * vt_s(ji,jj) + rhoi * vt_i(ji,jj) ) 172 ! ! time evolution of snow+ice mass 173 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_rdtice 174 175 END_2D 179 176 180 177 ! Storing the transmitted variables … … 286 283 #endif 287 284 IF( ln_icectl ) CALL ice_prt (kt, iiceprt, jiceprt, 3, 'Final state ice_update') ! prints 288 IF( ln_ctl) CALL ice_prt3D ('iceupdate') ! prints285 IF( sn_cfctl%l_prtctl ) CALL ice_prt3D ('iceupdate') ! prints 289 286 IF( ln_timing ) CALL timing_stop ('ice_update') ! timing 290 287 ! … … 335 332 ! 336 333 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 337 DO jj = 2, jpjm1 !* update the modulus of stress at ocean surface (T-point) 338 DO ji = fs_2, fs_jpim1 339 ! ! 2*(U_ice-U_oce) at T-point 340 zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) 341 zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1) 342 ! ! |U_ice-U_oce|^2 343 zmodt = 0.25_wp * ( zu_t * zu_t + zv_t * zv_t ) 344 ! ! update the ocean stress modulus 345 taum(ji,jj) = ( 1._wp - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * zrhoco * zmodt 346 tmod_io(ji,jj) = zrhoco * SQRT( zmodt ) ! rhoco * |U_ice-U_oce| at T-point 347 END DO 348 END DO 334 DO_2D_00_00 335 ! ! 2*(U_ice-U_oce) at T-point 336 zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) 337 zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1) 338 ! ! |U_ice-U_oce|^2 339 zmodt = 0.25_wp * ( zu_t * zu_t + zv_t * zv_t ) 340 ! ! update the ocean stress modulus 341 taum(ji,jj) = ( 1._wp - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * zrhoco * zmodt 342 tmod_io(ji,jj) = zrhoco * SQRT( zmodt ) ! rhoco * |U_ice-U_oce| at T-point 343 END_2D 349 344 CALL lbc_lnk_multi( 'iceupdate', taum, 'T', 1., tmod_io, 'T', 1. ) 350 345 ! … … 356 351 ! !== every ocean time-step ==! 357 352 ! 358 DO jj = 2, jpjm1 !* update the stress WITHOUT an ice-ocean rotation angle 359 DO ji = fs_2, fs_jpim1 ! Vect. Opt. 360 ! ice area at u and v-points 361 zat_u = ( at_i(ji,jj) * tmask(ji,jj,1) + at_i (ji+1,jj ) * tmask(ji+1,jj ,1) ) & 362 & / MAX( 1.0_wp , tmask(ji,jj,1) + tmask(ji+1,jj ,1) ) 363 zat_v = ( at_i(ji,jj) * tmask(ji,jj,1) + at_i (ji ,jj+1 ) * tmask(ji ,jj+1,1) ) & 364 & / MAX( 1.0_wp , tmask(ji,jj,1) + tmask(ji ,jj+1,1) ) 365 ! ! linearized quadratic drag formulation 366 zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) ) 367 zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) ) 368 ! ! stresses at the ocean surface 369 utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice 370 vtau(ji,jj) = ( 1._wp - zat_v ) * vtau_oce(ji,jj) + zat_v * zvtau_ice 371 END DO 372 END DO 353 DO_2D_00_00 354 ! ice area at u and v-points 355 zat_u = ( at_i(ji,jj) * tmask(ji,jj,1) + at_i (ji+1,jj ) * tmask(ji+1,jj ,1) ) & 356 & / MAX( 1.0_wp , tmask(ji,jj,1) + tmask(ji+1,jj ,1) ) 357 zat_v = ( at_i(ji,jj) * tmask(ji,jj,1) + at_i (ji ,jj+1 ) * tmask(ji ,jj+1,1) ) & 358 & / MAX( 1.0_wp , tmask(ji,jj,1) + tmask(ji ,jj+1,1) ) 359 ! ! linearized quadratic drag formulation 360 zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) ) 361 zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) ) 362 ! ! stresses at the ocean surface 363 utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice 364 vtau(ji,jj) = ( 1._wp - zat_v ) * vtau_oce(ji,jj) + zat_v * zvtau_ice 365 END_2D 373 366 CALL lbc_lnk_multi( 'iceupdate', utau, 'U', -1., vtau, 'V', -1. ) ! lateral boundary condition 374 367 !
Note: See TracChangeset
for help on using the changeset viewer.