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 4616 for branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90 – NEMO

Ignore:
Timestamp:
2014-04-06T17:28:25+02:00 (10 years ago)
Author:
gm
Message:

#1260 : see the associated wiki page for explanation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r4490 r4616  
    99   !!                                          vvl option includes z_star and z_tilde coordinates 
    1010   !!---------------------------------------------------------------------- 
    11    !!   'key_vvl'                              variable volume 
    12    !!---------------------------------------------------------------------- 
     11 
    1312   !!---------------------------------------------------------------------- 
    1413   !!   dom_vvl_init     : define initial vertical scale factors, depths and column thickness 
     
    1817   !!   dom_vvl_rst      : read/write restart file 
    1918   !!   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  
    2219   !!---------------------------------------------------------------------- 
    23    !! * Modules used 
    2420   USE oce             ! ocean dynamics and tracers 
    2521   USE dom_oce         ! ocean space and time domain 
     
    3632   PRIVATE 
    3733 
    38    !! * Routine accessibility 
    3934   PUBLIC  dom_vvl_init       ! called by domain.F90 
    4035   PUBLIC  dom_vvl_sf_nxt     ! called by step.F90 
    4136   PUBLIC  dom_vvl_sf_swp     ! called by step.F90 
    4237   PUBLIC  dom_vvl_interpol   ! called by dynnxt.F90 
    43    PRIVATE dom_vvl_orca_fix   ! called by dom_vvl_interpol 
    44  
    45    !!* Namelist nam_vvl 
    46    LOGICAL , PUBLIC                                      :: ln_vvl_zstar              ! zstar  vertical coordinate 
    47    LOGICAL , PUBLIC                                      :: ln_vvl_ztilde             ! ztilde vertical coordinate 
    48    LOGICAL , PUBLIC                                      :: ln_vvl_layer              ! level  vertical coordinate 
    49    LOGICAL , PUBLIC                                      :: ln_vvl_ztilde_as_zstar    ! ztilde vertical coordinate 
    50    LOGICAL , PUBLIC                                      :: ln_vvl_zstar_at_eqtor     ! ztilde vertical coordinate 
    51    LOGICAL , PUBLIC                                      :: ln_vvl_kepe               ! kinetic/potential energy transfer 
    52    !                                                                                           ! conservation: not used yet 
    53    REAL(wp)                                              :: rn_ahe3                   ! thickness diffusion coefficient 
    54    REAL(wp)                                              :: rn_rst_e3t                ! ztilde to zstar restoration timescale [days] 
    55    REAL(wp)                                              :: rn_lf_cutoff              ! cutoff frequency for low-pass filter  [days] 
    56    REAL(wp)                                              :: rn_zdef_max               ! maximum fractional e3t deformation 
    57    LOGICAL , PUBLIC                                      :: ln_vvl_dbg                ! debug control prints 
    58  
    59    !! * Module variables 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_td, vn_td                       ! thickness diffusion transport 
    61    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv_lf                            ! low frequency part of hz divergence 
    62    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_b, tilde_e3t_n           ! baroclinic scale factors 
    63    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a, dtilde_e3t_a          ! baroclinic scale factors 
    64    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_e3t                        ! retoring period for scale factors 
    65    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_hdv                        ! retoring period for low freq. divergence 
     38 
     39   !                                            !!* Namelist nam_vvl * 
     40   LOGICAL , PUBLIC :: ln_vvl_zstar              ! zstar  vertical coordinate 
     41   LOGICAL , PUBLIC :: ln_vvl_ztilde             ! ztilde vertical coordinate 
     42   LOGICAL , PUBLIC :: ln_vvl_layer              ! level  vertical coordinate 
     43   LOGICAL , PUBLIC :: ln_vvl_ztilde_as_zstar    ! ztilde vertical coordinate 
     44   LOGICAL , PUBLIC :: ln_vvl_zstar_at_eqtor     ! ztilde vertical coordinate 
     45   LOGICAL , PUBLIC :: ln_vvl_kepe               ! kinetic/potential energy transfer conservation: not used yet 
     46   REAL(wp)         :: rn_ahe3                   ! thickness diffusion coefficient 
     47   REAL(wp)         :: rn_rst_e3t                ! ztilde to zstar restoration timescale [days] 
     48   REAL(wp)         :: rn_lf_cutoff              ! cutoff frequency for low-pass filter  [days] 
     49   REAL(wp)         :: rn_zdef_max               ! maximum fractional e3t deformation 
     50   LOGICAL , PUBLIC :: ln_vvl_dbg                ! debug control prints 
     51 
     52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   un_td, vn_td                ! thickness diffusion transport 
     53   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hdiv_lf                     ! low frequency part of hz divergence 
     54   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tilde_e3t_b, tilde_e3t_n    ! baroclinic scale factors 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tilde_e3t_a, dtilde_e3t_a   ! baroclinic scale factors 
     56   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   frq_rst_e3t                 ! retoring period for scale factors 
     57   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   frq_rst_hdv                 ! retoring period for low freq. divergence 
    6658 
    6759   !! * Substitutions 
     
    7365   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    7466   !!---------------------------------------------------------------------- 
    75  
    7667CONTAINS 
    7768 
     
    8071      !!                ***  FUNCTION dom_vvl_alloc  *** 
    8172      !!---------------------------------------------------------------------- 
    82       IF( ln_vvl_zstar ) dom_vvl_alloc = 0 
     73      IF( ln_vvl_zstar )   dom_vvl_alloc = 0 
    8374      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    8475         ALLOCATE( tilde_e3t_b(jpi,jpj,jpk)  , tilde_e3t_n(jpi,jpj,jpk) , tilde_e3t_a(jpi,jpj,jpk) ,   & 
     
    9586         IF( dom_vvl_alloc /= 0 )   CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 
    9687      ENDIF 
    97  
     88      ! 
    9889   END FUNCTION dom_vvl_alloc 
    9990 
     
    358349            DO jj = 1, jpjm1 
    359350               DO ji = 1, fs_jpim1   ! vector opt. 
    360                   un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * re2u_e1u(ji,jj) & 
    361                                   & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
    362                   vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * re1v_e2v(ji,jj) &  
    363                                   & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
     351                  un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * e2_e1u(ji,jj)    & 
     352                     &                      * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
     353                  vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * e1_e2v(ji,jj)    &  
     354                     &                      * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
    364355                  zwu(ji,jj) = zwu(ji,jj) + un_td(ji,jj,jk) 
    365356                  zwv(ji,jj) = zwv(ji,jj) + vn_td(ji,jj,jk) 
     
    380371                  tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + (   un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk)    & 
    381372                     &                                          +     vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk)    & 
    382                      &                                            ) * r1_e12t(ji,jj) 
     373                     &                                            ) * r1_e1e2t(ji,jj) 
    383374               END DO 
    384375            END DO 
     
    671662      !!                - vertical interpolation: simple averaging 
    672663      !!---------------------------------------------------------------------- 
    673       !! * Arguments 
    674664      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
    675665      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
    676666      CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
    677667      !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    678       !! * Local declarations 
     668      ! 
    679669      INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    680670      LOGICAL ::   l_is_orca                                           ! local logical 
     
    685675      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) l_is_orca = .TRUE.      ! ORCA R2 configuration - will need to correct some locations 
    686676 
    687       SELECT CASE ( pout ) 
    688          !               ! ------------------------------------- ! 
    689       CASE( 'U' )        ! interpolation from T-point to U-point ! 
    690          !               ! ------------------------------------- ! 
    691          ! horizontal surface weighted interpolation 
    692          DO jk = 1, jpk 
     677      SELECT CASE ( pout )     
     678      !                             ! ------------------------------------- ! 
     679      CASE( 'U' )                   ! interpolation from T-point to U-point ! 
     680         !                          ! ------------------------------------- ! 
     681         DO jk = 1, jpk                ! horizontal surface weighted interpolation 
    693682            DO jj = 1, jpjm1 
    694683               DO ji = 1, fs_jpim1   ! vector opt. 
    695                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * r1_e12u(ji,jj)                                   & 
    696                      &                       * (   e12t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
    697                      &                           + e12t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) ) 
     684                  pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * r1_e1e2u(ji,jj)                                   & 
     685                     &                       * (   e1e2t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
     686                     &                           + e1e2t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) ) 
    698687               END DO 
    699688            END DO 
    700689         END DO 
    701          ! 
    702          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    703          ! boundary conditions 
    704          CALL lbc_lnk( pe3_out(:,:,:), 'U', 1. ) 
     690         CALL lbc_lnk( pe3_out(:,:,:), 'U', 1. )         ! boundary conditions 
    705691         pe3_out(:,:,:) = pe3_out(:,:,:) + e3u_0(:,:,:) 
    706          !               ! ------------------------------------- ! 
    707       CASE( 'V' )        ! interpolation from T-point to V-point ! 
    708          !               ! ------------------------------------- ! 
    709          ! horizontal surface weighted interpolation 
    710          DO jk = 1, jpk 
     692         ! 
     693         !                          ! ------------------------------------- ! 
     694      CASE( 'V' )                   ! interpolation from T-point to V-point ! 
     695         !                          ! ------------------------------------- ! 
     696         DO jk = 1, jpk                ! horizontal surface weighted interpolation 
    711697            DO jj = 1, jpjm1 
    712698               DO ji = 1, fs_jpim1   ! vector opt. 
    713                   pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk) * r1_e12v(ji,jj)                                   & 
    714                      &                       * (   e12t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
    715                      &                           + e12t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) ) 
     699                  pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk) * r1_e1e2v(ji,jj)                                   & 
     700                     &                       * (   e1e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
     701                     &                           + e1e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) ) 
    716702               END DO 
    717703            END DO 
    718704         END DO 
    719          ! 
    720          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    721          ! boundary conditions 
    722          CALL lbc_lnk( pe3_out(:,:,:), 'V', 1. ) 
     705         CALL lbc_lnk( pe3_out(:,:,:), 'V', 1. )         ! boundary conditions 
    723706         pe3_out(:,:,:) = pe3_out(:,:,:) + e3v_0(:,:,:) 
    724          !               ! ------------------------------------- ! 
    725       CASE( 'F' )        ! interpolation from U-point to F-point ! 
    726          !               ! ------------------------------------- ! 
    727          ! horizontal surface weighted interpolation 
    728          DO jk = 1, jpk 
     707         ! 
     708         !                          ! ------------------------------------- ! 
     709      CASE( 'F' )                   ! interpolation from U-point to F-point ! 
     710         !                          ! ------------------------------------- ! 
     711         DO jk = 1, jpk                ! horizontal surface weighted interpolation 
    729712            DO jj = 1, jpjm1 
    730713               DO ji = 1, fs_jpim1   ! vector opt. 
    731                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e12f(ji,jj)               & 
    732                      &                       * (   e12u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
    733                      &                           + e12u(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3u_0(ji,jj+1,jk) ) ) 
     714                  pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e1e2f(ji,jj)               & 
     715                     &                       * (   e1e2u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
     716                     &                           + e1e2u(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3u_0(ji,jj+1,jk) ) ) 
    734717               END DO 
    735718            END DO 
    736719         END DO 
    737          ! 
    738          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    739720         ! boundary conditions 
    740721         CALL lbc_lnk( pe3_out(:,:,:), 'F', 1. ) 
    741722         pe3_out(:,:,:) = pe3_out(:,:,:) + e3f_0(:,:,:) 
    742          !               ! ------------------------------------- ! 
    743       CASE( 'W' )        ! interpolation from T-point to W-point ! 
    744          !               ! ------------------------------------- ! 
    745          ! vertical simple interpolation 
     723         ! 
     724         !                          ! ------------------------------------- ! 
     725      CASE( 'W' )                   ! interpolation from T-point to W-point ! 
     726         !                          ! ------------------------------------- ! 
     727         !                             ! vertical simple interpolation 
    746728         pe3_out(:,:,1) = e3w_0(:,:,1) + pe3_in(:,:,1) - e3t_0(:,:,1) 
    747          ! - ML - The use of mask in this formaula enables the special treatment of the last w- point without indirect adressing 
     729         ! - ML - The use of mask in this formaula enables the special treatment of the last w-point without indirect adressing 
    748730         DO jk = 2, jpk 
    749731            pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1.0_wp - 0.5_wp * tmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )   & 
    750732               &                            +            0.5_wp * tmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
    751733         END DO 
    752          !               ! -------------------------------------- ! 
    753       CASE( 'UW' )       ! interpolation from U-point to UW-point ! 
    754          !               ! -------------------------------------- ! 
    755          ! vertical simple interpolation 
     734         !                          ! -------------------------------------- ! 
     735      CASE( 'UW' )                  ! interpolation from U-point to UW-point ! 
     736         !                          ! -------------------------------------- ! 
     737         !                             ! vertical simple interpolation 
    756738         pe3_out(:,:,1) = e3uw_0(:,:,1) + pe3_in(:,:,1) - e3u_0(:,:,1) 
    757739         ! - ML - The use of mask in this formaula enables the special treatment of the last w- point without indirect adressing 
     
    760742               &                             +            0.5_wp * umask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
    761743         END DO 
    762          !               ! -------------------------------------- ! 
    763       CASE( 'VW' )       ! interpolation from V-point to VW-point ! 
    764          !               ! -------------------------------------- ! 
    765          ! vertical simple interpolation 
     744         !                          ! -------------------------------------- ! 
     745      CASE( 'VW' )                  ! interpolation from V-point to VW-point ! 
     746         !                          ! -------------------------------------- ! 
     747         !                             ! vertical simple interpolation 
    766748         pe3_out(:,:,1) = e3vw_0(:,:,1) + pe3_in(:,:,1) - e3v_0(:,:,1) 
    767749         ! - ML - The use of mask in this formaula enables the special treatment of the last w- point without indirect adressing 
     
    770752               &                             +            0.5_wp * vmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
    771753         END DO 
     754         ! 
    772755      END SELECT 
    773756      ! 
    774  
    775757      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_interpol') 
    776  
     758      ! 
    777759   END SUBROUTINE dom_vvl_interpol 
     760 
    778761 
    779762   SUBROUTINE dom_vvl_rst( kt, cdrw ) 
     
    982965   END SUBROUTINE dom_vvl_ctl 
    983966 
    984    SUBROUTINE dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    985       !!--------------------------------------------------------------------- 
    986       !!                   ***  ROUTINE dom_vvl_orca_fix  *** 
    987       !!                      
    988       !! ** Purpose :   Correct surface weighted, horizontally interpolated,  
    989       !!                scale factors at locations that have been individually 
    990       !!                modified in domhgr. Such modifications break the 
    991       !!                relationship between e12t and e1u*e2u etc. 
    992       !!                Recompute some scale factors ignoring the modified metric. 
    993       !!---------------------------------------------------------------------- 
    994       !! * Arguments 
    995       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
    996       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
    997       CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
    998       !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    999       !! * Local declarations 
    1000       INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    1001       INTEGER ::   ij0, ij1, ii0, ii1                                  ! dummy loop indices 
    1002       !! acc 
    1003       !! Hmm with the time splitting these "fixes" seem to do more harm than good. Temporarily disabled for 
    1004       !! the ORCA2 tests (by changing jp_cfg test from 2 to 3) pending further investigations 
    1005       !!  
    1006       !                                                ! ===================== 
    1007       IF( cp_cfg == "orca" .AND. jp_cfg == 3 ) THEN    ! ORCA R2 configuration 
    1008          !                                             ! ===================== 
    1009       !! acc 
    1010          IF( nn_cla == 0 ) THEN 
    1011             ! 
    1012             ii0 = 139   ;   ii1 = 140        ! Gibraltar Strait (e2u was modified) 
    1013             ij0 = 102   ;   ij1 = 102 
    1014             DO jk = 1, jpkm1 
    1015                DO jj = mj0(ij0), mj1(ij1) 
    1016                   DO ji = mi0(ii0), mi1(ii1) 
    1017                      SELECT CASE ( pout ) 
    1018                      CASE( 'U' ) 
    1019                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1020                        &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1021                        &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1022                        &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1023                      CASE( 'F' ) 
    1024                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1025                        &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1026                        &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1027                        &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1028                      END SELECT 
    1029                   END DO 
    1030                END DO 
    1031             END DO 
    1032             ! 
    1033             ii0 = 160   ;   ii1 = 160        ! Bab el Mandeb (e2u and e1v were modified) 
    1034             ij0 =  88   ;   ij1 =  88 
    1035             DO jk = 1, jpkm1 
    1036                DO jj = mj0(ij0), mj1(ij1) 
    1037                   DO ji = mi0(ii0), mi1(ii1) 
    1038                      SELECT CASE ( pout ) 
    1039                      CASE( 'U' ) 
    1040                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1041                        &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1042                        &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1043                        &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1044                      CASE( 'V' ) 
    1045                         pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1046                        &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1047                        &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1048                        &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1049                      CASE( 'F' ) 
    1050                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1051                        &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1052                        &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1053                        &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1054                      END SELECT 
    1055                   END DO 
    1056                END DO 
    1057             END DO 
    1058          ENDIF 
    1059  
    1060          ii0 = 145   ;   ii1 = 146        ! Danish Straits (e2u was modified) 
    1061          ij0 = 116   ;   ij1 = 116 
    1062          DO jk = 1, jpkm1 
    1063             DO jj = mj0(ij0), mj1(ij1) 
    1064                DO ji = mi0(ii0), mi1(ii1) 
    1065                   SELECT CASE ( pout ) 
    1066                   CASE( 'U' ) 
    1067                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1068                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1069                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1070                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1071                   CASE( 'F' ) 
    1072                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1073                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1074                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1075                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1076                   END SELECT 
    1077                END DO 
    1078             END DO 
    1079          END DO 
    1080       ENDIF 
    1081       ! 
    1082          !                                             ! ===================== 
    1083       IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
    1084          !                                             ! ===================== 
    1085          ! 
    1086          ii0 = 281   ;   ii1 = 282        ! Gibraltar Strait (e2u was modified) 
    1087          ij0 = 200   ;   ij1 = 200 
    1088          DO jk = 1, jpkm1 
    1089             DO jj = mj0(ij0), mj1(ij1) 
    1090                DO ji = mi0(ii0), mi1(ii1) 
    1091                   SELECT CASE ( pout ) 
    1092                   CASE( 'U' ) 
    1093                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1094                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1095                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1096                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1097                   CASE( 'F' ) 
    1098                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1099                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1100                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1101                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1102                   END SELECT 
    1103                END DO 
    1104             END DO 
    1105          END DO 
    1106          ! 
    1107          ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait (e2u was modified) 
    1108          ij0 = 208   ;   ij1 = 208 
    1109          DO jk = 1, jpkm1 
    1110             DO jj = mj0(ij0), mj1(ij1) 
    1111                DO ji = mi0(ii0), mi1(ii1) 
    1112                   SELECT CASE ( pout ) 
    1113                   CASE( 'U' ) 
    1114                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
    1115                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1116                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1117                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1118                   CASE( 'F' ) 
    1119                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
    1120                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1121                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1122                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1123                   END SELECT 
    1124                END DO 
    1125             END DO 
    1126          END DO 
    1127          ! 
    1128          ii0 =  44   ;   ii1 =  44        ! Lombok Strait (e1v was modified) 
    1129          ij0 = 124   ;   ij1 = 125 
    1130          DO jk = 1, jpkm1 
    1131             DO jj = mj0(ij0), mj1(ij1) 
    1132                DO ji = mi0(ii0), mi1(ii1) 
    1133                   SELECT CASE ( pout ) 
    1134                   CASE( 'V' ) 
    1135                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1136                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1137                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1138                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1139                   END SELECT 
    1140                END DO 
    1141             END DO 
    1142          END DO 
    1143          ! 
    1144          ii0 =  48   ;   ii1 =  48        ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 
    1145          ij0 = 124   ;   ij1 = 125 
    1146          DO jk = 1, jpkm1 
    1147             DO jj = mj0(ij0), mj1(ij1) 
    1148                DO ji = mi0(ii0), mi1(ii1) 
    1149                   SELECT CASE ( pout ) 
    1150                   CASE( 'V' ) 
    1151                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1152                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1153                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1154                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1155                   END SELECT 
    1156                END DO 
    1157             END DO 
    1158          END DO 
    1159          ! 
    1160          ii0 =  53   ;   ii1 =  53        ! Ombai Strait (e1v was modified) 
    1161          ij0 = 124   ;   ij1 = 125 
    1162          DO jk = 1, jpkm1 
    1163             DO jj = mj0(ij0), mj1(ij1) 
    1164                DO ji = mi0(ii0), mi1(ii1) 
    1165                   SELECT CASE ( pout ) 
    1166                   CASE( 'V' ) 
    1167                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1168                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1169                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1170                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1171                   END SELECT 
    1172                END DO 
    1173             END DO 
    1174          END DO 
    1175          ! 
    1176          ii0 =  56   ;   ii1 =  56        ! Timor Passage (e1v was modified) 
    1177          ij0 = 124   ;   ij1 = 125 
    1178          DO jk = 1, jpkm1 
    1179             DO jj = mj0(ij0), mj1(ij1) 
    1180                DO ji = mi0(ii0), mi1(ii1) 
    1181                   SELECT CASE ( pout ) 
    1182                   CASE( 'V' ) 
    1183                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1184                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1185                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1186                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1187                   END SELECT 
    1188                END DO 
    1189             END DO 
    1190          END DO 
    1191          ! 
    1192          ii0 =  55   ;   ii1 =  55        ! West Halmahera Strait (e1v was modified) 
    1193          ij0 = 141   ;   ij1 = 142 
    1194          DO jk = 1, jpkm1 
    1195             DO jj = mj0(ij0), mj1(ij1) 
    1196                DO ji = mi0(ii0), mi1(ii1) 
    1197                   SELECT CASE ( pout ) 
    1198                   CASE( 'V' ) 
    1199                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1200                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1201                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1202                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1203                   END SELECT 
    1204                END DO 
    1205             END DO 
    1206          END DO 
    1207          ! 
    1208          ii0 =  58   ;   ii1 =  58        ! East Halmahera Strait (e1v was modified) 
    1209          ij0 = 141   ;   ij1 = 142 
    1210          DO jk = 1, jpkm1 
    1211             DO jj = mj0(ij0), mj1(ij1) 
    1212                DO ji = mi0(ii0), mi1(ii1) 
    1213                   SELECT CASE ( pout ) 
    1214                   CASE( 'V' ) 
    1215                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1216                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1217                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1218                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1219                   END SELECT 
    1220                END DO 
    1221             END DO 
    1222          END DO 
    1223       ENDIF 
    1224          !                                             ! ===================== 
    1225       IF( cp_cfg == "orca" .AND. jp_cfg == 05 ) THEN   ! ORCA R05 configuration 
    1226          !                                             ! ===================== 
    1227          ! 
    1228          ii0 = 563   ;   ii1 = 564        ! Gibraltar Strait (e2u was modified) 
    1229          ij0 = 327   ;   ij1 = 327 
    1230          DO jk = 1, jpkm1 
    1231             DO jj = mj0(ij0), mj1(ij1) 
    1232                DO ji = mi0(ii0), mi1(ii1) 
    1233                   SELECT CASE ( pout ) 
    1234                   CASE( 'U' ) 
    1235                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1236                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1237                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1238                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1239                   CASE( 'F' ) 
    1240                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1241                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1242                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1243                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1244                   END SELECT 
    1245                END DO 
    1246             END DO 
    1247          END DO 
    1248          ! 
    1249          ii0 = 627   ;   ii1 = 628        ! Bosphorus Strait (e2u was modified) 
    1250          ij0 = 343   ;   ij1 = 343 
    1251          DO jk = 1, jpkm1 
    1252             DO jj = mj0(ij0), mj1(ij1) 
    1253                DO ji = mi0(ii0), mi1(ii1) 
    1254                   SELECT CASE ( pout ) 
    1255                   CASE( 'U' ) 
    1256                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
    1257                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1258                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1259                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1260                   CASE( 'F' ) 
    1261                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
    1262                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1263                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1264                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1265                   END SELECT 
    1266                END DO 
    1267             END DO 
    1268          END DO 
    1269          ! 
    1270          ii0 =  93   ;   ii1 =  94        ! Sumba Strait (e2u was modified) 
    1271          ij0 = 232   ;   ij1 = 232 
    1272          DO jk = 1, jpkm1 
    1273             DO jj = mj0(ij0), mj1(ij1) 
    1274                DO ji = mi0(ii0), mi1(ii1) 
    1275                   SELECT CASE ( pout ) 
    1276                   CASE( 'U' ) 
    1277                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1278                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1279                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1280                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1281                   CASE( 'F' ) 
    1282                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1283                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1284                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1285                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1286                   END SELECT 
    1287                END DO 
    1288             END DO 
    1289          END DO 
    1290          ! 
    1291          ii0 = 103   ;   ii1 = 103        ! Ombai Strait (e2u was modified) 
    1292          ij0 = 232   ;   ij1 = 232 
    1293          DO jk = 1, jpkm1 
    1294             DO jj = mj0(ij0), mj1(ij1) 
    1295                DO ji = mi0(ii0), mi1(ii1) 
    1296                   SELECT CASE ( pout ) 
    1297                   CASE( 'U' ) 
    1298                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1299                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1300                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1301                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1302                   CASE( 'F' ) 
    1303                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1304                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1305                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1306                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1307                   END SELECT 
    1308                END DO 
    1309             END DO 
    1310          END DO 
    1311          ! 
    1312          ii0 =  15   ;   ii1 =  15        ! Palk Strait (e2u was modified) 
    1313          ij0 = 270   ;   ij1 = 270 
    1314          DO jk = 1, jpkm1 
    1315             DO jj = mj0(ij0), mj1(ij1) 
    1316                DO ji = mi0(ii0), mi1(ii1) 
    1317                   SELECT CASE ( pout ) 
    1318                   CASE( 'U' ) 
    1319                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1320                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1321                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1322                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1323                   CASE( 'F' ) 
    1324                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1325                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1326                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1327                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1328                   END SELECT 
    1329                END DO 
    1330             END DO 
    1331          END DO 
    1332          ! 
    1333          ii0 =  87   ;   ii1 =  87        ! Lombok Strait (e1v was modified) 
    1334          ij0 = 232   ;   ij1 = 233 
    1335          DO jk = 1, jpkm1 
    1336             DO jj = mj0(ij0), mj1(ij1) 
    1337                DO ji = mi0(ii0), mi1(ii1) 
    1338                   SELECT CASE ( pout ) 
    1339                   CASE( 'V' ) 
    1340                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1341                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1342                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1343                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1344                   END SELECT 
    1345                END DO 
    1346             END DO 
    1347          END DO 
    1348          ! 
    1349          ii0 = 662   ;   ii1 = 662        ! Bab el Mandeb (e1v was modified) 
    1350          ij0 = 276   ;   ij1 = 276 
    1351          DO jk = 1, jpkm1 
    1352             DO jj = mj0(ij0), mj1(ij1) 
    1353                DO ji = mi0(ii0), mi1(ii1) 
    1354                   SELECT CASE ( pout ) 
    1355                   CASE( 'V' ) 
    1356                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1357                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1358                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1359                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1360                   END SELECT 
    1361                END DO 
    1362             END DO 
    1363          END DO 
    1364       ENDIF 
    1365    END SUBROUTINE dom_vvl_orca_fix 
    1366  
    1367967   !!====================================================================== 
    1368968END MODULE domvvl 
Note: See TracChangeset for help on using the changeset viewer.