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

Ignore:
Timestamp:
2006-09-27T10:52:29+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_064 : CT : general trends update including the addition of mean windows analysis possibility in the mixed layer

File:
1 edited

Legend:

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

    r474 r503  
    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   !!---------------------------------------------------------------------- 
    715 
    816   !!---------------------------------------------------------------------- 
     
    1422   !!       vor_ctl : control of the different vorticity option 
    1523   !!---------------------------------------------------------------------- 
    16    !! * Modules used 
    17    USE oce             ! ocean dynamics and tracers 
    18    USE dom_oce         ! ocean space and time domain 
    19    USE in_out_manager  ! I/O manager 
    20    USE trdmod          ! ocean dynamics trends  
    21    USE trdmod_oce      ! ocean variables trends 
    22    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    23    USE prtctl          ! Print control 
     24   USE oce            ! ocean dynamics and tracers 
     25   USE dom_oce        ! ocean space and time domain 
     26   USE trdmod         ! ocean dynamics trends  
     27   USE trdmod_oce     ! ocean variables trends 
     28   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     29   USE prtctl         ! Print control 
     30   USE in_out_manager ! I/O manager 
    2431 
    2532   IMPLICIT NONE 
    2633   PRIVATE 
    2734 
    28    !! * Routine accessibility 
    29    PUBLIC dyn_vor      ! routine called by step.F90 
    30  
    31    !! * Shared module variables 
     35   PUBLIC   dyn_vor   ! routine called by step.F90 
     36 
     37   !!* Namelist nam_dynvor: vorticity term 
    3238   LOGICAL, PUBLIC ::   ln_dynvor_ene = .FALSE.   !: energy conserving scheme 
    3339   LOGICAL, PUBLIC ::   ln_dynvor_ens = .TRUE.    !: enstrophy conserving scheme 
    3440   LOGICAL, PUBLIC ::   ln_dynvor_mix = .FALSE.   !: mixed scheme 
    35    LOGICAL, PUBLIC ::   ln_dynvor_een = .FALSE.    !: energy and enstrophy conserving scheme 
    36  
    37    !! * module variables 
    38    INTEGER ::                        & 
    39       nvor = 0                         ! type of vorticity trend used 
     41   LOGICAL, PUBLIC ::   ln_dynvor_een = .FALSE.   !: energy and enstrophy conserving scheme 
     42   NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 
     43 
     44   INTEGER ::   nvor = 0   ! type of vorticity trend used 
    4045 
    4146   !! * Substitutions 
     
    4348#  include "vectopt_loop_substitute.h90" 
    4449   !!---------------------------------------------------------------------- 
    45    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     50   !!   OPA 9.0 , LOCEAN-IPSL (2006)  
     51   !! $Header$ 
     52   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4653   !!---------------------------------------------------------------------- 
    4754 
     
    5461      !! 
    5562      !! ** Action : - Update (ua,va) with the now vorticity term trend 
    56       !!             - save the trends in (utrd,vtrd) in 2 parts (relative 
     63      !!             - save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    5764      !!               and planetary vorticity trends) ('key_trddyn') 
    58       !! 
    59       !! History : 
    60       !!   9.0  !  05-11  (G. Madec)  Original code 
    61       !!---------------------------------------------------------------------- 
    62       USE oce, ONLY :    ztrdu => ta,     & ! use ta as 3D workspace 
    63                          ztrdv => sa        ! use sa as 3D workspace 
    64  
    65       !! * Arguments 
    66       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
     65      !!---------------------------------------------------------------------- 
     66      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace 
     67      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace 
     68      !! 
     69      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    6770      !!---------------------------------------------------------------------- 
    6871 
     
    7477      CASE ( -1 )                                      ! esopa: test all possibility with control print 
    7578         CALL vor_ene( kt, 'TOT', ua, va ) 
    76          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 
    77             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     79         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 
     80            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    7881         CALL vor_ens( kt, 'TOT', ua, va ) 
    79          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 
    80             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     82         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 
     83            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    8184         CALL vor_mix( kt ) 
    82          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 
    83             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     85         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 
     86            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    8487         CALL vor_een( kt, 'TOT', ua, va ) 
    85          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 
    86             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     88         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 
     89            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    8790 
    8891      CASE ( 0 )                                       ! energy conserving scheme 
     
    9396            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    9497            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    95             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     98            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    9699            ztrdu(:,:,:) = ua(:,:,:) 
    97100            ztrdv(:,:,:) = va(:,:,:) 
     
    99102            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    100103            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    101             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    102             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     104            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     105            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    103106         ELSE 
    104107            CALL vor_ene( kt, 'TOT', ua, va )                ! total vorticity 
     
    112115            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    113116            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    114             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     117            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    115118            ztrdu(:,:,:) = ua(:,:,:) 
    116119            ztrdv(:,:,:) = va(:,:,:) 
     
    118121            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    119122            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    120             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    121             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     123            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     124            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    122125         ELSE 
    123126            CALL vor_ens( kt, 'TOT', ua, va )                ! total vorticity 
     
    131134            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    132135            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    133             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     136            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    134137            ztrdu(:,:,:) = ua(:,:,:) 
    135138            ztrdv(:,:,:) = va(:,:,:) 
     
    137140            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    138141            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    139             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    140             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     142            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     143            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    141144         ELSE 
    142145            CALL vor_mix( kt )                               ! total vorticity (mix=ens-ene) 
     
    150153            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    151154            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    152             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     155            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    153156            ztrdu(:,:,:) = ua(:,:,:) 
    154157            ztrdv(:,:,:) = va(:,:,:) 
     
    156159            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    157160            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    158             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    159             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     161            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     162            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    160163         ELSE 
    161164            CALL vor_een( kt, 'TOT', ua, va )                ! total vorticity 
     
    192195      !! 
    193196      !! ** Action : - Update (ua,va) with the now vorticity term trend 
    194       !!             - save the trends in (utrd,vtrd) in 2 parts (relative 
     197      !!             - save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    195198      !!               and planetary vorticity trends) ('key_trddyn') 
    196199      !! 
    197       !! References : 
    198       !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    199       !! History : 
    200       !!   5.0  !  91-11  (G. Madec)  Original code 
    201       !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    202       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    203       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    204       !!---------------------------------------------------------------------- 
    205       !! * Arguments 
    206       INTEGER, INTENT( in ) ::   kt         ! ocean time-step index 
    207       CHARACTER(len=3) , INTENT( in ) ::   & 
    208          cd_vor        ! define the vorticity considered 
    209          !             ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 
    210       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::   & 
    211          pua, pva                      ! ???? 
    212  
    213       !! * Local declarations 
    214       INTEGER ::   ji, jj, jk               ! dummy loop indices 
    215       REAL(wp) ::   & 
    216          zfact2,                         &  ! temporary scalars 
    217          zx1, zx2, zy1, zy2                 !    "         " 
    218       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    219          zwx, zwy, zwz                      ! temporary workspace 
     200      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
     201      !!---------------------------------------------------------------------- 
     202      INTEGER          , INTENT(in   )                         ::   kt       ! ocean time-step index 
     203      CHARACTER(len=3) , INTENT(in   )                         ::   cd_vor   ! ='COR' (planetary) ; ='VOR' (relative) 
     204         !                                                                   ! ='TOT' (total) 
     205      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua      ! total u-trend 
     206      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva      ! total v-trend 
     207      !! 
     208      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
     209      REAL(wp) ::   zx1, zy1, zfact2   ! temporary scalars 
     210      REAL(wp) ::   zx2, zy2           !    "         " 
     211      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 2D workspace 
    220212      !!---------------------------------------------------------------------- 
    221213 
     
    234226      DO jk = 1, jpkm1                                 ! Horizontal slab 
    235227         !                                             ! =============== 
    236           
    237228         ! Potential vorticity and horizontal fluxes 
    238229         ! ----------------------------------------- 
    239230         SELECT CASE( cd_vor )      ! vorticity considered 
    240          CASE ( 'COR' )                   ! planetary vorticcity (Coriolis) 
    241             zwz(:,:) = ff(:,:) 
    242          CASE ( 'VOR' )                   ! relative  vorticity 
    243             zwz(:,:) = rotn(:,:,jk) 
    244          CASE ( 'TOT' )                   ! total     vorticity (planetary + relative) 
    245             zwz(:,:) = rotn(:,:,jk) + ff(:,:) 
     231         CASE ( 'COR' )   ;   zwz(:,:) =                  ff(:,:)      ! planetary vorticity (Coriolis) 
     232         CASE ( 'VOR' )   ;   zwz(:,:) =   rotn(:,:,jk)                ! relative  vorticity 
     233         CASE ( 'TOT' )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) )    ! total     vorticity  
    246234         END SELECT 
    247235 
     
    270258      END DO                                           !   End of slab 
    271259      !                                                ! =============== 
    272  
    273260   END SUBROUTINE vor_ene 
    274261 
     
    300287      !! 
    301288      !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 
    302       !!             - Save the trends in (utrd,vtrd) in 2 parts (relative 
     289      !!             - Save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    303290      !!               and planetary vorticity trends) ('key_trddyn') 
    304291      !! 
    305       !! References : 
    306       !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    307       !! History : 
    308       !!   5.0  !  91-11  (G. Madec) Original code, enstrophy-energy-combined schemes 
    309       !!   6.0  !  96-01  (G. Madec) s-coord, suppress work arrays 
    310       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    311       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    312       !!---------------------------------------------------------------------- 
    313       !! * Arguments 
    314       INTEGER, INTENT( in ) ::   kt         ! ocean timestep index 
    315  
    316       !! * Local declarations 
    317       INTEGER ::   ji, jj, jk               ! dummy loop indices 
    318       REAL(wp) ::   & 
    319          zfact1, zfact2, zua, zva,       &  ! temporary scalars 
    320          zcua, zcva, zx1, zx2, zy1, zy2 
    321       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    322          zwx, zwy, zwz, zww                 ! temporary workspace 
     292      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
     293      !!---------------------------------------------------------------------- 
     294      INTEGER, INTENT(in) ::   kt   ! ocean timestep index 
     295      !! 
     296      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     297      REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! temporary scalars 
     298      REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !    "         " 
     299      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz, zww   ! temporary 3D workspace 
    323300      !!---------------------------------------------------------------------- 
    324301 
     
    367344               zcua = zfact2 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    368345               zcva =-zfact2 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
    369  
     346               ! mixed vorticity trend added to the momentum trends 
    370347               ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua 
    371348               va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva 
     
    375352      END DO                                           !   End of slab 
    376353      !                                                ! =============== 
    377  
    378354   END SUBROUTINE vor_mix 
    379355 
     
    400376      !! 
    401377      !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 
    402       !!             - Save the trends in (utrd,vtrd) in 2 parts (relative  
     378      !!             - Save the trends in (ztrdu,ztrdv) in 2 parts (relative  
    403379      !!               and planetary vorticity trends) ('key_trddyn') 
    404380      !! 
    405       !! References : 
    406       !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    407       !! History : 
    408       !!   5.0  !  91-11  (G. Madec)  Original code 
    409       !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    410       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    411       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    412       !!---------------------------------------------------------------------- 
    413       !! * Arguments 
    414       INTEGER, INTENT( in ) ::   kt    ! ocean timestep 
    415       CHARACTER(len=3) , INTENT( in ) ::   & 
    416          cd_vor        ! define the vorticity considered 
    417          !             ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 
    418       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::   & 
    419          pua, pva                      ! ???? 
    420  
    421       !! * Local declarations 
    422       INTEGER ::   ji, jj, jk          ! dummy loop indices 
    423       REAL(wp) ::   & 
    424          zfact1, zuav, zvau            ! temporary scalars 
    425       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    426          zwx, zwy, zwz                 ! temporary workspace 
     381      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
     382      !!---------------------------------------------------------------------- 
     383      INTEGER          , INTENT(in   )                         ::   kt       ! ocean time-step index 
     384      CHARACTER(len=3) , INTENT(in   )                         ::   cd_vor   ! ='COR' (planetary) ; ='VOR' (relative) 
     385         !                                                                   ! ='TOT' (total) 
     386      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua      ! total u-trend 
     387      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva      ! total v-trend 
     388      !! 
     389      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     390      REAL(wp) ::   zfact1, zuav, zvau   ! temporary scalars 
     391      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 3D workspace 
    427392      !!---------------------------------------------------------------------- 
    428393       
     
    441406      DO jk = 1, jpkm1                                 ! Horizontal slab 
    442407         !                                             ! =============== 
    443  
    444408         ! Potential vorticity and horizontal fluxes 
    445409         ! ----------------------------------------- 
    446410         SELECT CASE( cd_vor )      ! vorticity considered 
    447          CASE ( 'COR' )                   ! planetary vorticcity (Coriolis) 
    448             zwz(:,:) = ff(:,:) 
    449          CASE ( 'VOR' )                   ! relative  vorticity 
    450             zwz(:,:) = rotn(:,:,jk) 
    451          CASE ( 'TOT' )                   ! total     vorticity (planetary + relative) 
    452             zwz(:,:) = rotn(:,:,jk) + ff(:,:) 
     411         CASE ( 'COR' )   ;   zwz(:,:) =                  ff(:,:)      ! planetary vorticity (Coriolis) 
     412         CASE ( 'VOR' )   ;   zwz(:,:) =   rotn(:,:,jk)                ! relative  vorticity 
     413         CASE ( 'TOT' )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) )    ! total     vorticity  
    453414         END SELECT 
    454415 
     
    470431         ENDIF 
    471432 
    472  
    473433         ! Compute and add the vorticity term trend 
    474434         ! ---------------------------------------- 
     
    476436            DO ji = fs_2, fs_jpim1   ! vector opt. 
    477437               zuav = zfact1 / e1u(ji,jj) * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1)   & 
    478                                             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) 
     438                  &                         + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) 
    479439               zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1)   & 
    480                                             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) 
    481  
     440                  &                         + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) 
    482441               pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    483442               pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     
    487446      END DO                                           !   End of slab 
    488447      !                                                ! =============== 
    489  
    490448   END SUBROUTINE vor_ens 
    491449 
     
    509467      !! 
    510468      !! ** Action : - Update (ua,va) with the now vorticity term trend 
    511       !!             - save the trends in (utrd,vtrd) in 2 parts (relative 
     469      !!             - save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    512470      !!               and planetary vorticity trends) ('key_trddyn') 
    513471      !! 
    514       !! References : 
    515       !!      Arakawa and Lamb 1980, A potential enstrophy and energy conserving 
    516       !!                             scheme for the Shallow water equations,  
    517       !!                             Monthly Weather Review, vol. 109, p 18-36 
    518       !! 
    519       !! History : 
    520       !!   8.5  !  04-02  (G. Madec)  Original code 
    521       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    522       !!---------------------------------------------------------------------- 
    523       !! * Arguments 
    524       INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
    525       CHARACTER(len=3) , INTENT( in ) ::   & 
    526          cd_vor        ! define the vorticity considered 
    527          !             ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 
    528       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::   & 
    529          pua, pva                      ! ???? 
    530  
    531       !! * Local declarations 
    532       INTEGER ::   ji, jj, jk              ! dummy loop indices 
    533       REAL(wp) ::   & 
    534          zfac12, zua, zva                  ! temporary scalars 
    535       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    536          zwx, zwy, zwz,                 &  ! temporary workspace 
    537          ztnw, ztne, ztsw, ztse            !    "           " 
    538       REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   & 
    539          ze3f 
     472      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
     473      !!---------------------------------------------------------------------- 
     474      INTEGER          , INTENT(in   )                         ::   kt       ! ocean time-step index 
     475      CHARACTER(len=3) , INTENT(in   )                         ::   cd_vor   ! ='COR' (planetary) ; ='VOR' (relative) 
     476         !                                                                   ! ='TOT' (total) 
     477      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua      ! total u-trend 
     478      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva      ! total v-trend 
     479      !! 
     480      INTEGER ::   ji, jj, jk          ! dummy loop indices 
     481      REAL(wp) ::   zfac12, zua, zva   ! temporary scalars 
     482      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz            ! temporary 2D workspace 
     483      REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse   ! temporary 3D workspace 
     484      REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
    540485      !!---------------------------------------------------------------------- 
    541486 
     
    570515         ! ----------------------------------------- 
    571516         SELECT CASE( cd_vor )      ! vorticity considered 
    572          CASE ( 'COR' )                   ! planetary vorticcity (Coriolis) 
    573             zwz(:,:) = ff(:,:) * ze3f(:,:,jk) 
    574          CASE ( 'VOR' )                   ! relative  vorticity 
    575             zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 
    576          CASE ( 'TOT' )                   ! total     vorticity (planetary + relative) 
    577             zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 
     517         CASE ( 'COR' )   ;   zwz(:,:) =                  ff(:,:)   * ze3f(:,:,jk)   ! planetary vorticity (Coriolis) 
     518         CASE ( 'VOR' )   ;   zwz(:,:) =   rotn(:,:,jk)             * ze3f(:,:,jk)   ! relative  vorticity 
     519         CASE ( 'TOT' )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk)   ! total     vorticity  
    578520         END SELECT 
    579521 
     
    599541            END DO 
    600542         END DO 
    601           
    602543         DO jj = 2, jpjm1 
    603544            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    613554      END DO                                           !   End of slab 
    614555      !                                                ! =============== 
    615  
    616556   END SUBROUTINE vor_een 
    617557 
     
    623563      !! ** Purpose :   Control the consistency between cpp options for 
    624564      !!      tracer advection schemes 
    625       !! 
    626       !! History : 
    627       !!   9.0  !  03-08  (G. Madec)  Original code 
    628       !!---------------------------------------------------------------------- 
    629       !! * Local declarations 
     565      !!---------------------------------------------------------------------- 
    630566      INTEGER ::   ioptio          ! temporary integer 
    631  
    632       NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 
    633       !!---------------------------------------------------------------------- 
    634  
    635       ! Read Namelist nam_dynvor : Vorticity scheme options 
    636       ! ------------------------ 
    637       REWIND ( numnam ) 
     567      !!---------------------------------------------------------------------- 
     568 
     569      REWIND ( numnam )               ! Read Namelist nam_dynvor : Vorticity scheme options 
    638570      READ   ( numnam, nam_dynvor ) 
    639571 
    640       ! Control of vorticity scheme options 
    641       ! ----------------------------------- 
    642       ! Control print 
    643       IF(lwp) THEN 
     572      IF(lwp) THEN                    ! Namelist print 
    644573         WRITE(numout,*) 
    645574         WRITE(numout,*) 'dyn:vor_ctl : vorticity term : read namelist and control the consistency' 
    646575         WRITE(numout,*) '~~~~~~~~~~~' 
    647          WRITE(numout,*) '              Namelist nam_dynvor : oice of the vorticity term scheme' 
    648          WRITE(numout,*) '                 energy    conserving scheme                ln_dynvor_ene = ', ln_dynvor_ene 
    649          WRITE(numout,*) '                 enstrophy conserving scheme                ln_dynvor_ens = ', ln_dynvor_ens 
    650          WRITE(numout,*) '                 mixed enstrophy/energy conserving scheme   ln_dynvor_mix = ', ln_dynvor_mix 
    651          WRITE(numout,*) '                 enstrophy and energy conserving scheme     ln_dynvor_een = ', ln_dynvor_een 
     576         WRITE(numout,*) '        Namelist nam_dynvor : oice of the vorticity term scheme' 
     577         WRITE(numout,*) '           energy    conserving scheme                ln_dynvor_ene = ', ln_dynvor_ene 
     578         WRITE(numout,*) '           enstrophy conserving scheme                ln_dynvor_ens = ', ln_dynvor_ens 
     579         WRITE(numout,*) '           mixed enstrophy/energy conserving scheme   ln_dynvor_mix = ', ln_dynvor_mix 
     580         WRITE(numout,*) '           enstrophy and energy conserving scheme     ln_dynvor_een = ', ln_dynvor_een 
    652581      ENDIF 
    653582 
    654       ioptio = 0 
    655       IF( ln_dynvor_ene ) THEN 
    656          nvor = 0 
    657          IF(lwp) WRITE(numout,*) 
    658          IF(lwp) WRITE(numout,*) '              vorticity term : energy conserving scheme' 
    659          ioptio = ioptio + 1 
     583      ioptio = 0                     ! Control of vorticity scheme options 
     584      IF( ln_dynvor_ene )   ioptio = ioptio + 1 
     585      IF( ln_dynvor_ens )   ioptio = ioptio + 1 
     586      IF( ln_dynvor_mix )   ioptio = ioptio + 1 
     587      IF( ln_dynvor_een )   ioptio = ioptio + 1 
     588      IF( lk_esopa      )   ioptio =          1 
     589 
     590      IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 
     591 
     592      !                              ! Set nvor 
     593      IF( ln_dynvor_ene )   nvor =  0 
     594      IF( ln_dynvor_ens )   nvor =  1 
     595      IF( ln_dynvor_mix )   nvor =  2 
     596      IF( ln_dynvor_een )   nvor =  3 
     597      IF( lk_esopa      )   nvor = -1 
     598       
     599      IF(lwp) THEN                   ! Print the choice 
     600         WRITE(numout,*) 
     601         IF( nvor ==  0 )   WRITE(numout,*) '         vorticity term used : energy conserving scheme' 
     602         IF( nvor ==  1 )   WRITE(numout,*) '         vorticity term used : enstrophy conserving scheme' 
     603         IF( nvor ==  2 )   WRITE(numout,*) '         vorticity term used : mixed enstrophy/energy conserving scheme' 
     604         IF( nvor ==  3 )   WRITE(numout,*) '         vorticity term used : energy and enstrophy conserving scheme' 
     605         IF( nvor == -1 )   WRITE(numout,*) '         esopa test: use all lateral physics options' 
    660606      ENDIF 
    661       IF( ln_dynvor_ens ) THEN 
    662          nvor = 1 
    663          IF(lwp) WRITE(numout,*) 
    664          IF(lwp) WRITE(numout,*) '              vorticity term : enstrophy conserving scheme' 
    665          ioptio = ioptio + 1 
    666       ENDIF 
    667       IF( ln_dynvor_mix ) THEN 
    668          nvor = 2 
    669          IF(lwp) WRITE(numout,*) 
    670          IF(lwp) WRITE(numout,*) '              vorticity term : mixed enstrophy/energy conserving scheme' 
    671          ioptio = ioptio + 1 
    672       ENDIF 
    673       IF( ln_dynvor_een ) THEN 
    674          nvor = 3 
    675          IF(lwp) WRITE(numout,*) 
    676          IF(lwp) WRITE(numout,*) '              vorticity term : energy and enstrophy conserving scheme' 
    677          ioptio = ioptio + 1 
    678       ENDIF 
    679       IF( ioptio /= 1 .AND. .NOT. lk_esopa ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 
    680       IF( lk_esopa ) THEN 
    681          nvor = -1 
    682          IF(lwp ) WRITE(numout,*) '          esopa test: use all lateral physics options' 
    683       ENDIF 
    684       IF(lwp) WRITE(numout,*) '             choice of vor_...                nvor   = ', nvor 
    685  
     607      ! 
    686608   END SUBROUTINE vor_ctl 
    687609 
    688 !!============================================================================== 
     610   !!============================================================================== 
    689611END MODULE dynvor 
Note: See TracChangeset for help on using the changeset viewer.