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 – NEMO

Changeset 216 for trunk/NEMO/OPA_SRC/DYN


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

CT : UPDATE151 : New trends organization

Location:
trunk/NEMO/OPA_SRC/DYN
Files:
16 edited

Legend:

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

    r170 r216  
    1919   USE phycst          ! physical constants 
    2020   USE in_out_manager  ! I/O manager 
    21    USE trddyn_oce     ! dynamics trends diagnostics variables 
     21   USE trdmod          ! ocean dynamics trends  
     22   USE trdmod_oce      ! ocean variables trends 
    2223 
    2324   IMPLICIT NONE 
     
    8283      !!        !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
    8384      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module, vector opt. 
     85      !!   9.0  !  04-08  (C. Talandier) New trends organization 
    8486      !!---------------------------------------------------------------------- 
    8587      !! * modules used 
     
    9496      REAL(wp) ::   & 
    9597         zcoef0, zcoef1, zuap, zvap     ! temporary scalars 
     98      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     99         ztdua, ztdva                   ! temporary scalars 
    96100      !!---------------------------------------------------------------------- 
    97101 
     
    100104         IF(lwp) WRITE(numout,*) 'dyn_hpg : hydrostatic pressure gradient trend' 
    101105         IF(lwp) WRITE(numout,*) '~~~~~~~   s-coordinate case, vector opt. case' 
     106      ENDIF 
     107 
     108      ! Save ua and va trends 
     109      IF( l_trddyn )   THEN 
     110         ztdua(:,:,:) = ua(:,:,:)  
     111         ztdva(:,:,:) = va(:,:,:)  
    102112      ENDIF 
    103113 
     
    125135            ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) + zuap 
    126136            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) + zvap 
    127 # if defined key_trddyn || defined key_trd_vor 
    128             ! save the trend for diagnostics 
    129             utrd(ji,jj,1,1) = zhpi(ji,jj,1) + zuap 
    130             vtrd(ji,jj,1,1) = zhpj(ji,jj,1) + zvap 
    131 # endif 
    132137         END DO   
    133138      END DO   
     
    140145               ! hydrostatic pressure gradient along s-surfaces 
    141146               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 / e1u(ji,jj)   & 
    142                            * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) )   & 
    143                               -fse3w(ji  ,jj,jk) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) 
     147                           * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) )   & 
     148                              -fse3w(ji  ,jj,jk) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) 
    144149               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 / e2v(ji,jj)   & 
    145                            * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) )   & 
    146                               -fse3w(ji,jj  ,jk) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) )  ) 
     150                           * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) )   & 
     151                              -fse3w(ji,jj  ,jk) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) )  ) 
    147152               ! s-coordinate pressure gradient correction  
    148153               zuap = -zcoef0 * ( rhd(ji+1,jj  ,jk) + rhd(ji,jj,jk) )   & 
     
    153158               ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) + zuap 
    154159               va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) + zvap 
    155 # if defined key_trddyn || defined key_trd_vor 
    156                ! save the momentum trends for diagnostics 
    157                utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) + zuap 
    158                vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) + zvap 
    159 # endif 
    160160            END DO 
    161161         END DO 
    162162      END DO 
     163 
     164      ! save the hydrostatic pressure gradient trends for diagnostic 
     165      ! momentum trends 
     166      IF( l_trddyn )   THEN 
     167         zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     168         zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     169         CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
     170      ENDIF 
    163171 
    164172      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    212220         zcoef0, zcoef1, zuap,       &  ! temporary scalars 
    213221         zcoef2, zcoef3, zvap           !    "         " 
     222      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     223         ztdua, ztdva                   ! temporary scalars 
    214224      !!---------------------------------------------------------------------- 
    215225 
     
    219229         IF(lwp) WRITE(numout,*) '~~~~~~~   z-coordinate with partial steps' 
    220230         IF(lwp) WRITE(numout,*) '          vector optimization, no autotasking' 
     231      ENDIF 
     232 
     233      ! Save ua and va trends 
     234      IF( l_trddyn )   THEN 
     235         ztdua(:,:,:) = ua(:,:,:)  
     236         ztdva(:,:,:) = va(:,:,:)  
    221237      ENDIF 
    222238 
     
    238254            ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 
    239255            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 
    240 # if defined key_trddyn || defined key_trd_vor 
    241             ! save the momentum trends for diagnostics 
    242             utrd(ji,jj,1,1) = zhpi(ji,jj,1) 
    243             vtrd(ji,jj,1,1) = zhpj(ji,jj,1) 
    244 # endif 
    245256         END DO 
    246257      END DO 
     
    254265               ! hydrostatic pressure gradient 
    255266               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1)   & 
    256                            + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )   & 
    257                                        - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
     267                           + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )   & 
     268                                       - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
    258269 
    259270               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1)   & 
    260                            + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )   & 
    261                                        - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) / e2v(ji,jj) 
     271                           + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )   & 
     272                                       - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) / e2v(ji,jj) 
    262273               ! add to the general momentum trend 
    263274               ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 
    264275               va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 
    265 # if defined key_trddyn || defined key_trd_vor 
    266                ! save the momentum trends for diagnostics 
    267                utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) 
    268                vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) 
    269 # endif 
    270276            END DO  
    271277         END DO 
     
    293299               ! add the new one to the general momentum trend 
    294300               ua(ji,jj,iku) = ua(ji,jj,iku) + zhpi(ji,jj,iku) 
    295 # if defined key_trddyn || defined key_trd_vor 
    296                ! save the momentum trends for diagnostics 
    297                utrd(ji,jj,iku,1) = zhpi(ji,jj,iku) 
    298 # endif 
    299301            ENDIF 
    300302            ! on j-direction 
     
    307309               ! add the new one to the general momentum trend 
    308310               va(ji,jj,ikv) = va(ji,jj,ikv) + zhpj(ji,jj,ikv) 
    309 # if defined key_trddyn || defined key_trd_vor 
    310                ! save the momentum trends for diagnostics 
    311                vtrd(ji,jj,ikv,1) = zhpj(ji,jj,ikv) 
    312 # endif 
    313311            ENDIF 
    314312# if ! defined key_vectopt_loop 
     
    316314# endif 
    317315      END DO 
     316 
     317      ! save the hydrostatic pressure gradient trends for diagnostic 
     318      ! momentum trends 
     319      IF( l_trddyn )   THEN 
     320         zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     321         zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     322         CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
     323      ENDIF 
    318324 
    319325      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    369375      REAL(wp) ::   & 
    370376         zcoef0, zcoef1, zuap, zvap     ! temporary scalars 
     377      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     378         ztdua, ztdva                   ! temporary scalars 
    371379      !!---------------------------------------------------------------------- 
    372380 
     
    375383         IF(lwp) WRITE(numout,*) 'dyn_hpg : hydrostatic pressure gradient trend' 
    376384         IF(lwp) WRITE(numout,*) '~~~~~~~   z-coordinate case ' 
     385      ENDIF 
     386 
     387      ! Save ua and va trends 
     388      IF( l_trddyn )   THEN 
     389         ztdua(:,:,:) = ua(:,:,:)  
     390         ztdva(:,:,:) = va(:,:,:)  
    377391      ENDIF 
    378392 
     
    385399      ! 1. Surface value 
    386400      ! ---------------- 
    387       zcoef1 = zcoef0 * fse3w(1,1,1) 
    388401      DO jj = 2, jpjm1 
    389402         DO ji = fs_2, fs_jpim1   ! vector opt. 
     403            zcoef1 = zcoef0 * fse3w(ji,jj,1) 
    390404            ! hydrostatic pressure gradient 
    391405            zhpi(ji,jj,1) = zcoef1 * ( rhd(ji+1,jj,1) - rhd(ji,jj,1) ) / e1u(ji,jj) 
     
    394408            ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 
    395409            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 
    396 # if defined key_trddyn || defined key_trd_vor 
    397             ! save the momentum trends for diagnostics 
    398             utrd(ji,jj,1,1) = zhpi(ji,jj,1) 
    399             vtrd(ji,jj,1,1) = zhpj(ji,jj,1) 
    400 # endif 
    401410         END DO 
    402411      END DO 
     
    405414      ! ----------------- 
    406415      DO jk = 2, jpkm1 
    407          zcoef1 = zcoef0 * fse3w(1,1,jk) 
    408416         DO jj = 2, jpjm1 
    409417            DO ji = fs_2, fs_jpim1   ! vector opt. 
     418               zcoef1 = zcoef0 * fse3w(ji,jj,jk) 
    410419               ! hydrostatic pressure gradient 
    411420               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1)   & 
    412                            + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )   & 
    413                                        - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
     421                           + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )   & 
     422                                       - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
    414423 
    415424               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1)   & 
    416                            + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )   & 
    417                                        - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) / e2v(ji,jj) 
     425                           + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )   & 
     426                                       - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) / e2v(ji,jj) 
    418427               ! add to the general momentum trend 
    419428               ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 
    420429               va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 
    421 # if defined key_trddyn || defined key_trd_vor 
    422                ! save the momentum trends for diagnostics 
    423                utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) 
    424                vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) 
    425 # endif 
    426430            END DO  
    427431         END DO 
    428432      END DO 
     433 
     434      ! save the hydrostatic pressure ggradient trends for diagnostic 
     435      ! momentum trends 
     436      IF( l_trddyn )   THEN 
     437         zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     438         zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     439 
     440         CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
     441      ENDIF 
    429442 
    430443      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynhpg_atsk.F90

    r170 r216  
    1919   USE phycst          ! physical constants 
    2020   USE in_out_manager  ! I/O manager 
    21    USE trddyn_oce     ! dynamics trends diagnostics variables 
     21   USE trdmod          ! ocean dynamics trends  
     22   USE trdmod_oce      ! ocean variables trends 
    2223 
    2324   IMPLICIT NONE 
     
    7071      !!        !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
    7172      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
     73      !!   9.0  !  04-08  (C. Talandier) New trends organization 
    7274      !!---------------------------------------------------------------------- 
    7375      !! * modules used 
     
    7981       
    8082      !! * Local declarations 
    81       INTEGER  ::   ji, jj, jk          ! dummy loop indices 
     83      INTEGER ::   ji, jj, jk           ! dummy loop indices 
    8284      REAL(wp) ::   & 
    8385         zcoef0, zcoef1, zuap, zvap     ! temporary scalars 
     86      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     87         ztdua, ztdva                   ! temporary scalars 
    8488      !!---------------------------------------------------------------------- 
    8589 
     
    9094      ENDIF 
    9195 
     96      ! Save ua and va trends 
     97      IF( l_trddyn )   THEN 
     98         ztdua(:,:,:) = ua(:,:,:)  
     99         ztdva(:,:,:) = va(:,:,:)  
     100      ENDIF 
     101 
    92102      ! 0. Local constant initialization 
    93103      ! -------------------------------- 
    94104      zcoef0 = - grav * 0.5 
     105      zuap   = 0.e0 
     106      zvap   = 0.e0 
    95107 
    96108      !                                                ! =============== 
     
    113125            ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) + zuap 
    114126            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) + zvap 
    115 #   if defined key_trddyn || defined key_trd_vor 
    116             ! save the trend for diagnostics 
    117             utrd(ji,jj,1,1) = zhpi(ji,jj,1) + zuap 
    118             vtrd(ji,jj,1,1) = zhpj(ji,jj,1) + zvap 
    119 #   endif 
    120127         END DO   
    121128 
     
    126133               ! hydrostatic pressure gradient along s-surfaces 
    127134               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 / e1u(ji,jj)   & 
    128                            * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) )   & 
    129                               -fse3w(ji  ,jj,jk) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) 
     135                           * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) )   & 
     136                              -fse3w(ji  ,jj,jk) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) 
    130137               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 / e2v(ji,jj)   & 
    131                            * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) )   & 
    132                               -fse3w(ji,jj  ,jk) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) )  ) 
     138                           * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) )   & 
     139                              -fse3w(ji,jj  ,jk) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) )  ) 
    133140               ! s-coordinate pressure gradient correction  
    134141               zuap = -zcoef0 * ( rhd(ji+1,jj  ,jk) + rhd(ji,jj,jk) )   & 
     
    139146               ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) + zuap 
    140147               va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) + zvap 
    141 #   if defined key_trddyn || defined key_trd_vor 
    142                ! save the momentum trends for diagnostics 
    143                utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) + zuap 
    144                vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) + zvap 
    145 #   endif 
    146148            END DO 
    147149         END DO 
     
    149151      END DO                                           !   End of slab 
    150152      !                                                ! =============== 
     153 
     154      ! save the hydrostatic pressure gradient trends for diagnostic 
     155      ! momentum trends 
     156      IF( l_trddyn )   THEN 
     157         zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     158         zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     159         CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
     160      ENDIF 
    151161 
    152162      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    195205 
    196206      !! * local declarations 
    197       INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    198       INTEGER  ::   iku, ikv            ! temporary integers 
     207      INTEGER ::   ji, jj, jk           ! dummy loop indices 
     208      INTEGER ::   iku, ikv             ! temporary integers 
    199209      REAL(wp) ::   & 
    200210         zcoef0, zcoef1, zuap,       &  ! temporary scalars 
    201211         zcoef2, zcoef3, zvap           !    "         " 
     212      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     213         ztdua, ztdva                   ! temporary scalars 
    202214      !!---------------------------------------------------------------------- 
    203215 
     
    206218         IF(lwp) WRITE(numout,*) 'dyn_hpg_atsk : z-coord. partial steps hydrostatic pressure gradient trend' 
    207219         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~   autotasking case (j-k-i loop)' 
     220      ENDIF 
     221 
     222      ! Save ua and va trends 
     223      IF( l_trddyn )   THEN 
     224         ztdua(:,:,:) = ua(:,:,:)  
     225         ztdva(:,:,:) = va(:,:,:)  
    208226      ENDIF 
    209227 
     
    226244            ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 
    227245            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 
    228 #   if defined key_trddyn || defined key_trd_vor 
    229             ! save the momentum trends for diagnostics 
    230             utrd(ji,jj,1,1) = zhpi(ji,jj,1) 
    231             vtrd(ji,jj,1,1) = zhpj(ji,jj,1) 
    232 #   endif 
    233246         END DO 
    234247 
     
    240253               ! hydrostatic pressure gradient 
    241254               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1)   & 
    242                            + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )   & 
    243                                        - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
     255                           + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )   & 
     256                                       - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
    244257 
    245258               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1)   & 
    246                            + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )   & 
    247                                        - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) / e2v(ji,jj) 
     259                           + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )   & 
     260                                       - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) / e2v(ji,jj) 
    248261               ! add to the general momentum trend 
    249262               ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 
    250263               va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 
    251 #   if defined key_trddyn || defined key_trd_vor 
    252                ! save the momentum trends for diagnostics 
    253                utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) 
    254                vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) 
    255 #   endif 
    256264            END DO  
    257265         END DO 
     
    272280               ! add the new one to the general momentum trend 
    273281               ua(ji,jj,iku) = ua(ji,jj,iku) + zhpi(ji,jj,iku) 
    274 #   if defined key_trddyn || defined key_trd_vor 
    275                ! save the momentum trends for diagnostics 
    276                utrd(ji,jj,iku,1) = zhpi(ji,jj,iku) 
    277 #   endif 
    278282            ENDIF 
    279283            ! on j-direction 
     
    286290               ! add the new one to the general momentum trend 
    287291               va(ji,jj,ikv) = va(ji,jj,ikv) + zhpj(ji,jj,ikv) 
    288 #   if  defined key_trddyn || defined key_trd_vor 
    289                ! save the momentum trends for diagnostics 
    290                vtrd(ji,jj,ikv,1) = zhpj(ji,jj,ikv) 
    291 #   endif 
    292292            ENDIF 
    293293         END DO 
     
    295295      END DO                                           !   End of slab 
    296296      !                                                ! =============== 
     297 
     298      ! save the hydrostatic pressure gradient trends for diagnostic 
     299      ! momentum trends 
     300      IF( l_trddyn )   THEN 
     301         zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     302         zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     303         CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
     304      ENDIF 
    297305 
    298306      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    346354 
    347355      !! * local declarations 
    348       INTEGER  ::   ji, jj, jk          ! dummy loop indices 
     356      INTEGER ::   ji, jj, jk           ! dummy loop indices 
    349357      REAL(wp) ::   & 
    350358         zcoef0, zcoef1, zuap, zvap     ! temporary scalars 
     359      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     360         ztdua, ztdva                   ! temporary scalars 
    351361      !!---------------------------------------------------------------------- 
    352362 
     
    357367      ENDIF 
    358368 
     369      ! Save ua and va trends 
     370      IF( l_trddyn )   THEN 
     371         ztdua(:,:,:) = ua(:,:,:)  
     372         ztdva(:,:,:) = va(:,:,:)  
     373      ENDIF 
     374 
    359375      ! 0. Local constant initialization 
    360376      ! -------------------------------- 
    361377      zcoef0 = - grav * 0.5 
     378      zuap   = 0.e0 
     379      zvap   = 0.e0 
    362380 
    363381      !                                                ! =============== 
     
    367385         ! ---------------- 
    368386          
    369          zcoef1 = zcoef0 * fse3w(1,1,1) 
    370387 
    371388         DO ji = 2, jpim1 
     389            zcoef1 = zcoef0 * fse3w(ji,jj,1) 
    372390            ! hydrostatic pressure gradient 
    373391            zhpi(ji,jj,1) = zcoef1 * ( rhd(ji+1,jj,1) - rhd(ji,jj,1) ) / e1u(ji,jj) 
     
    376394            ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 
    377395            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 
    378 #   if defined key_trddyn || defined key_trd_vor 
    379             ! save the momentum trends for diagnostics 
    380             utrd(ji,jj,1,1) = zhpi(ji,jj,1) 
    381             vtrd(ji,jj,1,1) = zhpj(ji,jj,1) 
    382 #   endif 
    383396         END DO 
    384397 
     
    386399         ! ----------------- 
    387400         DO jk = 2, jpkm1 
    388             zcoef1 = zcoef0 * fse3w(1,1,jk) 
    389401            DO ji = 2, jpim1 
     402               zcoef1 = zcoef0 * fse3w(ji,jj,jk) 
    390403               ! hydrostatic pressure gradient 
    391404               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1)   & 
     
    399412               ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 
    400413               va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 
    401 #   if defined key_trddyn || defined key_trd_vor 
    402                ! save the momentum trends for diagnostics 
    403                utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) 
    404                vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) 
    405 #   endif 
    406414            END DO  
    407415         END DO 
     
    410418      !                                                ! =============== 
    411419 
     420      ! save the hydrostatic pressure gradient trends for diagnostic 
     421      ! momentum trends 
     422      IF( l_trddyn )   THEN 
     423         zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     424         zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     425 
     426         CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
     427      ENDIF 
     428 
    412429      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
    413          WRITE(numout,*) ' hpg  - Ua: ', SUM(ua(2:nictl,2:njctl,1:jpkm1)*umask(2:nictl,2:njctl,1:jpkm1)), & 
    414          &                      ' Va: ', SUM(va(2:nictl,2:njctl,1:jpkm1)*vmask(2:nictl,2:njctl,1:jpkm1)) 
    415430         zuap = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 
    416431         zvap = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 
  • trunk/NEMO/OPA_SRC/DYN/dynkeg.F90

    r109 r216  
    1212   USE dom_oce         ! ocean space and time domain 
    1313   USE in_out_manager  ! I/O manager 
    14    USE trddyn_oce      ! dynamics trends diagnostics 
     14   USE trdmod          ! ocean dynamics trends  
     15   USE trdmod_oce      ! ocean variables trends 
    1516 
    1617   IMPLICIT NONE 
     
    5051      !!   7.0  !  97-05  (G. Madec)  Split dynber into dynkeg and dynhpg 
    5152      !!   9.0  !  02-07  (G. Madec)  F90: Free form and module 
     53      !!    "   !  04-08  (C. Talandier) New trends organization 
    5254      !!---------------------------------------------------------------------- 
    53       !! * modules used      
    54       USE oce, ONLY :   zhke => ta      ! use ta as 3D workspace    
     55      !! * Modules used      
     56      USE oce, ONLY :    ztdua => ta,   & ! use ta as 3D workspace    
     57                         ztdva => sa      ! use sa as 3D workspace    
    5558 
    5659      !! * Arguments 
     
    6063      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    6164      REAL(wp) ::   zua, zva, zu, zv    ! temporary scalars 
    62 #if defined key_trddyn_new 
    63       REAL(wp) ::   zuu, zvv            ! temporary scalars 
    64       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    65          zvke, zuke                     ! temporary workspace 
    66 #endif 
     65      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     66         zhke                           ! temporary workspace 
    6767      !!---------------------------------------------------------------------- 
    6868 
     
    7171         IF(lwp) WRITE(numout,*) 'dyn_keg : kinetic energy gradient trend' 
    7272         IF(lwp) WRITE(numout,*) '~~~~~~~' 
     73      ENDIF 
     74 
     75      ! Save ua and va trends 
     76      IF( l_trddyn )   THEN 
     77         ztdua(:,:,:) = ua(:,:,:)  
     78         ztdva(:,:,:) = va(:,:,:)  
    7379      ENDIF 
    7480       
     
    8490                            + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)  ) 
    8591               zhke(ji,jj,jk) = zv + zu 
    86 #if defined key_trddyn_new 
    87                zvke(ji,jj) = zv 
    88                zuke(ji,jj) = zu 
    89 #endif 
    9092            END DO   
    9193         END DO   
     
    100102               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    101103               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    102 #if defined key_trddyn || defined key_trd_vor 
    103                ! add to the general momentum trends 
    104                utrd(ji,jj,jk,2) = zua 
    105                vtrd(ji,jj,jk,2) = zva 
    106 #endif 
    107 #if defined key_trddyn_new 
    108                zuu = -( zuke(ji+1,jj  ) - zuke(ji,jj) ) / e1u(ji,jj) 
    109                zvv = -( zvke(ji  ,jj+1) - zvke(ji,jj) ) / e2v(ji,jj) 
    110                utrd(ji,jj,jk,2) = zua - zuu 
    111                vtrd(ji,jj,jk,3) = zva - zvv 
    112                utrd(ji,jj,jk,3) = zuu 
    113                vtrd(ji,jj,jk,2) = zvv 
    114 #endif 
    115104            END DO  
    116105         END DO 
     
    118107      END DO                                           !   End of slab 
    119108      !                                                ! =============== 
     109 
     110      ! save the Kinetic Energy trends for diagnostic 
     111      ! momentum trends 
     112      IF( l_trddyn )   THEN 
     113         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     114         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     115 
     116         CALL trd_mod(ztdua, ztdva, jpdtdkeg, 'DYN', kt) 
     117      ENDIF 
    120118 
    121119      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynldf_bilap.F90

    r109 r216  
    1414   USE ldfdyn_oce      ! ocean dynamics: lateral physics 
    1515   USE in_out_manager  ! I/O manager 
    16    USE trddyn_oce      ! dynamics trends diagnostics variables 
     16   USE trdmod          ! ocean dynamics trends  
     17   USE trdmod_oce      ! ocean variables trends 
    1718   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    1819 
     
    6667      !! ** Action : - Update (ua,va) with the before iso-level biharmonic 
    6768      !!               mixing trend. 
    68       !!             - Save in (utrd,vtrd) the trends ('key_diatrends') 
     69      !!             - Save in (ztdua,ztdva) the trends ('key_trddyn') 
    6970      !! 
    7071      !! History : 
     
    7576      !!        !  97-07  (G. Madec)  lbc calls 
    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 
     
    97103      zlu(:,:) = 0.e0 
    98104      zlv(:,:) = 0.e0 
     105 
     106      ! Save ua and va trends 
     107      IF( l_trddyn )   THEN 
     108         ztdua(:,:,:) = ua(:,:,:)  
     109         ztdva(:,:,:) = va(:,:,:)  
     110      ENDIF 
    99111      !                                                ! =============== 
    100112      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    208220               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    209221               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    210 #if defined key_trddyn || defined key_trd_vor 
    211                ! save the horizontal biharmonic diffusive trends 
    212                utrd(ji,jj,jk,5) = zua 
    213                vtrd(ji,jj,jk,5) = zva 
    214 #endif 
    215222            END DO 
    216223         END DO 
     
    219226      END DO                                           !   End of slab 
    220227      !                                                ! =============== 
     228      ! save the lateral diffusion trends for diagnostic 
     229      ! momentum trends 
     230      IF( l_trddyn )   THEN 
     231         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     232         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     233 
     234         CALL trd_mod(ztdua, ztdva, jpdtdldf, 'DYN', kt) 
     235      ENDIF 
    221236 
    222237      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90

    r109 r216  
    1818   USE zdf_oce         ! ocean vertical physics 
    1919   USE in_out_manager  ! I/O manager 
    20    USE trddyn_oce      ! dynamics trends diagnostics variables 
     20   USE trdmod          ! ocean dynamics trends  
     21   USE trdmod_oce      ! ocean variables trends 
    2122   USE ldfslp          ! iso-neutral slopes available 
    2223   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     
    5152      !!      (ub,vb) and multiply it by the eddy diffusivity coefficient 
    5253      !!      (done by a call to ldfgpu and ldfgpv routines) The result is in 
    53       !!      (wk1,wk2) arrays. Applied the domain lateral boundary conditions 
     54      !!      (zwk1,zwk2) arrays. Applied the domain lateral boundary conditions 
    5455      !!      by call to lbc_lnk. 
    55       !!         -2- applied to (wk1,wk2) the geopotential harmonic operator 
     56      !!         -2- applied to (zwk1,zwk2) the geopotential harmonic operator 
    5657      !!      by a second call to ldfgpu and ldfgpv routines respectively. The 
    57       !!      result is in (wk3,wk4) arrays. 
     58      !!      result is in (zwk3,zwk4) arrays. 
    5859      !!         -3- Add this trend to the general trend (ta,sa): 
    59       !!            (ua,va) = (ua,va) + (wk3,wk4) 
     60      !!            (ua,va) = (ua,va) + (zwk3,zwk4) 
    6061      !!      'key_trddyn' defined: the trend is saved for diagnostics. 
    6162      !! 
    6263      !! ** Action  : - Update (ua,va) arrays with the before geopotential 
    6364      !!                biharmonic mixing trend. 
    64       !!              - save the trend in (utrd,vtrd) ('key_diatrends') 
     65      !!              - save the trend in (zwk3,zwk4) ('key_trddyn') 
    6566      !! 
    6667      !! History : 
    6768      !!   8.0  !  97-07  (G. Madec)  Original code 
    6869      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    69       !!---------------------------------------------------------------------- 
     70      !!   9.0  !  04-08  (C. Talandier) New trends organization 
     71      !!---------------------------------------------------------------------- 
     72      !! * Modules used      
     73      USE oce, ONLY :    zwk3 => ta,   & ! use ta as 3D workspace    
     74                         zwk4 => sa      ! use sa as 3D workspace    
     75 
    7076      !! * Arguments 
    7177      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
     
    7581      REAL(wp) ::   zua, zva                  ! temporary scalars 
    7682      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    77          wk1, wk2,            &  ! work array used for rotated biharmonic 
    78          wk3, wk4                ! operator on tracers and/or momentum 
     83         zwk1, zwk2                ! work array used for rotated biharmonic 
     84         !                         ! operator on tracers and/or momentum 
    7985      !!---------------------------------------------------------------------- 
    8086 
     
    8389         IF(lwp) WRITE(numout,*) 'dyn_ldf_bilapg : horizontal biharmonic operator in s-coordinate' 
    8490         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~' 
    85          wk1(:,:,:) = 0.e0   ;   wk3(:,:,:) = 0.e0 
    86          wk2(:,:,:) = 0.e0   ;   wk4(:,:,:) = 0.e0 
     91         zwk1(:,:,:) = 0.e0   ;   zwk3(:,:,:) = 0.e0 
     92         zwk2(:,:,:) = 0.e0   ;   zwk4(:,:,:) = 0.e0 
    8793      ENDIF 
    8894 
     
    9096      ! --------------------------------------   
    9197      ! rotated harmonic operator applied to (ub,vb) 
    92       !     and multiply by ahmu, ahmv (output in (wk1,wk2) ) 
    93  
    94       CALL ldfguv ( ub, vb, wk1, wk2, 1 ) 
    95  
    96  
    97       ! Lateral boundary conditions on (wk1,wk2) 
    98       CALL lbc_lnk( wk1, 'U', -1. ) 
    99       CALL lbc_lnk( wk2, 'V', -1. ) 
     98      !     and multiply by ahmu, ahmv (output in (zwk1,zwk2) ) 
     99 
     100      CALL ldfguv ( ub, vb, zwk1, zwk2, 1 ) 
     101 
     102 
     103      ! Lateral boundary conditions on (zwk1,zwk2) 
     104      CALL lbc_lnk( zwk1, 'U', -1. ) 
     105      CALL lbc_lnk( zwk2, 'V', -1. ) 
    100106 
    101107 
    102108      ! Bilaplacian of (ub,vb) 
    103109      ! ----------------------  
    104       ! rotated harmonic operator applied to (wk1,wk2) (output in (wk3,wk4) ) 
    105  
    106       CALL ldfguv ( wk1, wk2, wk3, wk4, 2 ) 
     110      ! rotated harmonic operator applied to (zwk1,zwk2) (output in (zwk3,zwk4) ) 
     111 
     112      CALL ldfguv ( zwk1, zwk2, zwk3, zwk4, 2 ) 
    107113 
    108114 
     
    115121            DO ji = 2, jpim1 
    116122               ! add the diffusive trend to the general momentum trends 
    117                ua(ji,jj,jk) = ua(ji,jj,jk) + wk3(ji,jj,jk) 
    118                va(ji,jj,jk) = va(ji,jj,jk) + wk4(ji,jj,jk) 
    119 #if defined key_trddyn  || defined key_trd_vor 
    120                ! save the horizontal diffusive trends 
    121                utrd(ji,jj,jk,3) = wk3(ji,jj,jk) 
    122                vtrd(ji,jj,jk,3) = wk4(ji,jj,jk) 
    123 #endif 
     123               ua(ji,jj,jk) = ua(ji,jj,jk) + zwk3(ji,jj,jk) 
     124               va(ji,jj,jk) = va(ji,jj,jk) + zwk4(ji,jj,jk) 
    124125            END DO 
    125126         END DO 
     
    127128      END DO                                           !   End of slab 
    128129      !                                                ! =============== 
     130 
     131      ! save the lateral diffusion trends for diagnostic 
     132      ! momentum trends 
     133      IF( l_trddyn )   THEN 
     134 
     135         CALL trd_mod(zwk3, zwk4, jpdtdldf, 'DYN', kt) 
     136      ENDIF 
    129137 
    130138      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynldf_iso.F90

    r109 r216  
    1818   USE ldftra_oce      ! ocean tracer   lateral physics 
    1919   USE zdf_oce         ! ocean vertical physics 
    20    USE trddyn_oce      ! dynamics trends diagnostics 
     20   USE trdmod          ! ocean dynamics trends  
     21   USE trdmod_oce      ! ocean variables trends 
    2122   USE ldfslp          ! iso-neutral slopes  
    2223   USE in_out_manager  ! I/O manager 
     
    7778      !!        Update (ua,va) arrays with the before geopotential biharmonic 
    7879      !!      mixing trend. 
    79       !!        Save in (utrd,vtrd) arrays the trends if 'key_diatrends' defined 
     80      !!        Save in (uldftrd,vldftrd) arrays the trends if 'key_trddyn' defined 
    8081      !! 
    8182      !! History : 
    8283      !!   8.0  !  97-07  (G. Madec)  Original code 
    8384      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
     85      !!   9.0  !  04-08  (C. Talandier) New trends organization 
    8486      !!---------------------------------------------------------------------- 
     87      !! * Modules used      
     88      USE oce, ONLY :    ztdua => ta,   & ! use ta as 3D workspace    
     89                         ztdva => sa      ! use sa as 3D workspace    
    8590      !! * Arguments 
    86       INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
     91      INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
    8792 
    8893      !! * Local declarations 
    89       INTEGER  ::   ji, jj, jk                ! dummy loop indices 
     94      INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    9095      REAL(wp) ::   & 
    91          zabe1, zabe2, zcof1, zcof2,   &      ! temporary scalars 
     96         zabe1, zabe2, zcof1, zcof2,   &  ! temporary scalars 
    9297         zmskt, zmskf, zbu, zbv,       & 
    93          zuah, zvah 
     98         zuah, zvah, zua, zva 
    9499      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    95          ziut, zjuf, zjvt, zivf,   &          ! temporary workspace 
     100         ziut, zjuf, zjvt, zivf,        & ! temporary workspace 
    96101         zdku, zdk1u, zdkv, zdk1v 
    97102      !!---------------------------------------------------------------------- 
     
    101106         IF(lwp) WRITE(numout,*) 'dyn_ldf_iso : iso-neutral laplacian diffusive operator or ' 
    102107         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   s-coordinate horizontal diffusive operator' 
     108      ENDIF 
     109 
     110      ! Save ua and va trends 
     111      IF( l_trddyn )   THEN 
     112         ztdua(:,:,:) = ua(:,:,:)  
     113         ztdva(:,:,:) = va(:,:,:)  
    103114      ENDIF 
    104115      !                                                ! =============== 
     
    233244               ua (ji,jj,jk) = ua (ji,jj,jk) + zuah 
    234245               va (ji,jj,jk) = va (ji,jj,jk) + zvah 
    235 #if defined key_trddyn || defined key_trd_vor 
    236                ! save the trends for diagnostics 
    237                utrd(ji,jj,jk,5) = zuah 
    238                vtrd(ji,jj,jk,5) = zvah 
    239 #endif 
    240246            END DO 
    241247         END DO 
     
    243249      END DO                                           !   End of slab 
    244250      !                                                ! =============== 
     251 
     252      ! save the lateral diffusion trends for diagnostic 
     253      ! momentum trends will be saved in dynzdf_iso.F90 
     254      IF( l_trddyn )   THEN 
     255         uldftrd(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     256         vldftrd(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     257      ENDIF 
     258 
     259      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     260         zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 
     261         zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 
     262         WRITE(numout,*) ' ldf  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl 
     263         u_ctl = zua   ;   v_ctl = zva 
     264      ENDIF 
     265 
    245266   END SUBROUTINE dyn_ldf_iso 
    246267 
  • trunk/NEMO/OPA_SRC/DYN/dynldf_lap.F90

    r109 r216  
    1515   USE zdf_oce         ! ocean vertical physics 
    1616   USE in_out_manager  ! I/O manager 
    17    USE trddyn_oce      ! ocean dynamics trends 
     17   USE trdmod          ! ocean dynamics trends  
     18   USE trdmod_oce      ! ocean variables trends 
    1819   USE ldfslp          ! iso-neutral slopes  
    1920 
     
    5657      !! ** Action : - Update (ua,va) with the before iso-level harmonic  
    5758      !!               mixing trend. 
    58       !!             - Save in (utrd,vtrd) arrays the trends ('key_diatrends') 
     59      !!             - Save in (ztdua,ztdva) arrays the trends ('key_trddyn') 
    5960      !! 
    6061      !! History : 
     
    6263      !!        !  91-11 (G. Madec) 
    6364      !!        !  96-01 (G. Madec) statement function for e3 and ahm 
    64       !!   8.5  !  02-06  (G. Madec)  F90: Free form and module 
     65      !!   8.5  !  02-06 (G. Madec)  F90: Free form and module 
     66      !!   9.0  !  04-08 (C. Talandier) New trends organization 
    6567      !!---------------------------------------------------------------------- 
     68      !! * Modules used      
     69      USE oce, ONLY :    ztdua => ta,   & ! use ta as 3D workspace    
     70                         ztdva => sa      ! use sa as 3D workspace    
     71 
    6672      !! * Arguments 
    67       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     73      INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
    6874 
    6975      !! * Local declarations 
    70       INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     76      INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    7177      REAL(wp) ::   & 
    72          zua, zva, ze2u, ze1v            ! temporary scalars 
     78         zua, zva, ze2u, ze1v             ! temporary scalars 
    7379      !!---------------------------------------------------------------------- 
    7480 
     
    7783         IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacien) operator' 
    7884         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     85      ENDIF 
     86 
     87      ! Save ua and va trends 
     88      IF( l_trddyn )   THEN 
     89         ztdua(:,:,:) = ua(:,:,:)  
     90         ztdva(:,:,:) = va(:,:,:)  
    7991      ENDIF 
    8092 
     
    107119               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    108120               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    109 #if defined key_trddyn || defined key_trd_vor 
    110                ! save the horizontal diffusive trends 
    111                utrd(ji,jj,jk,5) = zua 
    112                vtrd(ji,jj,jk,5) = zva 
    113 #endif 
    114121            END DO 
    115122         END DO 
     
    117124      END DO                                           !   End of slab 
    118125      !                                                ! =============== 
     126 
     127      ! save the lateral diffusion trends for diagnostic 
     128      ! momentum trends 
     129      IF( l_trddyn )   THEN 
     130         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     131         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     132 
     133         CALL trd_mod(ztdua, ztdva, jpdtdldf, 'DYN', kt) 
     134      ENDIF 
    119135 
    120136      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynspg_fsc.F90

    r183 r216  
    1616   USE oce             ! ocean dynamics and tracers  
    1717   USE dom_oce         ! ocean space and time domain  
    18    USE trdtra_oce      ! ocean active tracer   trend 
    19    USE trddyn_oce      ! ocean active dynamics trend 
     18   USE trdmod          ! ocean dynamics trends  
     19   USE trdmod_oce      ! ocean variables trends 
    2020   USE zdf_oce         ! ocean vertical physics 
    2121   USE in_out_manager  ! I/O manager 
    2222   USE phycst          ! physical constants 
    2323   USE ocesbc          ! ocean surface boundary condition 
    24    USE flxrnf          ! ??? 
    25    USE sol_oce         ! solver variables 
     24   USE flxrnf          ! ocean runoffs 
     25   USE sol_oce         ! ocean elliptic solver 
    2626   USE solpcg          ! preconditionned conjugate gradient solver 
    2727   USE solsor          ! Successive Over-relaxation solver 
     
    3030   USE obcdyn          ! ocean open boundary condition (obc_dyn routines) 
    3131   USE obcvol          ! ocean open boundary condition (obc_vol routines) 
    32    USE lib_mpp         ! ??? 
    33    USE lbclnk          ! ??? 
    34    USE cla_dynspg      ! ??? 
     32   USE lib_mpp         ! distributed memory computing library 
     33   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     34   USE cla_dynspg      ! cross land advection 
    3535 
    3636   IMPLICIT NONE 
     
    9494      !! 
    9595      !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 
    96       !!             - Save the trends in (utrd,vtrd) ('key_diatrends') 
     96      !!             - Save the trends in (ztdua,ztdva) ('key_trddyn') 
    9797      !! 
    9898      !! References : 
     
    101101      !! History : 
    102102      !!        !  98-05 (G. Roullet)  Original code 
    103       !!        !  98-10  (G. Madec, M. Imbard)  release 8.2 
    104       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    105       !!        !  02-11  (C. Talandier, A-M Treguier) Open boundaries 
     103      !!        !  98-10 (G. Madec, M. Imbard)  release 8.2 
     104      !!   8.5  !  02-08 (G. Madec)  F90: Free form and module 
     105      !!        !  02-11 (C. Talandier, A-M Treguier) Open boundaries 
     106      !!   9.0  !  04-08 (C. Talandier) New trends organization 
    106107      !!--------------------------------------------------------------------- 
     108      !! * Modules used      
     109      USE oce, ONLY :    ztdua => ta,      & ! use ta as 3D workspace    
     110                         ztdva => sa         ! use sa as 3D workspace    
     111 
    107112      !! * Arguments 
    108113      INTEGER, INTENT( in )  ::   kt         ! ocean time-step index 
     
    155160            spgu(ji,jj) = zspgu 
    156161            spgv(ji,jj) = zspgv 
    157 #if defined key_trddyn || defined key_trd_vor 
    158             ! save the surface pressure gradient trends  
    159             utrd2(ji,jj,1) = zspgu 
    160             vtrd2(ji,jj,1) = zspgv 
    161 #endif 
    162162         END DO  
    163163      END DO  
     
    170170               ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj) 
    171171               va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj) 
    172 #if defined key_trddyn || defined key_trd_vor 
    173                ! save the surface pressure gradient trend for diagnostics 
    174                utrd(ji,jj,jk,8) = spgu(ji,jj) 
    175                vtrd(ji,jj,jk,8) = spgv(ji,jj)  
    176 #endif 
    177             END DO 
    178          END DO 
    179       END DO 
     172            END DO 
     173         END DO 
     174      END DO 
     175 
     176      ! Save the surface pressure gradient trend for diagnostics 
     177      IF( l_trddyn )   THEN 
     178         DO jk = 1, jpkm1 
     179            ztdua(:,:,jk) = spgu(:,:)  
     180            ztdva(:,:,jk) = spgv(:,:)  
     181         END DO 
     182      ENDIF 
    180183       
    181184      ! 1. Evaluate the masked next velocity 
     
    310313            spgv(ji,jj) = z2dt * ztdgv 
    311314#endif 
    312 #if defined key_trddyn || defined key_trd_vor 
    313             ! save the transport divergence gradient trends 
    314             utrd2(ji,jj,2) = utrd2(ji,jj,2) + ztdgu 
    315             vtrd2(ji,jj,2) = vtrd2(ji,jj,2) + ztdgv 
    316 #endif 
    317315         END DO 
    318316      END DO 
     
    328326               ua(ji,jj,jk) = (ua(ji,jj,jk) + spgu(ji,jj)) * umask(ji,jj,jk) 
    329327               va(ji,jj,jk) = (va(ji,jj,jk) + spgv(ji,jj)) * vmask(ji,jj,jk) 
    330 #if defined key_trddyn || defined key_trd_vor 
    331                ! save the surface pressure gradient trend for diagnostics 
    332                utrd(ji,jj,jk,8) = utrd(ji,jj,jk,8) + spgu(ji,jj)/z2dt 
    333                vtrd(ji,jj,jk,8) = vtrd(ji,jj,jk,8) + spgv(ji,jj)/z2dt 
    334 #endif 
    335             END DO 
    336          END DO 
    337       END DO 
     328            END DO 
     329         END DO 
     330      END DO 
     331 
     332      ! save the surface pressure gradient trends for diagnostic 
     333      ! momentum trends 
     334      IF( l_trddyn )   THEN 
     335         DO jk = 1, jpkm1 
     336            ztdua(:,:,jk) = ztdua(:,:,jk) + spgu(:,:)/z2dt  
     337            ztdva(:,:,jk) = ztdva(:,:,jk) + spgv(:,:)/z2dt  
     338         END DO 
     339 
     340         CALL trd_mod(ztdua, ztdva, jpdtdspg, 'DYN', kt) 
     341      ENDIF 
    338342 
    339343      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynspg_fsc_atsk.F90

    r183 r216  
    1919   USE dom_oce         ! ocean space and time domain 
    2020   USE zdf_oce         ! ocean vertical physics 
    21    USE trdtra_oce      ! ocean active tracer trend  
    22    USE trddyn_oce      ! ocean dynamics trend 
     21   USE trdmod          ! ocean dynamics trends  
     22   USE trdmod_oce      ! ocean variables trends 
    2323   USE in_out_manager  ! I/O manager 
    2424   USE phycst          ! physical constant 
    2525   USE ocesbc          ! Ocean Surface Boundary condition 
    26    USE flxrnf          ! ??? 
     26   USE flxrnf          ! ocean runoffs 
    2727   USE sol_oce         ! ocean elliptic solver 
    2828   USE solpcg          ! preconditionned conjugate gradient solver 
     
    3030   USE solfet          ! FETI solver 
    3131   USE obc_oce         ! Lateral open boundary condition 
    32    USE obcdyn          ! open boudary condition 
    33    USE obcvol          !    "              " 
    34    USE lib_mpp         ! ??? 
    35    USE lbclnk          ! ??? 
    36    USE cla_dynspg      ! ??? 
     32   USE obcdyn          ! ocean open boundary condition (obc_dyn routines) 
     33   USE obcvol          ! ocean open boundary condition (obc_vol routines) 
     34   USE lib_mpp         ! distributed memory computing library 
     35   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     36   USE cla_dynspg      ! cross land advection 
    3737 
    3838   IMPLICIT NONE 
     
    9696      !! 
    9797      !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 
    98       !!             - Save the trends in (utrd,vtrd) ('key_diatrends') 
     98      !!             - Save the trends in (ztdua,ztdva) ('key_trddyn') 
    9999      !! 
    100100      !! References : 
     
    103103      !! History : 
    104104      !!        !  98-05 (G. Roullet)  Original code 
    105       !!        !  98-10  (G. Madec, M. Imbard)  release 8.2 
    106       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    107       !!        !  02-11  (C. Talandier, A-M Treguier) Open boundaries 
     105      !!        !  98-10 (G. Madec, M. Imbard)  release 8.2 
     106      !!   8.5  !  02-08 (G. Madec)  F90: Free form and module 
     107      !!        !  02-11 (C. Talandier, A-M Treguier) Open boundaries 
     108      !!   9.0  !  04-08 (C. Talandier) New trends organization 
    108109      !!--------------------------------------------------------------------- 
     110      !! * Modules used      
     111      USE oce, ONLY :    ztdua => ta,      & ! use ta as 3D workspace    
     112                         ztdva => sa         ! use sa as 3D workspace    
     113 
    109114      !! * Arguments 
    110115      INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
     
    158163            spgu(ji,jj) = zspgu 
    159164            spgv(ji,jj) = zspgv 
    160 #if defined key_trddyn || defined key_trd_vor 
    161             ! save the surface pressure gradient trends  
    162             utrd2(ji,jj,1) = zspgu 
    163             vtrd2(ji,jj,1) = zspgv 
    164 #endif 
    165165         END DO  
    166166 
     
    171171               ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj) 
    172172               va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj) 
    173 #if defined key_trddyn || defined key_trd_vor 
    174                ! save the surface pressure gradient trend for diagnostics 
    175                utrd(ji,jj,jk,8) = spgu(ji,jj) 
    176                vtrd(ji,jj,jk,8) = spgv(ji,jj)  
    177 #endif 
    178173            END DO 
    179174         END DO 
     
    181176      END DO                                           !   End of slab 
    182177      !                                                ! =============== 
     178 
     179      ! Save the surface pressure gradient trend for diagnostics 
     180      IF( l_trddyn )   THEN 
     181         DO jk = 1, jpkm1 
     182            ztdua(:,:,jk) = spgu(:,:)  
     183            ztdva(:,:,jk) = spgv(:,:)  
     184         END DO 
     185      ENDIF 
    183186 
    184187      !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,synchro,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     
    333336            spgv(ji,jj) = z2dt * ztdgv 
    334337#endif 
    335 #if defined key_trddyn || defined key_trd_vor 
    336             ! save the transport divergence gradient trends 
    337             utrd2(ji,jj,2) = utrd2(ji,jj,2) + ztdgu 
    338             vtrd2(ji,jj,2) = vtrd2(ji,jj,2) + ztdgv 
    339 #endif 
    340338         END DO 
    341339          
     
    349347               ua(ji,jj,jk) = (ua(ji,jj,jk) + spgu(ji,jj)) * umask(ji,jj,jk) 
    350348               va(ji,jj,jk) = (va(ji,jj,jk) + spgv(ji,jj)) * vmask(ji,jj,jk) 
    351 #if defined key_trddyn || defined key_trd_vor 
    352                ! save the surface pressure gradient trend for diagnostics 
    353                utrd(ji,jj,jk,8) = utrd(ji,jj,jk,8) + spgu(ji,jj)/z2dt 
    354                vtrd(ji,jj,jk,8) = vtrd(ji,jj,jk,8) + spgv(ji,jj)/z2dt 
    355 #endif 
    356349            END DO 
    357350         END DO 
     
    387380      !                                                ! =============== 
    388381 
     382      ! save the surface pressure gradient trends for diagnostic 
     383      ! momentum trends 
     384      IF( l_trddyn )   THEN 
     385         DO jk = 1, jpkm1 
     386            ztdua(:,:,jk) = ztdua(:,:,jk) + spgu(:,:)/z2dt  
     387            ztdva(:,:,jk) = ztdva(:,:,jk) + spgv(:,:)/z2dt  
     388         END DO 
     389 
     390         CALL trd_mod(ztdua, ztdva, jpdtdspg, 'DYN', kt) 
     391      ENDIF 
     392       
    389393      !Boundary conditions on sshn 
    390394      CALL lbc_lnk( sshn, 'T', 1. ) 
  • trunk/NEMO/OPA_SRC/DYN/dynspg_rl.F90

    r109 r216  
    1818   USE ldfdyn_oce      ! ocean dynamics: lateral physics 
    1919   USE zdf_oce         ! ocean vertical physics 
    20    USE trddyn_oce      ! ocean dynamics trends 
     20   USE trdmod          ! ocean dynamics trends  
     21   USE trdmod_oce      ! ocean variables trends 
    2122   USE in_out_manager  ! I/O manager 
    2223   USE sol_oce         ! ocean elliptic solver 
     
    2627   USE solisl          ! ??? 
    2728   USE obc_oce         ! Lateral open boundary condition 
    28    USE lib_mpp         ! ??? 
    29    USE lbclnk          ! ??? 
     29   USE lib_mpp         ! distributed memory computing library 
     30   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3031 
    3132   IMPLICIT NONE 
     
    7677      !! 
    7778      !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 
    78       !!             - Save the trends in (utrd,vtrd) ('key_diatrends') 
     79      !!             - Save the trends in (ztdua,ztdva) ('key_trddyn') 
    7980      !! 
    8081      !! References : 
     
    9293      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    9394      !!        !  02-11  (C. Talandier, A-M Treguier) Open boundaries 
     95      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    9496      !!--------------------------------------------------------------------- 
     97      !! * Modules used      
     98      USE oce, ONLY :    ztdua => ta,    & ! use ta as 3D workspace    
     99                         ztdva => sa       ! use sa as 3D workspace    
    95100      !! * Arguments 
    96101      INTEGER, INTENT( in  ) ::   kt       ! ocean time-step index 
     
    520525               ua(ji,jj,jk) = ua(ji,jj,jk) - spgu(ji,jj) 
    521526               va(ji,jj,jk) = va(ji,jj,jk) - spgv(ji,jj) 
    522 # if defined key_trddyn || defined key_trd_vor 
    523                ! save the surface pressure gradient trend for diagnostics 
    524                utrd(ji,jj,jk,8) = -spgu(ji,jj) 
    525                vtrd(ji,jj,jk,8) = -spgv(ji,jj) 
    526 # endif 
    527             END DO 
    528          END DO 
    529  
    530       END DO 
     527            END DO 
     528         END DO 
     529 
     530      END DO 
     531 
     532      ! save the surface pressure gradient trends for diagnostic 
     533      ! momentum trends 
     534      IF( l_trddyn )   THEN 
     535         DO jk = 1, jpkm1 
     536            ztdua(:,:,jk) = - spgu(:,:) 
     537            ztdva(:,:,jk) = - spgv(:,:) 
     538         END DO 
     539 
     540         CALL trd_mod(ztdua, ztdva, jpdtdldf, 'DYN', kt) 
     541      ENDIF 
    531542 
    532543   END SUBROUTINE dyn_spg_rl 
  • 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) 
  • trunk/NEMO/OPA_SRC/DYN/dynzad.F90

    r109 r216  
    1212   USE dom_oce         ! ocean space and time domain 
    1313   USE in_out_manager  ! I/O manager 
    14    USE trddyn_oce     ! dynamics trends diagnostics variables 
    15    USE flxrnf          ! ??? 
     14   USE trdmod          ! ocean dynamics trends  
     15   USE trdmod_oce      ! ocean variables trends 
     16   USE flxrnf          ! ocean runoffs 
    1617 
    1718   IMPLICIT NONE 
     
    5758      !!   7.5  !  96-01  (G. Madec) statement function for e3 
    5859      !!   8.5  !  02-07  (G. Madec) Free form, F90 
     60      !!   9.0  !  04-08  (C. Talandier) New trends organization 
    5961      !!---------------------------------------------------------------------- 
    6062      !! * modules used 
     
    7072      REAL(wp), DIMENSION(jpi) ::   & 
    7173         zww                           ! temporary workspace 
     74      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     75         ztdua, ztdva                  ! temporary workspace 
    7276      !!---------------------------------------------------------------------- 
    7377       
     
    7680         IF(lwp) WRITE(numout,*) 'dyn_zad : arakawa advection scheme' 
    7781         IF(lwp) WRITE(numout,*) '~~~~~~~   Auto-tasking case, j-slab, no vector opt.' 
     82      ENDIF 
     83 
     84      ! Save ua and va trends 
     85      IF( l_trddyn )   THEN 
     86         ztdua(:,:,:) = ua(:,:,:)  
     87         ztdva(:,:,:) = va(:,:,:)  
    7888      ENDIF 
    7989 
     
    115125               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    116126               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    117 #   if defined key_trddyn || defined key_trd_vor 
    118                ! save the trends for diagnostics 
    119                utrd(ji,jj,jk,6) = zua 
    120                vtrd(ji,jj,jk,6) = zva 
    121 #   endif 
    122127            END DO   
    123128         END DO   
     
    125130      END DO                                           !   End of slab 
    126131      !                                                ! =============== 
     132 
     133      ! save the vertical advection trends for diagnostic 
     134      ! momentum trends 
     135      IF( l_trddyn )   THEN 
     136         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     137         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     138 
     139         CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 
     140      ENDIF 
    127141 
    128142      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     
    170184      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    171185         zww                           ! temporary  workspace 
     186      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
     187         ztdua, ztdva                  ! temporary workspace 
    172188      !!---------------------------------------------------------------------- 
    173189       
     
    176192         IF(lwp)WRITE(numout,*) 'dyn_zad : arakawa advection scheme' 
    177193         IF(lwp)WRITE(numout,*) '~~~~~~~   vector optimization k-j-i loop' 
     194      ENDIF 
     195 
     196      ! Save ua and va trends 
     197      IF( l_trddyn )   THEN 
     198         ztdua(:,:,:) = ua(:,:,:)  
     199         ztdva(:,:,:) = va(:,:,:)  
    178200      ENDIF 
    179201       
     
    218240               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    219241               va(ji,jj,jk) = va(ji,jj,jk) + zva 
    220 #   if defined key_trddyn || defined key_trd_vor 
    221                ! save the trends for diagnostics 
    222                utrd(ji,jj,jk,6) = zua 
    223                vtrd(ji,jj,jk,6) = zva 
    224 #   endif 
    225242            END DO   
    226243         END DO   
    227244      END DO 
     245 
     246      ! save the vertical advection trends for diagnostic 
     247      ! momentum trends 
     248      IF( l_trddyn )   THEN 
     249         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     250         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     251 
     252         CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 
     253      ENDIF 
    228254 
    229255      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_exp.F90

    r109 r216  
    1616   USE in_out_manager  ! I/O manager 
    1717   USE taumod          ! surface ocean stress 
    18    USE trddyn_oce     ! dynamics trends diagnostics variables 
     18   USE trdmod          ! ocean dynamics trends  
     19   USE trdmod_oce      ! ocean variables trends 
    1920 
    2021   IMPLICIT NONE 
     
    4849      !! 
    4950      !! ** Action : - Update (ua,va) with the vertical diffusive trend 
    50       !!             - Save the trends in (utrd,vtrd) ('key_diatrends') 
     51      !!             - Save the trends in (ztdua,ztdva) ('key_trddyn') 
    5152      !! 
    5253      !! History : 
     
    5455      !!        !  97-05  (G. Madec)  vertical component of isopycnal 
    5556      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
     57      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    5658      !!--------------------------------------------------------------------- 
     59      !! * Modules used      
     60      USE oce, ONLY :    ztdua => ta,    & ! use ta as 3D workspace    
     61                         ztdva => sa       ! use sa as 3D workspace    
    5762      !! * Arguments 
    58       INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
     63      INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
    5964 
    6065      !! * Local declarations 
    61       INTEGER ::   ji, jj, jk, jl         ! dummy loop indices 
     66      INTEGER ::   & 
     67         ji, jj, jk, jl,                 & ! dummy loop indices 
     68         ikbu, ikbum1 , ikbv, ikbvm1       ! temporary integers 
    6269      REAL(wp) ::   & 
    63          zrau0r, zlavmr, z2dt, zua, zva   ! temporary scalars 
    64       REAL(wp), DIMENSION(jpi,jpk) ::   & 
    65          zwx, zwy, zwz, zww               ! temporary workspace arrays 
    66 #if defined key_trddyn || defined key_trd_vor 
    67       INTEGER ::   & 
    68          ikbu, ikbum1 , ikbv, ikbvm1      ! temporary integers 
    69 #endif 
     70         zrau0r, zlavmr, z2dt, zua, zva    ! temporary scalars 
     71      REAL(wp), DIMENSION(jpi,jpk) ::    & 
     72         zwx, zwy, zwz, zww                ! temporary workspace arrays 
     73      REAL(wp), DIMENSION(jpi,jpj) ::    & 
     74         ztsx, ztsy, ztbx, ztby            ! temporary workspace arrays 
    7075      !!---------------------------------------------------------------------- 
    7176 
     
    8186      zlavmr = 1. / float( n_zdfexp )                      ! inverse of the number of sub time step 
    8287      z2dt = 2. * rdt                                      ! Leap-frog environnement 
     88      ztsx(:,:) = 0.e0 
     89      ztsy(:,:) = 0.e0  
     90      ztbx(:,:) = 0.e0 
     91      ztby(:,:) = 0.e0 
     92 
     93      ! Save ua and va trends 
     94      IF( l_trddyn )   THEN 
     95         ztdua(:,:,:) = ua(:,:,:)  
     96         ztdva(:,:,:) = va(:,:,:)  
     97      ENDIF 
     98 
    8399      IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt    ! Euler time stepping when starting from rest 
    84100 
     
    98114               zwx(ji,jk) = ub(ji,jj,jk) 
    99115               zwz(ji,jk) = vb(ji,jj,jk) 
    100 #if defined key_trddyn || defined key_trd_vor 
    101                utrd(ji,jj,jk,7) = ua(ji,jj,jk) 
    102                vtrd(ji,jj,jk,7) = va(ji,jj,jk) 
    103 #endif 
    104116            END DO   
    105117         END DO   
     
    131143         END DO   
    132144 
    133 #if defined key_trddyn || defined key_trd_vor 
    134          ! diagnose the vertical diffusive momentum trends 
    135  
    136          ! save the total vertical momentum diffusive trend 
    137          DO jk = 1, jpkm1 
    138             DO ji = 2, jpim1 
    139                utrd(ji,jj,jk,7) = ua(ji,jj,jk) - utrd(ji,jj,jk,7) 
    140                vtrd(ji,jj,jk,7) = va(ji,jj,jk) - vtrd(ji,jj,jk,7) 
    141             END DO  
    142          END DO  
    143   
    144          ! subtract and save surface and momentum fluxes 
    145          DO ji = 2, jpim1 
    146             ! save the surface momentum fluxes  
    147             tautrd(ji,jj,1) = zwy(ji,1) / fse3u(ji,jj,1) 
    148             tautrd(ji,jj,2) = zww(ji,1) / fse3v(ji,jj,1) 
    149             ! save bottom friction momentum fluxes  
    150             ikbu   = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    151             ikbum1 = MAX( ikbu-1, 1 ) 
    152             ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    153             ikbvm1 = MAX( ikbv-1, 1 ) 
    154             tautrd(ji,jj,3) = avmu(ji,jj,ikbu) * zwx(ji,ikbum1)   & 
    155                             / ( fse3u(ji,jj,ikbum1) * fse3uw(ji,jj,ikbu) ) 
    156             tautrd(ji,jj,4) = avmv(ji,jj,ikbv) * zwz(ji,ikbvm1)   & 
    157                             / ( fse3v(ji,jj,ikbvm1) * fse3vw(ji,jj,ikbv) ) 
    158             ! subtract surface forcing and bottom friction trend from vertical 
    159             ! diffusive momentum trend 
    160             utrd(ji,jj,1     ,7) = utrd(ji,jj,1     ,7) - tautrd(ji,jj,1) 
    161             utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) - tautrd(ji,jj,3) 
    162             vtrd(ji,jj,1     ,7) = vtrd(ji,jj,1     ,7) - tautrd(ji,jj,2) 
    163             vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) - tautrd(ji,jj,4) 
    164          END DO 
    165 #endif 
    166145         !                                             ! =============== 
    167146      END DO                                           !   End of slab 
    168147      !                                                ! =============== 
    169148 
     149      ! save the vertical diffusion trends for diagnostic 
     150      ! momentum trends 
     151      IF( l_trddyn )  THEN  
     152         ! save the total vertical momentum diffusive trend 
     153         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     154         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     155  
     156         ! subtract and save surface and momentum fluxes 
     157         !                                                ! =============== 
     158         DO jj = 2, jpjm1                                 !  Horizontal slab 
     159            !                                             ! =============== 
     160            DO ji = 2, jpim1 
     161               ! save the surface momentum fluxes  
     162               ztsx(ji,jj) = zwy(ji,1) / fse3u(ji,jj,1) 
     163               ztsy(ji,jj) = zww(ji,1) / fse3v(ji,jj,1) 
     164               ! save bottom friction momentum fluxes  
     165               ikbu   = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
     166               ikbum1 = MAX( ikbu-1, 1 ) 
     167               ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
     168               ikbvm1 = MAX( ikbv-1, 1 ) 
     169               ztbx(ji,jj) = avmu(ji,jj,ikbu) * zwx(ji,ikbum1)   & 
     170                               / ( fse3u(ji,jj,ikbum1) * fse3uw(ji,jj,ikbu) ) 
     171               ztby(ji,jj) = avmv(ji,jj,ikbv) * zwz(ji,ikbvm1)   & 
     172                               / ( fse3v(ji,jj,ikbvm1) * fse3vw(ji,jj,ikbv) ) 
     173               ! subtract surface forcing and bottom friction trend from vertical 
     174               ! diffusive momentum trend 
     175               ztdua(ji,jj,1     ) = ztdua(ji,jj,1     ) - ztsx(ji,jj) 
     176               ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 
     177               ztdva(ji,jj,1     ) = ztdva(ji,jj,1     ) - ztsy(ji,jj) 
     178               ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 
     179            END DO 
     180            !                                             ! =============== 
     181         END DO                                           !   End of slab 
     182         !                                                ! =============== 
     183 
     184         CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 
     185         ztdua(:,:,:) = 0.e0 
     186         ztdva(:,:,:) = 0.e0 
     187         ztdua(:,:,1) = ztsx(:,:) 
     188         ztdva(:,:,1) = ztsy(:,:) 
     189         CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 
     190         ztdua(:,:,:) = 0.e0 
     191         ztdva(:,:,:) = 0.e0 
     192         ztdua(:,:,1) = ztbx(:,:) 
     193         ztdva(:,:,1) = ztby(:,:) 
     194         CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 
     195      ENDIF 
     196 
     197      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     198         zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 
     199         zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 
     200         WRITE(numout,*) ' zdf  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl 
     201         u_ctl = zua   ;   v_ctl = zva 
     202      ENDIF 
     203 
    170204   END SUBROUTINE dyn_zdf_exp 
    171205 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r109 r216  
    1818   USE in_out_manager  ! I/O manager 
    1919   USE taumod          ! surface ocean stress 
    20    USE trddyn_oce     ! dynamics trends diagnostics variables 
     20   USE trdmod          ! ocean dynamics trends  
     21   USE trdmod_oce      ! ocean variables trends 
    2122 
    2223   IMPLICIT NONE 
     
    5455      !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 
    5556      !!               mixing trend. 
    56       !!             - Save the trends in (utrd,vtrd) ('key_diatrends') 
     57      !!             - Save the trends in (ztdua,ztdva) ('l_trddyn') 
    5758      !! 
    5859      !! History : 
     
    6061      !!        !  97-05  (G. Madec)  vertical component of isopycnal 
    6162      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
     63      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    6264      !!--------------------------------------------------------------------- 
    6365      !! * Modules used 
     
    6971 
    7072      !! * Local declarations 
    71       INTEGER ::   ji, jj, jk            ! dummy loop indices 
     73      INTEGER ::   & 
     74         ji, jj, jk,                  &  ! dummy loop indices 
     75         ikbu, ikbum1, ikbv, ikbvm1      ! temporary integers 
    7276      REAL(wp) ::   & 
    7377         zrau0r, z2dt, zua, zva,      &  ! temporary scalars 
    7478         z2dtf, zcoef, zzws, zrhs        !    "         " 
     79      REAL(wp), DIMENSION(jpi,jpj) ::   & 
     80         ztsx, ztsy, ztbx, ztby          ! temporary workspace arrays 
    7581      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    76          zwi                             ! temporary workspace arrays 
    77 #if defined key_trddyn || defined key_trd_vor 
    78       INTEGER ::   & 
    79          ikbu, ikbum1, ikbv, ikbvm1     ! temporary integers 
    80 #endif 
     82         zwi, ztdua, ztdva               ! temporary workspace arrays 
    8183      !!---------------------------------------------------------------------- 
    8284 
     
    9193      zrau0r = 1. / rau0      ! inverse of the reference density 
    9294      z2dt   = 2. * rdt       ! Leap-frog environnement 
     95      ztsx(:,:) = 0.e0 
     96      ztsy(:,:) = 0.e0  
     97      ztbx(:,:) = 0.e0 
     98      ztby(:,:) = 0.e0 
    9399      ! Euler time stepping when starting from rest 
    94100      IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    95       ! Normalization to obtain the general momentum trend ua 
    96 #if defined key_trddyn || defined key_trd_vor 
    97       ! Save the previously computed trend 
    98       DO jk = 1, jpkm1 
    99          DO jj = 2, jpjm1 
    100             DO ji = fs_2, fs_jpim1   ! vector opt. 
    101                utrd(ji,jj,jk,7) = ua(ji,jj,jk) 
    102                vtrd(ji,jj,jk,7) = va(ji,jj,jk) 
    103             END DO 
    104          END DO 
    105       END DO 
    106 #endif 
     101 
     102      ! Save previous ua and va trends 
     103      IF( l_trddyn )   THEN 
     104         ztdua(:,:,:) = ua(:,:,:)  
     105         ztdva(:,:,:) = va(:,:,:)  
     106      ENDIF 
    107107 
    108108      ! 1. Vertical diffusion on u 
     
    190190      END DO 
    191191 
    192 #if defined key_trddyn || defined key_trd_vor 
    193       ! diagnose surface and bottom momentum fluxes 
    194       DO jj = 2, jpjm1    
    195          DO ji = fs_2, fs_jpim1   ! vector opt. 
    196             ! save the surface forcing momentum fluxes 
    197             tautrd(ji,jj,1) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
    198             ! save bottom friction momentum fluxes 
    199             ikbu   = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    200             ikbum1 = MAX( ikbu-1, 1 ) 
    201             tautrd(ji,jj,3) = - avmu(ji,jj,ikbu) * ua(ji,jj,ikbum1)   & 
    202                / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 
    203             ! subtract surface forcing and bottom friction trend from vertical 
    204             ! diffusive momentum trend 
    205             utrd(ji,jj,1     ,7) = utrd(ji,jj,1     ,7) + tautrd(ji,jj,1) 
    206             utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) + tautrd(ji,jj,3) 
    207          END DO 
    208       END DO 
    209 #endif 
     192      IF( l_trddyn )  THEN  
     193         ! diagnose surface and bottom momentum fluxes 
     194         DO jj = 2, jpjm1    
     195            DO ji = fs_2, fs_jpim1   ! vector opt. 
     196               ! save the surface forcing momentum fluxes 
     197               ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
     198               ! save bottom friction momentum fluxes 
     199               ikbu   = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
     200               ikbum1 = MAX( ikbu-1, 1 ) 
     201               ztbx(ji,jj) = - avmu(ji,jj,ikbu) * ua(ji,jj,ikbum1)   & 
     202                  / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 
     203               ! subtract surface forcing and bottom friction trend from vertical 
     204               ! diffusive momentum trend 
     205               ztdua(ji,jj,1     ) = ztdua(ji,jj,1     ) - ztsx(ji,jj) 
     206               ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 
     207            END DO 
     208         END DO 
     209      ENDIF 
    210210 
    211211      ! Normalization to obtain the general momentum trend ua 
     
    213213         DO jj = 2, jpjm1    
    214214            DO ji = fs_2, fs_jpim1   ! vector opt. 
    215                zua = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt 
    216 #if defined key_trddyn || defined key_trd_vor 
    217                ! save the vertical diffusive momentum trend (general trend - previous one) 
    218                utrd(ji,jj,jk,7) = zua - utrd(ji,jj,jk,7) 
    219 #endif 
    220                ua(ji,jj,jk) = zua 
     215               ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt 
    221216            END DO 
    222217         END DO 
     
    309304      END DO 
    310305 
    311 #if defined key_trddyn || defined key_trd_vor 
    312       ! diagnose surface and bottom momentum fluxes 
    313       DO jj = 2, jpjm1    
    314          DO ji = fs_2, fs_jpim1   ! vector opt. 
    315             ! save the surface forcing momentum fluxes 
    316             tautrd(ji,jj,2) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
    317             ! save bottom friction momentum fluxes 
    318             ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    319             ikbvm1 = MAX( ikbv-1, 1 ) 
    320             tautrd(ji,jj,4) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1)   & 
    321                / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 
    322             ! subtract surface forcing and bottom friction trend from vertical 
    323             ! diffusive momentum trend 
    324             vtrd(ji,jj,1     ,7) = vtrd(ji,jj,1     ,7) + tautrd(ji,jj,2) 
    325             vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) + tautrd(ji,jj,4) 
    326          END DO 
    327       END DO 
    328 #endif 
     306      IF( l_trddyn )  THEN  
     307         ! diagnose surface and bottom momentum fluxes 
     308         DO jj = 2, jpjm1    
     309            DO ji = fs_2, fs_jpim1   ! vector opt. 
     310               ! save the surface forcing momentum fluxes 
     311               ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
     312               ! save bottom friction momentum fluxes 
     313               ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
     314               ikbvm1 = MAX( ikbv-1, 1 ) 
     315               ztby(ji,jj) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1)   & 
     316                  / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 
     317               ! subtract surface forcing and bottom friction trend from vertical 
     318               ! diffusive momentum trend 
     319               ztdva(ji,jj,1     ) = ztdva(ji,jj,1     ) - ztsy(ji,jj) 
     320               ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 
     321            END DO 
     322         END DO 
     323      ENDIF 
    329324 
    330325      ! Normalization to obtain the general momentum trend va 
     
    332327         DO jj = 2, jpjm1    
    333328            DO ji = fs_2, fs_jpim1   ! vector opt. 
    334                zva = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt 
    335 #if defined key_trddyn || defined key_trd_vor 
    336                ! save the vertical diffusive momentum fluxes 
    337                vtrd(ji,jj,jk,7) = zva - vtrd(ji,jj,jk,7) 
    338 #endif 
    339                va(ji,jj,jk) = zva 
    340             END DO 
    341          END DO 
    342       END DO 
     329               va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt 
     330            END DO 
     331         END DO 
     332      END DO 
     333 
     334      ! save the vertical diffusion trends for diagnostic 
     335      ! momentum trends 
     336      IF( l_trddyn )  THEN  
     337         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     338         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     339 
     340         CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 
     341         ztdua(:,:,:) = 0.e0 
     342         ztdva(:,:,:) = 0.e0 
     343         ztdua(:,:,1) = ztsx(:,:) 
     344         ztdva(:,:,1) = ztsy(:,:) 
     345         CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 
     346         ztdua(:,:,:) = 0.e0 
     347         ztdva(:,:,:) = 0.e0 
     348         ztdua(:,:,1) = ztbx(:,:) 
     349         ztdva(:,:,1) = ztby(:,:) 
     350         CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 
     351      ENDIF 
    343352 
    344353      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_imp_atsk.F90

    r109 r216  
    1717   USE in_out_manager  ! I/O manager 
    1818   USE taumod          ! surface ocean stress 
    19    USE trddyn_oce     ! dynamics trends diagnostics variables 
     19   USE trdmod          ! ocean dynamics trends  
     20   USE trdmod_oce      ! ocean variables trends 
    2021 
    2122   IMPLICIT NONE 
     
    5253      !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 
    5354      !!               mixing trend. 
    54       !!             - Save the trends in (utrd,vtrd) ('key_diatrends') 
     55      !!             - Save the trends in (ztdua,ztdva) ('l_trddyn') 
    5556      !! 
    5657      !! History : 
    5758      !!   8.5  !  02-08  (G. Madec)  auto-tasking option 
     59      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    5860      !!--------------------------------------------------------------------- 
     61      !! * Modules used      
     62      USE oce, ONLY :    ztdua => ta,  & ! use ta as 3D workspace    
     63                         ztdva => sa     ! use sa as 3D workspace    
     64 
    5965      !! * Arguments 
    6066      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     
    6268      !! * Local declarations 
    6369      INTEGER ::   ji, jj, jk            ! dummy loop indices 
    64       INTEGER ::   ikst, ikenm2, ikstp1  ! temporary integers 
     70      INTEGER ::   & 
     71         ikst, ikenm2, ikstp1,         & ! temporary integers 
     72         ikbu, ikbum1, ikbv, ikbvm1      !    "         "       
    6573      REAL(wp) ::   & 
    66          zrau0r, z2dt, zua, zva,      &  ! temporary scalars 
     74         zrau0r, z2dt, zua, zva,       & !temporary scalars 
    6775         z2dtf, zcoef, zzws 
    68       REAL(wp), DIMENSION(jpi,jpk) ::   & 
    69          zwx, zwy, zwz,               & ! workspace 
     76      REAL(wp), DIMENSION(jpi,jpk) ::  & 
     77         zwx, zwy, zwz,                & ! workspace 
    7078         zwd, zws, zwi, zwt 
    71 #if defined key_trddyn || defined key_trd_vor 
    72       INTEGER ::   & 
    73          ikbu, ikbum1, ikbv, ikbvm1     ! temporary integers 
    74 #endif 
     79      REAL(wp), DIMENSION(jpi,jpj) ::  & 
     80         ztsx, ztsy, ztbx, ztby          ! temporary workspace arrays 
    7581      !!---------------------------------------------------------------------- 
    7682 
     
    8692      zrau0r = 1. / rau0      ! inverse of the reference density 
    8793      z2dt   = 2. * rdt       ! Leap-frog environnement 
     94      ztsx(:,:)   = 0.e0 
     95      ztsy(:,:)   = 0.e0  
     96      ztbx(:,:)   = 0.e0 
     97      ztby(:,:)   = 0.e0 
    8898      ! Euler time stepping when starting from rest 
    8999      IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
     100 
     101      ! Save ua and va trends 
     102      IF( l_trddyn )   THEN 
     103         ztdua(:,:,:) = ua(:,:,:)  
     104         ztdva(:,:,:) = va(:,:,:)  
     105      ENDIF 
    90106 
    91107      !                                                ! =============== 
     
    175191         DO jk = 1, jpkm1 
    176192            DO ji = 2, jpim1 
    177                zua = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 
    178 #if defined key_trddyn || defined key_trd_vor 
    179                ! save the vertical diffusive momentum trend 
    180                utrd(ji,jj,jk,7) = zua - ua(ji,jj,jk) 
    181 #endif 
    182                ua(ji,jj,jk) = zua 
    183             END DO 
    184          END DO 
    185  
    186 #if defined key_trddyn || defined key_trd_vor 
     193               ua(ji,jj,jk) = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 
     194            END DO 
     195         END DO 
     196 
    187197         ! diagnose surface and bottom momentum fluxes 
     198         ! for trends diagnostics 
    188199         DO ji = 2, jpim1 
    189200            ! save the surface forcing momentum fluxes 
    190             tautrd(ji,jj,1) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
     201            ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
    191202            ! save bottom friction momentum fluxes 
    192203            ikbu   = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    193204            ikbum1 = MAX( ikbu-1, 1 ) 
    194             tautrd(ji,jj,3) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1)   & 
     205            ztbx(ji,jj) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1)   & 
    195206               / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 
    196207            ! subtract surface forcing and bottom friction trend from vertical 
    197208            ! diffusive momentum trend 
    198             utrd(ji,jj,1     ,7) = utrd(ji,jj,1     ,7) - tautrd(ji,jj,1) 
    199             utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) - tautrd(ji,jj,3) 
    200          END DO 
    201 #endif 
     209            ztdua(ji,jj,1     ) = ztdua(ji,jj,1     ) - ztsx(ji,jj) 
     210            ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 
     211         END DO 
    202212 
    203213         ! 2. Vertical diffusion on v 
     
    284294         DO jk = 1, jpkm1 
    285295            DO ji = 2, jpim1 
    286                zva = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 
    287 #if defined key_trddyn || defined key_trd_vor 
    288                ! save the vertical diffusive momentum fluxes 
    289                vtrd(ji,jj,jk,7) = zva - va(ji,jj,jk) 
    290 #endif 
    291                va(ji,jj,jk) = zva 
    292             END DO 
    293          END DO 
    294  
    295 #if defined key_trddyn || defined key_trd_vor 
     296               va(ji,jj,jk) = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 
     297            END DO 
     298         END DO 
     299 
    296300         ! diagnose surface and bottom momentum fluxes 
     301         ! for trends diagnostics 
    297302         DO ji = 2, jpim1 
    298303            ! save the surface forcing momentum fluxes 
    299             tautrd(ji,jj,2) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
     304         ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
    300305            ! save bottom friction momentum fluxes 
    301306            ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    302307            ikbvm1 = MAX( ikbv-1, 1 ) 
    303             tautrd(ji,jj,4) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1)   & 
     308         ztby(ji,jj) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1)   & 
    304309               / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 
    305310            ! subtract surface forcing and bottom friction trend from vertical 
    306311            ! diffusive momentum trend 
    307             vtrd(ji,jj,1     ,7) = vtrd(ji,jj,1     ,7) - tautrd(ji,jj,2) 
    308             vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) - tautrd(ji,jj,4) 
    309          END DO 
    310 #endif 
     312            ztdva(ji,jj,1     ) = ztdva(ji,jj,1     ) - ztsy(ji,jj) 
     313            ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 
     314         END DO 
    311315         !                                             ! =============== 
    312316      END DO                                           !   End of slab 
    313317      !                                                ! =============== 
     318 
     319      ! save the vertical diffusion trends for diagnostic 
     320      ! momentum trends 
     321      IF( l_trddyn )  THEN  
     322         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     323         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     324 
     325         CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 
     326         ztdua(:,:,:) = 0.e0 
     327         ztdva(:,:,:) = 0.e0 
     328         ztdua(:,:,1) = ztsx(:,:) 
     329         ztdva(:,:,1) = ztsy(:,:) 
     330         CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 
     331         ztdua(:,:,:) = 0.e0 
     332         ztdva(:,:,:) = 0.e0 
     333         ztdua(:,:,1) = ztbx(:,:) 
     334         ztdva(:,:,1) = ztby(:,:) 
     335         CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 
     336      ENDIF 
    314337 
    315338      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_iso.F90

    r109 r216  
    1919   USE in_out_manager  ! I/O manager 
    2020   USE taumod          ! surface ocean stress 
    21    USE trddyn_oce     ! dynamics trends diagnostics variables 
     21   USE trdmod          ! ocean dynamics trends  
     22   USE trdmod_oce      ! ocean variables trends 
    2223 
    2324   IMPLICIT NONE 
     
    7778      !!         ua = ua + dz( avmu dz(u) ) 
    7879      !! 
    79       !!      'key_trddyn' defined: trend saved for futher diagnostics. 
     80      !!      'key_trddyn' defined: trend saved for further diagnostics. 
    8081      !! 
    8182      !!      macro-tasked on vertical slab (jj-loop) 
    8283      !! 
    83       !! ** Action : 
    84       !!            /comaft/ ua, va   : general momentum trend increased 
    85       !!                                by the after vertical diffusive trend 
    86       !!            /comtra/ utrd,vtrd: after vertical momentum diffusive 
    87       !!                                trend ('key_trddyn' defined) 
     84      !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 
     85      !!               mixing trend. 
     86      !!             - Save the trends in (ztdua,ztdva) ('key_trddyn') 
    8887      !! 
    8988      !! History : 
    90       !!      original : 90-10 (B. Blanke) 
    91       !!      addition : 97-05 (G. Madec) vertical component of isopycnal 
     89      !!        !  90-10  (B. Blanke)  Original code 
     90      !!        !  97-05  (G. Madec)  vertical component of isopycnal 
     91      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
     92      !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    9293      !!--------------------------------------------------------------------- 
    9394      !! * Modules used 
    9495      USE ldfslp    , ONLY : wslpi, wslpj 
    9596      USE ldftra_oce, ONLY : aht0 
     97      USE oce, ONLY :    ztdua => ta,        & ! use ta as 3D workspace    
     98                         ztdva => sa           ! use sa as 3D workspace    
    9699 
    97100      !! * Arguments 
    98       INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
     101      INTEGER, INTENT( in ) ::   kt            ! ocean time-step index 
    99102       
    100103      !! * Local declarations 
    101       INTEGER ::   ji, jj, jk             ! dummy loop indices 
     104      INTEGER ::   ji, jj, jk                  ! dummy loop indices 
    102105      INTEGER ::   & 
    103          ikst, ikenm2, ikstp1             ! temporary integers 
     106         ikst, ikenm2, ikstp1,               & ! temporary integers 
     107         ikbu, ikbum1 , ikbv, ikbvm1           !    "        "       
    104108      REAL(wp) ::   & 
    105          zrau0r, z2dt,                 & ! temporary scalars 
     109         zrau0r, z2dt,                       & ! temporary scalars 
    106110         z2dtf, zua, zva, zcoef, zzws 
    107111      REAL(wp) ::   & 
    108112         zcoef0, zcoef3, zcoef4, zbu, zbv, zmkt, zmkf,   & 
    109113         zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 
    110       REAL(wp), DIMENSION(jpi,jpk) ::   & 
    111          zwx, zwy, zwz                 &  ! workspace 
    112        , zwd, zws, zwi, zwt 
    113       REAL(wp), DIMENSION(jpi,jpk) ::   & 
    114          zfuw, zdiu, zdju, zdj1u,      &  ! workspace 
     114      REAL(wp), DIMENSION(jpi,jpk) ::        & 
     115         zwx, zwy, zwz,                      & ! workspace arrays 
     116         zwd, zws, zwi, zwt,                 & !    "        " 
     117         zfuw, zdiu, zdju, zdj1u,            & !    "        " 
    115118         zfvw, zdiv, zdjv, zdj1v 
    116 #if defined key_trddyn || defined key_trd_vor 
    117       INTEGER ::   & 
    118          ikbu, ikbum1 , ikbv, ikbvm1      ! temporary integers 
    119 #endif 
     119      REAL(wp), DIMENSION(jpi,jpj) ::        & 
     120         ztsx, ztsy, ztbx, ztby                ! temporary workspace arrays 
    120121      !!---------------------------------------------------------------------- 
    121122 
     
    133134      ! Leap-frog environnement 
    134135      z2dt = 2. * rdt 
     136      ! workspace arrays 
     137      ztsx(:,:)   = 0.e0 
     138      ztsy(:,:)   = 0.e0  
     139      ztbx(:,:)   = 0.e0 
     140      ztby(:,:)   = 0.e0 
    135141      ! Euler time stepping when starting from rest 
    136142      IF ( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 
     143 
     144      ! Save ua and va trends 
     145      IF( l_trddyn )   THEN 
     146         ztdua(:,:,:) = ua(:,:,:)  
     147         ztdva(:,:,:) = va(:,:,:)  
     148      ENDIF 
    137149 
    138150      !                                                ! =============== 
     
    247259               ua(ji,jj,jk) = ua(ji,jj,jk) + zuav 
    248260               va(ji,jj,jk) = va(ji,jj,jk) + zvav 
    249 #if defined key_trddyn || defined key_trd_vor 
    250                ! save the trends for diagnostics 
    251                utrd(ji,jj,jk,5) = utrd(ji,jj,jk,5) + zuav 
    252                vtrd(ji,jj,jk,5) = vtrd(ji,jj,jk,5) + zvav 
    253 #endif 
    254261            END DO 
    255262         END DO 
    256  
    257  
     263         !                                             ! =============== 
     264      END DO                                           !   End of slab 
     265      !                                                ! =============== 
     266      IF( l_trddyn )   THEN 
     267         ! save these trends in addition to the lateral diffusion one for diagnostics 
     268         uldftrd(:,:,:) = uldftrd(:,:,:) + ua(:,:,:) - ztdua(:,:,:) 
     269         vldftrd(:,:,:) = vldftrd(:,:,:) + va(:,:,:) - ztdva(:,:,:) 
     270 
     271         ! save new trends ua and va 
     272         ztdua(:,:,:) = ua(:,:,:)  
     273         ztdva(:,:,:) = va(:,:,:)  
     274      ENDIF 
     275 
     276      !                                                ! =============== 
     277      DO jj = 2, jpjm1                                 !  Vertical slab 
     278         !                                             ! =============== 
    258279         ! 1. Vertical diffusion on u 
    259280         ! --------------------------- 
     
    289310         DO jk = 1, jpkm1 
    290311            DO ji = 2, jpim1 
    291                zua = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 
    292 #if defined key_trddyn || defined key_trd_vor 
    293                ! save the vertical diffusive momentum trend 
    294                utrd(ji,jj,jk,7) = zua - ua(ji,jj,jk) 
    295 #endif 
    296                ua(ji,jj,jk) = zua 
     312               ua(ji,jj,jk) = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 
    297313            END DO   
    298314         END DO   
    299  
    300 #if defined key_trddyn || defined key_trd_vor 
    301315 
    302316         ! 1.4 diagnose surface and bottom momentum fluxes 
    303317         DO ji = 2, jpim1 
    304318            ! save the surface forcing momentum fluxes 
    305             tautrd(ji,jj,1) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
     319            ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
    306320            ! save bottom friction momentum fluxes 
    307321            ikbu   = min( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    308322            ikbum1 = max( ikbu-1, 1 ) 
    309             tautrd(ji,jj,3) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1)   & 
     323            ztbx(ji,jj) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1)   & 
    310324                            / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 
    311325            ! subtract surface forcing and bottom friction trend from vertical 
    312326            ! diffusive momentum trend 
    313             utrd(ji,jj,1     ,7) = utrd(ji,jj,1     ,7) - tautrd(ji,jj,1) 
    314             utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) - tautrd(ji,jj,3) 
    315          END DO 
    316  
    317 #endif 
     327            ztdua(ji,jj,1     ) = ztdua(ji,jj,1     ) - ztsx(ji,jj) 
     328            ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 
     329         END DO 
    318330 
    319331         ! 2. Vertical diffusion on v 
     
    350362         DO jk = 1, jpkm1 
    351363            DO ji = 2, jpim1 
    352                zva = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 
    353 #if defined key_trddyn || defined key_trd_vor 
    354                ! save the vertical diffusive momentum fluxes 
    355                vtrd(ji,jj,jk,7) = zva - va(ji,jj,jk) 
    356 #endif 
    357                va(ji,jj,jk) = zva 
     364               va(ji,jj,jk) = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 
    358365            END DO     
    359366         END DO    
    360367 
    361 #if defined key_trddyn || defined key_trd_vor 
    362368         ! 2.4 diagnose surface and bottom momentum fluxes 
    363369         DO ji = 2, jpim1 
    364370            ! save the surface forcing momentum fluxes 
    365             tautrd(ji,jj,2) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
     371            ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
    366372            ! save bottom friction momentum fluxes 
    367373            ikbv   = min( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    368374            ikbvm1 = max( ikbv-1, 1 ) 
    369             tautrd(ji,jj,4) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1)   & 
     375            ztby(ji,jj) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1)   & 
    370376                            / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 
    371377            ! subtract surface forcing and bottom friction trend from vertical 
    372378            ! diffusive momentum trend 
    373             vtrd(ji,jj,1     ,7) = vtrd(ji,jj,1     ,7) - tautrd(ji,jj,2) 
    374             vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) - tautrd(ji,jj,4) 
    375          END DO 
    376  
    377 #endif 
     379            ztdva(ji,jj,1     ) = ztdva(ji,jj,1     ) - ztsy(ji,jj) 
     380            ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 
     381         END DO 
    378382         !                                             ! =============== 
    379383      END DO                                           !   End of slab 
    380384      !                                                ! =============== 
     385 
     386      ! save the vertical diffusive trends for diagnostic 
     387      ! momentum trends 
     388      IF( l_trddyn )  THEN  
     389         ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
     390         ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
     391 
     392         CALL trd_mod(uldftrd, vldftrd, jpdtdldf, 'DYN', kt) 
     393         CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 
     394         ztdua(:,:,:) = 0.e0 
     395         ztdva(:,:,:) = 0.e0 
     396         ztdua(:,:,1) = ztsx(:,:) 
     397         ztdva(:,:,1) = ztsy(:,:) 
     398         CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 
     399         ztdua(:,:,:) = 0.e0 
     400         ztdva(:,:,:) = 0.e0 
     401         ztdua(:,:,1) = ztbx(:,:) 
     402         ztdva(:,:,1) = ztby(:,:) 
     403         CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 
     404      ENDIF 
     405 
     406      IF(l_ctl) THEN         ! print sum trends (used for debugging) 
     407         zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 
     408         zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 
     409         WRITE(numout,*) ' zdf  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl 
     410         u_ctl = zua   ;   v_ctl = zva 
     411      ENDIF 
     412 
    381413   END SUBROUTINE dyn_zdf_iso 
    382414 
Note: See TracChangeset for help on using the changeset viewer.