- Timestamp:
- 2010-11-12T20:31:16+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r2287 r2380 74 74 ENDIF 75 75 76 ! Special case for ORCA R 2 and R4 configurations (overwrite the value of ahm1 ahm2)76 ! Special case for ORCA R1, R2 and R4 configurations (overwrite the value of ahm1 ahm2) 77 77 ! ============================================== 78 78 IF( cp_cfg == "orca" .AND. ( jp_cfg == 2 .OR. jp_cfg == 4 ) ) CALL ldf_dyn_c2d_orca( ld_print ) 79 IF( cp_cfg == "orca" .AND. jp_cfg == 1) CALL ldf_dyn_c2d_orca_R1( ld_print ) 79 80 80 81 ! Control print … … 288 289 289 290 END SUBROUTINE ldf_dyn_c2d_orca 291 292 SUBROUTINE ldf_dyn_c2d_orca_R1( ld_print ) 293 !!---------------------------------------------------------------------- 294 !! *** ROUTINE ldf_dyn_c2d *** 295 !! 296 !! **** W A R N I N G **** 297 !! 298 !! ORCA R1 configuration 299 !! 300 !! **** W A R N I N G **** 301 !! 302 !! ** Purpose : initializations of the lateral viscosity for orca R1 303 !! 304 !! ** Method : blah blah blah... 305 !! 306 !!---------------------------------------------------------------------- 307 !! * Modules used 308 USE ldftra_oce, ONLY : aht0 309 310 !! * Arguments 311 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 312 313 !! * Local variables 314 INTEGER :: ji, jj, jn ! dummy loop indices 315 INTEGER :: inum ! temporary logical unit 316 INTEGER :: iim, ijm 317 INTEGER :: ifreq, il1, il2, ij, ii 318 INTEGER, DIMENSION(jpidta,jpidta) :: idata 319 INTEGER, DIMENSION(jpi ,jpj ) :: icof 320 321 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk, zam20s 322 323 CHARACTER (len=15) :: clexp 324 !!---------------------------------------------------------------------- 325 326 IF(lwp) WRITE(numout,*) 327 IF(lwp) WRITE(numout,*) 'inildf: 2d eddy viscosity coefficient' 328 IF(lwp) WRITE(numout,*) '~~~~~~ --' 329 IF(lwp) WRITE(numout,*) 330 IF(lwp) WRITE(numout,*) ' orca_r1 ocean model' 331 IF(lwp) WRITE(numout,*) 332 333 #if defined key_antarctic 334 # include "ldfdyn_antarctic.h90" 335 #elif defined key_arctic 336 # include "ldfdyn_arctic.h90" 337 #else 338 ! Read 2d integer array to specify western boundary increase in the 339 ! ===================== equatorial strip (20N-20S) defined at t-points 340 341 CALL ctl_opn( inum, 'ahmcoef', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', & 342 & 1, numout, lwp ) 343 REWIND inum 344 READ(inum,9101) clexp, iim, ijm 345 READ(inum,'(/)') 346 ifreq = 40 347 il1 = 1 348 DO jn = 1, jpidta/ifreq+1 349 READ(inum,'(/)') 350 il2 = MIN( jpidta, il1+ifreq-1 ) 351 READ(inum,9201) ( ii, ji = il1, il2, 5 ) 352 READ(inum,'(/)') 353 DO jj = jpjdta, 1, -1 354 READ(inum,9202) ij, ( idata(ji,jj), ji = il1, il2 ) 355 END DO 356 il1 = il1 + ifreq 357 END DO 358 359 DO jj = 1, nlcj 360 DO ji = 1, nlci 361 icof(ji,jj) = idata( mig(ji), mjg(jj) ) 362 END DO 363 END DO 364 DO jj = nlcj+1, jpj 365 DO ji = 1, nlci 366 icof(ji,jj) = icof(ji,nlcj) 367 END DO 368 END DO 369 DO jj = 1, jpj 370 DO ji = nlci+1, jpi 371 icof(ji,jj) = icof(nlci,jj) 372 END DO 373 END DO 374 375 9101 FORMAT(1x,a15,2i8) 376 9201 FORMAT(3x,13(i3,12x)) 377 9202 FORMAT(i3,41i3) 378 379 380 ! Set ahm1 and ahm2 ( T- and F- points) (used for laplacian operator) 381 ! ================= 382 ! define ahm1 and ahm2 at the right grid point position 383 ! (USER: modify ahm1 and ahm2 following your desiderata) 384 385 386 ! Decrease ahm to zahmeq m2/s in the tropics 387 ! (from 90 to 20 degrees: ahm = scaled by local metrics 388 ! from 20 to 2.5 degrees: ahm = decrease in (1-cos)/2 389 ! from 2.5 to 0 degrees: ahm = constant 390 ! symmetric in the south hemisphere) 391 392 zahmeq = aht0 393 zam20s = ahm0*COS( rad * 20. ) 394 395 DO jj = 1, jpj 396 DO ji = 1, jpi 397 IF( ABS( gphif(ji,jj) ) >= 20. ) THEN 398 ! leave as set in ldf_dyn_c2d 399 ELSEIF( ABS( gphif(ji,jj) ) <= 2.5 ) THEN 400 ahm2(ji,jj) = zahmeq 401 ELSE 402 ahm2(ji,jj) = zahmeq + (zam20s-zahmeq)/2. & 403 * ( 1. - COS( rad * ( ABS(gphif(ji,jj))-2.5 ) * 180. / 17.5 ) ) 404 ENDIF 405 IF( ABS( gphit(ji,jj) ) >= 20. ) THEN 406 ! leave as set in ldf_dyn_c2d 407 ELSEIF( ABS( gphit(ji,jj) ) <= 2.5 ) THEN 408 ahm1(ji,jj) = zahmeq 409 ELSE 410 ahm1(ji,jj) = zahmeq + (zam20s-zahmeq)/2. & 411 * ( 1. - COS( rad * ( ABS(gphit(ji,jj))-2.5 ) * 180. / 17.5 ) ) 412 ENDIF 413 END DO 414 END DO 415 416 ! increase along western boundaries of equatorial strip 417 ! t-point 418 DO jj = 1, jpjm1 419 DO ji = 1, jpim1 420 IF( ABS( gphit(ji,jj) ) < 20. ) THEN 421 zcoft = FLOAT( icof(ji,jj) ) / 100. 422 ahm1(ji,jj) = zcoft * ahm0 + (1.-zcoft) * ahm1(ji,jj) 423 ENDIF 424 END DO 425 END DO 426 ! f-point 427 icof(:,:) = icof(:,:) * tmask(:,:,1) 428 DO jj = 1, jpjm1 429 DO ji = 1, jpim1 430 IF( ABS( gphif(ji,jj) ) < 20. ) THEN 431 zmsk = tmask(ji,jj+1,1) + tmask(ji+1,jj+1,1) + tmask(ji,jj,1) + tmask(ji,jj+1,1) 432 IF( zmsk == 0. ) THEN 433 zcoff = 1. 434 ELSE 435 zcoff = FLOAT( icof(ji,jj+1) + icof(ji+1,jj+1) + icof(ji,jj) + icof(ji,jj+1) ) & 436 / (zmsk * 100.) 437 ENDIF 438 ahm2(ji,jj) = zcoff * ahm0 + (1.-zcoff) * ahm2(ji,jj) 439 ENDIF 440 END DO 441 END DO 442 #endif 443 444 ! Lateral boundary conditions on ( ahm1, ahm2 ) 445 ! ============== 446 CALL lbc_lnk( ahm1, 'T', 1. ) ! T-point, unchanged sign 447 CALL lbc_lnk( ahm2, 'F', 1. ) ! F-point, unchanged sign 448 449 ! Control print 450 IF( lwp .AND. ld_print ) THEN 451 WRITE(numout,*) 452 WRITE(numout,*) 'inildf: 2D ahm1 array' 453 CALL prihre(ahm1,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 454 WRITE(numout,*) 455 WRITE(numout,*) 'inildf: 2D ahm2 array' 456 CALL prihre(ahm2,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 457 ENDIF 458 459 END SUBROUTINE ldf_dyn_c2d_orca_R1
Note: See TracChangeset
for help on using the changeset viewer.