New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 8197 for branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90 – NEMO

Ignore:
Timestamp:
2017-06-21T11:39:54+02:00 (7 years ago)
Author:
glong
Message:

Changed id's to be chars e.g. hpg to more easily identify output (and updated field_def.xml accordingly). Also rearranged scaling factors in dyn_vrt_dia subroutines in divcur.F90

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r8168 r8197  
    344344 
    345345   ! 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) 
    347347 
    348348      !!---------------------------------------------------------------------- 
     
    357357      !! 
    358358      !!---------------------------------------------------------------------- 
    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 
    364363      ! 
    365364      !!---------------------------------------------------------------------- 
    366365      ! 
    367366      INTEGER  ::   ji, jj, jk     ! dummy loop indices 
    368       INTEGER  ::   ji_min, ji_max ! dummy loop indices for dynspg_flt 
    369367      ! 
    370368      REAL(wp), POINTER, DIMENSION(:,:) :: u_int   ! u vertical integral 
     
    374372      CALL wrk_alloc(jpi, jpj, v_int) 
    375373 
    376       ji_min = 1 
    377       ji_max = jpi 
    378  
    379       IF ( id_dia_vor_int == 71 .OR. id_dia_vor_mn == 72 ) THEN 
    380           ji_min = fs_2 
    381           ji_max = fs_jpim1 
    382       END IF 
    383  
    384374      u_int(:,:) = 0.0_wp 
    385375      v_int(:,:) = 0.0_wp 
     
    388378      ! Calculate the vertical integrals of utend & of vtend 
    389379      ! 
     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 
    390386       
    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) ) 
    396394 
    397395                  ! 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) 
    413415                  END IF 
    414416              END DO 
     
    416418      END DO 
    417419 
    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) 
    419421 
    420422      CALL wrk_dealloc(jpi, jpj, u_int) 
     
    425427 
    426428   ! 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) 
    428430 
    429431      !!---------------------------------------------------------------------- 
     
    438440      !!                means 
    439441      !!             d) Call iom_put for the vertical integral vorticity 
    440       !!                tendencies (using id_dia_vor_int) 
     442      !!                tendencies (using cid_dia_vor_int) 
    441443      !!             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 
    450451      ! 
    451452      !!---------------------------------------------------------------------- 
     
    469470      CALL lbc_lnk( v_int, 'V', 1. ) 
    470471 
    471       WRITE ( cid_dia_vor_int, "(A16,I2)" ) "dia_vor_int-",  id_dia_vor_int 
    472       WRITE ( cid_dia_vor_mn,  "(A17,I2)" ) "dia_vor_mean-", id_dia_vor_mn 
     472      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 
    473474 
    474475      ! 
    475476      ! 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) ) 
    486485 
    487486              ! TODO remove - for validation only 
    488               IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11 ) THEN 
    489                   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,    & 
    490489                       &           ':ji:', ji,                           & 
    491490                       &           ':jj:', jj,                           & 
    492491                       &           ':vor_int:', vor_int(ji,jj),          & 
    493492                       &           ':v_int(i+1):', v_int(ji+1,jj),       & 
    494                        &           ':e2v(j+1):', e2v(ji+1,jj),           & 
    495493                       &           ':v_int:', v_int(ji,jj),              & 
    496                        &           ':e2v:', e2v(ji,jj),                  & 
    497494                       &           ':u_int:', u_int(ji,jj),              & 
    498                        &           ':e1u:', e1u(ji,jj),                  & 
    499495                       &           ':u_int(j+1):', u_int(ji,jj+1),       & 
    500                        &           ':e1u(j+1):', e1u(ji,jj+1),           & 
    501496                       &           ':e1f:', e1f(ji,jj),                  & 
    502497                       &           ':e2f:', e2f(ji,jj) 
     
    505500      END DO 
    506501 
     502      ! Multiply by the surface mask 
     503      vor_int(:,:) = vor_int(:,:) * fmask(:,:,1) 
    507504 
    508505      ! 
     
    512509      ! 
    513510 
    514       DO jj = 1, jpj 
    515           DO ji = 1, jpi 
     511      DO jj = 2, jpjm1 
     512          DO ji = fs_2, fs_jpim1 
    516513              ikbu = mbku(ji,jj) 
    517514              ikbv = mbkv(ji,jj) 
    518515 
    519516              IF (ikbu .ne. 0.0_wp) THEN      ! Don't divide by 0! 
    520                   u_mn(ji,jj) = u_int(ji,jj) / ikbu 
     517                  u_mn(ji,jj) = u_int(ji,jj) / gdepw_n(ji,jj,ikbu+1) 
    521518              ELSE 
    522519                  u_mn(ji,jj) = 0.0_wp 
     
    524521 
    525522              IF (ikbv .ne. 0.0_wp) THEN      ! Don't divide by 0! 
    526                   v_mn(ji,jj) = v_int(ji,jj) / ikbv 
     523                  v_mn(ji,jj) = v_int(ji,jj) / gdepw_n(ji,jj,ikbv+1) 
    527524              ELSE 
    528525                  v_mn(ji,jj) = 0.0_wp 
     
    530527 
    531528              ! TODO remove - for validation only 
    532               IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11 ) THEN 
    533                   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),                   & 
    539536                       &           ':v_mn:', v_mn(ji,jj) 
    540537              END IF 
     
    544541      ! 
    545542      ! 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) ) )      & 
    555550                  &          / ( e1f(ji,jj)   * e2f(ji,jj) ) 
    556551 
    557552              ! TODO remove - for validation only 
    558               IF ( kt == 1 .AND. ji == 17 .AND. jj == 12 .AND. id_dia_vor_int == 11 ) THEN 
    559                   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,    & 
    560555                       &           ':ji:', ji,                           & 
    561556                       &           ':jj:', jj,                           & 
    562557                       &           ':vor_mn:', vor_mn(ji,jj),            & 
    563558                       &           ':v_mn(i+1):', v_mn(ji+1,jj),         & 
    564                        &           ':e2v(j+1):', e2v(ji+1,jj),           & 
    565559                       &           ':v_mn:', v_mn(ji,jj),                & 
    566                        &           ':e2v:', e2v(ji,jj),                  & 
    567560                       &           ':u_mn:', u_mn(ji,jj),                & 
    568                        &           ':e1u:', e1u(ji,jj),                  & 
    569561                       &           ':u_mn(j+1):', u_mn(ji,jj+1),         & 
    570                        &           ':e1u(j+1):', e1u(ji,jj+1),           & 
    571562                       &           ':e1f:', e1f(ji,jj),                  & 
    572563                       &           ':e2f:', e2f(ji,jj) 
     
    575566      END DO 
    576567 
     568      ! Multiply by the surface mask 
     569      vor_mn(:,:) = vor_mn(:,:) * fmask(:,:,1) 
     570 
    577571 
    578572      ! Call iom_put for the vertical integral vorticity tendencies 
Note: See TracChangeset for help on using the changeset viewer.