Changeset 921 for trunk/NEMO/LIM_SRC_3/limtrp.F90
- Timestamp:
- 2008-05-13T10:28:52+02:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC_3/limtrp.F90
r888 r921 57 57 CONTAINS 58 58 59 SUBROUTINE lim_trp 59 SUBROUTINE lim_trp( kt ) 60 60 !!------------------------------------------------------------------- 61 61 !! *** ROUTINE lim_trp *** … … 75 75 !! 3.0 ! 05-11 (M. Vancoppenolle) Multi-layer sea ice, salinity variations 76 76 !!--------------------------------------------------------------------- 77 INTEGER, INTENT(in) :: kt ! number of iteration 77 78 !! * Local Variables 78 79 INTEGER :: ji, jj, jk, jl, layer, & ! dummy loop indices 79 80 initad ! number of sub-timestep for the advection 80 81 INTEGER :: ji_maxu, ji_maxv, jj_maxu, jj_maxv 81 82 … … 102 103 zs0sm , zs0oi 103 104 104 ! MHE Multilayer heat content105 ! MHE Multilayer heat content 105 106 REAL(wp), DIMENSION(jpi,jpj,jkmax,jpl) :: & ! temporary workspace 106 107 zs0e … … 111 112 112 113 zsm(:,:) = area(:,:) 113 114 IF( ln_limdyn ) THEN 115 WRITE(numout,*) 116 WRITE(numout,*) ' lim_trp : Ice Advection' 117 WRITE(numout,*) ' ~~~~~~~' 118 119 !-----------------------------------------------------------------------------! 120 ! 1) CFL Test 121 !-----------------------------------------------------------------------------! 114 115 IF( ln_limdyn .AND. lwp ) THEN 116 IF( kt == nit000 ) THEN 117 WRITE(numout,*) ' lim_trp : Ice Advection' 118 WRITE(numout,*) ' ~~~~~~~' 119 ENDIF 120 121 !-----------------------------------------------------------------------------! 122 ! 1) CFL Test 123 !-----------------------------------------------------------------------------! 122 124 123 125 !------------------------------------------ 124 126 ! ice velocities at ocean U- and V-points 125 127 !------------------------------------------ 126 128 127 129 ! zvbord factor between 1 and 2 to take into account slip or no-slip boundary conditions. 128 130 zvbord = 1.0 + ( 1.0 - bound ) … … 166 168 167 169 IF ( zcfl > 0.5 .AND. lwp ) & 168 WRITE(numout,*) 'lim_trp : violation of cfl criterion the ',nday,'th day, cfl = ',zcfl169 170 !-----------------------------------------------------------------------------!171 ! 2) Computation of transported fields172 !-----------------------------------------------------------------------------!170 WRITE(numout,*) 'lim_trp : violation of cfl criterion the ',nday,'th day, cfl = ',zcfl 171 172 !-----------------------------------------------------------------------------! 173 ! 2) Computation of transported fields 174 !-----------------------------------------------------------------------------! 173 175 174 176 !------------------------------------------------------ … … 185 187 zs0oi (:,:,jl) = oa_i (:,:,jl) * area(:,:) ! Age content 186 188 187 !----------------------------------188 ! 1.2) Ice and snow heat contents189 !----------------------------------189 !---------------------------------- 190 ! 1.2) Ice and snow heat contents 191 !---------------------------------- 190 192 191 193 zs0c0 (:,:,jl) = e_s(:,:,1,jl) ! Snow heat cont. … … 195 197 END DO 196 198 197 !-----------------------------------------------------------------------------!198 ! 3) Advection of Ice fields199 !-----------------------------------------------------------------------------!199 !-----------------------------------------------------------------------------! 200 ! 3) Advection of Ice fields 201 !-----------------------------------------------------------------------------! 200 202 201 203 ! If ice drift field is too fast, use an appropriate time step for advection. 202 204 initad = 1 + INT( MAX( rzero, SIGN( rone, zcfl-0.5 ) ) ) 203 205 zusnit = 1.0 / REAL( initad ) 204 206 205 207 IF ( MOD( nday , 2 ) == 0) THEN 206 208 DO jk = 1,initad 207 209 !--- ice open water area 208 210 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0ow(:,:) , sxopw(:,:) , & 209 210 211 sxxopw(:,:), syopw(:,:) , & 212 syyopw(:,:), sxopw(:,:) ) 211 213 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0ow(:,:) , sxopw (:,:) , & 212 213 214 sxxopw(:,:), syopw (:,:) , & 215 syyopw(:,:), sxyopw(:,:) ) 214 216 DO jl = 1, jpl 215 217 !--- ice volume --- 216 218 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , & 217 218 219 sxxice(:,:,jl) , syice (:,:,jl) , & 220 syyice(:,:,jl) , sxyice(:,:,jl) ) 219 221 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , & 220 221 222 sxxice(:,:,jl) , syice (:,:,jl) , & 223 syyice(:,:,jl) , sxyice(:,:,jl) ) 222 224 !--- snow volume --- 223 225 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0sn (:,:,jl) , sxsn (:,:,jl) , & 224 225 226 sxxsn (:,:,jl) , sysn (:,:,jl) , & 227 syysn (:,:,jl) , sxysn (:,:,jl) ) 226 228 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0sn (:,:,jl) , sxsn (:,:,jl) , & 227 228 229 sxxsn (:,:,jl) , sysn (:,:,jl) , & 230 syysn (:,:,jl) , sxysn (:,:,jl) ) 229 231 !--- ice salinity --- 230 232 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 231 232 233 sxxsal(:,:,jl) , sysal (:,:,jl) , & 234 syysal(:,:,jl) , sxysal(:,:,jl) ) 233 235 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 234 235 236 sxxsal(:,:,jl) , sysal (:,:,jl) , & 237 syysal(:,:,jl) , sxysal(:,:,jl) ) 236 238 !--- ice age --- 237 239 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 238 239 240 sxxage(:,:,jl) , syage (:,:,jl) , & 241 syyage(:,:,jl) , sxyage(:,:,jl) ) 240 242 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 241 242 243 sxxage(:,:,jl) , syage (:,:,jl) , & 244 syyage(:,:,jl) , sxyage(:,:,jl) ) 243 245 !--- ice concentrations --- 244 246 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0a (:,:,jl) , sxa (:,:,jl) , & 245 246 247 sxxa (:,:,jl) , sya (:,:,jl) , & 248 syya (:,:,jl) , sxya (:,:,jl) ) 247 249 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0a (:,:,jl) , sxa (:,:,jl) , & 248 249 250 sxxa (:,:,jl) , sya (:,:,jl) , & 251 syya (:,:,jl) , sxya (:,:,jl) ) 250 252 !--- ice / snow thermal energetic contents --- 251 253 CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0c0 (:,:,jl) , sxc0 (:,:,jl) , & 252 253 254 sxxc0 (:,:,jl) , syc0 (:,:,jl) , & 255 syyc0 (:,:,jl) , sxyc0 (:,:,jl) ) 254 256 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0c0 (:,:,jl) , sxc0 (:,:,jl) , & 255 256 257 sxxc0 (:,:,jl) , syc0 (:,:,jl) , & 258 syyc0 (:,:,jl) , sxyc0 (:,:,jl) ) 257 259 DO layer = 1, nlay_i 258 260 CALL lim_adv_x( zusnit, zui_u, rone , zsm, & 259 260 261 261 zs0e(:,:,layer,jl) , sxe (:,:,layer,jl) , & 262 sxxe(:,:,layer,jl) , sye (:,:,layer,jl) , & 263 syye(:,:,layer,jl) , sxye(:,:,layer,jl) ) 262 264 CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, & 263 264 265 265 zs0e(:,:,layer,jl) , sxe (:,:,layer,jl) , & 266 sxxe(:,:,layer,jl) , sye (:,:,layer,jl) , & 267 syye(:,:,layer,jl) , sxye(:,:,layer,jl) ) 266 268 END DO 267 269 END DO … … 271 273 !--- ice volume --- 272 274 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0ow (:,:) , sxopw (:,:) , & 273 274 275 sxxopw(:,:) , syopw (:,:) , & 276 syyopw(:,:) , sxyopw(:,:) ) 275 277 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0ow (:,:) , sxopw (:,:) , & 276 277 278 sxxopw(:,:) , syopw (:,:) , & 279 syyopw(:,:) , sxyopw(:,:) ) 278 280 DO jl = 1, jpl 279 281 !--- ice volume --- 280 282 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , & 281 282 283 sxxice(:,:,jl) , syice (:,:,jl) , & 284 syyice(:,:,jl) , sxyice(:,:,jl) ) 283 285 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , & 284 285 286 sxxice(:,:,jl) , syice (:,:,jl) , & 287 syyice(:,:,jl) , sxyice(:,:,jl) ) 286 288 !--- snow volume --- 287 289 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0sn (:,:,jl) , sxsn (:,:,jl) , & 288 289 290 sxxsn (:,:,jl) , sysn (:,:,jl) , & 291 syysn (:,:,jl) , sxysn (:,:,jl) ) 290 292 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0sn (:,:,jl) , sxsn (:,:,jl) , & 291 292 293 sxxsn (:,:,jl) , sysn (:,:,jl) , & 294 syysn (:,:,jl) , sxysn (:,:,jl) ) 293 295 !--- ice salinity --- 294 296 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 295 296 297 sxxsal(:,:,jl) , sysal (:,:,jl) , & 298 syysal(:,:,jl) , sxysal(:,:,jl) ) 297 299 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 298 299 300 sxxsal(:,:,jl) , sysal (:,:,jl) , & 301 syysal(:,:,jl) , sxysal(:,:,jl) ) 300 302 !--- ice age --- 301 303 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 302 303 304 sxxage(:,:,jl) , syage (:,:,jl) , & 305 syyage(:,:,jl) , sxyage(:,:,jl) ) 304 306 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 305 306 307 sxxage(:,:,jl) , syage (:,:,jl) , & 308 syyage(:,:,jl) , sxyage(:,:,jl) ) 307 309 !--- ice concentration --- 308 310 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0a (:,:,jl) , sxa (:,:,jl) , & 309 310 311 sxxa (:,:,jl) , sya (:,:,jl) , & 312 syya (:,:,jl) , sxya (:,:,jl) ) 311 313 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0a (:,:,jl) , sxa (:,:,jl) , & 312 313 314 sxxa (:,:,jl) , sya (:,:,jl) , & 315 syya (:,:,jl) , sxya (:,:,jl) ) 314 316 !--- ice / snow thermal energetic contents --- 315 317 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0c0 (:,:,jl) , sxc0 (:,:,jl) , & 316 317 318 sxxc0 (:,:,jl) , syc0 (:,:,jl) , & 319 syyc0 (:,:,jl) , sxyc0 (:,:,jl) ) 318 320 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0c0 (:,:,jl) , sxc0 (:,:,jl) , & 319 320 321 sxxc0 (:,:,jl) , syc0 (:,:,jl) , & 322 syyc0 (:,:,jl) , sxyc0 (:,:,jl) ) 321 323 DO layer = 1, nlay_i 322 324 CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0e(:,:,layer,jl) , & 323 324 325 sxe (:,:,layer,jl) , sxxe (:,:,layer,jl) , sye (:,:,layer,jl) , & 326 syye (:,:,layer,jl), sxye (:,:,layer,jl) ) 325 327 CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0e(:,:,layer,jl) , & 326 327 328 sxe (:,:,layer,jl) , sxxe (:,:,layer,jl) , sye (:,:,layer,jl) , & 329 syye (:,:,layer,jl), sxye (:,:,layer,jl) ) 328 330 END DO 329 331 … … 349 351 END DO 350 352 351 !------------------------------------------------------------------------------!352 ! 4) Diffusion of Ice fields353 !------------------------------------------------------------------------------!354 355 !------------------------------------356 ! 4.1) diffusion of open water area357 !------------------------------------353 !------------------------------------------------------------------------------! 354 ! 4) Diffusion of Ice fields 355 !------------------------------------------------------------------------------! 356 357 !------------------------------------ 358 ! 4.1) diffusion of open water area 359 !------------------------------------ 358 360 359 361 ! Compute total ice fraction … … 364 366 zs0at (ji,jj) = zs0at(ji,jj) + zs0a(ji,jj,jl) ! 365 367 END DO 366 END DO 368 END DO 367 369 END DO 368 370 … … 380 382 CALL lim_hdf( zs0ow (:,:) ) 381 383 382 !----------------------------------------383 ! 4.2) Diffusion of other ice variables384 !----------------------------------------385 DO jl = 1, jpl 386 387 ! Masked eddy diffusivity coefficient at ocean U- and V-points384 !---------------------------------------- 385 ! 4.2) Diffusion of other ice variables 386 !---------------------------------------- 387 DO jl = 1, jpl 388 389 ! Masked eddy diffusivity coefficient at ocean U- and V-points 388 390 DO jj = 1, jpjm1 ! NB: has not to be defined on jpj line and jpi row 389 391 DO ji = 1 , fs_jpim1 ! vector opt. … … 406 408 END DO !jl 407 409 408 !-----------------------------------------409 ! 4.3) Remultiply everything by ice area410 !-----------------------------------------410 !----------------------------------------- 411 ! 4.3) Remultiply everything by ice area 412 !----------------------------------------- 411 413 zs0ow(:,:) = MAX(rzero, zs0ow(:,:) * area(:,:) ) 412 414 DO jl = 1, jpl … … 422 424 END DO ! jl 423 425 424 !------------------------------------------------------------------------------!425 ! 5) Update and limit ice properties after transport426 !------------------------------------------------------------------------------!427 428 !--------------------------------------------------429 ! 5.1) Recover mean values over the grid squares.430 !--------------------------------------------------426 !------------------------------------------------------------------------------! 427 ! 5) Update and limit ice properties after transport 428 !------------------------------------------------------------------------------! 429 430 !-------------------------------------------------- 431 ! 5.1) Recover mean values over the grid squares. 432 !-------------------------------------------------- 431 433 432 434 DO jl = 1, jpl … … 435 437 DO ji = 1, jpi 436 438 zs0e (ji,jj,jk,jl) = & 437 MAX( rzero, zs0e (ji,jj,jk,jl) / area(ji,jj) )439 MAX( rzero, zs0e (ji,jj,jk,jl) / area(ji,jj) ) 438 440 END DO 439 441 END DO … … 446 448 END DO 447 449 END DO 448 450 449 451 zs0at(:,:) = 0.0 450 452 DO jl = 1, jpl … … 462 464 END DO 463 465 464 !---------------------------------------------------------465 ! 5.2) Snow thickness, Ice thickness, Ice concentrations466 !---------------------------------------------------------466 !--------------------------------------------------------- 467 ! 5.2) Snow thickness, Ice thickness, Ice concentrations 468 !--------------------------------------------------------- 467 469 468 470 DO jj = 1, jpj … … 501 503 END DO 502 504 503 !----------------------504 ! 5.3) Ice properties505 !----------------------505 !---------------------- 506 ! 5.3) Ice properties 507 !---------------------- 506 508 507 509 zbigval = 1.0d+13 … … 521 523 ! Ice salinity and age 522 524 zsal = MAX( MIN( (rhoic-rhosn)/rhoic*sss_m(ji,jj) , & 523 524 525 zusvoic * zs0sm(ji,jj,jl) ), s_i_min ) * & 526 v_i(ji,jj,jl) 525 527 IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) & 526 528 smv_i(ji,jj,jl) = zindic*zsal + (1.0-zindic)*0.0 527 529 528 530 zage = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / & 529 530 531 MAX( a_i(ji,jj,jl), epsi16 ) ), 0.0 ) * & 532 a_i(ji,jj,jl) 531 533 oa_i (ji,jj,jl) = zindic*zage 532 534 … … 616 618 WRITE(numout,*) 617 619 ENDIF 618 620 619 621 END SUBROUTINE lim_trp_init 620 622
Note: See TracChangeset
for help on using the changeset viewer.