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 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_exp.F90 – NEMO

Ignore:
Timestamp:
2010-12-27T18:33:53+01:00 (13 years ago)
Author:
rblod
Message:

Update NEMOGCM from branch nemo_v3_3_beta

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_exp.F90

    • Property svn:eol-style deleted
    r1537 r2528  
    44   !! Ocean dynamics:  vertical component(s) of the momentum mixing trend 
    55   !!============================================================================== 
    6    !! History :      !  90-10  (B. Blanke)  Original code 
    7    !!                !  97-05  (G. Madec)  vertical component of isopycnal 
    8    !!           8.5  !  02-08  (G. Madec)  F90: Free form and module 
     6   !! History :  OPA  !  1990-10  (B. Blanke)  Original code 
     7   !!            8.0  !  1997-05  (G. Madec)  vertical component of isopycnal 
     8   !!   NEMO     1.0  !  1002-08  (G. Madec)  F90: Free form and module 
     9   !!            3.3  !  2010-04  (M. Leclair, G. Madec)  Forcing averaged over 2 time steps 
    910   !!---------------------------------------------------------------------- 
    1011 
     
    1314   !!                  sion using an explicit time-stepping scheme. 
    1415   !!---------------------------------------------------------------------- 
    15    !! * Modules used 
    1616   USE oce             ! ocean dynamics and tracers 
    1717   USE dom_oce         ! ocean space and time domain 
     
    2424   PRIVATE 
    2525 
    26    !! * Routine accessibility 
    27    PUBLIC dyn_zdf_exp    ! called by step.F90 
     26   PUBLIC   dyn_zdf_exp   ! called by step.F90 
    2827 
    2928   !! * Substitutions 
     
    3130#  include "vectopt_loop_substitute.h90" 
    3231   !!---------------------------------------------------------------------- 
    33    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     32   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3433   !! $Id$ 
    35    !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     34   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    3635   !!---------------------------------------------------------------------- 
    3736 
     
    4746      !!      technique. The vertical diffusion of momentum is given by: 
    4847      !!         diffu = dz( avmu dz(u) ) = 1/e3u dk+1( avmu/e3uw dk(ub) ) 
    49       !!      Surface boundary conditions: wind stress input 
     48      !!      Surface boundary conditions: wind stress input (averaged over kt-1/2 & kt+1/2) 
    5049      !!      Bottom boundary conditions : bottom stress (cf zdfbfr.F90) 
    5150      !!      Add this trend to the general trend ua : 
     
    5453      !! ** Action : - Update (ua,va) with the vertical diffusive trend 
    5554      !!--------------------------------------------------------------------- 
    56       !! * Arguments 
    57       INTEGER , INTENT( in ) ::   kt                           ! ocean time-step index 
    58       REAL(wp), INTENT( in ) ::   p2dt                         ! time-step  
    59  
    60       !! * Local declarations 
    61       INTEGER ::   ji, jj, jk, jl                              ! dummy loop indices 
    62       REAL(wp) ::   zrau0r, zlavmr, zua, zva                   ! temporary scalars 
    63       REAL(wp), DIMENSION(jpi,jpk) ::   zwx, zwy, zwz, zww     ! temporary workspace arrays 
     55      INTEGER , INTENT(in) ::   kt     ! ocean time-step index 
     56      REAL(wp), INTENT(in) ::   p2dt   ! time-step  
     57      !! 
     58      INTEGER ::   ji, jj, jk, jl                            ! dummy loop indices 
     59      REAL(wp) ::   zrau0r, zlavmr, zua, zva                 ! temporary scalars 
     60      REAL(wp), DIMENSION(jpi,jpk) ::   zwx, zwy, zwz, zww   ! 2D workspace 
    6461      !!---------------------------------------------------------------------- 
    6562 
    6663      IF( kt == nit000 ) THEN 
    6764         IF(lwp) WRITE(numout,*) 
    68          IF(lwp) WRITE(numout,*) 'dyn_zdf_exp : vertical momentum diffusion explicit operator' 
     65         IF(lwp) WRITE(numout,*) 'dyn_zdf_exp : vertical momentum diffusion - explicit operator' 
    6966         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 
    7067      ENDIF 
    7168 
    72       ! Local constant initialization 
    73       ! ----------------------------- 
    74       zrau0r = 1. / rau0                                   ! inverse of the reference density 
    75       zlavmr = 1. / float( nn_zdfexp )                      ! inverse of the number of sub time step 
     69      zrau0r = 1. / rau0                              ! Local constant initialization 
     70      zlavmr = 1. / REAL( nn_zdfexp ) 
    7671 
    77       !                                                ! =============== 
    78       DO jj = 2, jpjm1                                 !  Vertical slab 
    79          !                                             ! =============== 
    80  
    81          ! Surface boundary condition 
    82          DO ji = 2, jpim1 
    83             zwy(ji,1) = utau(ji,jj) * zrau0r 
    84             zww(ji,1) = vtau(ji,jj) * zrau0r 
     72      !                                               ! =============== 
     73      DO jj = 2, jpjm1                                !  Vertical slab 
     74         !                                            ! =============== 
     75         DO ji = 2, jpim1         ! Surface boundary condition 
     76            zwy(ji,1) = ( utau_b(ji,jj) + utau(ji,jj) ) * zrau0r 
     77            zww(ji,1) = ( vtau_b(ji,jj) + vtau(ji,jj) ) * zrau0r 
    8578         END DO   
    86  
    87          ! Initialization of x, z and contingently trends array 
    88          DO jk = 1, jpk 
     79         DO jk = 1, jpk         ! Initialization of x, z and contingently trends array 
    8980            DO ji = 2, jpim1 
    9081               zwx(ji,jk) = ub(ji,jj,jk) 
     
    9283            END DO   
    9384         END DO   
    94  
    95          ! Time splitting loop 
    96          DO jl = 1, nn_zdfexp 
    97  
    98             ! First vertical derivative 
    99             DO jk = 2, jpk 
     85         ! 
     86         DO jl = 1, nn_zdfexp     ! Time splitting loop 
     87            ! 
     88            DO jk = 2, jpk            ! First vertical derivative 
    10089               DO ji = 2, jpim1 
    10190                  zwy(ji,jk) = avmu(ji,jj,jk) * ( zwx(ji,jk-1) - zwx(ji,jk) ) / fse3uw(ji,jj,jk)  
     
    10392               END DO   
    10493            END DO   
    105  
    106             ! Second vertical derivative and trend estimation at kt+l*rdt/nn_zdfexp 
    107             DO jk = 1, jpkm1 
     94            DO jk = 1, jpkm1          ! Second vertical derivative and trend estimation at kt+l*rdt/nn_zdfexp 
    10895               DO ji = 2, jpim1 
    109                   zua = zlavmr*( zwy(ji,jk) - zwy(ji,jk+1) ) / fse3u(ji,jj,jk) 
    110                   zva = zlavmr*( zww(ji,jk) - zww(ji,jk+1) ) / fse3v(ji,jj,jk) 
     96                  zua = zlavmr * ( zwy(ji,jk) - zwy(ji,jk+1) ) / fse3u(ji,jj,jk) 
     97                  zva = zlavmr * ( zww(ji,jk) - zww(ji,jk+1) ) / fse3v(ji,jj,jk) 
    11198                  ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    11299                  va(ji,jj,jk) = va(ji,jj,jk) + zva 
    113  
    114                   zwx(ji,jk) = zwx(ji,jk) + p2dt*zua*umask(ji,jj,jk) 
    115                   zwz(ji,jk) = zwz(ji,jk) + p2dt*zva*vmask(ji,jj,jk) 
     100                  ! 
     101                  zwx(ji,jk) = zwx(ji,jk) + p2dt * zua * umask(ji,jj,jk) 
     102                  zwz(ji,jk) = zwz(ji,jk) + p2dt * zva * vmask(ji,jj,jk) 
    116103               END DO   
    117104            END DO   
    118  
     105            ! 
    119106         END DO   
    120  
    121          !                                             ! =============== 
    122       END DO                                           !   End of slab 
    123       !                                                ! =============== 
    124  
     107         !                                            ! =============== 
     108      END DO                                          !   End of slab 
     109      !                                               ! =============== 
    125110   END SUBROUTINE dyn_zdf_exp 
    126111 
Note: See TracChangeset for help on using the changeset viewer.