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 3884 – NEMO

Changeset 3884


Ignore:
Timestamp:
2013-04-22T13:25:29+02:00 (11 years ago)
Author:
acc
Message:

Branch 2013/dev_r3858_NOC_ZTC, #863. Correction to sst2 and sss3 terms in diawri.F90 and code tidying in domvvl.F90 with added support for other ORCA grids

Location:
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r3867 r3884  
    146146         CALL iom_put( "toce" , z3d                        )   ! heat content 
    147147         CALL iom_put( "sst"  , z3d(:,:,1)                 )   ! sea surface heat content 
    148          CALL iom_put( "sst2" , z3d(:,:,1) * z3d(:,:,1)    )   ! sea surface content of squared temperature 
     148         z3d(:,:,1) = tsn(:,:,1,jp_tem) * z3d(:,:,1) 
     149         CALL iom_put( "sst2" , z3d(:,:,1)                 )   ! sea surface content of squared temperature 
    149150         z3d(:,:,:) = tsn(:,:,:,jp_sal) * fse3t_n(:,:,:)             
    150151         CALL iom_put( "soce" , z3d                        )   ! salinity content 
    151152         CALL iom_put( "sss"  , z3d(:,:,1)                 )   ! sea surface salinity content 
    152          CALL iom_put( "sss2" , z3d(:,:,1) * z3d(:,:,1)    )   ! sea surface content of squared salinity 
     153         z3d(:,:,1) = tsn(:,:,1,jp_sal) * z3d(:,:,1) 
     154         CALL iom_put( "sss2" , z3d(:,:,1)                 )   ! sea surface content of squared salinity 
    153155      ELSE 
    154156         CALL iom_put( "toce" , tsn(:,:,:,jp_tem)          )   ! temperature 
  • branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r3871 r3884  
    1818   !!   dom_vvl_rst      : read/write restart file 
    1919   !!   dom_vvl_ctl      : Check the vvl options 
     20   !!   dom_vvl_orca_fix : Recompute some area-weighted interpolations of vertical scale factors  
     21   !!                    : to account for manual changes to e[1,2][u,v] in some Straits  
    2022   !!---------------------------------------------------------------------- 
    2123   !! * Modules used 
     
    3537 
    3638   !! * Routine accessibility 
    37    PUBLIC dom_vvl_init       ! called by domain.F90 
    38    PUBLIC dom_vvl_sf_nxt     ! called by step.F90 
    39    PUBLIC dom_vvl_sf_swp     ! called by step.F90 
    40    PUBLIC dom_vvl_interpol   ! called by dynnxt.F90 
     39   PUBLIC  dom_vvl_init       ! called by domain.F90 
     40   PUBLIC  dom_vvl_sf_nxt     ! called by step.F90 
     41   PUBLIC  dom_vvl_sf_swp     ! called by step.F90 
     42   PUBLIC  dom_vvl_interpol   ! called by dynnxt.F90 
     43   PRIVATE dom_vvl_orca_fix   ! called by dom_vvl_interpol 
    4144 
    4245   !!* Namelist nam_vvl 
     
    5255   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_td, vn_td              ! thickness diffusion transport 
    5356   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv_lf                   ! low frequency part of hz divergence 
    54    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3t_t_b, e3t_t_n, e3t_t_a ! baroclinic scale factors 
     57   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_b, tilde_e3t_n  ! baroclinic scale factors 
     58   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a               ! baroclinic scale factors 
    5559   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_e3t               ! retoring period for scale factors 
    5660   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_hdv               ! retoring period for low freq. divergence 
     
    7680      IF( ln_vvl_zstar ) dom_vvl_alloc = 0 
    7781      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    78          ALLOCATE( e3t_t_b(jpi,jpj,jpk) , e3t_t_n(jpi,jpj,jpk) , e3t_t_a(jpi,jpj,jpk) ,   & 
    79             &      un_td  (jpi,jpj,jpk) , vn_td  (jpi,jpj,jpk) , STAT = dom_vvl_alloc        ) 
     82         ALLOCATE( tilde_e3t_b(jpi,jpj,jpk) , tilde_e3t_n(jpi,jpj,jpk) , tilde_e3t_a(jpi,jpj,jpk) ,   & 
     83            &      un_td  (jpi,jpj,jpk)     , vn_td  (jpi,jpj,jpk)    , STAT = dom_vvl_alloc        ) 
    8084         IF( lk_mpp             )   CALL mpp_sum ( dom_vvl_alloc ) 
    8185         IF( dom_vvl_alloc /= 0 )   CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 
     
    100104      !!               - interpolate scale factors 
    101105      !! 
    102       !! ** Action  : - fse3t_(n/b) and e3t_t_(n/b) 
     106      !! ** Action  : - fse3t_(n/b) and tilde_e3t_(n/b) 
    103107      !!              - Regrid: fse3(u/v)_n 
    104108      !!                        fse3(u/v)_b        
     
    130134      IF( dom_vvl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 
    131135 
    132       ! Read or initialize fse3t_(b/n), e3t_t_(b/n) and hdiv_lf (and e3t_a(jpk)) 
    133       ! ======================================================================== 
     136      ! Read or initialize fse3t_(b/n), tilde_e3t_(b/n) and hdiv_lf (and e3t_a(jpk)) 
     137      ! ============================================================================ 
    134138      CALL dom_vvl_rst( nit000, 'READ' ) 
    135139      fse3t_a(:,:,jpk) = e3t_0(:,:,jpk) 
    136140 
    137141      ! Reconstruction of all vertical scale factors at now and before time steps 
    138       ! ========================================================================= 
     142      ! ============================================================================= 
    139143      ! Horizontal scale factor interpolations 
    140144      ! -------------------------------------- 
     
    178182         frq_rst_e3t(:,:) = 2.e0_wp * rpi / ( 30.e0_wp * 86400.e0_wp ) 
    179183         frq_rst_hdv(:,:) = 2.e0_wp * rpi / (  5.e0_wp * 86400.e0_wp ) 
     184! Use these next two to emulate z-star using z-tilde 
     185         frq_rst_e3t(:,:) = 0.e0_wp  
     186         frq_rst_hdv(:,:) = 1.e0_wp / rdt 
    180187      ENDIF 
    181188 
     
    200207      !!                               to the "baroclinic" level thickness. 
    201208      !! 
    202       !! ** Action  :  - hdiv_lf: restoring towards full baroclinic divergence in z_tilde case 
    203       !!               - e3t_t_a: after increment of vertical scale factor  
    204       !!                          in z_tilde case 
     209      !! ** Action  :  - hdiv_lf    : restoring towards full baroclinic divergence in z_tilde case 
     210      !!               - tilde_e3t_a: after increment of vertical scale factor  
     211      !!                              in z_tilde case 
    205212      !!               - fse3(t/u/v)_a 
    206213      !! 
     
    271278         ! II - after z_tilde increments of vertical scale factors 
    272279         ! ======================================================= 
    273          e3t_t_a(:,:,:) = 0.e0   ! e3t_t_a used to store tendency terms 
     280         tilde_e3t_a(:,:,:) = 0.0_wp  ! tilde_e3t_a used to store tendency terms 
    274281 
    275282         ! 1 - High frequency divergence term 
    276283         ! ---------------------------------- 
    277          IF( ln_vvl_ztilde ) THEN   ! z_tilde case 
     284         IF( ln_vvl_ztilde ) THEN     ! z_tilde case 
    278285            DO jk = 1, jpkm1 
    279                e3t_t_a(:,:,jk) = e3t_t_a(:,:,jk) - ( fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) - hdiv_lf(:,:,jk) ) 
    280             END DO 
    281          ELSE                       ! layer case 
     286               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - ( fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) - hdiv_lf(:,:,jk) ) 
     287            END DO 
     288         ELSE                         ! layer case 
    282289            DO jk = 1, jpkm1 
    283                e3t_t_a(:,:,jk) = e3t_t_a(:,:,jk) - fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) 
     290               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) -  fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) 
    284291            END DO 
    285292         END IF 
     
    289296         IF( ln_vvl_ztilde ) THEN 
    290297            DO jk = 1, jpk 
    291                e3t_t_a(:,:,jk) = e3t_t_a(:,:,jk) - frq_rst_e3t(:,:) * e3t_t_b(:,:,jk) 
     298               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - frq_rst_e3t(:,:) * tilde_e3t_b(:,:,jk) 
    292299            END DO 
    293300         END IF 
     
    301308            DO jj = 1, jpjm1 
    302309               DO ji = 1, fs_jpim1   ! vector opt. 
    303                   un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * re2u_e1u(ji,jj) * ( e3t_t_b(ji,jj,jk) - e3t_t_b(ji+1,jj  ,jk) ) 
    304                   vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * ( e3t_t_b(ji,jj,jk) - e3t_t_b(ji  ,jj+1,jk) ) 
     310                  un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * re2u_e1u(ji,jj) * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
     311                  vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
    305312                  zwu(ji,jj) = zwu(ji,jj) + un_td(ji,jj,jk) 
    306313                  zwv(ji,jj) = zwv(ji,jj) + vn_td(ji,jj,jk) 
     
    319326            DO jj = 2, jpjm1 
    320327               DO ji = fs_2, fs_jpim1   ! vector opt. 
    321                   e3t_t_a(ji,jj,jk) = e3t_t_a(ji,jj,jk) + (   un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk)    & 
    322                      &                                      + vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk) )  & 
    323                      &                                    * r1_e12t(ji,jj) 
     328                  tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + (   un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk)    & 
     329                     &                                          +     vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk)    & 
     330                     &                                            ) * r1_e12t(ji,jj) 
    324331               END DO 
    325332            END DO 
     
    339346            z2dt = 2.e0 * rdt 
    340347         ENDIF 
    341          CALL lbc_lnk( e3t_t_a(:,:,:), 'T', 1. ) 
    342          e3t_t_a(:,:,:) = e3t_t_b(:,:,:) + z2dt * tmask(:,:,:) * e3t_t_a(:,:,:) 
     348         CALL lbc_lnk( tilde_e3t_a(:,:,:), 'T', 1. ) 
     349         tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 
    343350 
    344351         ! Maximum deformation control 
     
    348355         ze3t(:,:,jpk) = 0.e0 
    349356         DO jk = 1, jpkm1 
    350             ze3t(:,:,jk) = e3t_t_a(:,:,jk) / e3t_0(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 
     357            ze3t(:,:,jk) = tilde_e3t_a(:,:,jk) / e3t_0(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 
    351358         END DO 
    352359         z_tmax = MAXVAL( ze3t(:,:,:) ) 
     360         IF( lk_mpp )   CALL mpp_max( z_tmax )                 ! max over the global domain 
    353361         z_tmin = MINVAL( ze3t(:,:,:) ) 
     362         IF( lk_mpp )   CALL mpp_min( z_tmin )                 ! min over the global domain 
    354363         ! - ML - test: for the moment, stop simulation for too large e3_t variations 
    355364         IF( ( z_tmax .GT. z_def_max ) .OR. ( z_tmin .LT. - z_def_max ) ) THEN 
    356             ijk_max = MAXLOC( ze3t(:,:,:) ) 
    357             ijk_min = MINLOC( ze3t(:,:,:) ) 
    358             WRITE(numout, *) 'MAX( e3t_t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmax 
    359             WRITE(numout, *) 'at i, j, k=', ijk_max 
    360             WRITE(numout, *) 'MIN( e3t_t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmin 
    361             WRITE(numout, *) 'at i, j, k=', ijk_min             
    362             CALL ctl_stop('MAX( ABS( e3t_t_a(:,:,:) ) / e3t_0(:,:,:) ) too high') 
     365            IF( lk_mpp ) THEN 
     366               CALL mpp_maxloc( ze3t, tmask, z_tmax, ijk_max(1), ijk_max(2), ijk_max(3) ) 
     367               CALL mpp_minloc( ze3t, tmask, z_tmin, ijk_min(1), ijk_min(2), ijk_min(3) ) 
     368            ELSE 
     369               ijk_max = MAXLOC( ze3t(:,:,:) ) 
     370               ijk_max(1) = ijk_max(1) + nimpp - 1 
     371               ijk_max(2) = ijk_max(2) + njmpp - 1 
     372               ijk_min = MINLOC( ze3t(:,:,:) ) 
     373               ijk_min(1) = ijk_min(1) + nimpp - 1 
     374               ijk_min(2) = ijk_min(2) + njmpp - 1 
     375            ENDIF 
     376            IF (lwp) THEN 
     377               WRITE(numout, *) 'MAX( tilde_e3t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmax 
     378               WRITE(numout, *) 'at i, j, k=', ijk_max 
     379               WRITE(numout, *) 'MIN( tilde_e3t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmin 
     380               WRITE(numout, *) 'at i, j, k=', ijk_min             
     381               CALL ctl_warn('MAX( ABS( tilde_e3t_a(:,:,:) ) / e3t_0(:,:,:) ) too high') 
     382            ENDIF 
    363383         ENDIF 
    364384         ! - ML - end test 
    365          ! - ML - This will cause a baroclinicity error if the ctl_stop above is not used 
    366          e3t_t_a(:,:,:) = MIN( e3t_t_a(:,:,:),   z_def_max * e3t_0(:,:,:) ) 
    367          e3t_t_a(:,:,:) = MAX( e3t_t_a(:,:,:), - z_def_max * e3t_0(:,:,:) ) 
     385         ! - ML - Imposing these limits will cause a baroclinicity error which is corrected for below 
     386         tilde_e3t_a(:,:,:) = MIN( tilde_e3t_a(:,:,:),   z_def_max * e3t_0(:,:,:) ) 
     387         tilde_e3t_a(:,:,:) = MAX( tilde_e3t_a(:,:,:), - z_def_max * e3t_0(:,:,:) ) 
    368388 
    369389         ! Add "tilda" part to the after scale factor 
    370390         ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    371          fse3t_a(:,:,:) = e3t_0(:,:,:) + e3t_t_a(:,:,:) 
     391         fse3t_a(:,:,:) = e3t_0(:,:,:) + tilde_e3t_a(:,:,:) 
    372392 
    373393         ! III - Barotropic repartition of the sea surface height over the baroclinic profile 
     
    375395         ! add e3t(n-1) "star" Asselin-filtered 
    376396         DO jk = 1, jpkm1 
    377             fse3t_a(:,:,jk) = fse3t_a(:,:,jk) + fse3t_b(:,:,jk) - e3t_0(:,:,jk) - e3t_t_b(:,:,jk) 
     397            fse3t_a(:,:,jk) = fse3t_a(:,:,jk) + fse3t_b(:,:,jk) - e3t_0(:,:,jk) - tilde_e3t_b(:,:,jk) 
    378398         END DO 
    379399         ! add ( ssh increment + "baroclinicity error" ) proportionnaly to e3t(n) 
     
    383403         zht(:,:) = 0. 
    384404         DO jk = 1, jpkm1 
    385             zht(:,:) = zht(:,:) + e3t_t_a(:,:,jk) * tmask(:,:,jk) 
     405            zht(:,:)  = zht(:,:) + tilde_e3t_a(:,:,jk) * tmask(:,:,jk) 
    386406         END DO 
    387407         z_scale(:,:) = ( ssha(:,:) - sshb(:,:) - zht(:,:) ) / ( ht_0(:,:) + sshn(:,:) + 1. - tmask(:,:,1) ) 
     
    393413 
    394414      IF( ln_vvl_dbg ) THEN   ! - ML - test: control prints for debuging 
     415         ! 
     416         IF( lwp ) WRITE(numout, *) 'kt =', kt 
    395417         IF ( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    396             WRITE(numout, *) 'kt =', kt 
    397             WRITE(numout, *) 'MAXVAL(abs(SUM(e3t_t_a))) =',   & 
    398                &              MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( zht(:,:) ) ) 
     418            z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( zht(:,:) ) ) 
     419            IF( lk_mpp ) CALL mpp_max( z_tmax )                             ! max over the global domain 
     420            IF( lwp    ) WRITE(numout, *) 'MAXVAL(abs(SUM(tilde_e3t_a))) =', z_tmax 
    399421         END IF 
     422         ! 
    400423         zht(:,:) = 0.e0 
    401424         DO jk = 1, jpkm1 
    402425            zht(:,:) = zht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
    403426         END DO 
    404          WRITE(numout, *) 'MAXVAL(abs(ht_0+sshn-SUM(fse3t_n))) =',   & 
    405             &              MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + sshn(:,:) - zht(:,:) ) ) 
     427         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + sshn(:,:) - zht(:,:) ) ) 
     428         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
     429         IF( lwp    ) WRITE(numout, *) 'MAXVAL(abs(ht_0+sshn-SUM(fse3t_n))) =', z_tmax 
     430         ! 
    406431         zht(:,:) = 0.e0 
    407432         DO jk = 1, jpkm1 
    408433            zht(:,:) = zht(:,:) + fse3t_a(:,:,jk) * tmask(:,:,jk) 
    409434         END DO 
    410          WRITE(numout, *) 'MAXVAL(abs(ht_0+ssha-SUM(fse3t_a))) =',   & 
    411             &              MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + ssha(:,:) - zht(:,:) ) ) 
     435         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + ssha(:,:) - zht(:,:) ) ) 
     436         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
     437         IF( lwp    ) WRITE(numout, *) 'MAXVAL(abs(ht_0+ssha-SUM(fse3t_a))) =', z_tmax 
     438         ! 
    412439      END IF 
    413440 
     
    439466      !!               - recompute depths and water height fields 
    440467      !! 
    441       !! ** Action  :  - fse3t_(b/n), e3t_t_(b/n) and fse3(u/v)_n ready for next time step 
     468      !! ** Action  :  - fse3t_(b/n), tilde_e3t_(b/n) and fse3(u/v)_n ready for next time step 
    442469      !!               - Recompute: 
    443470      !!                    fse3(u/v)_b        
     
    473500      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    474501         IF( neuler == 0 .AND. kt == nit000 ) THEN 
    475             e3t_t_b(:,:,:) = e3t_t_n(:,:,:) 
     502            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 
    476503         ELSE 
    477             e3t_t_b(:,:,:) = e3t_t_n(:,:,:) + atfp * ( e3t_t_b(:,:,:) - 2.e0 * e3t_t_n(:,:,:) + e3t_t_a(:,:,:) ) 
     504            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) + atfp * ( tilde_e3t_b(:,:,:) - 2.e0 * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) ) 
    478505         ENDIF 
    479          e3t_t_n(:,:,:) = e3t_t_a(:,:,:) 
     506         tilde_e3t_n(:,:,:) = tilde_e3t_a(:,:,:) 
    480507      ENDIF 
    481508      fse3t_n(:,:,:) = fse3t_a(:,:,:) 
     
    553580      !! * Local declarations 
    554581      INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
     582      LOGICAL ::   l_is_orca                                           ! local logical 
    555583      !!---------------------------------------------------------------------- 
    556584      IF( nn_timing == 1 )  CALL timing_start('dom_vvl_interpol') 
     585         ! 
     586      l_is_orca = .FALSE. 
     587      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) l_is_orca = .TRUE.      ! ORCA R2 configuration - will need to correct some locations 
     588 
    557589      SELECT CASE ( pout ) 
    558590         !               ! ------------------------------------- ! 
     
    563595            DO jj = 1, jpjm1 
    564596               DO ji = 1, fs_jpim1   ! vector opt. 
    565                   pe3_out(ji,jj,jk) = 0.5 * umask(ji,jj,jk) * r1_e12u(ji,jj)                                      & 
     597                  pe3_out(ji,jj,jk) = 0.5 * umask(ji,jj,jk) * r1_e12u(ji,jj)                                   & 
    566598                     &                    * (   e12t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
    567599                     &                        + e12t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) ) 
     
    569601            END DO 
    570602         END DO 
     603         ! 
     604         IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    571605         ! boundary conditions 
    572606         CALL lbc_lnk( pe3_out(:,:,:), 'U', 1. ) 
     
    579613            DO jj = 1, jpjm1 
    580614               DO ji = 1, fs_jpim1   ! vector opt. 
    581                   pe3_out(ji,jj,jk) = 0.5 * vmask(ji,jj,jk) * r1_e12v(ji,jj)                                      & 
     615                  pe3_out(ji,jj,jk) = 0.5 * vmask(ji,jj,jk) * r1_e12v(ji,jj)                                   & 
    582616                     &                    * (   e12t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
    583617                     &                        + e12t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) ) 
     
    585619            END DO 
    586620         END DO 
     621         ! 
     622         IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    587623         ! boundary conditions 
    588624         CALL lbc_lnk( pe3_out(:,:,:), 'V', 1. ) 
     
    595631            DO jj = 1, jpjm1 
    596632               DO ji = 1, fs_jpim1   ! vector opt. 
    597                   pe3_out(ji,jj,jk) = 0.5 * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e12f(ji,jj)                  & 
     633                  pe3_out(ji,jj,jk) = 0.5 * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e12f(ji,jj)               & 
    598634                     &                    * (   e12u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
    599635                     &                        + e12u(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3u_0(ji,jj+1,jk) ) ) 
     
    601637            END DO 
    602638         END DO 
     639         ! 
     640         IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    603641         ! boundary conditions 
    604642         CALL lbc_lnk( pe3_out(:,:,:), 'F', 1. ) 
     
    612650         DO jk = 2, jpk 
    613651            pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1. - 0.5 * tmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )   & 
    614                &                              +        0.5 * tmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
     652               &                              +      0.5 * tmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
    615653         END DO 
    616654         !               ! -------------------------------------- ! 
     
    622660         DO jk = 2, jpk 
    623661            pe3_out(:,:,jk) = e3uw_0(:,:,jk) + ( 1. - 0.5 * umask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3u_0(:,:,jk-1) )   & 
    624                &                               +        0.5 * umask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
     662               &                               +      0.5 * umask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
    625663         END DO 
    626664         !               ! -------------------------------------- ! 
     
    632670         DO jk = 2, jpk 
    633671            pe3_out(:,:,jk) = e3vw_0(:,:,jk) + ( 1. - 0.5 * vmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3v_0(:,:,jk-1) )   & 
    634                &                               +        0.5 * vmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
     672               &                               +      0.5 * vmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
    635673         END DO 
    636674      END SELECT 
     675      ! 
    637676 
    638677      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_interpol') 
    639678 
    640679   END SUBROUTINE dom_vvl_interpol 
    641  
    642680 
    643681   SUBROUTINE dom_vvl_rst( kt, cdrw ) 
     
    666704            id1 = iom_varid( numror, 'fse3t_b', ldstop = .FALSE. ) 
    667705            id2 = iom_varid( numror, 'fse3t_n', ldstop = .FALSE. ) 
    668             id3 = iom_varid( numror, 'e3t_t_b', ldstop = .FALSE. ) 
    669             id4 = iom_varid( numror, 'e3t_t_n', ldstop = .FALSE. ) 
     706            id3 = iom_varid( numror, 'tilde_e3t_b', ldstop = .FALSE. ) 
     707            id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 
    670708            id5 = iom_varid( numror, 'hdif_lf', ldstop = .FALSE. ) 
    671709            !                             ! --------- ! 
     
    691729               !                          ! ----------------------- ! 
    692730               IF( MIN( id3, id4 ) > 0 ) THEN  ! all required arrays exist 
    693                   CALL iom_get( numror, jpdom_autoglo, 'e3t_t_b', e3t_t_b(:,:,:) ) 
    694                   CALL iom_get( numror, jpdom_autoglo, 'e3t_t_n', e3t_t_n(:,:,:) ) 
     731                  CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
     732                  CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_n', tilde_e3t_n(:,:,:) ) 
    695733               ELSE                            ! one at least array is missing 
    696                   e3t_t_b(:,:,:) = 0.e0 
    697                   e3t_t_n(:,:,:) = 0.e0 
     734                  tilde_e3t_b(:,:,:) = 0.e0 
     735                  tilde_e3t_n(:,:,:) = 0.e0 
    698736               ENDIF 
    699737               !                          ! ------------ ! 
     
    712750            fse3t_n(:,:,:) = e3t_0(:,:,:) 
    713751            IF( ln_vvl_ztilde .OR. ln_vvl_layer) THEN 
    714                e3t_t_b(:,:,:) = 0.e0 
    715                e3t_t_n(:,:,:) = 0.e0 
     752               tilde_e3t_b(:,:,:) = 0.e0 
     753               tilde_e3t_n(:,:,:) = 0.e0 
    716754               IF( ln_vvl_ztilde ) hdiv_lf(:,:,:) = 0.e0 
    717755            END IF 
     
    729767         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    730768            !                                        ! ----------------------- ! 
    731             CALL iom_rstput( kt, nitrst, numrow, 'e3t_t_b', e3t_t_b(:,:,:) ) 
    732             CALL iom_rstput( kt, nitrst, numrow, 'e3t_t_n', e3t_t_n(:,:,:) ) 
     769            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
     770            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:) ) 
    733771         END IF 
    734772         !                                           ! -------------!     
     
    794832   END SUBROUTINE dom_vvl_ctl 
    795833 
     834   SUBROUTINE dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
     835      !!--------------------------------------------------------------------- 
     836      !!                   ***  ROUTINE dom_vvl_orca_fix  *** 
     837      !!                      
     838      !! ** Purpose :   Correct surface weighted, horizontally interpolated,  
     839      !!                scale factors at locations that have been individually 
     840      !!                modified in domhgr. Such modifications break the 
     841      !!                relationship between e12t and e1u*e2u etc. 
     842      !!                Recompute some scale factors ignoring the modified metric. 
     843      !!---------------------------------------------------------------------- 
     844      !! * Arguments 
     845      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
     846      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
     847      CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
     848      !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
     849      !! * Local declarations 
     850      INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
     851      INTEGER ::   ij0, ij1, ii0, ii1                                  ! dummy loop indices 
     852      !                                                ! ===================== 
     853      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
     854         !                                             ! ===================== 
     855         IF( nn_cla == 0 ) THEN 
     856            ! 
     857            ii0 = 139   ;   ii1 = 140        ! Gibraltar Strait (e2u was modified) 
     858            ij0 = 102   ;   ij1 = 102 
     859            DO jk = 1, jpkm1 
     860               DO jj = mj0(ij0), mj1(ij1) 
     861                  DO ji = mi0(ii0), mi1(ii1) 
     862                     SELECT CASE ( pout ) 
     863                     CASE( 'U' ) 
     864                        pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     865                       &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     866                       &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     867                       &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     868                     CASE( 'F' ) 
     869                        pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     870                       &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     871                       &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     872                       &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     873                     END SELECT 
     874                  END DO 
     875               END DO 
     876            END DO 
     877            ! 
     878            ii0 = 160   ;   ii1 = 160        ! Bab el Mandeb (e2u and e1v were modified) 
     879            ij0 =  88   ;   ij1 =  88 
     880            DO jk = 1, jpkm1 
     881               DO jj = mj0(ij0), mj1(ij1) 
     882                  DO ji = mi0(ii0), mi1(ii1) 
     883                     SELECT CASE ( pout ) 
     884                     CASE( 'U' ) 
     885                        pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     886                       &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     887                       &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     888                       &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     889                     CASE( 'V' ) 
     890                        pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     891                       &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     892                       &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     893                       &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     894                     CASE( 'F' ) 
     895                        pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     896                       &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     897                       &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     898                       &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     899                     END SELECT 
     900                  END DO 
     901               END DO 
     902            END DO 
     903         ENDIF 
     904 
     905         ii0 = 145   ;   ii1 = 146        ! Danish Straits (e2u was modified) 
     906         ij0 = 116   ;   ij1 = 116 
     907         DO jk = 1, jpkm1 
     908            DO jj = mj0(ij0), mj1(ij1) 
     909               DO ji = mi0(ii0), mi1(ii1) 
     910                  SELECT CASE ( pout ) 
     911                  CASE( 'U' ) 
     912                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     913                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     914                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     915                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     916                  CASE( 'F' ) 
     917                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     918                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     919                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     920                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     921                  END SELECT 
     922               END DO 
     923            END DO 
     924         END DO 
     925      ENDIF 
     926      ! 
     927         !                                             ! ===================== 
     928      IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
     929         !                                             ! ===================== 
     930         ! 
     931         ii0 = 281   ;   ii1 = 282        ! Gibraltar Strait (e2u was modified) 
     932         ij0 = 200   ;   ij1 = 200 
     933         DO jk = 1, jpkm1 
     934            DO jj = mj0(ij0), mj1(ij1) 
     935               DO ji = mi0(ii0), mi1(ii1) 
     936                  SELECT CASE ( pout ) 
     937                  CASE( 'U' ) 
     938                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     939                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     940                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     941                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     942                  CASE( 'F' ) 
     943                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     944                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     945                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     946                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     947                  END SELECT 
     948               END DO 
     949            END DO 
     950         END DO 
     951         ! 
     952         ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait (e2u was modified) 
     953         ij0 = 208   ;   ij1 = 208 
     954         DO jk = 1, jpkm1 
     955            DO jj = mj0(ij0), mj1(ij1) 
     956               DO ji = mi0(ii0), mi1(ii1) 
     957                  SELECT CASE ( pout ) 
     958                  CASE( 'U' ) 
     959                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
     960                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     961                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     962                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     963                  CASE( 'F' ) 
     964                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
     965                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     966                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     967                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     968                  END SELECT 
     969               END DO 
     970            END DO 
     971         END DO 
     972         ! 
     973         ii0 =  44   ;   ii1 =  44        ! Lombok Strait (e1v was modified) 
     974         ij0 = 124   ;   ij1 = 125 
     975         DO jk = 1, jpkm1 
     976            DO jj = mj0(ij0), mj1(ij1) 
     977               DO ji = mi0(ii0), mi1(ii1) 
     978                  SELECT CASE ( pout ) 
     979                  CASE( 'V' ) 
     980                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     981                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     982                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     983                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     984                  END SELECT 
     985               END DO 
     986            END DO 
     987         END DO 
     988         ! 
     989         ii0 =  48   ;   ii1 =  48        ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 
     990         ij0 = 124   ;   ij1 = 125 
     991         DO jk = 1, jpkm1 
     992            DO jj = mj0(ij0), mj1(ij1) 
     993               DO ji = mi0(ii0), mi1(ii1) 
     994                  SELECT CASE ( pout ) 
     995                  CASE( 'V' ) 
     996                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     997                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     998                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     999                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1000                  END SELECT 
     1001               END DO 
     1002            END DO 
     1003         END DO 
     1004         ! 
     1005         ii0 =  53   ;   ii1 =  53        ! Ombai Strait (e1v was modified) 
     1006         ij0 = 124   ;   ij1 = 125 
     1007         DO jk = 1, jpkm1 
     1008            DO jj = mj0(ij0), mj1(ij1) 
     1009               DO ji = mi0(ii0), mi1(ii1) 
     1010                  SELECT CASE ( pout ) 
     1011                  CASE( 'V' ) 
     1012                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     1013                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     1014                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     1015                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1016                  END SELECT 
     1017               END DO 
     1018            END DO 
     1019         END DO 
     1020         ! 
     1021         ii0 =  56   ;   ii1 =  56        ! Timor Passage (e1v was modified) 
     1022         ij0 = 124   ;   ij1 = 125 
     1023         DO jk = 1, jpkm1 
     1024            DO jj = mj0(ij0), mj1(ij1) 
     1025               DO ji = mi0(ii0), mi1(ii1) 
     1026                  SELECT CASE ( pout ) 
     1027                  CASE( 'V' ) 
     1028                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     1029                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     1030                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     1031                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1032                  END SELECT 
     1033               END DO 
     1034            END DO 
     1035         END DO 
     1036         ! 
     1037         ii0 =  55   ;   ii1 =  55        ! West Halmahera Strait (e1v was modified) 
     1038         ij0 = 141   ;   ij1 = 142 
     1039         DO jk = 1, jpkm1 
     1040            DO jj = mj0(ij0), mj1(ij1) 
     1041               DO ji = mi0(ii0), mi1(ii1) 
     1042                  SELECT CASE ( pout ) 
     1043                  CASE( 'V' ) 
     1044                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     1045                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     1046                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     1047                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1048                  END SELECT 
     1049               END DO 
     1050            END DO 
     1051         END DO 
     1052         ! 
     1053         ii0 =  58   ;   ii1 =  58        ! East Halmahera Strait (e1v was modified) 
     1054         ij0 = 141   ;   ij1 = 142 
     1055         DO jk = 1, jpkm1 
     1056            DO jj = mj0(ij0), mj1(ij1) 
     1057               DO ji = mi0(ii0), mi1(ii1) 
     1058                  SELECT CASE ( pout ) 
     1059                  CASE( 'V' ) 
     1060                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     1061                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     1062                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     1063                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1064                  END SELECT 
     1065               END DO 
     1066            END DO 
     1067         END DO 
     1068      ENDIF 
     1069         !                                             ! ===================== 
     1070      IF( cp_cfg == "orca" .AND. jp_cfg == 05 ) THEN   ! ORCA R05 configuration 
     1071         !                                             ! ===================== 
     1072         ! 
     1073         ii0 = 563   ;   ii1 = 564        ! Gibraltar Strait (e2u was modified) 
     1074         ij0 = 327   ;   ij1 = 327 
     1075         DO jk = 1, jpkm1 
     1076            DO jj = mj0(ij0), mj1(ij1) 
     1077               DO ji = mi0(ii0), mi1(ii1) 
     1078                  SELECT CASE ( pout ) 
     1079                  CASE( 'U' ) 
     1080                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     1081                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     1082                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     1083                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     1084                  CASE( 'F' ) 
     1085                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     1086                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     1087                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     1088                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     1089                  END SELECT 
     1090               END DO 
     1091            END DO 
     1092         END DO 
     1093         ! 
     1094         ii0 = 627   ;   ii1 = 628        ! Bosphorus Strait (e2u was modified) 
     1095         ij0 = 343   ;   ij1 = 343 
     1096         DO jk = 1, jpkm1 
     1097            DO jj = mj0(ij0), mj1(ij1) 
     1098               DO ji = mi0(ii0), mi1(ii1) 
     1099                  SELECT CASE ( pout ) 
     1100                  CASE( 'U' ) 
     1101                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
     1102                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     1103                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     1104                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     1105                  CASE( 'F' ) 
     1106                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
     1107                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     1108                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     1109                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     1110                  END SELECT 
     1111               END DO 
     1112            END DO 
     1113         END DO 
     1114         ! 
     1115         ii0 =  93   ;   ii1 =  94        ! Sumba Strait (e2u was modified) 
     1116         ij0 = 232   ;   ij1 = 232 
     1117         DO jk = 1, jpkm1 
     1118            DO jj = mj0(ij0), mj1(ij1) 
     1119               DO ji = mi0(ii0), mi1(ii1) 
     1120                  SELECT CASE ( pout ) 
     1121                  CASE( 'U' ) 
     1122                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     1123                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     1124                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     1125                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     1126                  CASE( 'F' ) 
     1127                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     1128                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     1129                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     1130                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     1131                  END SELECT 
     1132               END DO 
     1133            END DO 
     1134         END DO 
     1135         ! 
     1136         ii0 = 103   ;   ii1 = 103        ! Ombai Strait (e2u was modified) 
     1137         ij0 = 232   ;   ij1 = 232 
     1138         DO jk = 1, jpkm1 
     1139            DO jj = mj0(ij0), mj1(ij1) 
     1140               DO ji = mi0(ii0), mi1(ii1) 
     1141                  SELECT CASE ( pout ) 
     1142                  CASE( 'U' ) 
     1143                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     1144                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     1145                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     1146                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     1147                  CASE( 'F' ) 
     1148                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     1149                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     1150                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     1151                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     1152                  END SELECT 
     1153               END DO 
     1154            END DO 
     1155         END DO 
     1156         ! 
     1157         ii0 =  15   ;   ii1 =  15        ! Palk Strait (e2u was modified) 
     1158         ij0 = 270   ;   ij1 = 270 
     1159         DO jk = 1, jpkm1 
     1160            DO jj = mj0(ij0), mj1(ij1) 
     1161               DO ji = mi0(ii0), mi1(ii1) 
     1162                  SELECT CASE ( pout ) 
     1163                  CASE( 'U' ) 
     1164                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
     1165                    &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
     1166                    &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
     1167                    &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
     1168                  CASE( 'F' ) 
     1169                     pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
     1170                    &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
     1171                    &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
     1172                    &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
     1173                  END SELECT 
     1174               END DO 
     1175            END DO 
     1176         END DO 
     1177         ! 
     1178         ii0 =  87   ;   ii1 =  87        ! Lombok Strait (e1v was modified) 
     1179         ij0 = 232   ;   ij1 = 233 
     1180         DO jk = 1, jpkm1 
     1181            DO jj = mj0(ij0), mj1(ij1) 
     1182               DO ji = mi0(ii0), mi1(ii1) 
     1183                  SELECT CASE ( pout ) 
     1184                  CASE( 'V' ) 
     1185                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     1186                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     1187                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     1188                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1189                  END SELECT 
     1190               END DO 
     1191            END DO 
     1192         END DO 
     1193         ! 
     1194         ii0 = 662   ;   ii1 = 662        ! Bab el Mandeb (e1v was modified) 
     1195         ij0 = 276   ;   ij1 = 276 
     1196         DO jk = 1, jpkm1 
     1197            DO jj = mj0(ij0), mj1(ij1) 
     1198               DO ji = mi0(ii0), mi1(ii1) 
     1199                  SELECT CASE ( pout ) 
     1200                  CASE( 'V' ) 
     1201                     pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
     1202                    &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
     1203                    &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
     1204                    &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
     1205                  END SELECT 
     1206               END DO 
     1207            END DO 
     1208         END DO 
     1209      ENDIF 
     1210   END SUBROUTINE dom_vvl_orca_fix 
     1211 
    7961212   !!====================================================================== 
    7971213END MODULE domvvl 
Note: See TracChangeset for help on using the changeset viewer.