New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 503 for trunk/NEMO/OPA_SRC/DYN/dynzad.F90 – NEMO

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

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

File:
1 edited

Legend:

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

    r455 r503  
    44   !! Ocean dynamics : vertical advection trend 
    55   !!====================================================================== 
     6   !! History :  6.0  !  91-01  (G. Madec) Original code 
     7   !!            7.0  !  91-11  (G. Madec) 
     8   !!            7.5  !  96-01  (G. Madec) statement function for e3 
     9   !!            8.5  !  02-07  (G. Madec) j-k-i case: Original code 
     10   !!            8.5  !  02-07  (G. Madec) Free form, F90 
     11   !!---------------------------------------------------------------------- 
    612    
    713   !!---------------------------------------------------------------------- 
    8    !!   dyn_zad      : vertical advection momentum trend 
    9    !!---------------------------------------------------------------------- 
    10    !! * Modules used 
    11    USE oce             ! ocean dynamics and tracers 
    12    USE dom_oce         ! ocean space and time domain 
    13    USE in_out_manager  ! I/O manager 
    14    USE trdmod          ! ocean dynamics trends  
    15    USE trdmod_oce      ! ocean variables trends 
    16    USE flxrnf          ! ocean runoffs 
    17    USE prtctl          ! Print control 
     14   !!   dyn_zad       : vertical advection momentum trend 
     15   !!---------------------------------------------------------------------- 
     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 
     21   USE flxrnf         ! ocean runoffs 
     22   USE prtctl         ! Print control 
    1823 
    1924   IMPLICIT NONE 
    2025   PRIVATE 
    2126    
    22    !! * Accessibility 
    23    PUBLIC dyn_zad                ! routine called by step.F90 
     27   PUBLIC   dyn_zad   ! routine called by step.F90 
    2428 
    2529   !! * Substitutions 
     
    2933   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    3034   !! $Header$  
    31    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     35   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    3236   !!---------------------------------------------------------------------- 
    3337 
     
    5458      !! 
    5559      !! ** Action  : - Update (ua,va) with the vert. momentum advection trends 
    56       !!              - Save the trends in (utrd,vtrd) ('key_trddyn') 
    57       !! 
    58       !! History : 
    59       !!   6.0  !  91-01  (G. Madec) Original code 
    60       !!   7.0  !  91-11  (G. Madec) 
    61       !!   7.5  !  96-01  (G. Madec) statement function for e3 
    62       !!   8.5  !  02-07  (G. Madec) Free form, F90 
    63       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    64       !!---------------------------------------------------------------------- 
    65       !! * modules used 
    66       USE oce, ONLY:   zwuw => ta,   & ! use ta as 3D workspace 
    67                        zwvw => sa      ! use sa as 3D workspace 
    68  
    69       !! * Arguments 
    70       INTEGER, INTENT( in ) ::   kt    ! ocean time-step inedx 
    71        
    72       !! * Local declarations 
    73       INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    74       REAL(wp) ::   zvn, zua, zva      ! temporary scalars 
    75       REAL(wp), DIMENSION(jpi) ::   & 
    76          zww                           ! temporary workspace 
    77       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    78          ztdua, ztdva                  ! temporary workspace 
     60      !!              - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 
     61      !!---------------------------------------------------------------------- 
     62      USE oce, ONLY:   zwuw => ta   ! use ta as 3D workspace 
     63      USE oce, ONLY:   zwvw => sa   ! use sa as 3D workspace 
     64      !! 
     65      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
     66      !! 
     67      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
     68      REAL(wp) ::   zvn, zua, zva   ! temporary scalars 
     69      REAL(wp), DIMENSION(jpi)         ::   zww            ! 1D workspace 
     70      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    7971      !!---------------------------------------------------------------------- 
    8072       
     
    8577      ENDIF 
    8678 
    87       ! Save ua and va trends 
    88       IF( l_trddyn )   THEN 
    89          ztdua(:,:,:) = ua(:,:,:)  
    90          ztdva(:,:,:) = va(:,:,:)  
     79      IF( l_trddyn )   THEN         ! Save ua and va trends 
     80         ztrdu(:,:,:) = ua(:,:,:)  
     81         ztrdv(:,:,:) = va(:,:,:)  
    9182      ENDIF 
    9283 
     
    9485      DO jj = 2, jpjm1                                 !  Vertical slab 
    9586         !                                             ! =============== 
    96  
    97          ! Vertical momentum advection at level w and u- and v- vertical 
    98          ! ---------------------------------------------------------------- 
    99          DO jk = 2, jpkm1 
    100             ! vertical fluxes  
    101             DO ji = 2, jpi 
     87         DO jk = 2, jpkm1         ! Vertical momentum advection at uw and vw-pts 
     88            DO ji = 2, jpi              ! vertical fluxes  
    10289               zww(ji) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 
    10390            END DO 
    104             ! vertical momentum advection at w-point 
    105             DO ji = 2, jpim1 
     91            DO ji = 2, jpim1            ! vertical momentum advection at w-point 
    10692               zvn = 0.25 * e1t(ji,jj+1) * e2t(ji,jj+1) * wn(ji,jj+1,jk) 
    10793               zwuw(ji,jj,jk) = ( zww(ji+1) + zww(ji) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 
     
    10995            END DO   
    11096         END DO    
    111  
    112          ! Surface and bottom values set to zero 
    113          DO ji = 2, jpim1 
     97         DO ji = 2, jpim1               ! Surface and bottom values set to zero 
    11498            zwuw(ji,jj, 1 ) = 0.e0 
    11599            zwvw(ji,jj, 1 ) = 0.e0 
     
    117101            zwvw(ji,jj,jpk) = 0.e0 
    118102         END DO   
    119  
    120          ! Vertical momentum advection at u- and v-points 
    121          ! ---------------------------------------------- 
    122          DO jk = 1, jpkm1 
     103         ! 
     104         DO jk = 1, jpkm1         ! Vertical momentum advection at u- and v-points 
    123105            DO ji = 2, jpim1 
    124                ! vertical momentum advective trends 
     106               !                        ! vertical momentum advective trends 
    125107               zua = - ( zwuw(ji,jj,jk) + zwuw(ji,jj,jk+1) ) / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 
    126108               zva = - ( zwvw(ji,jj,jk) + zwvw(ji,jj,jk+1) ) / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 
    127                ! add the trends to the general momentum trends 
     109               !                        ! add the trends to the general momentum trends 
    128110               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    129111               va(ji,jj,jk) = va(ji,jj,jk) + zva 
     
    133115      END DO                                           !   End of slab 
    134116      !                                                ! =============== 
    135  
    136       ! save the vertical advection trends for diagnostic 
    137       ! momentum trends 
    138       IF( l_trddyn )   THEN 
    139          ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    140          ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    141  
    142          CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 
    143       ENDIF 
    144  
    145       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    146          CALL prt_ctl(tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask, & 
    147             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    148       ENDIF 
    149  
     117      ! 
     118      IF( l_trddyn ) THEN         ! save the vertical advection trends for diagnostic 
     119         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
     120         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     121         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_zad, 'DYN', kt ) 
     122      ENDIF 
     123      !                           ! Control print 
     124      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask,   & 
     125         &                       tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn' ) 
     126      ! 
    150127   END SUBROUTINE dyn_zad 
    151128 
     
    169146      !! 
    170147      !! ** Action  : - Update (ua,va) with the vert. momentum adv. trends 
    171       !!              - Save the trends in (utrd,vtrd) ('key_trddyn') 
    172       !! 
    173       !! History : 
    174       !!   8.5  !  02-07  (G. Madec)  Original code 
    175       !!---------------------------------------------------------------------- 
    176       !! * modules used 
    177       USE oce, ONLY:   zwuw => ta,   & ! use ta as 3D workspace 
    178                        zwvw => sa      ! use sa as 3D workspace 
    179       !! * Arguments 
    180       INTEGER, INTENT( in ) ::   kt    ! ocean time-step inedx 
    181        
    182       !! * Local declarations 
    183       INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    184       REAL(wp) ::   zua, zva           ! temporary scalars 
    185       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    186          zww                           ! temporary  workspace 
    187       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    188          ztdua, ztdva                  ! temporary workspace 
     148      !!              - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 
     149     !!---------------------------------------------------------------------- 
     150      USE oce, ONLY:   zwuw => ta   ! use ta as 3D workspace 
     151      USE oce, ONLY:   zwvw => sa   ! use sa as 3D workspace 
     152      !! 
     153      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
     154      !! 
     155      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
     156      REAL(wp) ::   zua, zva        ! temporary scalars 
     157      REAL(wp), DIMENSION(jpi,jpj)     ::   zww            ! 2D  workspace 
     158      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    189159      !!---------------------------------------------------------------------- 
    190160       
     
    195165      ENDIF 
    196166 
    197       ! Save ua and va trends 
    198       IF( l_trddyn )   THEN 
    199          ztdua(:,:,:) = ua(:,:,:)  
    200          ztdva(:,:,:) = va(:,:,:)  
     167      IF( l_trddyn )   THEN         ! Save ua and va trends 
     168         ztrdu(:,:,:) = ua(:,:,:)  
     169         ztrdv(:,:,:) = va(:,:,:)  
    201170      ENDIF 
    202171       
    203       ! Vertical momentum advection at level w and u- and v- vertical 
    204       ! ------------------------------------------------------------- 
    205       DO jk = 2, jpkm1 
    206          ! vertical fluxes  
    207          DO jj = 2, jpj 
    208             DO ji = fs_2, jpi   ! vector opt. 
     172      DO jk = 2, jpkm1              ! Vertical momentum advection at level w and u- and v- vertical 
     173         DO jj = 2, jpj                   ! vertical fluxes  
     174            DO ji = fs_2, jpi             ! vector opt. 
    209175               zww(ji,jj) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 
    210176            END DO 
    211177         END DO 
    212          ! vertical momentum advection at w-point 
    213          DO jj = 2, jpjm1 
    214             DO ji = fs_2, fs_jpim1   ! vector opt. 
     178         DO jj = 2, jpjm1                 ! vertical momentum advection at w-point 
     179            DO ji = fs_2, fs_jpim1        ! vector opt. 
    215180               zwuw(ji,jj,jk) = ( zww(ji+1,jj  ) + zww(ji,jj) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 
    216181               zwvw(ji,jj,jk) = ( zww(ji  ,jj+1) + zww(ji,jj) ) * ( vn(ji,jj,jk-1)-vn(ji,jj,jk) ) 
     
    218183         END DO    
    219184      END DO 
    220  
    221       ! Surface and bottom values set to zero 
    222       DO jj = 2, jpjm1 
    223          DO ji = fs_2, fs_jpim1   ! vector opt. 
     185      DO jj = 2, jpjm1              ! Surface and bottom values set to zero 
     186         DO ji = fs_2, fs_jpim1           ! vector opt. 
    224187            zwuw(ji,jj, 1 ) = 0.e0 
    225188            zwvw(ji,jj, 1 ) = 0.e0 
     
    229192      END DO 
    230193 
    231  
    232       ! Vertical momentum advection at u- and v-points 
    233       ! ---------------------------------------------- 
    234       DO jk = 1, jpkm1 
     194      DO jk = 1, jpkm1              ! Vertical momentum advection at u- and v-points 
    235195         DO jj = 2, jpjm1 
    236             DO ji = fs_2, fs_jpim1   ! vector opt. 
    237                ! vertical momentum advective trends 
     196            DO ji = fs_2, fs_jpim1       ! vector opt. 
     197               !                         ! vertical momentum advective trends 
    238198               zua = - ( zwuw(ji,jj,jk) + zwuw(ji,jj,jk+1) ) / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 
    239199               zva = - ( zwvw(ji,jj,jk) + zwvw(ji,jj,jk+1) ) / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 
    240                ! add the trends to the general momentum trends 
     200               !                         ! add the trends to the general momentum trends 
    241201               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    242202               va(ji,jj,jk) = va(ji,jj,jk) + zva 
     
    245205      END DO 
    246206 
    247       ! save the vertical advection trends for diagnostic 
    248       ! momentum trends 
    249       IF( l_trddyn )   THEN 
    250          ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    251          ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    252  
    253          CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 
    254       ENDIF 
    255  
    256       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    257          CALL prt_ctl(tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask, & 
    258             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    259       ENDIF 
    260  
     207      IF( l_trddyn ) THEN           ! save the vertical advection trends for diagnostic 
     208         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
     209         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     210         CALL trd_mod(ztrdu, ztrdv, jpdyn_trd_zad, 'DYN', kt) 
     211      ENDIF 
     212      !                             ! Control print 
     213      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask,   & 
     214         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     215      ! 
    261216   END SUBROUTINE dyn_zad 
    262217#endif 
    263218 
    264 !!====================================================================== 
     219   !!====================================================================== 
    265220END MODULE dynzad 
Note: See TracChangeset for help on using the changeset viewer.