- Timestamp:
- 2010-11-10T08:48:54+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90
r2319 r2370 2 2 !!====================================================================== 3 3 !! *** MODULE limsbc_2 *** 4 !! computation of the flux at the sea ice/ocean interface4 !! LIM-2 : updates the fluxes at the ocean surface with ice-ocean fluxes 5 5 !!====================================================================== 6 6 !! History : LIM ! 2000-01 (H. Goosse) Original code 7 7 !! 1.0 ! 2002-07 (C. Ethe, G. Madec) re-writing F90 8 8 !! 3.0 ! 2006-07 (G. Madec) surface module 9 !! 3.3 ! 2009-05 (G.Garric, C. Bricaud) addition of the lim2_evp case 9 !! 3.3 ! 2009-05 (G. Garric, C. Bricaud) addition of the lim2_evp case 10 !! - ! 2010-11 (G. Madec) ice-ocean stress computed at each ocean time-step 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_lim2 … … 13 14 !! 'key_lim2' LIM 2.0 sea-ice model 14 15 !!---------------------------------------------------------------------- 15 !! ----------------------------------------------------------------------16 !! lim_sbc_ 2 : flux at the ice / ocean interface16 !! lim_sbc_flx_2 : update mass, heat and salt fluxes at the ocean surface 17 !! lim_sbc_tau_2 : update i- and j-stresses, and its modulus at the ocean surface 17 18 !!---------------------------------------------------------------------- 18 19 USE par_oce ! ocean parameters 20 USE phycst ! physical constants 19 21 USE dom_oce ! ocean domain 22 USE dom_ice_2 ! LIM-2: ice domain 23 USE ice_2 ! LIM-2: ice variables 20 24 USE sbc_ice ! surface boundary condition: ice 21 25 USE sbc_oce ! surface boundary condition: ocean 22 USE phycst ! physical constants23 USE ice_2 ! LIM2: ice variables24 26 25 27 USE lbclnk ! ocean lateral boundary condition - MPP exchanges 26 28 USE in_out_manager ! I/O manager 27 29 USE diaar5, ONLY : lk_diaar5 28 USE iom ! 30 USE iom ! I/O library 29 31 USE albedo ! albedo parameters 30 32 USE prtctl ! Print control … … 34 36 PRIVATE 35 37 36 PUBLIC lim_sbc_2 ! called by sbc_ice_lim_2 37 38 REAL(wp) :: r1_rdtice ! constant values 39 REAL(wp) :: epsi16 = 1.e-16 ! - - 40 REAL(wp) :: rzero = 0.e0 ! - - 41 REAL(wp) :: rone = 1.e0 ! - - 38 PUBLIC lim_sbc_flx_2 ! called by sbc_ice_lim_2 39 PUBLIC lim_sbc_tau_2 ! called by sbc_ice_lim_2 40 41 REAL(wp) :: r1_rdtice ! = 1. / rdt_ice 42 REAL(wp) :: epsi16 = 1.e-16_wp ! constant values 43 REAL(wp) :: rzero = 0._wp ! - - 44 REAL(wp) :: rone = 1._wp ! - - 42 45 ! 43 REAL(wp), DIMENSION(jpi,jpj) :: soce_r, sice_r ! constant SSS and ice salinity used in levitating sea-ice case 46 REAL(wp), DIMENSION(jpi,jpj) :: soce_0, sice_0 ! constant SSS and ice salinity used in levitating sea-ice case 47 48 REAL(wp), DIMENSION(jpi,jpj) :: utau_oce, vtau_oce ! air-ocean surface i- & j-stress [N/m2] 49 REAL(wp), DIMENSION(jpi,jpj) :: tmod_io ! modulus of the ice-ocean relative velocity [m/s] 44 50 45 51 !! * Substitutions … … 48 54 !! NEMO/LIM2 3.3 , UCL - NEMO Consortium (2010) 49 55 !! $Id$ 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 51 !!---------------------------------------------------------------------- 52 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 57 !!---------------------------------------------------------------------- 53 58 CONTAINS 54 59 55 SUBROUTINE lim_sbc_ 2( kt )60 SUBROUTINE lim_sbc_flx_2( kt ) 56 61 !!------------------------------------------------------------------- 57 62 !! *** ROUTINE lim_sbc_2 *** … … 77 82 !! Tartinville et al. 2001 Ocean Modelling, 3, 95-108. 78 83 !!--------------------------------------------------------------------- 79 INTEGER :: kt ! number of iteration84 INTEGER, INTENT(in) :: kt ! number of iteration 80 85 !! 81 INTEGER :: ji, jj 86 INTEGER :: ji, jj ! dummy loop indices 82 87 INTEGER :: ii0, ii1, ij0, ij1 ! local integers 83 88 INTEGER :: ifvt, i1mfr, idfr, iflt ! - - 84 89 INTEGER :: ial, iadv, ifral, ifrdv ! - - 85 REAL(wp) :: zqsr, zqns, zsang, zmod, zfm ! local scalars 86 REAL(wp) :: zinda, zfons, zemp, zztmp ! - - 87 REAL(wp) :: zfrldu, zutau, zu_io ! - - 88 REAL(wp) :: zfrldv, zvtau, zv_io ! - - 89 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! 2D workspace 90 REAL(wp), DIMENSION(jpi,jpj) :: ztiomi, zqnsoce ! - - 90 REAL(wp) :: zqsr, zqns, zfm ! local scalars 91 REAL(wp) :: zinda, zfons, zemp ! - - 92 REAL(wp), DIMENSION(jpi,jpj) :: zqnsoce ! 2D workspace 91 93 REAL(wp), DIMENSION(jpi,jpj,1) :: zalb, zalbp ! 2D/3D workspace 92 93 94 !!--------------------------------------------------------------------- 94 95 95 96 96 IF( kt == nit000 ) THEN 97 97 IF(lwp) WRITE(numout,*) 98 #if defined key_lim2_vp 99 IF(lwp) WRITE(numout,*) 'lim_sbc_2 : LIM 2.0 sea-ice (VP rheology) - surface boundary condition' 100 #else 101 IF(lwp) WRITE(numout,*) 'lim_sbc_2 : LIM 2.0 sea-ice (EVP rheology) - surface boundary condition' 102 #endif 103 IF(lwp) WRITE(numout,*) '~~~~~~~~~ ' 98 IF(lwp) WRITE(numout,*) 'lim_sbc_flx_2 : LIM-2 sea-ice - surface boundary condition - Mass, heat & salt fluxes' 99 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~ ' 104 100 ! 105 101 r1_rdtice = 1. / rdt_ice 106 102 ! 107 soce_r(:,:) = soce 108 sice_r(:,:) = sice 109 ! 110 IF( cp_cfg == "orca" ) THEN 111 ! ocean/ice salinity in the Baltic sea 112 DO jj = 1, jpj 113 DO ji = 1, jpi 114 IF( glamt(ji,jj) >= 14. .AND. glamt(ji,jj) <= 32. .AND. gphit(ji,jj) >= 54. .AND. gphit(ji,jj) <= 66. ) THEN 115 soce_r(ji,jj) = 4.e0 116 sice_r(ji,jj) = 2.e0 117 END IF 118 END DO 119 END DO 120 ! 121 END IF 122 END IF 103 soce_0(:,:) = soce ! constant SSS and ice salinity used in levitating sea-ice case 104 sice_0(:,:) = sice 105 ! 106 IF( cp_cfg == "orca" ) THEN ! decrease ocean & ice reference salinities in the Baltic sea 107 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 108 & 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 109 soce_0(:,:) = 4._wp 110 sice_0(:,:) = 2._wp 111 END WHERE 112 ENDIF 113 ! 114 ENDIF 123 115 124 116 !------------------------------------------! … … 126 118 !------------------------------------------! 127 119 128 !!gm129 !!gm CAUTION130 !!gm re-verifies the non solar expression, especially over open ocen131 !!gm132 120 zqnsoce(:,:) = qns(:,:) 133 121 DO jj = 1, jpj … … 190 178 191 179 fsbbq(ji,jj) = ( 1.0 - ( ifvt + iflt ) ) * fscmbq(ji,jj) ! ??? 192 180 ! 193 181 qsr (ji,jj) = zqsr ! solar heat flux 194 182 qns (ji,jj) = zqns - fdtcn(ji,jj) ! non solar heat flux … … 203 191 ! mass flux at the ocean surface ! 204 192 !------------------------------------------! 205 206 !!gm207 !!gm CAUTION208 !!gm re-verifies the emp & emps expression, especially the absence of 1-frld on zfm209 !!gm210 193 DO jj = 1, jpj 211 194 DO ji = 1, jpi 212 195 ! 213 196 #if defined key_coupled 214 197 ! freshwater exchanges at the ice-atmosphere / ocean interface (coupled mode) … … 223 206 ! ! ice-covered fraction: 224 207 #endif 225 208 ! 226 209 ! computing salt exchanges at the ice/ocean interface 227 zfons = ( soce_ r(ji,jj) - sice_r(ji,jj) ) * ( rdmicif(ji,jj) * r1_rdtice )228 210 zfons = ( soce_0(ji,jj) - sice_0(ji,jj) ) * ( rdmicif(ji,jj) * r1_rdtice ) 211 ! 229 212 ! converting the salt flux from ice to a freshwater flux from ocean 230 213 zfm = zfons / ( sss_m(ji,jj) + epsi16 ) 231 214 ! 232 215 emps(ji,jj) = zemp + zfm ! surface ocean concentration/dilution effect (use on SSS evolution) 233 216 emp (ji,jj) = zemp ! surface ocean volume flux (use on sea-surface height evolution) 234 217 ! 235 218 END DO 236 219 END DO 237 220 238 IF( lk_diaar5 ) THEN 221 IF( lk_diaar5 ) THEN ! AR5 diagnostics 239 222 CALL iom_put( 'isnwmlt_cea' , rdmsnif(:,:) * r1_rdtice ) 240 CALL iom_put( 'fsal_virt_cea', soce_r(:,:) * rdmicif(:,:) * r1_rdtice ) 241 CALL iom_put( 'fsal_real_cea', - sice_r(:,:) * rdmicif(:,:) * r1_rdtice ) 242 ENDIF 243 244 !------------------------------------------! 245 ! momentum flux at the ocean surface ! 246 !------------------------------------------! 247 248 IF ( ln_limdyn ) THEN ! Update the stress over ice-over area (only in ice-dynamic case) 249 ! ! otherwise the atmosphere-ocean stress is used everywhere 250 251 ! ... ice stress over ocean with a ice-ocean rotation angle (at I-point) 252 !CDIR NOVERRCHK 253 DO jj = 1, jpj 254 !CDIR NOVERRCHK 255 DO ji = 1, jpi 256 ! ... change the cosinus angle sign in the south hemisphere 257 zsang = SIGN(1.e0, gphif(ji,jj) ) * sangvg 258 ! ... ice velocity relative to the ocean at I-point 259 zu_io = u_ice(ji,jj) - u_oce(ji,jj) 260 zv_io = v_ice(ji,jj) - v_oce(ji,jj) 261 zmod = SQRT( zu_io * zu_io + zv_io * zv_io ) 262 zztmp = rhoco * zmod 263 ! ... components of ice stress over ocean with a ice-ocean rotation angle (at I-point) 264 ztio_u(ji,jj) = zztmp * ( cangvg * zu_io - zsang * zv_io ) 265 ztio_v(ji,jj) = zztmp * ( cangvg * zv_io + zsang * zu_io ) 266 ! ... module of ice stress over ocean (at I-point) 267 ztiomi(ji,jj) = zztmp * zmod 268 ! 269 END DO 270 END DO 271 272 DO jj = 2, jpjm1 273 DO ji = 2, jpim1 ! NO vector opt. 274 ! ... components of ice-ocean stress at U and V-points (from I-point values) 275 #if defined key_lim2_vp 276 zutau = 0.5 * ( ztio_u(ji+1,jj) + ztio_u(ji+1,jj+1) ) ! VP rheology 277 zvtau = 0.5 * ( ztio_v(ji,jj+1) + ztio_v(ji+1,jj+1) ) 278 #else 279 zutau = ztio_u(ji,jj) ! EVP rheology 280 zvtau = ztio_v(ji,jj) 281 #endif 282 ! ... open-ocean (lead) fraction at U- & V-points (from T-point values) 283 zfrldu = 0.5 * ( frld(ji,jj) + frld(ji+1,jj ) ) 284 zfrldv = 0.5 * ( frld(ji,jj) + frld(ji ,jj+1) ) 285 ! ... update components of surface ocean stress (ice-cover wheighted) 286 utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * zutau 287 vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * zvtau 288 ! ... module of ice-ocean stress at T-points (from I-point values) 289 zztmp = 0.25 * ( ztiomi(ji,jj) + ztiomi(ji+1,jj) + ztiomi(ji,jj+1) + ztiomi(ji+1,jj+1) ) 290 ! ... update module of surface ocean stress (ice-cover wheighted) 291 taum(ji,jj) = frld(ji,jj) * taum(ji,jj) + ( 1. - frld(ji,jj) ) * zztmp 292 ! 293 END DO 294 END DO 295 296 ! boundary condition on the stress (utau,vtau,taum) 297 CALL lbc_lnk( utau, 'U', -1. ) 298 CALL lbc_lnk( vtau, 'V', -1. ) 299 CALL lbc_lnk( taum, 'T', 1. ) 300 223 CALL iom_put( 'fsal_virt_cea', soce_0(:,:) * rdmicif(:,:) * r1_rdtice ) 224 CALL iom_put( 'fsal_real_cea', - sice_0(:,:) * rdmicif(:,:) * r1_rdtice ) 301 225 ENDIF 302 226 … … 305 229 !-----------------------------------------------! 306 230 307 IF ( lk_cpl ) THEN231 IF( lk_cpl ) THEN ! coupled case 308 232 ! Ice surface temperature 309 233 tn_ice(:,:,1) = sist(:,:) ! sea-ice surface temperature … … 314 238 ENDIF 315 239 316 IF(ln_ctl) THEN 240 IF(ln_ctl) THEN ! control print 317 241 CALL prt_ctl(tab2d_1=qsr , clinfo1=' lim_sbc: qsr : ', tab2d_2=qns , clinfo2=' qns : ') 318 242 CALL prt_ctl(tab2d_1=emp , clinfo1=' lim_sbc: emp : ', tab2d_2=emps , clinfo2=' emps : ') … … 321 245 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' lim_sbc: fr_i : ', tab2d_2=tn_ice(:,:,1), clinfo2=' tn_ice : ') 322 246 ENDIF 323 324 END SUBROUTINE lim_sbc_2 247 ! 248 END SUBROUTINE lim_sbc_flx_2 249 250 251 SUBROUTINE lim_sbc_tau_2( kt , pu_oce, pv_oce ) 252 !!------------------------------------------------------------------- 253 !! *** ROUTINE lim_sbc_tau *** 254 !! 255 !! ** Purpose : Update the ocean surface stresses due to the ice 256 !! 257 !! ** Action : * at each ice time step (every nn_fsbc time step): 258 !! - compute the modulus of ice-ocean relative velocity 259 !! at T-point (C-grid) or I-point (B-grid) 260 !! tmod_io = rhoco * | U_ice-U_oce | 261 !! - update the modulus of stress at ocean surface 262 !! taum = frld * taum + (1-frld) * tmod_io * | U_ice-U_oce | 263 !! * at each ocean time step (each kt): 264 !! compute linearized ice-ocean stresses as 265 !! Utau = tmod_io * | U_ice - pU_oce | 266 !! using instantaneous current ocean velocity (usually before) 267 !! 268 !! NB: - the averaging operator used depends on the ice dynamics grid (cp_ice_msh='I' or 'C') 269 !! - ice-ocean rotation angle only allowed in cp_ice_msh='I' case 270 !! - here we make an approximation: taum is only computed every ice time step 271 !! This avoids mutiple average to pass from T -> U,V grids and next from U,V grids 272 !! to T grid. taum is used in TKE and GLS, which should not be too sensitive to this approximaton... 273 !! 274 !! ** Outputs : - utau, vtau : surface ocean i- and j-stress (u- & v-pts) updated with ice-ocean fluxes 275 !! - taum : modulus of the surface ocean stress (T-point) updated with ice-ocean fluxes 276 !!--------------------------------------------------------------------- 277 INTEGER , INTENT(in) :: kt ! ocean time-step index 278 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pu_oce, pv_oce ! surface ocean currents 279 !! 280 INTEGER :: ji, jj ! dummy loop indices 281 REAL(wp) :: zfrldu, zat_u, zu_i, zutau_ice, zu_t, zmodt ! local scalar 282 REAL(wp) :: zfrldv, zat_v, zv_i, zvtau_ice, zv_t, zmodi ! - - 283 REAL(wp) :: zsang, zumt ! - - 284 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! ocean stress below sea-ice 285 !!--------------------------------------------------------------------- 286 ! 287 IF( kt == nit000 .AND. lwp ) THEN ! control print 288 WRITE(numout,*) 289 WRITE(numout,*) 'lim_sbc_tau_2 : LIM 2.0 sea-ice - surface ocean momentum fluxes' 290 WRITE(numout,*) '~~~~~~~~~~~~~ ' 291 IF( lk_lim2_vp ) THEN ; WRITE(numout,*) ' VP rheology - B-grid case' 292 ELSE ; WRITE(numout,*) ' EVP rheology - C-grid case' 293 ENDIF 294 ENDIF 295 ! 296 SELECT CASE( cp_ice_msh ) 297 ! !-----------------------! 298 CASE( 'I' ) ! B-grid ice dynamics ! I-point (i.e. F-point with sea-ice indexation) 299 ! !--=--------------------! 300 ! 301 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 302 !CDIR NOVERRCHK 303 DO jj = 1, jpj !* modulus of ice-ocean relative velocity at I-point 304 !CDIR NOVERRCHK 305 DO ji = 1, jpi 306 zu_i = u_ice(ji,jj) - u_oce(ji,jj) ! ice-ocean relative velocity at I-point 307 zv_i = v_ice(ji,jj) - v_oce(ji,jj) 308 tmod_io(ji,jj) = SQRT( zu_i * zu_i + zv_i * zv_i ) ! modulus of this velocity (at I-point) 309 END DO 310 END DO 311 !CDIR NOVERRCHK 312 DO jj = 1, jpjm1 !* update the modulus of stress at ocean surface (T-point) 313 !CDIR NOVERRCHK 314 DO ji = 1, jpim1 ! NO vector opt. 315 ! ! modulus of U_ice-U_oce at T-point 316 zumt = 0.25_wp * ( tmod_io(ji+1,jj) + tmod_io(ji+1,jj+1) & 317 & + tmod_io(ji,jj+1) + tmod_io(ji+1,jj+1) ) 318 ! ! update the modulus of stress at ocean surface 319 taum(ji,jj) = frld(ji,jj) * taum(ji,jj) + ( 1._wp - frld(ji,jj) ) * rhoco * zumt * zumt 320 END DO 321 END DO 322 CALL lbc_lnk( taum, 'T', 1. ) 323 ! 324 utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step 325 vtau_oce(:,:) = vtau(:,:) 326 ! 327 ENDIF 328 ! 329 ! !== at each ocean time-step ==! 330 ! 331 ! !* ice/ocean stress WITH a ice-ocean rotation angle at I-point 332 DO jj = 2, jpj 333 zsang = SIGN( 1._wp, gphif(1,jj) ) * sangvg ! change the cosine angle sign in the SH 334 DO ji = 2, jpi ! NO vect. opt. possible 335 ! ... ice-ocean relative velocity at I-point using instantaneous surface ocean current at u- & v-pts 336 zu_i = u_ice(ji,jj) - 0.5_wp * ( pu_oce(ji-1,jj ) + pu_oce(ji-1,jj-1) ) * tmu(ji,jj) 337 zv_i = v_ice(ji,jj) - 0.5_wp * ( pv_oce(ji ,jj-1) + pv_oce(ji-1,jj-1) ) * tmu(ji,jj) 338 ! ... components of stress with a ice-ocean rotation angle 339 zmodi = rhoco * tmod_io(ji,jj) 340 ztio_u(ji,jj) = zmodi * ( cangvg * zu_i - zsang * zv_i ) 341 ztio_v(ji,jj) = zmodi * ( cangvg * zv_i + zsang * zu_i ) 342 END DO 343 END DO 344 ! !* surface ocean stresses at u- and v-points 345 DO jj = 2, jpjm1 346 DO ji = 2, jpim1 ! NO vector opt. 347 ! ! ice-ocean stress at U and V-points (from I-point values) 348 zutau_ice = 0.5_wp * ( ztio_u(ji+1,jj) + ztio_u(ji+1,jj+1) ) 349 zvtau_ice = 0.5_wp * ( ztio_v(ji,jj+1) + ztio_v(ji+1,jj+1) ) 350 ! ! open-ocean (lead) fraction at U- & V-points (from T-point values) 351 zfrldu = 0.5_wp * ( frld(ji,jj) + frld(ji+1,jj ) ) 352 zfrldv = 0.5_wp * ( frld(ji,jj) + frld(ji ,jj+1) ) 353 ! ! update the surface ocean stress (ice-cover wheighted) 354 utau(ji,jj) = zfrldu * utau_oce(ji,jj) + ( 1._wp - zfrldu ) * zutau_ice 355 vtau(ji,jj) = zfrldv * vtau_oce(ji,jj) + ( 1._wp - zfrldv ) * zvtau_ice 356 END DO 357 END DO 358 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition 359 ! 360 ! 361 ! !-----------------------! 362 CASE( 'C' ) ! C-grid ice dynamics ! U & V-points (same as in the ocean) 363 ! !--=--------------------! 364 ! 365 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 366 !CDIR NOVERRCHK 367 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity at T-point 368 !CDIR NOVERRCHK 369 DO ji = fs_2, fs_jpim1 370 zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) ! 2*(U_ice-U_oce) at T-point 371 zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1) 372 zmodt = 0.25_wp * ( zu_t * zu_t + zv_t * zv_t ) ! |U_ice-U_oce|^2 373 ! ! update the modulus of stress at ocean surface 374 taum (ji,jj) = frld(ji,jj) * taum(ji,jj) + ( 1._wp - frld(ji,jj) ) * rhoco * zmodt 375 tmod_io(ji,jj) = SQRT( zmodt ) * rhoco ! rhoco*|Uice-Uoce| 376 END DO 377 END DO 378 CALL lbc_lnk( taum, 'T', 1. ) ; CALL lbc_lnk( tmod_io, 'T', 1. ) 379 ! 380 utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step 381 vtau_oce(:,:) = vtau(:,:) 382 ! 383 ENDIF 384 ! 385 ! !== at each ocean time-step ==! 386 ! 387 DO jj = 2, jpjm1 !* ice stress over ocean WITHOUT a ice-ocean rotation angle 388 DO ji = fs_2, fs_jpim1 389 ! ! ocean area at u- & v-points 390 zfrldu = 0.5_wp * ( frld(ji,jj) + frld(ji+1,jj ) ) 391 zfrldv = 0.5_wp * ( frld(ji,jj) + frld(ji ,jj+1) ) 392 ! ! quadratic drag formulation without rotation 393 ! ! using instantaneous surface ocean current 394 zutau_ice = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) ) 395 zvtau_ice = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) ) 396 ! ! update the surface ocean stress (ice-cover wheighted) 397 utau(ji,jj) = zfrldu * utau_oce(ji,jj) + ( 1._wp - zfrldu ) * zutau_ice 398 vtau(ji,jj) = zfrldv * vtau_oce(ji,jj) + ( 1._wp - zfrldv ) * zvtau_ice 399 END DO 400 END DO 401 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition 402 ! 403 END SELECT 404 405 IF(ln_ctl) CALL prt_ctl( tab2d_1=utau, clinfo1=' lim_sbc: utau : ', mask1=umask, & 406 & tab2d_2=vtau, clinfo2=' vtau : ' , mask2=vmask ) 407 ! 408 END SUBROUTINE lim_sbc_tau_2 325 409 326 410 #else 327 411 !!---------------------------------------------------------------------- 328 !! Default option : Dummy module NO LIM 2.0 sea-ice model 329 !!---------------------------------------------------------------------- 330 CONTAINS 331 SUBROUTINE lim_sbc_2 ! Dummy routine 332 END SUBROUTINE lim_sbc_2 412 !! Default option Empty module NO LIM 2.0 sea-ice model 413 !!---------------------------------------------------------------------- 333 414 #endif 334 415
Note: See TracChangeset
for help on using the changeset viewer.