Changeset 913 for trunk/NEMO/LIM_SRC_3
- Timestamp:
- 2008-04-29T14:40:00+02:00 (16 years ago)
- Location:
- trunk/NEMO/LIM_SRC_3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC_3/limdyn.F90
r904 r913 18 18 USE ice 19 19 USE par_ice 20 USE sbc_oce ! Surface boundary condition: ocean fields 20 21 USE sbc_ice ! Surface boundary condition: ice fields 21 22 USE ice_oce … … 66 67 !!------------------------------------------------------------------------------------ 67 68 !! * Local variables 68 INTEGER :: ji, jj, jl, ja ! dummy loop indices 69 INTEGER :: i_j1, i_jpj ! Starting/ending j-indices for rheology 70 71 REAL(wp) :: & 72 ztairx, ztairy, & ! tempory scalars 73 zsang , zmod, & 74 ztglx , ztgly , & 75 zt11, zt12, zt21, zt22 , & 76 zustm, & 77 zsfrldmx2, zsfrldmy2, & 78 zu_ice, zv_ice, ztair2 79 80 REAL(wp),DIMENSION(jpj) :: & 81 zind, & ! i-averaged indicator of sea-ice 82 zmsk ! i-averaged of tmask 69 INTEGER :: ji, jj, jl, ja ! dummy loop indices 70 INTEGER :: i_j1, i_jpj ! Starting/ending j-indices for rheology 71 REAL(wp) :: zcoef ! temporary scalar 72 REAL(wp), DIMENSION(jpj) :: zind ! i-averaged indicator of sea-ice 73 REAL(wp), DIMENSION(jpj) :: zmsk ! i-averaged of tmask 74 REAL(wp), DIMENSION(jpi,jpj) :: zu_io, zv_io ! ice-ocean velocity 83 75 !!--------------------------------------------------------------------- 84 76 … … 159 151 160 152 ! computation of friction velocity 153 ! -------------------------------- 154 ! ice-ocean velocity at U & V-points (u_ice vi_ice at U- & V-points ; ssu_m, ssv_m at U- & V-points) 155 zu_io(:,:) = u_ice(:,:) - ssu_m(:,:) 156 zv_io(:,:) = v_ice(:,:) - ssv_m(:,:) 157 ! frictional velocity at T-point 158 DO jj = 2, jpjm1 159 DO ji = fs_2, fs_jpim1 ! vector opt. 160 ust2s(ji,jj) = 0.5 * cw & 161 & * ( zu_io(ji,jj) * zu_io(ji,jj) + zu_io(ji-1,jj) * zu_io(ji-1,jj) & 162 & + zv_io(ji,jj) * zv_io(ji,jj) + zv_io(ji,jj-1) * zv_io(ji,jj-1) ) * tms(ji,jj) 163 END DO 164 END DO 165 ! 166 ELSE ! no ice dynamics : transmit directly the atmospheric stress to the ocean 167 ! 168 zcoef = SQRT( 0.5 ) / rau0 161 169 DO jj = 2, jpjm1 162 DO ji = fs_2, fs_jpim1 163 164 zu_ice = u_ice(ji,jj) - u_oce(ji,jj) 165 zt11 = rhoco * zu_ice * zu_ice 166 167 zu_ice = u_ice(ji-1,jj) - u_oce(ji-1,jj) 168 zt12 = rhoco * zu_ice * zu_ice 169 170 zv_ice = v_ice(ji,jj) - v_oce(ji,jj) 171 zt21 = rhoco * zv_ice * zv_ice 172 173 zv_ice = v_ice(ji,jj-1) - v_oce(ji,jj-1) 174 zt22 = rhoco * zv_ice * zv_ice 175 ztair2 = ( ( utaui_ice(ji,jj) + utaui_ice(ji-1,jj) ) / 2. )**2 + & 176 ( ( vtaui_ice(ji,jj) + vtaui_ice(ji,jj-1) ) / 2. )**2 177 178 ! should not be weighted 179 zustm = ( at_i(ji,jj) ) * 0.5 * ( zt11 + zt12 + zt21 + zt22 ) & 180 & + ( 1.0 - at_i(ji,jj) ) * SQRT( ztair2 ) 181 182 ust2s(ji,jj) = ( zustm / rau0 ) * tms(ji,jj) 183 170 DO ji = fs_2, fs_jpim1 ! vector opt. 171 ust2s(ji,jj) = zcoef * tms(ji,jj) * SQRT( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) & 172 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1) ) 184 173 END DO 185 174 END DO 186 187 ELSE ! If no ice dynamics 188 189 ! virer ca (key_lim_cp1) 190 DO jj = 2, jpjm1 191 DO ji = fs_2, fs_jpim1 192 ztair2 = ( ( utaui_ice(ji,jj) + utaui_ice(ji-1,jj) ) / 2. )**2 + & 193 ( ( vtaui_ice(ji,jj) + vtaui_ice(ji,jj-1) ) / 2. )**2 194 zustm = SQRT( ztair2 ) 195 196 ust2s(ji,jj) = ( zustm / rau0 ) * tms(ji,jj) 197 END DO 198 END DO 199 175 ! 200 176 ENDIF 201 177 -
trunk/NEMO/LIM_SRC_3/limsbc.F90
r888 r913 77 77 INTEGER :: ifvt, i1mfr, idfr ! some switches 78 78 INTEGER :: iflt, ial, iadv, ifral, ifrdv 79 REAL(wp) :: zqsr , zqns ! solar & non solar heat flux80 79 REAL(wp) :: zinda ! switch for testing the values of ice concentration 81 80 REAL(wp) :: zfons ! salt exchanges at the ice/ocean interface 82 81 REAL(wp) :: zpme ! freshwater exchanges at the ice/ocean interface 83 82 REAL(wp) :: zfrldu, zfrldv ! lead fraction at U- & V-points 84 REAL(wp) :: zutau , zvtau ! lead fraction at U- & V-points85 83 REAL(wp) :: zu_io , zv_io ! 2 components of the ice-ocean velocity 86 REAL(wp) :: ztairx, ztairy87 REAL(wp) :: zsfrldmx2, zsfrldmy288 REAL(wp) :: zu_ice, zv_ice89 REAL(wp) :: ztglx , ztgly90 REAL(wp) :: ztaux , ztauy91 84 92 85 #if defined key_coupled … … 94 87 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalbp ! albedo of ice under clear sky 95 88 #endif 96 REAL(wp) :: zsang, zmod , zfm89 REAL(wp) :: zsang, zmod 97 90 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! ocean stress below sea-ice 98 91 REAL(wp), DIMENSION(jpi,jpj) :: zfcm1 , zfcm2 ! solar/non solar heat fluxes … … 277 270 278 271 ! ... ice stress over ocean with a ice-ocean rotation angle 279 DO jj = 2, jpjm1 280 zsang = SIGN(1.e0, gphif(1,jj-1) ) * sangvg 281 282 DO ji = fs_2, fs_jpim1 283 ! computation of wind stress over ocean in X and Y direction 284 ztairx = ( 2.0 - at_i(ji,jj) - at_i(ji+1,jj) ) * utau(ji,jj) 285 ztairy = ( 2.0 - at_i(ji,jj) - at_i(ji,jj+1) ) * vtau(ji,jj) 286 287 zsfrldmx2 = at_i(ji,jj) + at_i(ji+1,jj) 288 zsfrldmy2 = at_i(ji,jj) + at_i(ji,jj+1) 289 290 zu_ice = u_ice(ji,jj) - u_oce(ji,jj) 291 zv_ice = v_ice(ji,jj) - v_oce(ji,jj) 292 zmod = SQRT( zu_ice * zu_ice + zv_ice * zv_ice ) 293 272 DO jj = 1, jpj 273 ! ... change the sinus angle sign in the south hemisphere 274 zsang = SIGN(1.e0, gphif(1,jj) ) * sangvg 275 DO ji = 1, jpi 276 ! ... ice velocity relative to the ocean 277 zu_io = u_ice(ji,jj) - u_oce(ji,jj) 278 zv_io = v_ice(ji,jj) - v_oce(ji,jj) 279 zmod = SQRT( zu_io * zu_io + zv_io * zv_io ) 294 280 ! quadratic drag formulation 295 ztglx = zsfrldmx2 * rhoco * zmod * ( cangvg * zu_ice - zsang * zv_ice ) 296 ztgly = zsfrldmy2 * rhoco * zmod * ( cangvg * zv_ice + zsang * zu_ice ) 297 ! 298 ! ! IMPORTANT 299 ! ! these lines are bound to prevent numerical oscillations 300 ! ! in the ice-ocean stress 301 ! ! They are physically ill-based. There is a cleaner solution 302 ! ! to try (remember discussion in Paris Gurvan) 303 ! 304 ztglx = ztglx * exp( - zmod / 0.5 ) 305 ztgly = ztglx * exp( - zmod / 0.5 ) 306 307 tio_u(ji,jj) = ( ztairx + 1.0 * ztglx ) / 2. 308 tio_v(ji,jj) = ( ztairy + 1.0 * ztgly ) / 2. 281 ztio_u(ji,jj) = rhoco * zmod * ( cangvg * zu_io - zsang * zv_io ) 282 ztio_v(ji,jj) = rhoco * zmod * ( cangvg * zv_io + zsang * zu_io ) 283 ! 309 284 END DO 310 285 END DO 311 286 312 DO jj = 1, jpjm1 313 DO ji = 1, fs_jpim1 ! vertor opt. 314 zfrldu = MAX( freezn(ji,jj), freezn(ji,jj+1) ) ! ice/ocean indicator at U- and V-points 315 zfrldv = MAX( freezn(ji,jj), freezn(ji+1,jj) ) 316 ztaux = tio_u(ji,jj) 317 ztauy = tio_v(ji,jj) 318 utau(ji,jj) = (1.-zfrldu) * utau(ji,jj) + zfrldu * ztaux ! stress at the ocean surface 319 vtau(ji,jj) = (1.-zfrldv) * vtau(ji,jj) + zfrldv * ztauy 287 DO jj = 2, jpjm1 288 DO ji = fs_2, fs_jpim1 ! vertor opt. 289 ! ... open-ocean (lead) fraction at U- & V-points (from T-point values) 290 zfrldu = 0.5 * ( ato_i(ji,jj) + ato_i(ji+1,jj ) ) 291 zfrldv = 0.5 * ( ato_i(ji,jj) + ato_i(ji ,jj+1) ) 292 ! update surface ocean stress 293 utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * ztio_u(ji,jj) 294 vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * ztio_v(ji,jj) 295 ! 320 296 END DO 321 297 END DO 322 323 !new fashion DO jj = 2, jpjm1324 !new fashion DO ji = fs_2, fs_jpim1 ! vertor opt.325 !new fashion ! ... ice-cover wheighted ice-ocean stress at U and V-points (from I-point values)326 !new fashion zutau = 0.5 * ( ztio_u(ji+1,jj) + ztio_u(ji+1,jj+1) )327 !new fashion zvtau = 0.5 * ( ztio_v(ji,jj+1) + ztio_v(ji+1,jj+1) )328 !new fashion ! ... open-ocean (lead) fraction at U- & V-points (from T-point values)329 !new fashion zfrldu = 0.5 * ( frld (ji,jj) + frld (ji+1,jj ) )330 !new fashion zfrldv = 0.5 * ( frld (ji,jj) + frld (ji ,jj+1) )331 !new fashion ! update surface ocean stress332 !new fashion utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * zutau333 !new fashion vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * zvtau334 !new fashion !335 !new fashion END DO336 !new fashion END DO337 298 338 299 ! boundary condition on the stress (utau,vtau)
Note: See TracChangeset
for help on using the changeset viewer.