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 1438 for trunk/NEMO/OPA_SRC/DYN/dynvor.F90 – NEMO

Ignore:
Timestamp:
2009-05-11T16:34:47+02:00 (15 years ago)
Author:
rblod
Message:

Merge VVL branch with the trunk (act II), see ticket #429

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DYN/dynvor.F90

    r1152 r1438  
    55   !!                 planetary vorticity trends 
    66   !!====================================================================== 
    7    !! History :  1.0  !  89-12  (P. Andrich)  vor_ens: Original code 
    8    !!            5.0  !  91-11  (G. Madec) vor_ene, vor_mix: Original code 
    9    !!            6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    10    !!            8.5  !  02-08  (G. Madec)  F90: Free form and module 
    11    !!            8.5  !  04-02  (G. Madec)  vor_een: Original code 
    12    !!            9.0  !  03-08  (G. Madec)  vor_ctl: Original code 
    13    !!            9.0  !  05-11  (G. Madec)  dyn_vor: Original code (new step architecture) 
    14    !!            9.0  !  06-11  (G. Madec)  flux form advection: add metric term 
     7   !! History :  OPA  !  1989-12  (P. Andrich)  vor_ens: Original code 
     8   !!            5.0  !  1991-11  (G. Madec) vor_ene, vor_mix: Original code 
     9   !!            6.0  !  1996-01  (G. Madec)  s-coord, suppress work arrays 
     10   !!            8.5  !  2002-08  (G. Madec)  F90: Free form and module 
     11   !!   NEMO     1.0  !  2004-02  (G. Madec)  vor_een: Original code 
     12   !!             -   !  2003-08  (G. Madec)  add vor_ctl 
     13   !!             -   !  2005-11  (G. Madec)  add dyn_vor (new step architecture) 
     14   !!            2.0  !  2006-11  (G. Madec)  flux form advection: add metric term 
     15   !!            3.2  !  2009-04  (R. Benshila)  vvl: correction of een scheme 
    1516   !!---------------------------------------------------------------------- 
    1617 
     
    3738   PUBLIC   dyn_vor   ! routine called by step.F90 
    3839 
    39    !!* Namelist nam_dynvor: vorticity term 
     40   !                                             !!* Namelist nam_dynvor: vorticity term 
    4041   LOGICAL, PUBLIC ::   ln_dynvor_ene = .FALSE.   !: energy conserving scheme 
    4142   LOGICAL, PUBLIC ::   ln_dynvor_ens = .TRUE.    !: enstrophy conserving scheme 
     
    5253#  include "vectopt_loop_substitute.h90" 
    5354   !!---------------------------------------------------------------------- 
    54    !!   OPA 9.0 , LOCEAN-IPSL (2006)  
     55   !! NEMO/OPA 3,2 , LOCEAN-IPSL (2009)  
    5556   !! $Id$ 
    5657   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     
    174175      IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor  - Ua: ', mask1=umask, & 
    175176         &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    176  
     177      ! 
    177178   END SUBROUTINE dyn_vor 
    178179 
     
    206207      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    207208      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
    208          !                                                        ! =nrvm (relative vorticity or metric) 
     209      !                                                           ! =nrvm (relative vorticity or metric) 
    209210      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    210211      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
     
    222223      ENDIF 
    223224 
    224       ! Local constant initialization 
    225       zfact2 = 0.5 * 0.5 
     225      zfact2 = 0.5 * 0.5      ! Local constant initialization 
    226226 
    227227!CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz ) 
     
    229229      DO jk = 1, jpkm1                                 ! Horizontal slab 
    230230         !                                             ! =============== 
     231         ! 
    231232         ! Potential vorticity and horizontal fluxes 
    232233         ! ----------------------------------------- 
     
    315316      INTEGER, INTENT(in) ::   kt   ! ocean timestep index 
    316317      !! 
    317       INTEGER ::   ji, jj, jk   ! dummy loop indices 
     318      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    318319      REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! temporary scalars 
    319320      REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !    "         " 
     
    327328      ENDIF 
    328329 
    329       ! Local constant initialization 
    330       zfact1 = 0.5 * 0.25 
     330      zfact1 = 0.5 * 0.25      ! Local constant initialization 
    331331      zfact2 = 0.5 * 0.5 
    332332 
     
    335335      DO jk = 1, jpkm1                                 ! Horizontal slab 
    336336         !                                             ! =============== 
    337  
     337         ! 
    338338         ! Relative and planetary potential vorticity and horizontal fluxes 
    339339         ! ---------------------------------------------------------------- 
     
    438438      ENDIF 
    439439 
    440       ! Local constant initialization 
    441       zfact1 = 0.5 * 0.25 
     440      zfact1 = 0.5 * 0.25      ! Local constant initialization 
    442441 
    443442!CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz ) 
     
    445444      DO jk = 1, jpkm1                                 ! Horizontal slab 
    446445         !                                             ! =============== 
     446         ! 
    447447         ! Potential vorticity and horizontal fluxes 
    448448         ! ----------------------------------------- 
     
    465465                       &       + (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    466466                       &           - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    467                        &       * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) )                                               & 
     467                       &       * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) )                                                & 
    468468                       &       ) 
    469469               END DO 
    470470            END DO 
    471471         END SELECT 
    472  
     472         ! 
    473473         IF( ln_sco ) THEN 
    474474            DO jj = 1, jpj                      ! caution: don't use (:,:) for this loop  
     
    487487            END DO 
    488488         ENDIF 
    489  
     489         ! 
    490490         ! Compute and add the vorticity term trend 
    491491         ! ---------------------------------------- 
     
    514514      !! 
    515515      !! ** Method  :   Trend evaluated using now fields (centered in time)  
    516       !!      and the Arakawa and Lamb (19XX) flux form formulation : conserves  
     516      !!      and the Arakawa and Lamb (1980) flux form formulation : conserves  
    517517      !!      both the horizontal kinetic energy and the potential enstrophy 
    518       !!      when horizontal divergence is zero. 
    519       !!      The trend of the vorticity term is given by: 
    520       !!       * s-coordinate (ln_sco=T), the e3. are inside the derivatives: 
    521       !!       * z-coordinate (default key), e3t=e3u=e3v, the trend becomes: 
    522       !!      Add this trend to the general momentum trend (ua,va): 
    523       !!          (ua,va) = (ua,va) + ( voru , vorv ) 
     518      !!      when horizontal divergence is zero (see the NEMO documentation) 
     519      !!      Add this trend to the general momentum trend (ua,va). 
    524520      !! 
    525521      !! ** Action : - Update (ua,va) with the now vorticity term trend 
     
    531527      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    532528      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
    533          !                                                        ! =nrvm (relative vorticity or metric) 
     529      !                                                           ! =nrvm (relative vorticity or metric) 
    534530      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    535531      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
    536532      !! 
    537       INTEGER ::   ji, jj, jk          ! dummy loop indices 
     533      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    538534      REAL(wp) ::   zfac12, zua, zva   ! temporary scalars 
    539535      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz            ! temporary 2D workspace 
    540536      REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse   ! temporary 3D workspace 
     537#if defined key_vvl 
     538      REAL(wp), DIMENSION(jpi,jpj,jpk)       ::   ze3f 
     539#else 
    541540      REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
     541#endif 
    542542      !!---------------------------------------------------------------------- 
    543543 
     
    546546         IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 
    547547         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    548  
     548      ENDIF 
     549 
     550      IF( kt == nit000 .OR. lk_vvl ) THEN      ! reciprocal of e3 at F-point (masked averaging of e3t) 
    549551         DO jk = 1, jpk 
    550552            DO jj = 1, jpjm1 
     
    559561      ENDIF 
    560562 
    561       ! Local constant initialization 
    562       zfac12 = 1.e0 / 12.e0 
     563      zfac12 = 1.e0 / 12.e0      ! Local constant initialization 
    563564 
    564565       
     
    571572         ! ----------------------------------------- 
    572573         SELECT CASE( kvor )      ! vorticity considered 
    573          CASE ( 1 )   ;   zwz(:,:) = ff(:,:)      * ze3f(:,:,jk)   ! planetary vorticity (Coriolis) 
    574          CASE ( 2 )   ;   zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk)   ! relative  vorticity 
     574         CASE ( 1 )                                                ! planetary vorticity (Coriolis) 
     575            zwz(:,:) = ff(:,:)      * ze3f(:,:,jk) 
     576         CASE ( 2 )                                                ! relative  vorticity 
     577            zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 
    575578         CASE ( 3 )                                                ! metric term 
    576579            DO jj = 1, jpjm1 
     
    581584               END DO 
    582585            END DO 
    583          CASE ( 4 )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) ! total (relative + planetary vorticity) 
     586         CASE ( 4 )                                                ! total (relative + planetary vorticity) 
     587            zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 
    584588         CASE ( 5 )                                                ! total (coriolis + metric) 
    585589            DO jj = 1, jpjm1 
     
    588592                       &       + (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    589593                       &           - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    590                        &       * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) )                                               & 
     594                       &       * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) )                                                & 
    591595                       &       ) * ze3f(ji,jj,jk) 
    592596               END DO 
     
    599603         ! Compute and add the vorticity term trend 
    600604         ! ---------------------------------------- 
    601          jj=2 
    602          ztne(1,:) = 0 ; ztnw(1,:) = 0 ; ztse(1,:) = 0 ; ztsw(1,:) = 0 
     605         jj = 2 
     606         ztne(1,:) = 0   ;   ztnw(1,:) = 0   ;   ztse(1,:) = 0   ;  ztsw(1,:) = 0 
    603607         DO ji = 2, jpi    
    604608               ztne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
     
    636640      !! 
    637641      !! ** Purpose :   Control the consistency between cpp options for 
    638       !!      tracer advection schemes 
     642      !!              tracer advection schemes 
    639643      !!---------------------------------------------------------------------- 
    640644      INTEGER ::   ioptio          ! temporary integer 
Note: See TracChangeset for help on using the changeset viewer.