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 719 for trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90 – NEMO

Ignore:
Timestamp:
2007-10-16T16:59:56+02:00 (17 years ago)
Author:
ctlod
Message:

get back to the nemo_v2_3 version for trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90

    • Property svn:keywords changed from Id to Author Date Id Revision
    r717 r719  
    11MODULE traadv_cen2 
    2    !!====================================================================== 
    3    !!                     ***  MODULE  traadv_cen2  *** 
     2   !!============================================================================== 
     3   !!                       ***  MODULE  traadv_cen2  *** 
    44   !! Ocean active tracers:  horizontal & vertical advective trend 
    5    !!====================================================================== 
    6    !! History :   8.2  !  01-08  (G. Madec, E. Durand)  trahad+trazad=traadv  
    7    !!             8.5  !  02-06  (G. Madec)  F90: Free form and module 
    8    !!             9.0  !  04-08  (C. Talandier) New trends organization 
    9    !!             " "  !  05-11  (V. Garnier) Surface pressure gradient organization 
    10    !!             " "  !  06-04  (R. Benshila, G. Madec) Step reorganization 
    11    !!             " "  !  06-07  (G. madec)  add ups_orca_set routine 
     5   !!============================================================================== 
     6   !! History :  8.2  !  01-08  (G. Madec, E. Durand)  trahad+trazad = traadv  
     7   !!            8.5  !  02-06  (G. Madec)  F90: Free form and module 
     8   !!            9.0  !  05-11  (V. Garnier) Surface pressure gradient organization 
     9   !!            " "  !  06-04  (R. Benshila, G. Madec) Step reorganization 
    1210   !!---------------------------------------------------------------------- 
    1311 
     
    1614   !!                  vertical advection trends using a seconder order 
    1715   !!                  centered scheme. (k-j-i loops) 
    18    !!   ups_orca_set : allow mixed upstream/centered scheme in specific 
    19    !!                  area (set for orca 2 and 4 only) 
    2016   !!---------------------------------------------------------------------- 
    2117   USE oce             ! ocean dynamics and active tracers 
    2218   USE dom_oce         ! ocean space and time domain 
    23    USE sbc_oce         ! surface boundary condition: ocean 
    24    USE dynspg_oce      ! choice/control of key cpp for surface pressure gradient 
     19   USE trdmod          ! ocean active tracers trends  
    2520   USE trdmod_oce      ! ocean variables trends 
    26    USE trdmod          ! ocean active tracers trends  
    27    USE closea          ! closed sea 
     21   USE flxrnf          ! 
    2822   USE trabbl          ! advective term in the BBL 
    2923   USE ocfzpt          ! 
    30    USE sbcrnf          ! river runoffs 
    31    USE in_out_manager  ! I/O manager 
    3224   USE lib_mpp 
    3325   USE lbclnk          ! ocean lateral boundary condition (or mpp link) 
     26   USE in_out_manager  ! I/O manager 
    3427   USE diaptr          ! poleward transport diagnostics 
     28   USE dynspg_oce      ! choice/control of key cpp for surface pressure gradient 
    3529   USE prtctl          ! Print control 
    3630 
     
    3832   PRIVATE 
    3933 
    40    PUBLIC   tra_adv_cen2    ! routine called by step.F90 
    41    PUBLIC   ups_orca_set    ! routine used by traadv_cen2_jki.F90 
    42  
    43    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   upsmsk    !: mixed upstream/centered scheme near some straits  
    44    !                                                   !  and in closed seas (orca 2 and 4 configurations) 
     34   PUBLIC   tra_adv_cen2   ! routine called by step.F90 
    4535 
    4636   REAL(wp), DIMENSION(jpi,jpj) ::   btr2   ! inverse of T-point surface [1/(e1t*e2t)] 
     
    5040#  include "vectopt_loop_substitute.h90" 
    5141   !!---------------------------------------------------------------------- 
    52    !!   OPA 9.0 , LOCEAN-IPSL (2006)  
    53    !! $Id$ 
     42   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     43   !! $Header$  
    5444   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    5545   !!---------------------------------------------------------------------- 
     
    129119      !! 
    130120      INTEGER  ::   ji, jj, jk                           ! dummy loop indices 
    131       REAL(wp) ::   zta, zsa, zbtr, zhw, ze3tr,       &  ! temporary scalars 
    132          &          zfp_ui, zfp_vj, zfp_w , zfui  ,   &  !    "         " 
    133          &          zfm_ui, zfm_vj, zfm_w , zfvj  ,   &  !    "         " 
    134          &          zcofi , zcofj , zcofk ,           &  !    "         " 
    135          &          zupsut, zupsus, zcenut, zcenus,   &  !    "         " 
    136          &          zupsvt, zupsvs, zcenvt, zcenvs,   &  !    "         " 
    137          &          zupst , zupss , zcent , zcens ,   &  !    "         " 
    138          &          z_hdivn_x, z_hdivn_y, z_hdivn  
    139       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwz, ztrdt, zind   ! 3D workspace 
     121      REAL(wp) ::                           & 
     122         zbtr, zta, zsa, zfui, zfvj,        &  ! temporary scalars 
     123         zhw, ze3tr, zcofi, zcofj,          &  !    "         " 
     124         zupsut, zupsvt, zupsus, zupsvs,    &  !    "         " 
     125         zfp_ui, zfp_vj, zfm_ui, zfm_vj,    &  !    "         " 
     126         zcofk, zupst, zupss, zcent,        &  !    "         " 
     127         zcens, zfp_w, zfm_w,               &  !    "         " 
     128         zcenut, zcenvt, zcenus, zcenvs,    &  !    "         " 
     129         z_hdivn_x, z_hdivn_y, z_hdivn 
     130      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwz, ztrdt, zind   ! 3D workspace  
    140131      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zww, ztrds         !  "      " 
    141132      !!---------------------------------------------------------------------- 
     
    146137         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~   Vector optimization case' 
    147138         IF(lwp) WRITE(numout,*) 
    148          ! 
    149          upsmsk(:,:) = 0.e0                              ! not upstream by default 
    150          IF( cp_cfg == "orca" )   CALL ups_orca_set      ! set mixed Upstream/centered scheme near some straits 
    151          !                                               ! and in closed seas (orca2 and orca4 only) 
    152          !    
    153          btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) )        ! inverse of T-point surface 
     139         !  
     140         btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) 
    154141      ENDIF 
    155142 
     
    159146         DO jj = 1, jpj 
    160147            DO ji = 1, jpi 
    161                zind(ji,jj,jk) = MAX (   & 
    162                   rnfmsk(ji,jj) * rnfmsk_z(jk),      &  ! near runoff mouths (& closed sea outflows) 
    163                   upsmsk(ji,jj)                      &  ! some of some straits 
     148               zind(ji,jj,jk) =  MAX ( upsrnfh(ji,jj) * upsrnfz(jk),     &  ! changing advection scheme near runoff 
     149                  &                    upsadv(ji,jj)                     &  ! in the vicinity of some straits 
    164150#if defined key_ice_lim 
    165                   !                                     ! below ice covered area (if tn < "freezing"+0.1 ) 
    166                   , MAX(  0., SIGN( 1., fzptn(ji,jj) + 0.1 - tn(ji,jj,jk) )  ) * tmask(ji,jj,jk)   & 
     151                  &                  , tmask(ji,jj,jk)                   &  ! half upstream tracer fluxes 
     152                  &                  * MAX( 0., SIGN( 1., fzptn(ji,jj)   &  ! if tn < ("freezing"+0.1 ) 
     153                  &                                +0.1-tn(ji,jj,jk) ) ) & 
    167154#endif 
    168155                  &                  ) 
     
    171158      END DO 
    172159 
    173       ! I. Horizontal advective fluxes 
    174       ! ------------------------------ 
    175       !  Second order centered tracer flux at u and v-points 
    176       ! ----------------------------------------------------- 
     160 
     161      !  Horizontal advective fluxes 
     162      ! ----------------------------- 
    177163      !                                                ! =============== 
    178164      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    222208               zbtr = btr2(ji,jj) / fse3t(ji,jj,jk) 
    223209#endif 
    224                zta = - zbtr * (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk)   &    ! horizontal advective trends 
     210               ! horizontal advective trends 
     211               zta = - zbtr * (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk)   & 
    225212                  &            + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk)  ) 
    226213               zsa = - zbtr * (  zww(ji,jj,jk) - zww(ji-1,jj  ,jk)   & 
    227214                  &            + zwz(ji,jj,jk) - zwz(ji  ,jj-1,jk)  ) 
    228                ta(ji,jj,jk) = ta(ji,jj,jk) + zta                          ! add it to the general tracer trends 
     215               ! add it to the general tracer trends 
     216               ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
    229217               sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
    230218            END DO 
     
    291279         &                       tab3d_2=sa, clinfo2=            ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    292280 
    293       ! "zonal" mean advective heat and salt transport 
     281      ! 4. "zonal" mean advective heat and salt transport  
     282      ! ------------------------------------------------- 
     283 
    294284      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
    295285         IF( lk_zco ) THEN 
     
    323313      ENDIF 
    324314 
    325       ! 1. Vertical advective fluxes (Second order centered tracer flux at w-point) 
     315      ! 1. Vertical advective fluxes 
    326316      ! ---------------------------- 
     317      ! Second order centered tracer flux at w-point 
    327318      DO jk = 2, jpk 
    328319         DO jj = 2, jpjm1 
    329320            DO ji = fs_2, fs_jpim1   ! vector opt. 
    330                zcofk = MAX( zind(ji,jj,jk-1), zind(ji,jj,jk) )         ! upstream indicator 
    331                zhw = 0.5 * pwn(ji,jj,jk)                               ! velocity * 1/2 
    332                zfp_w = zhw + ABS( zhw )                                ! upstream scheme 
     321               ! upstream indicator 
     322               zcofk = MAX( zind(ji,jj,jk-1), zind(ji,jj,jk) ) 
     323               ! velocity * 1/2 
     324               zhw = 0.5 * pwn(ji,jj,jk) 
     325               ! upstream scheme 
     326               zfp_w = zhw + ABS( zhw ) 
    333327               zfm_w = zhw - ABS( zhw ) 
    334328               zupst = zfp_w * tb(ji,jj,jk) + zfm_w * tb(ji,jj,jk-1) 
    335329               zupss = zfp_w * sb(ji,jj,jk) + zfm_w * sb(ji,jj,jk-1) 
    336                zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) )         ! centered scheme 
     330               ! centered scheme 
     331               zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) ) 
    337332               zcens = zhw * ( sn(ji,jj,jk) + sn(ji,jj,jk-1) ) 
    338                zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent      ! mixed centered / upstream scheme 
     333               ! mixed centered / upstream scheme 
     334               zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent 
    339335               zwy(ji,jj,jk) = zcofk * zupss + (1.-zcofk) * zcens 
    340336            END DO 
     
    348344            DO ji = fs_2, fs_jpim1   ! vector opt. 
    349345               ze3tr = 1. / fse3t(ji,jj,jk) 
    350                zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) )     ! vertical advective trends 
     346               ! vertical advective trends 
     347               zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) 
    351348               zsa = - ze3tr * ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) 
    352                ta(ji,jj,jk) =  ta(ji,jj,jk) + zta                      ! add it to the general tracer trends 
     349               ! add it to the general tracer trends 
     350               ta(ji,jj,jk) =  ta(ji,jj,jk) + zta 
    353351               sa(ji,jj,jk) =  sa(ji,jj,jk) + zsa 
    354352            END DO 
     
    389387      ! 
    390388   END SUBROUTINE tra_adv_cen2 
    391     
    392     
    393    SUBROUTINE ups_orca_set 
    394       !!---------------------------------------------------------------------- 
    395       !!                  ***  ROUTINE ups_orca_set  *** 
    396       !!        
    397       !! ** Purpose :   add a portion of upstream scheme in area where the 
    398       !!                centered scheme generates too strong overshoot 
    399       !! 
    400       !! ** Method  :   orca (R4 and R2) confiiguration setting. Set upsmsk 
    401       !!                array to nozero value in some straith.  
    402       !! 
    403       !! ** Action : - upsmsk set to 1 at some strait, 0 elsewhere for orca 
    404       !!---------------------------------------------------------------------- 
    405       INTEGER  ::   ii0, ii1, ij0, ij1      ! temporary integers 
    406       !!---------------------------------------------------------------------- 
    407        
    408       ! mixed upstream/centered scheme near river mouths 
    409       ! ------------------------------------------------ 
    410       SELECT CASE ( jp_cfg ) 
    411       !                                        ! ======================= 
    412       CASE ( 4 )                               !  ORCA_R4 configuration  
    413          !                                     ! ======================= 
    414          !                                          ! Gibraltar Strait 
    415          ii0 =  70   ;   ii1 =  71 
    416          ij0 =  52   ;   ij1 =  53   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 
    417          ! 
    418          !                                     ! ======================= 
    419       CASE ( 2 )                               !  ORCA_R2 configuration  
    420          !                                     ! ======================= 
    421          !                                          ! Gibraltar Strait 
    422          ij0 = 102   ;   ij1 = 102 
    423          ii0 = 138   ;   ii1 = 138   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.20 
    424          ii0 = 139   ;   ii1 = 139   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40 
    425          ii0 = 140   ;   ii1 = 140   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 
    426          ij0 = 101   ;   ij1 = 102 
    427          ii0 = 141   ;   ii1 = 141   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 
    428          !                                          ! Bab el Mandeb Strait 
    429          ij0 =  87   ;   ij1 =  88 
    430          ii0 = 164   ;   ii1 = 164   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.10 
    431          ij0 =  88   ;   ij1 =  88 
    432          ii0 = 163   ;   ii1 = 163   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 
    433          ii0 = 162   ;   ii1 = 162   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40 
    434          ii0 = 160   ;   ii1 = 161   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 
    435          ij0 =  89   ;   ij1 =  89 
    436          ii0 = 158   ;   ii1 = 160   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 
    437          ij0 =  90   ;   ij1 =  90 
    438          ii0 = 160   ;   ii1 = 160   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 
    439          !                                          ! Sound Strait 
    440          ij0 = 116   ;   ij1 = 116 
    441          ii0 = 144   ;   ii1 = 144   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 
    442          ii0 = 145   ;   ii1 = 147   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 
    443          ii0 = 148   ;   ii1 = 148   ;   upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 
    444          ! 
    445       END SELECT  
    446        
    447       ! mixed upstream/centered scheme over closed seas 
    448       ! ----------------------------------------------- 
    449       CALL clo_ups( upsmsk(:,:) ) 
    450       ! 
    451    END SUBROUTINE ups_orca_set 
    452389 
    453390   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.