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/dynhpg.F90 – NEMO

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

CT : UPDATE151 : New trends organization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DYN/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) 
Note: See TracChangeset for help on using the changeset viewer.