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

Ignore:
Timestamp:
2005-03-17T15:02:38+01:00 (19 years ago)
Author:
opalod
Message:

CT : UPDATE151 : New trends organization

File:
1 edited

Legend:

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

    r110 r216  
    1414   !!---------------------------------------------------------------------- 
    1515   !! * Modules used 
    16    USE oce            ! ocean dynamics and tracers 
    17    USE dom_oce        ! ocean space and time domain 
    18    USE in_out_manager ! I/O manager 
    19    USE trddyn_oce     ! ocean momentum trends 
     16   USE oce             ! ocean dynamics and tracers 
     17   USE dom_oce         ! ocean space and time domain 
     18   USE in_out_manager  ! I/O manager 
     19   USE trdmod          ! ocean dynamics trends  
     20   USE trdmod_oce      ! ocean variables trends 
    2021   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2122 
     
    7576      !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    7677      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    77       !!---------------------------------------------------------------------- 
     78      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
     79      !!---------------------------------------------------------------------- 
     80      !! * Modules used      
     81      USE oce, ONLY :    ztdua => ta,     & ! use ta as 3D workspace    
     82                         ztdva => sa        ! use sa as 3D workspace    
     83 
    7884      !! * Arguments 
    7985      INTEGER, INTENT( in ) ::   kt         ! ocean time-step index 
     
    8692      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    8793         zwx, zwy, zwz                      ! temporary workspace 
    88 #if defined key_trddyn || defined key_trd_vor 
    89       REAL(wp) ::   & 
    90          zcu, zcv, zce3                     !    "         " 
    91 #endif 
     94      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     95         zcu, zcv                           !    "         " 
    9296      !!---------------------------------------------------------------------- 
    9397 
     
    100104      ! Local constant initialization 
    101105      zfact2 = 0.5 * 0.5 
     106      zcu (:,:,:) = 0.e0 
     107      zcv (:,:,:) = 0.e0 
     108 
     109      ! Save ua and va trends 
     110      IF( l_trddyn )   THEN 
     111         ztdua(:,:,:) = ua(:,:,:)  
     112         ztdva(:,:,:) = va(:,:,:)  
     113         zcu(:,:,:) = 0.e0 
     114         zcv(:,:,:) = 0.e0 
     115      ENDIF 
    102116       
    103117      !                                                ! =============== 
     
    129143               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    130144               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    131 #   if defined key_trddyn || defined key_trd_vor 
    132 #      if defined key_s_coord 
    133                zce3= ff(ji,jj) / fse3f(ji,jj,jk) 
    134                zcu = zfact2 / e1u(ji,jj) * ( ff(ji  ,jj-1) / fse3f(ji,jj-1,jk) * zy1 + zce3 * zy2 ) 
    135                zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj  ) / fse3f(ji-1,jj,jk) * zx1 + zce3 * zx2 ) 
    136 #      else 
    137                zcu = zfact2 / e1u(ji,jj) * ( ff(ji  ,jj-1) * zy1 + ff(ji,jj) * zy2 ) 
    138                zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj  ) * zx1 + ff(ji,jj) * zx2 ) 
    139 #      endif 
    140                utrd(ji,jj,jk,3) = zua - zcu 
    141                vtrd(ji,jj,jk,3) = zva - zcv 
    142                utrd(ji,jj,jk,4) = zcu 
    143                vtrd(ji,jj,jk,4) = zcv 
    144 #   endif 
    145145            END DO   
    146146         END DO   
     
    148148      END DO                                           !   End of slab 
    149149      !                                                ! =============== 
     150 
     151      ! save the relative & planetary vorticity trends for diagnostic 
     152      ! momentum trends 
     153      IF( l_trddyn )   THEN 
     154         ! Compute the planetary vorticity term trend 
     155         !                                                ! =============== 
     156         DO jk = 1, jpkm1                                 ! Horizontal slab 
     157            !                                             ! =============== 
     158            DO jj = 2, jpjm1 
     159               DO ji = fs_2, fs_jpim1   ! vector opt. 
     160                  zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 
     161                  zy2 = zwy(ji,jj  ) + zwy(ji+1,jj  ) 
     162                  zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 
     163                  zx2 = zwx(ji  ,jj) + zwx(ji  ,jj+1) 
     164# if defined key_s_coord 
     165                 zcu(ji,jj,jk) = zfact2 / e1u(ji,jj) * ( ff(ji  ,jj-1) / fse3f(ji,jj-1,jk) * zy1  & 
     166                   &                                   + ff(ji  ,jj  ) / fse3f(ji,jj  ,jk) * zy2 ) 
     167                 zcv(ji,jj,jk) =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj  ) / fse3f(ji-1,jj,jk) * zx1  & 
     168                   &                                   + ff(ji  ,jj  ) / fse3f(ji  ,jj,jk) * zx2 ) 
     169# else 
     170                 zcu(ji,jj,jk) = zfact2 / e1u(ji,jj) * ( ff(ji  ,jj-1) * zy1 + ff(ji,jj) * zy2 ) 
     171                 zcv(ji,jj,jk) =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj  ) * zx1 + ff(ji,jj) * zx2 ) 
     172# endif 
     173               END DO   
     174            END DO   
     175            !                                             ! =============== 
     176         END DO                                           !   End of slab 
     177         !                                                ! =============== 
     178 
     179         ! Compute the relative vorticity term trend 
     180         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:)  
     181         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:)  
     182 
     183         CALL trd_mod(zcu  , zcv  , jpdtdpvo, 'DYN', kt) 
     184         CALL trd_mod(zcu  , zcv  , jpdtddat, 'DYN', kt) 
     185         CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 
     186      ENDIF 
    150187 
    151188      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    194231      !!   6.0  !  96-01  (G. Madec) s-coord, suppress work arrays 
    195232      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    196       !!---------------------------------------------------------------------- 
     233      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
     234      !!---------------------------------------------------------------------- 
     235      !! * Modules used      
     236      USE oce, ONLY :    ztdua => ta,     & ! use ta as 3D workspace    
     237                         ztdva => sa        ! use sa as 3D workspace    
    197238      !! * Arguments 
    198239      INTEGER, INTENT( in ) ::   kt         ! ocean timestep index 
     
    205246      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    206247         zwx, zwy, zwz, zww                 ! temporary workspace 
     248      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     249         zcu, zcv                           !    "         " 
    207250      !!---------------------------------------------------------------------- 
    208251 
     
    216259      zfact1 = 0.5 * 0.25 
    217260      zfact2 = 0.5 * 0.5 
     261 
     262      ! Save ua and va trends 
     263      IF( l_trddyn )   THEN 
     264         ztdua(:,:,:) = ua(:,:,:)  
     265         ztdva(:,:,:) = va(:,:,:)  
     266         zcu(:,:,:) = 0.e0 
     267         zcv(:,:,:) = 0.e0 
     268      ENDIF 
    218269 
    219270      !                                                ! =============== 
     
    252303               ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua 
    253304               va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva 
    254 #   if defined key_trddyn || defined key_trd_vor 
    255                utrd(ji,jj,jk,3) = zua 
    256                vtrd(ji,jj,jk,3) = zva 
    257                utrd(ji,jj,jk,4) = zcua 
    258                vtrd(ji,jj,jk,4) = zcva 
    259 #   endif 
    260305            END DO   
    261306         END DO   
     
    263308      END DO                                           !   End of slab 
    264309      !                                                ! =============== 
     310 
     311      ! save the relative & planetary vorticity trends for diagnostic 
     312      ! momentum trends 
     313      IF( l_trddyn )   THEN 
     314         ! Compute the planetary vorticity term trend 
     315         !                                                ! =============== 
     316         DO jk = 1, jpkm1                                 ! Horizontal slab 
     317            !                                             ! =============== 
     318            DO jj = 2, jpjm1 
     319               DO ji = fs_2, fs_jpim1   ! vector opt. 
     320                  zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 
     321                  zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
     322                  zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 
     323                  zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     324                  ! energy conserving formulation for planetary vorticity term 
     325                  zcu(ji,jj,jk) = zfact2 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
     326                  zcv(ji,jj,jk) =-zfact2 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
     327               END DO   
     328            END DO   
     329            !                                             ! =============== 
     330         END DO                                           !   End of slab 
     331         !                                                ! =============== 
     332 
     333         ! Compute the relative vorticity term trend 
     334         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:)  
     335         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:)  
     336 
     337         CALL trd_mod(zcu  , zcv  , jpdtdpvo, 'DYN', kt) 
     338         CALL trd_mod(zcu  , zcv  , jpdtddat, 'DYN', kt) 
     339         CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 
     340      ENDIF 
    265341 
    266342      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    304380      !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    305381      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
     382      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    306383      !!---------------------------------------------------------------------- 
    307384      !! * modules used 
     
    316393         zfact1, zua, zva, zuav, zvau  ! temporary scalars 
    317394      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    318          zwz                           ! temporary workspace 
    319 #   if defined key_trddyn || defined key_trd_vor 
    320       REAL(wp) ::   & 
    321          zcu, zcv, zce3                ! temporary scalars  
    322 #   endif 
     395         zcu, zcv, zwz,              & ! temporary workspace 
     396         ztdua, ztdva                  ! temporary workspace 
    323397      !!---------------------------------------------------------------------- 
    324398       
     
    331405      ! Local constant initialization 
    332406      zfact1 = 0.5 * 0.25 
     407 
     408      ! Save ua and va trends 
     409      IF( l_trddyn )   THEN 
     410         ztdua(:,:,:) = ua(:,:,:)  
     411         ztdva(:,:,:) = va(:,:,:)  
     412         zcu(:,:,:) = 0.e0 
     413         zcv(:,:,:) = 0.e0 
     414      ENDIF 
    333415 
    334416      !                                                ! =============== 
     
    371453               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    372454               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    373  
    374 #   if defined key_trddyn || defined key_trd_vor 
    375 #      if defined key_s_coord 
    376                zce3 = ff(ji,jj) / fse3f(ji,jj,jk) 
    377                zcu  = zuav * ( ff(ji  ,jj-1) / fse3f(ji  ,jj-1,jk) + zce3 ) 
    378                zcv  = zvau * ( ff(ji-1,jj  ) / fse3f(ji-1,jj  ,jk) + zce3 ) 
    379 #      else 
    380                zcu = zuav * ( ff(ji  ,jj-1) + ff(ji,jj) ) 
    381                zcv = zvau * ( ff(ji-1,jj  ) + ff(ji,jj) ) 
    382 #      endif 
    383  
    384 #      if defined key_trddyn_new 
    385                utrd(ji,jj,jk,2) = utrd(ji,jj,jk,2) + zua - zcu 
    386                vtrd(ji,jj,jk,3) = vtrd(ji,jj,jk,3) + zva - zcv 
    387 #      else 
    388                utrd(ji,jj,jk,3) = zua - zcu 
    389                vtrd(ji,jj,jk,3) = zva - zcv 
    390 #      endif 
    391                utrd(ji,jj,jk,4) = zcu 
    392                vtrd(ji,jj,jk,4) = zcv 
    393 #   endif 
    394455            END DO   
    395456         END DO   
     
    397458      END DO                                           !   End of slab 
    398459      !                                                ! =============== 
     460 
     461 
     462      ! save the relative & planetary vorticity trends for diagnostic 
     463      ! momentum trends 
     464      IF( l_trddyn )   THEN 
     465         ! Compute the planetary vorticity term trend 
     466         !                                                ! =============== 
     467         DO jk = 1, jpkm1                                 ! Horizontal slab 
     468            !                                             ! =============== 
     469            DO jj = 2, jpjm1 
     470               DO ji = fs_2, fs_jpim1   ! vector opt. 
     471                  zuav = zfact1 / e1u(ji,jj) * ( zwy(ji  ,jj-1,jk) + zwy(ji+1,jj-1,jk)   & 
     472                     &                         + zwy(ji  ,jj  ,jk) + zwy(ji+1,jj  ,jk) ) 
     473                  zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj  ,jk) + zwx(ji-1,jj+1,jk)   & 
     474                     &                         + zwx(ji  ,jj  ,jk) + zwx(ji  ,jj+1,jk) ) 
     475# if defined key_s_coord 
     476                  zcu(ji,jj,jk)  = zuav * ( ff(ji  ,jj-1) / fse3f(ji  ,jj-1,jk)   & 
     477                    &                     + ff(ji  ,jj  ) / fse3f(ji  ,jj  ,jk) ) 
     478                  zcv(ji,jj,jk)  = zvau * ( ff(ji-1,jj  ) / fse3f(ji-1,jj  ,jk)   & 
     479                    &                     + ff(ji  ,jj  ) / fse3f(ji  ,jj  ,jk) ) 
     480# else 
     481                  zcu(ji,jj,jk) = zuav * ( ff(ji  ,jj-1) + ff(ji,jj) ) 
     482                  zcv(ji,jj,jk) = zvau * ( ff(ji-1,jj  ) + ff(ji,jj) ) 
     483# endif 
     484               END DO   
     485            END DO   
     486            !                                             ! =============== 
     487         END DO                                           !   End of slab 
     488         !                                                ! =============== 
     489 
     490         ! Compute the relative vorticity term trend 
     491         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:)  
     492         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:)  
     493 
     494         CALL trd_mod(zcu  , zcv  , jpdtdpvo, 'DYN', kt) 
     495         CALL trd_mod(zcu  , zcv  , jpdtddat, 'DYN', kt) 
     496         CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 
     497      ENDIF 
    399498 
    400499      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    432531      !!      Arakawa and Lamb 19XX, ??? 
    433532      !! History : 
    434       !!   5.0  !  04-02  (G. Madec)  Original code 
    435       !!---------------------------------------------------------------------- 
     533      !!   8.5  !  04-02  (G. Madec)  Original code 
     534      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
     535      !!---------------------------------------------------------------------- 
     536      !! * Modules used      
     537      USE oce, ONLY :    ztdua => ta,    & ! use ta as 3D workspace    
     538                         ztdva => sa       ! use sa as 3D workspace    
     539 
    436540      !! * Arguments 
    437541      INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
     
    443547      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    444548         zwx, zwy, zwz,                 &  ! temporary workspace 
    445          ztnw, ztne, ztsw, ztse            !    "           " 
    446 #if defined key_trddyn || defined key_trd_vor 
    447       REAL(wp) ::   & 
    448          zcu, zcv                          !    "         " 
    449       REAL(wp), DIMENSION(jpi,jpj) ::   & 
     549         ztnw, ztne, ztsw, ztse,        &  !    "           " 
    450550         zcor                              ! potential planetary vorticity (f/e3) 
    451 #endif 
     551      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     552         zcu, zcv                          ! temporary workspace   
    452553      REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   & 
    453554         ze3f 
     
    474575      ! Local constant initialization 
    475576      zfac12 = 1.e0 / 12.e0 
     577 
     578      ! Save ua and va trends 
     579      IF( l_trddyn )   THEN 
     580         ztdua(:,:,:) = ua(:,:,:)  
     581         ztdva(:,:,:) = va(:,:,:)  
     582         zcu(:,:,:) = 0.e0 
     583         zcv(:,:,:) = 0.e0 
     584      ENDIF 
    476585       
    477586      !                                                ! =============== 
     
    485594         zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 
    486595         zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
    487 #if defined key_trddyn || defined key_trd_vor 
    488596         zcor(:,:) = ff(:,:) * ze3f(:,:,jk) 
    489 #endif 
    490597 
    491598         ! Compute and add the vorticity term trend 
     
    516623               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    517624               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    518 #   if defined key_trddyn || defined key_trd_vor 
    519                zcu = + zfac12 / e1u(ji,jj) * (  zcor(ji,jj  ) * zwy(ji  ,jj  ) + zcor(ji+1,jj) * zwy(ji+1,jj  )   & 
    520                   &                           + zcor(ji,jj  ) * zwy(ji  ,jj-1) + zcor(ji+1,jj) * zwy(ji+1,jj-1) ) 
    521                zcv = - zfac12 / e2v(ji,jj) * (  zcor(ji,jj+1) * zwx(ji-1,jj+1) + zcor(ji,jj+1) * zwx(ji  ,jj+1)   & 
    522                   &                           + zcor(ji,jj  ) * zwx(ji-1,jj  ) + zcor(ji,jj  ) * zwx(ji  ,jj  ) ) 
    523                utrd(ji,jj,jk,3) = zua - zcu 
    524                vtrd(ji,jj,jk,3) = zva - zcv 
    525                utrd(ji,jj,jk,4) = zcu 
    526                vtrd(ji,jj,jk,4) = zcv 
    527 #   endif 
    528625            END DO   
    529626         END DO   
     
    531628      END DO                                           !   End of slab 
    532629      !                                                ! =============== 
     630 
     631      ! save the relative & planetary vorticity trends for diagnostic 
     632      ! momentum trends 
     633      IF( l_trddyn )   THEN 
     634         ! Compute the planetary vorticity term trend 
     635         !                                                ! =============== 
     636         DO jk = 1, jpkm1                                 ! Horizontal slab 
     637            !                                             ! =============== 
     638            DO jj = 2, jpjm1 
     639               DO ji = fs_2, fs_jpim1   ! vector opt. 
     640                  zcu(ji,jj,jk) = + zfac12 / e1u(ji,jj) * (  zcor(ji,jj  ) * zwy(ji  ,jj  ) + zcor(ji+1,jj) * zwy(ji+1,jj  )   & 
     641                    &                                      + zcor(ji,jj  ) * zwy(ji  ,jj-1) + zcor(ji+1,jj) * zwy(ji+1,jj-1) ) 
     642                  zcv(ji,jj,jk) = - zfac12 / e2v(ji,jj) * (  zcor(ji,jj+1) * zwx(ji-1,jj+1) + zcor(ji,jj+1) * zwx(ji  ,jj+1)   & 
     643                    &                                      + zcor(ji,jj  ) * zwx(ji-1,jj  ) + zcor(ji,jj  ) * zwx(ji  ,jj  ) ) 
     644               END DO   
     645            END DO   
     646            !                                             ! =============== 
     647         END DO                                           !   End of slab 
     648         !                                                ! =============== 
     649 
     650         ! Compute the relative vorticity term trend 
     651         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:)  
     652         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:)  
     653 
     654         CALL trd_mod(zcu  , zcv  , jpdtdpvo, 'DYN', kt) 
     655         CALL trd_mod(zcu  , zcv  , jpdtddat, 'DYN', kt) 
     656         CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 
     657      ENDIF 
    533658 
    534659      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.