Changeset 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
- Timestamp:
- 2016-01-08T10:35:19+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
- Property svn:keywords set to Id
r4689 r6225 24 24 USE par_ice_2 25 25 USE ice_2 ! LIM_2 ice variables 26 USE dom_ice_2 ! sea-ice domain 26 27 #elif defined key_lim3 27 USE par_ice28 28 USE ice ! LIM_3 ice variables 29 USE dom_ice ! sea-ice domain 30 USE limvar 29 31 #endif 30 32 USE par_oce ! ocean parameters 31 33 USE dom_oce ! ocean space and time domain variables 32 USE dom_ice ! sea-ice domain33 34 USE sbc_oce ! Surface boundary condition: ocean fields 34 35 USE bdy_oce ! ocean open boundary conditions … … 41 42 PRIVATE 42 43 43 PUBLIC bdy_ice_lim ! routine called in sbcmod44 PUBLIC bdy_ice_lim ! routine called in sbcmod 44 45 PUBLIC bdy_ice_lim_dyn ! routine called in limrhg 45 46 46 REAL(wp) :: epsi20 = 1.e-20_wp ! module constants47 REAL(wp) :: epsi10 = 1.e-10_wp ! min area allowed by ice model48 47 !!---------------------------------------------------------------------- 49 48 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 50 !! $Id : bdyice.F90 2715 2011-03-30 15:58:35Z rblod$49 !! $Id$ 51 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 51 !!---------------------------------------------------------------------- … … 60 59 !! 61 60 !!---------------------------------------------------------------------- 62 INTEGER, INTENT( in ) :: kt ! Main time step counter 63 !! 64 INTEGER :: ib_bdy ! Loop index 61 INTEGER, INTENT( in ) :: kt ! Main time step counter 62 ! 63 INTEGER :: ib_bdy ! Loop index 64 !!---------------------------------------------------------------------- 65 ! 66 #if defined key_lim3 67 CALL lim_var_glo2eqv 68 #endif 69 ! 65 70 DO ib_bdy=1, nb_bdy 66 71 ! 67 72 SELECT CASE( cn_ice_lim(ib_bdy) ) 68 73 CASE('none') … … 73 78 CALL ctl_stop( 'bdy_ice_lim : unrecognised option for open boundaries for ice fields' ) 74 79 END SELECT 75 ENDDO 76 80 ! 81 END DO 82 ! 83 #if defined key_lim3 84 CALL lim_var_zapsmall 85 CALL lim_var_agg(1) 86 #endif 87 ! 77 88 END SUBROUTINE bdy_ice_lim 89 78 90 79 91 SUBROUTINE bdy_ice_frs( idx, dta, kt, ib_bdy ) … … 87 99 !! dimensional baroclinic ocean model with realistic topography. Tellus, 365-382. 88 100 !!------------------------------------------------------------------------------ 89 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices90 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data91 INTEGER, INTENT(in) :: kt ! main time-step counter92 INTEGER, INTENT(in) :: ib_bdy ! BDY set index !!93 101 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 102 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 103 INTEGER, INTENT(in) :: kt ! main time-step counter 104 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 105 ! 94 106 INTEGER :: jpbound ! 0 = incoming ice 95 107 ! ! 1 = outgoing ice 96 108 INTEGER :: jb, jk, jgrd, jl ! dummy loop indices 97 109 INTEGER :: ji, jj, ii, ij ! local scalar 98 110 REAL(wp) :: zwgt, zwgt1 ! local scalar 99 REAL(wp) :: zinda, ztmelts, zdh 100 101 !!------------------------------------------------------------------------------ 102 ! 103 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 111 REAL(wp) :: ztmelts, zdh 112 #if defined key_lim2 && ! defined key_lim2_vp && defined key_agrif 113 USE ice_2, vt_s => hsnm 114 USE ice_2, vt_i => hicm 115 #endif 116 !!------------------------------------------------------------------------------ 117 ! 118 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 104 119 ! 105 120 jgrd = 1 ! Everything is at T-points here … … 114 129 hicif(ji,jj) = ( hicif(ji,jj) * zwgt1 + dta%hicif(jb) * zwgt ) * tmask(ji,jj,1) ! Ice depth 115 130 hsnif(ji,jj) = ( hsnif(ji,jj) * zwgt1 + dta%hsnif(jb) * zwgt ) * tmask(ji,jj,1) ! Snow depth 116 117 ! zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - frld(ji,jj) ) ) ! 0 if no ice118 ! !------------------------------119 ! ! Sea ice surface temperature120 ! !------------------------------121 ! sist(ji,jj) = zinda * 270.0 + ( 1.0 - zinda ) * tfu(ji,jj)122 ! !-----------------------------------------------123 ! ! Ice/snow temperatures and energy stored in brines124 ! !-----------------------------------------------125 ! !!! TO BE CONTIUNED (as LIM3 below) !!!126 ! zindhe = MAX( 0.e0, SIGN( 1.e0, fcor(1,jj) ) ) ! = 0 for SH, =1 for NH127 !128 ! ! Recover in situ values.129 ! zindb = MAX( rzero, SIGN( rone, zs0a(ji,jj) - epsi06 ) )130 ! zacrith = 1.0 - ( zindhe * acrit(1) + ( 1.0 - zindhe ) * acrit(2) )131 ! zs0a (ji,jj) = zindb * MIN( zs0a(ji,jj), zacrith )132 ! hsnif(ji,jj) = zindb * ( zs0sn(ji,jj) /MAX( zs0a(ji,jj), epsi16 ) )133 ! hicif(ji,jj) = zindb * ( zs0ice(ji,jj)/MAX( zs0a(ji,jj), epsi16 ) )134 ! zindsn = MAX( rzero, SIGN( rone, hsnif(ji,jj) - epsi06 ) )135 ! zindic = MAX( rzero, SIGN( rone, hicif(ji,jj) - epsi03 ) )136 ! zindb = MAX( zindsn, zindic )137 ! zs0a (ji,jj) = zindb * zs0a(ji,jj)138 ! frld (ji,jj) = 1.0 - zs0a(ji,jj)139 ! hsnif(ji,jj) = zindsn * hsnif(ji,jj)140 ! hicif(ji,jj) = zindic * hicif(ji,jj)141 ! zusvosn = 1.0/MAX( hsnif(ji,jj) * zs0a(ji,jj), epsi16 )142 ! zusvoic = 1.0/MAX( hicif(ji,jj) * zs0a(ji,jj), epsi16 )143 ! zignm = MAX( rzero, SIGN( rone, hsndif - hsnif(ji,jj) ) )144 ! zrtt = 173.15 * rone145 ! ztsn = zignm * tbif(ji,jj,1) &146 ! + ( 1.0 - zignm ) * MIN( MAX( zrtt, rt0_snow * zusvosn * zs0c0(ji,jj)) , tfu(ji,jj) )147 ! ztic1 = MIN( MAX( zrtt, rt0_ice * zusvoic * zs0c1(ji,jj) ) , tfu(ji,jj) )148 ! ztic2 = MIN( MAX( zrtt, rt0_ice * zusvoic * zs0c2(ji,jj) ) , tfu(ji,jj) )149 !150 ! tbif(ji,jj,1) = zindsn * ztsn + ( 1.0 - zindsn ) * tfu(ji,jj)151 ! tbif(ji,jj,2) = zindic * ztic1 + ( 1.0 - zindic ) * tfu(ji,jj)152 ! tbif(ji,jj,3) = zindic * ztic2 + ( 1.0 - zindic ) * tfu(ji,jj)153 ! qstoif(ji,jj) = zindb * xlic * zs0st(ji,jj) / MAX( zs0a(ji,jj), epsi16 )154 155 131 END DO 156 132 … … 207 183 ! condition on ice thickness depends on the ice velocity 208 184 ! if velocity is outward (strictly), then ice thickness, volume... must be equal to adjacent values 209 jpbound = 0; ii = ji; ij = jj; 210 211 IF ( u_ice(ji+1,jj ) < 0. .AND. umask(ji-1,jj ,1) == 0. ) jpbound = 1; ii = ji+1; ij = jj 212 IF ( u_ice(ji-1,jj ) > 0. .AND. umask(ji+1,jj ,1) == 0. ) jpbound = 1; ii = ji-1; ij = jj 213 IF ( v_ice(ji ,jj+1) < 0. .AND. vmask(ji ,jj-1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj+1 214 IF ( v_ice(ji ,jj-1) > 0. .AND. vmask(ji ,jj+1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj-1 215 216 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ii,ij) + 0.01 ) ) ! 0 if no ice 217 185 jpbound = 0 ; ii = ji ; ij = jj 186 ! 187 IF( u_ice(ji+1,jj ) < 0. .AND. umask(ji-1,jj ,1) == 0. ) jpbound = 1; ii = ji+1; ij = jj 188 IF( u_ice(ji-1,jj ) > 0. .AND. umask(ji+1,jj ,1) == 0. ) jpbound = 1; ii = ji-1; ij = jj 189 IF( v_ice(ji ,jj+1) < 0. .AND. vmask(ji ,jj-1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj+1 190 IF( v_ice(ji ,jj-1) > 0. .AND. vmask(ji ,jj+1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj-1 191 ! 192 IF( nn_ice_lim_dta(ib_bdy) == 0 ) jpbound = 0; ii = ji; ij = jj ! case ice boundaries = initial conditions 193 ! ! do not make state variables dependent on velocity 194 ! 195 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ii,ij) - 0.01 ) ) ! 0 if no ice 196 ! 218 197 ! concentration and thickness 219 a_i (ji,jj,jl) = a_i (ii,ij,jl) * zinda220 ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * zinda221 ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * zinda222 198 a_i (ji,jj,jl) = a_i (ii,ij,jl) * rswitch 199 ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * rswitch 200 ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * rswitch 201 ! 223 202 ! Ice and snow volumes 224 203 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) 225 204 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) 226 205 ! 227 206 SELECT CASE( jpbound ) 228 229 CASE( 0 ) ! velocity is inward230 207 ! 208 CASE( 0 ) ! velocity is inward 209 ! 231 210 ! Ice salinity, age, temperature 232 sm_i(ji,jj,jl) = zinda * rn_ice_sal(ib_bdy) + ( 1.0 - zinda ) * s_i_min233 o _i(ji,jj,jl) = zinda * rn_ice_age(ib_bdy) + ( 1.0 - zinda)234 t_su(ji,jj,jl) = zinda * rn_ice_tem(ib_bdy) + ( 1.0 - zinda) * rn_ice_tem(ib_bdy)211 sm_i(ji,jj,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * rn_simin 212 oa_i(ji,jj,jl) = rswitch * rn_ice_age(ib_bdy) * a_i(ji,jj,jl) 213 t_su(ji,jj,jl) = rswitch * rn_ice_tem(ib_bdy) + ( 1.0 - rswitch ) * rn_ice_tem(ib_bdy) 235 214 DO jk = 1, nlay_s 236 t_s(ji,jj,jk,jl) = zinda * rn_ice_tem(ib_bdy) + ( 1.0 - zinda ) * rtt215 t_s(ji,jj,jk,jl) = rswitch * rn_ice_tem(ib_bdy) + ( 1.0 - rswitch ) * rt0 237 216 END DO 238 217 DO jk = 1, nlay_i 239 t_i(ji,jj,jk,jl) = zinda * rn_ice_tem(ib_bdy) + ( 1.0 - zinda ) * rtt240 s_i(ji,jj,jk,jl) = zinda * rn_ice_sal(ib_bdy) + ( 1.0 - zinda ) * s_i_min241 END DO 242 243 CASE( 1 ) ! velocity is outward244 218 t_i(ji,jj,jk,jl) = rswitch * rn_ice_tem(ib_bdy) + ( 1.0 - rswitch ) * rt0 219 s_i(ji,jj,jk,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * rn_simin 220 END DO 221 ! 222 CASE( 1 ) ! velocity is outward 223 ! 245 224 ! Ice salinity, age, temperature 246 sm_i(ji,jj,jl) = zinda * sm_i(ii,ij,jl) + ( 1.0 - zinda ) * s_i_min247 o _i(ji,jj,jl) = zinda * o_i(ii,ij,jl) + ( 1.0 - zinda)248 t_su(ji,jj,jl) = zinda * t_su(ii,ij,jl) + ( 1.0 - zinda ) * rtt225 sm_i(ji,jj,jl) = rswitch * sm_i(ii,ij,jl) + ( 1.0 - rswitch ) * rn_simin 226 oa_i(ji,jj,jl) = rswitch * oa_i(ii,ij,jl) 227 t_su(ji,jj,jl) = rswitch * t_su(ii,ij,jl) + ( 1.0 - rswitch ) * rt0 249 228 DO jk = 1, nlay_s 250 t_s(ji,jj,jk,jl) = zinda * t_s(ii,ij,jk,jl) + ( 1.0 - zinda ) * rtt229 t_s(ji,jj,jk,jl) = rswitch * t_s(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rt0 251 230 END DO 252 231 DO jk = 1, nlay_i 253 t_i(ji,jj,jk,jl) = zinda * t_i(ii,ij,jk,jl) + ( 1.0 - zinda ) * rtt254 s_i(ji,jj,jk,jl) = zinda * s_i(ii,ij,jk,jl) + ( 1.0 - zinda ) * s_i_min255 END DO 256 232 t_i(ji,jj,jk,jl) = rswitch * t_i(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rt0 233 s_i(ji,jj,jk,jl) = rswitch * s_i(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rn_simin 234 END DO 235 ! 257 236 END SELECT 258 259 ! if salinity is constant, then overwrite rn_ice_sal 260 IF( num_sal == 1 ) THEN 261 sm_i(ji,jj,jl) = bulk_sal 262 s_i (ji,jj,:,jl) = bulk_sal 237 ! 238 IF( nn_icesal == 1 ) THEN ! constant salinity : overwrite rn_ice_sal 239 sm_i(ji,jj ,jl) = rn_icesal 240 s_i (ji,jj,:,jl) = rn_icesal 263 241 ENDIF 264 242 ! 265 243 ! contents 266 244 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) 267 oa_i(ji,jj,jl) = o_i(ji,jj,jl) * a_i(ji,jj,jl)268 245 DO jk = 1, nlay_s 269 246 ! Snow energy of melting 270 e_s(ji,jj,jk,jl) = zinda * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 271 ! Change dimensions 272 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac 273 ! Multiply by volume, so that heat content in 10^9 Joules 274 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * v_s(ji,jj,jl) / nlay_s 247 e_s(ji,jj,jk,jl) = rswitch * rhosn * ( cpic * ( rt0 - t_s(ji,jj,jk,jl) ) + lfus ) 248 ! Multiply by volume, so that heat content in J/m2 249 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * v_s(ji,jj,jl) * r1_nlay_s 275 250 END DO 276 251 DO jk = 1, nlay_i 277 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rt t!Melting temperature in K252 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rt0 !Melting temperature in K 278 253 ! heat content per unit volume 279 e_i(ji,jj,jk,jl) = zinda* rhoic * &254 e_i(ji,jj,jk,jl) = rswitch * rhoic * & 280 255 ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 281 + lfus * ( 1.0 - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) & 282 - rcp * ( ztmelts - rtt ) ) 283 ! Correct dimensions to avoid big values 284 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac 285 ! Mutliply by ice volume, and divide by number of layers to get heat content in 10^9 J 286 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) / nlay_i 256 + lfus * ( 1.0 - (ztmelts-rt0) / MIN((t_i(ji,jj,jk,jl)-rt0),-epsi20) ) & 257 - rcp * ( ztmelts - rt0 ) ) 258 ! Mutliply by ice volume, and divide by number of layers to get heat content in J/m2 259 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) * r1_nlay_i 287 260 END DO 288 289 290 END DO !jb 291 292 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) ! lateral boundary conditions 261 ! 262 END DO 263 ! 264 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) 293 265 CALL lbc_bdy_lnk( ht_i(:,:,jl), 'T', 1., ib_bdy ) 294 266 CALL lbc_bdy_lnk( ht_s(:,:,jl), 'T', 1., ib_bdy ) 295 267 CALL lbc_bdy_lnk( v_i(:,:,jl), 'T', 1., ib_bdy ) 296 268 CALL lbc_bdy_lnk( v_s(:,:,jl), 'T', 1., ib_bdy ) 297 269 ! 298 270 CALL lbc_bdy_lnk( smv_i(:,:,jl), 'T', 1., ib_bdy ) 299 271 CALL lbc_bdy_lnk( sm_i(:,:,jl), 'T', 1., ib_bdy ) 300 272 CALL lbc_bdy_lnk( oa_i(:,:,jl), 'T', 1., ib_bdy ) 301 CALL lbc_bdy_lnk( o_i(:,:,jl), 'T', 1., ib_bdy )302 273 CALL lbc_bdy_lnk( t_su(:,:,jl), 'T', 1., ib_bdy ) 303 274 DO jk = 1, nlay_s … … 309 280 CALL lbc_bdy_lnk(e_i(:,:,jk,jl), 'T', 1., ib_bdy ) 310 281 END DO 311 282 ! 312 283 END DO !jl 313 284 ! 314 285 #endif 315 286 ! 316 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs')287 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs') 317 288 ! 318 289 END SUBROUTINE bdy_ice_frs … … 329 300 !! 2013-06 : C. Rousset 330 301 !!------------------------------------------------------------------------------ 331 !!332 302 CHARACTER(len=1), INTENT(in) :: cd_type ! nature of velocity grid-points 333 INTEGER :: jb, jgrd ! dummy loop indices 303 ! 304 INTEGER :: jb, jgrd ! dummy loop indices 334 305 INTEGER :: ji, jj ! local scalar 335 INTEGER :: ib_bdy ! Loop index336 REAL(wp) :: zmsk1, zmsk2, zflag , zinda337 !!------------------------------------------------------------------------------306 INTEGER :: ib_bdy ! Loop index 307 REAL(wp) :: zmsk1, zmsk2, zflag 308 !!------------------------------------------------------------------------------ 338 309 ! 339 310 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_lim_dyn') … … 342 313 ! 343 314 SELECT CASE( cn_ice_lim(ib_bdy) ) 344 315 ! 345 316 CASE('none') 346 347 317 CYCLE 348 318 ! 349 319 CASE('frs') 350 351 320 ! 321 IF( nn_ice_lim_dta(ib_bdy) == 0 ) CYCLE ! case ice boundaries = initial conditions 322 ! ! do not change ice velocity (it is only computed by rheology) 352 323 SELECT CASE ( cd_type ) 353 354 CASE ( 'U' ) 355 324 ! 325 CASE ( 'U' ) 356 326 jgrd = 2 ! u velocity 357 327 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) … … 359 329 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 360 330 zflag = idx_bdy(ib_bdy)%flagu(jb,jgrd) 361 331 ! 362 332 IF ( ABS( zflag ) == 1. ) THEN ! eastern and western boundaries 363 333 ! one of the two zmsk is always 0 (because of zflag) 364 334 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji+1,jj) ) ) ! 0 if no ice 365 335 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji-1,jj) ) ) ! 0 if no ice 366 336 ! 367 337 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 368 u_ice (ji,jj) = u_ice(ji+1,jj) * 0.5 * ABS( zflag + 1._wp ) * zmsk1 + &369 & u_ice(ji-1,jj) * 0.5 * ABS( zflag - 1._wp ) * zmsk2 + &338 u_ice (ji,jj) = u_ice(ji+1,jj) * 0.5_wp * ABS( zflag + 1._wp ) * zmsk1 + & 339 & u_ice(ji-1,jj) * 0.5_wp * ABS( zflag - 1._wp ) * zmsk2 + & 370 340 & u_oce(ji ,jj) * ( 1._wp - MIN( 1._wp, zmsk1 + zmsk2 ) ) 371 341 ELSE ! everywhere else … … 374 344 ENDIF 375 345 ! mask ice velocities 376 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 377 u_ice(ji,jj) = zinda * u_ice(ji,jj) 378 379 ENDDO 380 346 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ji,jj) - 0.01_wp ) ) ! 0 if no ice 347 u_ice(ji,jj) = rswitch * u_ice(ji,jj) 348 ! 349 END DO 381 350 CALL lbc_bdy_lnk( u_ice(:,:), 'U', -1., ib_bdy ) 382 351 ! 383 352 CASE ( 'V' ) 384 385 353 jgrd = 3 ! v velocity 386 354 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) … … 388 356 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 389 357 zflag = idx_bdy(ib_bdy)%flagv(jb,jgrd) 390 358 ! 391 359 IF ( ABS( zflag ) == 1. ) THEN ! northern and southern boundaries 392 360 ! one of the two zmsk is always 0 (because of zflag) 393 361 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj+1) ) ) ! 0 if no ice 394 362 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj-1) ) ) ! 0 if no ice 395 363 ! 396 364 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 397 v_ice (ji,jj) = v_ice(ji,jj+1) * 0.5 * ABS( zflag + 1._wp ) * zmsk1 + &398 & v_ice(ji,jj-1) * 0.5 * ABS( zflag - 1._wp ) * zmsk2 + &365 v_ice (ji,jj) = v_ice(ji,jj+1) * 0.5_wp * ABS( zflag + 1._wp ) * zmsk1 + & 366 & v_ice(ji,jj-1) * 0.5_wp * ABS( zflag - 1._wp ) * zmsk2 + & 399 367 & v_oce(ji,jj ) * ( 1._wp - MIN( 1._wp, zmsk1 + zmsk2 ) ) 400 368 ELSE ! everywhere else … … 403 371 ENDIF 404 372 ! mask ice velocities 405 zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 406 v_ice(ji,jj) = zinda * v_ice(ji,jj) 407 408 ENDDO 409 373 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ji,jj) - 0.01 ) ) ! 0 if no ice 374 v_ice(ji,jj) = rswitch * v_ice(ji,jj) 375 ! 376 END DO 410 377 CALL lbc_bdy_lnk( v_ice(:,:), 'V', -1., ib_bdy ) 411 378 ! 412 379 END SELECT 413 380 ! 414 381 CASE DEFAULT 415 382 CALL ctl_stop( 'bdy_ice_lim_dyn : unrecognised option for open boundaries for ice fields' ) 416 383 END SELECT 417 418 END DO419 384 ! 385 END DO 386 ! 420 387 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_lim_dyn') 421 388 ! 422 389 END SUBROUTINE bdy_ice_lim_dyn 423 390
Note: See TracChangeset
for help on using the changeset viewer.