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

Ignore:
Timestamp:
2007-10-16T13:03:55+02:00 (17 years ago)
Author:
smasson
Message:

finalize the first set of modifications related to ticket:3

File:
1 edited

Legend:

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

    r708 r717  
    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  !  05-11  (V. Garnier) Surface pressure gradient organization 
    9    !!            " "  !  06-04  (R. Benshila, G. Madec) Step reorganization 
     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 
    1012   !!---------------------------------------------------------------------- 
    1113 
     
    1416   !!                  vertical advection trends using a seconder order 
    1517   !!                  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) 
    1620   !!---------------------------------------------------------------------- 
    1721   USE oce             ! ocean dynamics and active tracers 
     
    2125   USE trdmod_oce      ! ocean variables trends 
    2226   USE trdmod          ! ocean active tracers trends  
     27   USE closea          ! closed sea 
    2328   USE trabbl          ! advective term in the BBL 
    2429   USE ocfzpt          ! 
     30   USE sbcrnf          ! river runoffs 
    2531   USE in_out_manager  ! I/O manager 
    2632   USE lib_mpp 
     
    3238   PRIVATE 
    3339 
    34    PUBLIC   tra_adv_cen2   ! routine called by step.F90 
     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) 
    3545 
    3646   REAL(wp), DIMENSION(jpi,jpj) ::   btr2   ! inverse of T-point surface [1/(e1t*e2t)] 
     
    4050#  include "vectopt_loop_substitute.h90" 
    4151   !!---------------------------------------------------------------------- 
    42    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     52   !!   OPA 9.0 , LOCEAN-IPSL (2006)  
    4353   !! $Id$ 
    4454   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     
    119129      !! 
    120130      INTEGER  ::   ji, jj, jk                           ! dummy loop indices 
    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  
     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 
    131140      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zww, ztrds         !  "      " 
    132141      !!---------------------------------------------------------------------- 
     
    137146         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~   Vector optimization case' 
    138147         IF(lwp) WRITE(numout,*) 
    139          !  
    140          btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) 
     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 
    141154      ENDIF 
    142155 
     
    146159         DO jj = 1, jpj 
    147160            DO ji = 1, jpi 
    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 
     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 
    150164#if defined key_ice_lim 
    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) ) ) & 
     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)   & 
    154167#endif 
    155168                  &                  ) 
     
    158171      END DO 
    159172 
    160  
    161       !  Horizontal advective fluxes 
    162       ! ----------------------------- 
     173      ! I. Horizontal advective fluxes 
     174      ! ------------------------------ 
     175      !  Second order centered tracer flux at u and v-points 
     176      ! ----------------------------------------------------- 
    163177      !                                                ! =============== 
    164178      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    208222               zbtr = btr2(ji,jj) / fse3t(ji,jj,jk) 
    209223#endif 
    210                ! horizontal advective trends 
    211                zta = - zbtr * (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk)   & 
     224               zta = - zbtr * (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk)   &    ! horizontal advective trends 
    212225                  &            + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk)  ) 
    213226               zsa = - zbtr * (  zww(ji,jj,jk) - zww(ji-1,jj  ,jk)   & 
    214227                  &            + zwz(ji,jj,jk) - zwz(ji  ,jj-1,jk)  ) 
    215                ! add it to the general tracer trends 
    216                ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     228               ta(ji,jj,jk) = ta(ji,jj,jk) + zta                          ! add it to the general tracer trends 
    217229               sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
    218230            END DO 
     
    279291         &                       tab3d_2=sa, clinfo2=            ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    280292 
    281       ! 4. "zonal" mean advective heat and salt transport  
    282       ! ------------------------------------------------- 
    283  
     293      ! "zonal" mean advective heat and salt transport 
    284294      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
    285295         IF( lk_zco ) THEN 
     
    313323      ENDIF 
    314324 
    315       ! 1. Vertical advective fluxes 
     325      ! 1. Vertical advective fluxes (Second order centered tracer flux at w-point) 
    316326      ! ---------------------------- 
    317       ! Second order centered tracer flux at w-point 
    318327      DO jk = 2, jpk 
    319328         DO jj = 2, jpjm1 
    320329            DO ji = fs_2, fs_jpim1   ! vector opt. 
    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 ) 
     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 
    327333               zfm_w = zhw - ABS( zhw ) 
    328334               zupst = zfp_w * tb(ji,jj,jk) + zfm_w * tb(ji,jj,jk-1) 
    329335               zupss = zfp_w * sb(ji,jj,jk) + zfm_w * sb(ji,jj,jk-1) 
    330                ! centered scheme 
    331                zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) ) 
     336               zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) )         ! centered scheme 
    332337               zcens = zhw * ( sn(ji,jj,jk) + sn(ji,jj,jk-1) ) 
    333                ! mixed centered / upstream scheme 
    334                zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent 
     338               zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent      ! mixed centered / upstream scheme 
    335339               zwy(ji,jj,jk) = zcofk * zupss + (1.-zcofk) * zcens 
    336340            END DO 
     
    344348            DO ji = fs_2, fs_jpim1   ! vector opt. 
    345349               ze3tr = 1. / fse3t(ji,jj,jk) 
    346                ! vertical advective trends 
    347                zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) 
     350               zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) )     ! vertical advective trends 
    348351               zsa = - ze3tr * ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) 
    349                ! add it to the general tracer trends 
    350                ta(ji,jj,jk) =  ta(ji,jj,jk) + zta 
     352               ta(ji,jj,jk) =  ta(ji,jj,jk) + zta                      ! add it to the general tracer trends 
    351353               sa(ji,jj,jk) =  sa(ji,jj,jk) + zsa 
    352354            END DO 
     
    387389      ! 
    388390   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 
    389452 
    390453   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.