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 7340 for branches/2015/dev_r5936_INGV1_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

Ignore:
Timestamp:
2016-11-25T16:41:40+01:00 (7 years ago)
Author:
emanuelaclementi
Message:

#1643 Correction after review in development branch 2015/dev_r5936_INGV1_WAVE

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5936_INGV1_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfqiao.F90

    r7171 r7340  
    66   !! History :  3.6  !  2014-10  (E. Clementi)  Original code 
    77   !!---------------------------------------------------------------------- 
    8    !!---------------------------------------------------------------------- 
    9    !!   qiao_init       
    108   !!   zdf_qiao        : compute Qiao parameters 
    119   !!---------------------------------------------------------------------- 
    1210 
    13    USE iom             ! I/O manager library 
    1411   USE in_out_manager  ! I/O manager 
    1512   USE lib_mpp         ! distribued memory computing library 
     
    1815   USE sbcwave         ! wave module 
    1916   USE dom_oce 
     17   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)   
    2018    
    21    !!---------------------------------------------------------------------- 
    22    !!   qiao_init       : compute QBv: Qiao terms to be added to vertical eddy 
    23    !!                     diffusivity and viscosity coefficients  
    24    !!---------------------------------------------------------------------- 
    25  
    2619   IMPLICIT NONE 
    2720   PRIVATE 
    2821 
    29    PUBLIC   zdf_qiao    ! routine called in zdf_ric 
     22   PUBLIC zdf_qiao    ! routine called in step 
    3023 
    31    REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:,:)     :: QBv, QBvu, QBvv 
     24   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: qbv, qbvu, qbvv 
    3225 
    3326   !! * Substitutions 
    3427#  include "domzgr_substitute.h90" 
     28#  include "vectopt_loop_substitute.h90" 
    3529   !!---------------------------------------------------------------------- 
    3630   !! NEMO/OPA 4.0 , NEMO Consortium (2011)  
     
    4539      !!                     ***  ROUTINE zdf_qiao *** 
    4640      !! 
    47       !! ** Purpose :Compute the Qiao term (QBv) to be added to 
     41      !! ** Purpose :Compute the Qiao term (qbv) to be added to 
    4842      !!             vertical viscosity and diffusivity coeffs.   
    4943      !! 
    50       !! ** Method  :QBv = alpha * A * Us(0) * exp (3 * k * z) 
     44      !! ** Method  :qbv = alpha * A * Us(0) * exp (3 * k * z) 
    5145      !!              
    5246      !! ** action  :Compute the Qiao wave dependent term  
     
    5650      INTEGER, INTENT( in  ) ::  kt   ! ocean time step 
    5751      ! 
    58       INTEGER                ::  jj, ji, jk 
     52      INTEGER :: jj, ji, jk   ! dummy loop indices 
    5953      !!--------------------------------------------------------------------- 
    6054      ! 
    61       ! 
    62       !                                         ! -------------------- ! 
    6355      IF( kt == nit000 ) THEN                   ! First call kt=nit000 ! 
    64          ALLOCATE(QBv(jpi,jpj,jpk))             ! -------------------- ! 
    65          ALLOCATE(QBvu(jpi,jpj,jpk)) 
    66          ALLOCATE(QBvv(jpi,jpj,jpk)) 
     56         IF( .NOT. ( ln_wave .AND. ln_sdw ) )   & 
     57            &   CALL ctl_stop ( 'Ask for wave Qiao enhanced turbulence but ln_wave   & 
     58            &                    and ln_sdw have to be activated') 
     59         IF( zdf_qiao_alloc() /= 0 )   & 
     60            &   CALL ctl_stop( 'STOP', 'zdf_qiao : unable to allocate arrays' ) 
    6761      ENDIF 
    6862 
    69       QBv (:,:,:) = 0.0 
    70       QBvu(:,:,:) = 0.0 
    71       QBvv(:,:,:) = 0.0 
    72  
    7363      ! 
    74       ! Compute the Qiao term Bv (QBv) to be added to 
     64      ! Compute the Qiao term Bv (qbv) to be added to 
    7565      ! vertical viscosity and diffusivity 
    76       ! QBv = alpha * A * Us(0) * exp (3 * k * z) 
     66      ! qbv = alpha * A * Us(0) * exp (3 * k * z) 
    7767      ! alpha here is set to 1 
    7868      !--------------------------------------------------------------------------------- 
    7969      ! 
    80       IF ( ln_wave ) THEN 
    81          DO jk = 1, jpk 
    82             DO jj = 1, jpjm1 
    83                DO ji = 1, jpim1 
    84                   QBv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) *       & 
    85                &              exp(3.0 * wnum(ji,jj) *                                &                      
    86                &              (-MIN( fsdept(ji  ,jj  ,jk) , fsdept(ji+1,jj  ,jk),    & 
    87                &                     fsdept(ji  ,jj+1,jk) , fsdept(ji+1,jj+1,jk)))) 
    88                END DO 
     70      DO jk = 1, jpk 
     71         DO jj = 1, jpjm1 
     72            DO ji = 1, fs_jpim1 
     73               qbv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) *           & 
     74            &                  EXP(3.0 * wnum(ji,jj) *                                &                      
     75            &                  (-MIN( fsdepw(ji  ,jj  ,jk), fsdepw(ji+1,jj  ,jk),     & 
     76            &                         fsdepw(ji  ,jj+1,jk), fsdepw(ji+1,jj+1,jk))))   & 
     77            &                          * wmask(ji,jj,jk) 
    8978            END DO 
    9079         END DO 
    91  
    92          QBv(jpi,:,:)=QBv(jpim1,:,:) 
    93          QBv(:,jpj,:)=QBv(:,jpjm1,:) 
    94  
    95          ! 
    96          ! Interpolate Qiao parameter QBv into the grid_U and grid_V 
    97          !------------------------------------------------- 
    98          ! 
    99          DO jk = 1, jpk 
    100             DO jj = 1, jpjm1 
    101                DO ji = 1, jpim1 
    102                   QBvu(ji,jj,jk) = 0.5 *  umask(ji,jj,jk)  *               & 
    103                &           ( QBv(ji  ,jj,jk) * tmask(ji  ,jj,jk)           & 
    104                &           + QBv(ji+1,jj,jk) * tmask(ji+1,jj,jk) ) 
    105                   QBvv(ji,jj,jk) = 0.5 *  vmask(ji,jj,jk)  *               & 
    106                &           ( QBv(ji,jj  ,jk) * tmask(ji,jj  ,jk)           & 
    107                &           + QBv(ji,jj+1,jk) * tmask(ji,jj+1,jk) ) 
    108                END DO 
     80      END DO 
     81      ! 
     82      CALL lbc_lnk( qbv, 'W', 1. )   ! Lateral boundary conditions 
     83          
     84      ! 
     85      ! Interpolate Qiao parameter qbv into the grid_U and grid_V 
     86      !---------------------------------------------------------- 
     87      ! 
     88      DO jk = 1, jpk 
     89         DO jj = 1, jpjm1 
     90            DO ji = 1, fs_jpim1 
     91               qbvu(ji,jj,jk) = 0.5 * wumask(ji,jj,jk)  *              &   
     92            &                  ( qbv(ji,jj,jk) + qbv(ji+1,jj  ,jk) ) 
     93               qbvv(ji,jj,jk) = 0.5 * wvmask(ji,jj,jk)  *              & 
     94            &                  ( qbv(ji,jj,jk) + qbv(ji  ,jj+1,jk) ) 
    10995            END DO 
    11096         END DO 
    111          !  
    112          QBvu(jpi,:,:)=QBvu(jpim1,:,:) 
    113          QBvu(:,jpj,:)=QBvu(:,jpjm1,:) 
    114          QBvv(jpi,:,:)=QBvv(jpim1,:,:) 
    115          QBvv(:,jpj,:)=QBvv(:,jpjm1,:) 
     97      END DO 
     98      !  
     99      CALL lbc_lnk( qbvu, 'U', 1. ) ; CALL lbc_lnk( qbvv, 'V', 1. )   ! Lateral boundary conditions 
    116100 
    117         ELSE 
    118            CALL ctl_stop( 'STOP', 'To use Qiao formulation you have to set: ln_wave=.true.') 
    119         ENDIF 
    120         ! 
     101      ! Enhance vertical mixing coeff.          
     102      !------------------------------- 
     103      ! 
     104      DO jk = 1, jpkm1 
     105         DO jj = 1, jpj 
     106            DO ji = 1, jpi 
     107               avmu(ji,jj,jk) = ( avmu(ji,jj,jk) + qbvu(ji,jj,jk) ) * umask(ji,jj,jk) 
     108               avmv(ji,jj,jk) = ( avmv(ji,jj,jk) + qbvv(ji,jj,jk) ) * vmask(ji,jj,jk) 
     109               avt (ji,jj,jk) = ( avt (ji,jj,jk) + qbv (ji,jj,jk) ) * tmask(ji,jj,jk) 
     110            END DO 
     111         END DO 
     112      END DO 
     113      ! 
    121114   END SUBROUTINE zdf_qiao 
     115 
     116   INTEGER FUNCTION zdf_qiao_alloc() 
     117      !!---------------------------------------------------------------------- 
     118      !!                ***  FUNCTION zdf_qiao_alloc  *** 
     119      !!---------------------------------------------------------------------- 
     120      ALLOCATE( qbv(jpi,jpj,jpk), qbvu(jpi,jpj,jpk), qbvv(jpi,jpj,jpk),   & 
     121         &      STAT = zdf_qiao_alloc ) 
     122      ! 
     123      IF( lk_mpp             )  CALL mpp_sum ( zdf_qiao_alloc ) 
     124      IF( zdf_qiao_alloc > 0 )  CALL ctl_warn('zdf_qiao_alloc: allocation of arrays failed.') 
     125      ! 
     126   END FUNCTION zdf_qiao_alloc 
    122127       
    123128   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.