- Timestamp:
- 2017-06-21T11:39:54+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
r8168 r8197 344 344 345 345 ! TODO - remove kt only used for validation 346 SUBROUTINE dyn_vrt_dia_3d( utend, vtend, id_dia_vor _int, id_dia_vor_mn, kt)346 SUBROUTINE dyn_vrt_dia_3d( utend, vtend, id_dia_vor, kt) 347 347 348 348 !!---------------------------------------------------------------------- … … 357 357 !! 358 358 !!---------------------------------------------------------------------- 359 REAL, INTENT(in) :: utend(jpi,jpj,jpk) ! contribution to du/dt 360 REAL, INTENT(in) :: vtend(jpi,jpj,jpk) ! contribution to dv/dt 361 INTEGER, INTENT(in) :: id_dia_vor_int ! identifier for the vertical integral vorticity diagnostic 362 INTEGER, INTENT(in) :: id_dia_vor_mn ! identifier for the vertical mean vorticity diagnostic 363 INTEGER :: kt ! ocean time-step index 359 REAL :: utend(jpi,jpj,jpk) ! contribution to du/dt 360 REAL :: vtend(jpi,jpj,jpk) ! contribution to dv/dt 361 CHARACTER(len=3) :: id_dia_vor ! identifier for the diagnostic 362 INTEGER :: kt ! ocean time-step index TODO remove after validation 364 363 ! 365 364 !!---------------------------------------------------------------------- 366 365 ! 367 366 INTEGER :: ji, jj, jk ! dummy loop indices 368 INTEGER :: ji_min, ji_max ! dummy loop indices for dynspg_flt369 367 ! 370 368 REAL(wp), POINTER, DIMENSION(:,:) :: u_int ! u vertical integral … … 374 372 CALL wrk_alloc(jpi, jpj, v_int) 375 373 376 ji_min = 1377 ji_max = jpi378 379 IF ( id_dia_vor_int == 71 .OR. id_dia_vor_mn == 72 ) THEN380 ji_min = fs_2381 ji_max = fs_jpim1382 END IF383 384 374 u_int(:,:) = 0.0_wp 385 375 v_int(:,:) = 0.0_wp … … 388 378 ! Calculate the vertical integrals of utend & of vtend 389 379 ! 380 ! TODO remove - for validation only 381 IF ( kt == 1 ) THEN 382 WRITE(numout, *) 'dyn_vrt_dia_3d id:', id_dia_vor, & 383 & ':bathy:', bathy(17,12), & 384 & ':mbathy:', mbathy(17,12) 385 END IF 390 386 391 DO jk = 1,jpk 392 DO jj = 1,jpj 393 DO ji = ji_min,ji_max 394 u_int(ji,jj) = u_int(ji,jj) + utend(ji,jj,jk)*fse3u(ji,jj,jk) 395 v_int(ji,jj) = v_int(ji,jj) + vtend(ji,jj,jk)*fse3v(ji,jj,jk) 387 DO jk = 1, jpkm1 388 DO jj = 2, jpjm1 389 DO ji = fs_2, fs_jpim1 390 u_int(ji,jj) = u_int(ji,jj) + ( utend(ji,jj,jk) * fse3u(ji,jj,jk) & 391 & * e1u(ji,jj) * umask(ji,jj,jk) ) 392 v_int(ji,jj) = v_int(ji,jj) + ( vtend(ji,jj,jk) * fse3v(ji,jj,jk) & 393 & * e2v(ji,jj) * vmask(ji,jj,jk) ) 396 394 397 395 ! TODO remove - for validation only 398 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11 ) THEN 399 WRITE(numout, *) 'dyn_vrt_dia_3d id:', id_dia_vor_int, & 400 & ':ji:', ji, & 401 & ':jj:', jj, & 402 & ':jk:', jk, & 403 & ':u_int:', u_int(ji,jj), & 404 & ':u_tend:', utend(ji,jj,jk), & 405 & ':fse3u:', fse3u(ji,jj,jk) 406 WRITE(numout, *) 'dyn_vrt_dia_3d id:', id_dia_vor_int, & 407 & ':ji:', ji, & 408 & ':jj:', jj, & 409 & ':jk:', jk, & 410 & ':v_int:', v_int(ji,jj), & 411 & ':v_tend:', vtend(ji,jj,jk), & 412 & ':fse3v:', fse3v(ji,jj,jk) 396 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 ) THEN 397 WRITE(numout, *) 'dyn_vrt_dia_3d id:', id_dia_vor, & 398 & ' :ji: ', ji, & 399 & ' :jj: ', jj, & 400 & ' :jk: ', jk, & 401 & ' :u_int:', u_int(ji,jj), & 402 & ' :u_tend: ', utend(ji,jj,jk), & 403 & ' :e1u: ', e1u(ji,jj), & 404 & ' :umask: ', umask(ji,jj,jk), & 405 & ' :fse3u: ', fse3u(ji,jj,jk) 406 WRITE(numout, *) 'dyn_vrt_dia_3d id:', id_dia_vor, & 407 & ' :ji: ', ji, & 408 & ' :jj: ', jj, & 409 & ' :jk: ', jk, & 410 & ' :v_int:', v_int(ji,jj), & 411 & ' :v_tend: ', vtend(ji,jj,jk), & 412 & ' :e2v: ', e2v(ji,jj), & 413 & ' :vmask: ', vmask(ji,jj,jk), & 414 & ' :fse3v: ', fse3v(ji,jj,jk) 413 415 END IF 414 416 END DO … … 416 418 END DO 417 419 418 CALL dyn_vrt_dia_2d(u_int, v_int, id_dia_vor _int, id_dia_vor_mn, kt)420 CALL dyn_vrt_dia_2d(u_int, v_int, id_dia_vor, kt) 419 421 420 422 CALL wrk_dealloc(jpi, jpj, u_int) … … 425 427 426 428 ! TODO - remove kt only used for validation 427 SUBROUTINE dyn_vrt_dia_2d( u_int, v_int, id_dia_vor _int, id_dia_vor_mn, kt)429 SUBROUTINE dyn_vrt_dia_2d( u_int, v_int, id_dia_vor, kt) 428 430 429 431 !!---------------------------------------------------------------------- … … 438 440 !! means 439 441 !! d) Call iom_put for the vertical integral vorticity 440 !! tendencies (using id_dia_vor_int)442 !! tendencies (using cid_dia_vor_int) 441 443 !! e) Call iom_put for the vertical mean vorticity 442 !! tendencies (using id_dia_vor_mn) 443 !! 444 !!---------------------------------------------------------------------- 445 REAL :: u_int(jpi,jpj) ! u vertical integral 446 REAL :: v_int(jpi,jpj) ! v vertical integral 447 INTEGER :: id_dia_vor_int ! identifier for the vertical integral vorticity diagnostic 448 INTEGER :: id_dia_vor_mn ! identifier for the vertical mean vorticity diagnostic 449 INTEGER :: kt ! ocean time-step index 444 !! tendencies (using cid_dia_vor_mn) 445 !! 446 !!---------------------------------------------------------------------- 447 REAL :: u_int(jpi,jpj) ! u vertical integral 448 REAL :: v_int(jpi,jpj) ! v vertical integral 449 CHARACTER(len=3) :: id_dia_vor ! identifier for the vorticity diagnostic 450 INTEGER :: kt ! ocean time-step index TODO remove after validation 450 451 ! 451 452 !!---------------------------------------------------------------------- … … 469 470 CALL lbc_lnk( v_int, 'V', 1. ) 470 471 471 WRITE ( cid_dia_vor_int, "(A16, I2)" ) "dia_vor_int-", id_dia_vor_int472 WRITE ( cid_dia_vor_mn, "(A17, I2)" ) "dia_vor_mean-", id_dia_vor_mn472 WRITE ( cid_dia_vor_int, "(A16,A3)" ) "dia_vor_int-", id_dia_vor 473 WRITE ( cid_dia_vor_mn, "(A17,A3)" ) "dia_vor_mean-", id_dia_vor 473 474 474 475 ! 475 476 ! Calculate the vorticity tendencies for the vertical integrals. 476 ! 1/e1e2 * ((e2*d(vtend)/dx) - (e1*d(utend)/dy)) 477 ! 478 479 DO jj = 1,jpjm1 480 DO ji = 1,jpim1 481 vor_int(ji,jj) = ( v_int(ji+1,jj) * e2v(ji+1,jj) & 482 & - v_int(ji,jj) * e2v(ji,jj) & 483 & + u_int(ji,jj) * e1u(ji,jj) & 484 & - u_int(ji,jj+1) * e1u(ji,jj+1) ) & 485 & / ( e1f(ji,jj) * e2f(ji,jj) ) 477 ! 1/e1e2 * ((d(vtend)/dx) - (d(utend)/dy)) 478 ! 479 480 DO jj = 2, jpjm1 481 DO ji = fs_2, fs_jpim1 482 vor_int(ji,jj) = ( ( v_int(ji+1,jj) - v_int(ji,jj) ) & 483 & - ( u_int(ji,jj+1) - u_int(ji,jj) ) ) & 484 & / ( e1f(ji,jj) * e2f(ji,jj) ) 486 485 487 486 ! TODO remove - for validation only 488 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11) THEN489 WRITE(numout, *) 'dyn_vrt_dia_2d id:', id_dia_vor _int,&487 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 ) THEN 488 WRITE(numout, *) 'dyn_vrt_dia_2d id:', id_dia_vor, & 490 489 & ':ji:', ji, & 491 490 & ':jj:', jj, & 492 491 & ':vor_int:', vor_int(ji,jj), & 493 492 & ':v_int(i+1):', v_int(ji+1,jj), & 494 & ':e2v(j+1):', e2v(ji+1,jj), &495 493 & ':v_int:', v_int(ji,jj), & 496 & ':e2v:', e2v(ji,jj), &497 494 & ':u_int:', u_int(ji,jj), & 498 & ':e1u:', e1u(ji,jj), &499 495 & ':u_int(j+1):', u_int(ji,jj+1), & 500 & ':e1u(j+1):', e1u(ji,jj+1), &501 496 & ':e1f:', e1f(ji,jj), & 502 497 & ':e2f:', e2f(ji,jj) … … 505 500 END DO 506 501 502 ! Multiply by the surface mask 503 vor_int(:,:) = vor_int(:,:) * fmask(:,:,1) 507 504 508 505 ! … … 512 509 ! 513 510 514 DO jj = 1, jpj515 DO ji = 1, jpi511 DO jj = 2, jpjm1 512 DO ji = fs_2, fs_jpim1 516 513 ikbu = mbku(ji,jj) 517 514 ikbv = mbkv(ji,jj) 518 515 519 516 IF (ikbu .ne. 0.0_wp) THEN ! Don't divide by 0! 520 u_mn(ji,jj) = u_int(ji,jj) / ikbu517 u_mn(ji,jj) = u_int(ji,jj) / gdepw_n(ji,jj,ikbu+1) 521 518 ELSE 522 519 u_mn(ji,jj) = 0.0_wp … … 524 521 525 522 IF (ikbv .ne. 0.0_wp) THEN ! Don't divide by 0! 526 v_mn(ji,jj) = v_int(ji,jj) / ikbv523 v_mn(ji,jj) = v_int(ji,jj) / gdepw_n(ji,jj,ikbv+1) 527 524 ELSE 528 525 v_mn(ji,jj) = 0.0_wp … … 530 527 531 528 ! TODO remove - for validation only 532 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11) THEN533 WRITE(numout, *) 'dyn_vrt_dia_2d id:', id_dia_vor _int,&534 & ': ikbu:', ikbu,&535 & ':u_int:', u_int(ji,jj), &536 & ':u_mn:', u_mn(ji,jj), &537 & ': ikbv:', ikbv,&538 & ':v_int:', v_int(ji,jj), &529 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 ) THEN 530 WRITE(numout, *) 'dyn_vrt_dia_2d id:', id_dia_vor, & 531 & ':gdepw_n(ikbu):', gdepw_n(ji,jj,ikbu+1), & 532 & ':u_int:', u_int(ji,jj), & 533 & ':u_mn:', u_mn(ji,jj), & 534 & ':gdepw_n(ikbv):', gdepw_n(ji,jj,ikbv+1), & 535 & ':v_int:', v_int(ji,jj), & 539 536 & ':v_mn:', v_mn(ji,jj) 540 537 END IF … … 544 541 ! 545 542 ! Calculate the vorticity tendencies for the vertical means 546 ! 1/e1e2 * ((e2*d(v_mn)/dx) - (e1*d(u_mn)/dy)) 547 ! 548 549 DO jj = 1,jpjm1 550 DO ji = 1,jpim1 551 vor_mn(ji,jj) = ( v_mn(ji+1,jj) * e2v(ji+1,jj) & 552 & - v_mn(ji,jj) * e2v(ji,jj) & 553 & + u_mn(ji,jj) * e1u(ji,jj) & 554 & - u_mn(ji,jj+1) * e1u(ji,jj+1) ) & 543 ! 1/e1e2 * ((d(v_mn)/dx) - (d(u_mn)/dy)) 544 ! 545 546 DO jj = 2, jpjm1 547 DO ji = fs_2, fs_jpim1 548 vor_mn(ji,jj) = ( ( v_mn(ji+1,jj) - v_mn(ji,jj) ) & 549 & - ( u_mn(ji,jj+1) - u_mn(ji,jj) ) ) & 555 550 & / ( e1f(ji,jj) * e2f(ji,jj) ) 556 551 557 552 ! TODO remove - for validation only 558 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11) THEN559 WRITE(numout, *) 'dyn_vrt_dia_2d id:', id_dia_vor _int,&553 IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 ) THEN 554 WRITE(numout, *) 'dyn_vrt_dia_2d id:', id_dia_vor, & 560 555 & ':ji:', ji, & 561 556 & ':jj:', jj, & 562 557 & ':vor_mn:', vor_mn(ji,jj), & 563 558 & ':v_mn(i+1):', v_mn(ji+1,jj), & 564 & ':e2v(j+1):', e2v(ji+1,jj), &565 559 & ':v_mn:', v_mn(ji,jj), & 566 & ':e2v:', e2v(ji,jj), &567 560 & ':u_mn:', u_mn(ji,jj), & 568 & ':e1u:', e1u(ji,jj), &569 561 & ':u_mn(j+1):', u_mn(ji,jj+1), & 570 & ':e1u(j+1):', e1u(ji,jj+1), &571 562 & ':e1f:', e1f(ji,jj), & 572 563 & ':e2f:', e2f(ji,jj) … … 575 566 END DO 576 567 568 ! Multiply by the surface mask 569 vor_mn(:,:) = vor_mn(:,:) * fmask(:,:,1) 570 577 571 578 572 ! Call iom_put for the vertical integral vorticity tendencies
Note: See TracChangeset
for help on using the changeset viewer.