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 5989 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90 – NEMO

Ignore:
Timestamp:
2015-12-03T09:10:32+01:00 (8 years ago)
Author:
deazer
Message:

Merging TMB and 25h diagnostics to head of trunk
added brief documentation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5260 r5989  
    1111   !!             3.5  ! 2013-07  (J. Chanut) Switch to Forward-backward time stepping 
    1212   !!             3.6  ! 2013-11  (A. Coward) Update for z-tilde compatibility 
     13   !!             3.7  ! 2015-11  (J. Chanut) free surface simplification 
    1314   !!--------------------------------------------------------------------- 
    14 #if defined key_dynspg_ts   ||   defined key_esopa 
    1515   !!---------------------------------------------------------------------- 
    16    !!   'key_dynspg_ts'         split explicit free surface 
     16   !!                       split explicit free surface 
    1717   !!---------------------------------------------------------------------- 
    1818   !!   dyn_spg_ts  : compute surface pressure gradient trend using a time- 
     
    2323   USE sbc_oce         ! surface boundary condition: ocean 
    2424   USE sbcisf          ! ice shelf variable (fwfisf) 
    25    USE dynspg_oce      ! surface pressure gradient variables 
    2625   USE phycst          ! physical constants 
    2726   USE dynvor          ! vorticity term 
    2827   USE bdy_par         ! for lk_bdy 
    29    USE bdytides        ! open boundary condition data      
     28   USE bdytides        ! open boundary condition data 
    3029   USE bdydyn2d        ! open boundary conditions on barotropic variables 
    3130   USE sbctide         ! tides 
     
    7069   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
    7170 
    72    ! Arrays below are saved to allow testing of the "no time averaging" option 
    73    ! If this option is not retained, these could be replaced by temporary arrays 
    74    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  sshbb_e, sshb_e, & ! Instantaneous barotropic arrays 
    75                                                    ubb_e, ub_e,     & 
    76                                                    vbb_e, vb_e 
    77  
    7871   !! * Substitutions 
    7972#  include "domzgr_substitute.h90" 
     
    9083      !!                  ***  routine dyn_spg_ts_alloc  *** 
    9184      !!---------------------------------------------------------------------- 
    92       INTEGER :: ierr(3) 
     85      INTEGER :: ierr(4) 
    9386      !!---------------------------------------------------------------------- 
    9487      ierr(:) = 0 
    9588 
    96       ALLOCATE( sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 
    97          &      ub_e(jpi,jpj)  , vb_e(jpi,jpj)   , & 
    98          &      ubb_e(jpi,jpj) , vbb_e(jpi,jpj)  , STAT= ierr(1) ) 
     89      ALLOCATE( ssha_e(jpi,jpj),  sshn_e(jpi,jpj), sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 
     90         &        ua_e(jpi,jpj),    un_e(jpi,jpj),   ub_e(jpi,jpj),   ubb_e(jpi,jpj), & 
     91         &        va_e(jpi,jpj),    vn_e(jpi,jpj),   vb_e(jpi,jpj),   vbb_e(jpi,jpj), & 
     92         &        hu_e(jpi,jpj),   hur_e(jpi,jpj),   hv_e(jpi,jpj),   hvr_e(jpi,jpj), STAT= ierr(1) ) 
    9993 
    10094      ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT= ierr(2) ) 
    10195 
    102       IF( ln_dynvor_een .or. ln_dynvor_een_old ) ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , &  
    103                                                     &      ftsw(jpi,jpj) , ftse(jpi,jpj) , STAT=ierr(3) ) 
     96      IF( ln_dynvor_een ) ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , &  
     97         &                          ftsw(jpi,jpj) , ftse(jpi,jpj) , STAT=ierr(3) ) 
     98 
     99      ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj), un_adv(jpi,jpj), vn_adv(jpi,jpj), & 
     100#if defined key_agrif 
     101         &      ub2_i_b(jpi,jpj), vb2_i_b(jpi,jpj)                              , & 
     102#endif 
     103         &      STAT= ierr(4)) 
    104104 
    105105      dyn_spg_ts_alloc = MAXVAL(ierr(:)) 
    106106 
    107107      IF( lk_mpp                )   CALL mpp_sum( dyn_spg_ts_alloc ) 
    108       IF( dyn_spg_ts_alloc /= 0 )   CALL ctl_warn('dynspg_oce_alloc: failed to allocate arrays') 
     108      IF( dyn_spg_ts_alloc /= 0 )   CALL ctl_warn('dyn_spg_ts_alloc: failed to allocate arrays') 
    109109      ! 
    110110   END FUNCTION dyn_spg_ts_alloc 
     111 
    111112 
    112113   SUBROUTINE dyn_spg_ts( kt ) 
     
    148149      REAL(wp) ::   zmdi 
    149150      REAL(wp) ::   zraur, z1_2dt_b, z2dt_bf    ! local scalars 
    150       REAL(wp) ::   zx1, zy1, zx2, zy2         !   -      - 
    151       REAL(wp) ::   z1_12, z1_8, z1_4, z1_2    !   -      - 
    152       REAL(wp) ::   zu_spg, zv_spg             !   -      - 
    153       REAL(wp) ::   zhura, zhvra               !   -      - 
    154       REAL(wp) ::   za0, za1, za2, za3           !   -      - 
    155       ! 
    156       REAL(wp), POINTER, DIMENSION(:,:) :: zun_e, zvn_e, zsshp2_e 
     151      REAL(wp) ::   zx1, zy1, zx2, zy2          !   -      - 
     152      REAL(wp) ::   z1_12, z1_8, z1_4, z1_2  !   -      - 
     153      REAL(wp) ::   zu_spg, zv_spg              !   -      - 
     154      REAL(wp) ::   zhura, zhvra          !   -      - 
     155      REAL(wp) ::   za0, za1, za2, za3    !   -      - 
     156      ! 
     157      REAL(wp), POINTER, DIMENSION(:,:) :: zsshp2_e 
    157158      REAL(wp), POINTER, DIMENSION(:,:) :: zu_trd, zv_trd, zu_frc, zv_frc, zssh_frc 
    158       REAL(wp), POINTER, DIMENSION(:,:) :: zu_sum, zv_sum, zwx, zwy, zhdiv 
     159      REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zhdiv 
    159160      REAL(wp), POINTER, DIMENSION(:,:) :: zhup2_e, zhvp2_e, zhust_e, zhvst_e 
    160161      REAL(wp), POINTER, DIMENSION(:,:) :: zsshu_a, zsshv_a 
     
    166167      !                                         !* Allocate temporary arrays 
    167168      CALL wrk_alloc( jpi, jpj, zsshp2_e, zhdiv ) 
    168       CALL wrk_alloc( jpi, jpj, zu_trd, zv_trd, zun_e, zvn_e  ) 
    169       CALL wrk_alloc( jpi, jpj, zwx, zwy, zu_sum, zv_sum, zssh_frc, zu_frc, zv_frc) 
     169      CALL wrk_alloc( jpi, jpj, zu_trd, zv_trd) 
     170      CALL wrk_alloc( jpi, jpj, zwx, zwy, zssh_frc, zu_frc, zv_frc) 
    170171      CALL wrk_alloc( jpi, jpj, zhup2_e, zhvp2_e, zhust_e, zhvst_e) 
    171172      CALL wrk_alloc( jpi, jpj, zsshu_a, zsshv_a                                   ) 
     
    191192      ! 
    192193                                                       ! time offset in steps for bdy data update 
    193       IF (.NOT.ln_bt_fw) THEN ; noffset=-2*nn_baro ; ELSE ;  noffset = 0 ; ENDIF 
     194      IF (.NOT.ln_bt_fw) THEN ; noffset=-nn_baro ; ELSE ;  noffset = 0 ; ENDIF 
    194195      ! 
    195196      IF( kt == nit000 ) THEN                !* initialisation 
     
    223224      ! 
    224225      IF ( kt == nit000 .OR. lk_vvl ) THEN 
    225          IF ( ln_dynvor_een_old ) THEN 
    226             DO jj = 1, jpjm1 
    227                DO ji = 1, jpim1 
    228                   zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                    & 
    229                         &          ht(ji  ,jj  ) + ht(ji+1,jj  )   ) / 4._wp   
    230                   IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zwz(ji,jj) 
    231                END DO 
    232             END DO 
     226         IF ( ln_dynvor_een ) THEN              !==  EEN scheme  ==! 
     227            SELECT CASE( nn_een_e3f )              !* ff/e3 at F-point 
     228            CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
     229               DO jj = 1, jpjm1 
     230                  DO ji = 1, jpim1 
     231                     zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                    & 
     232                        &             ht(ji  ,jj  ) + ht(ji+1,jj  )   ) / 4._wp   
     233                     IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff(ji,jj) / zwz(ji,jj) 
     234                  END DO 
     235               END DO 
     236            CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
     237               DO jj = 1, jpjm1 
     238                  DO ji = 1, jpim1 
     239                     zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                     & 
     240                        &             ht(ji  ,jj  ) + ht(ji+1,jj  )   )                   & 
     241                        &       / ( MAX( 1._wp, tmask(ji  ,jj+1, 1) + tmask(ji+1,jj+1, 1) +    & 
     242                        &                       tmask(ji  ,jj  , 1) + tmask(ji+1,jj  , 1) ) ) 
     243                     IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff(ji,jj) / zwz(ji,jj) 
     244                  END DO 
     245               END DO 
     246            END SELECT 
    233247            CALL lbc_lnk( zwz, 'F', 1._wp ) 
    234             zwz(:,:) = ff(:,:) * zwz(:,:) 
    235  
     248            ! 
    236249            ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    237250            DO jj = 2, jpj 
    238                DO ji = fs_2, jpi   ! vector opt. 
     251               DO ji = 2, jpi 
    239252                  ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    240253                  ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
     
    243256               END DO 
    244257            END DO 
    245          ELSE IF ( ln_dynvor_een ) THEN 
    246             DO jj = 1, jpjm1 
    247                DO ji = 1, jpim1 
    248                   zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                     & 
    249                         &          ht(ji  ,jj  ) + ht(ji+1,jj  )   )                   & 
    250                         &      / ( MAX( 1.0_wp, tmask(ji  ,jj+1, 1) + tmask(ji+1,jj+1, 1) +    & 
    251                         &                       tmask(ji  ,jj  , 1) + tmask(ji+1,jj  , 1) ) ) 
    252                   IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zwz(ji,jj) 
    253                END DO 
    254             END DO 
    255             CALL lbc_lnk( zwz, 'F', 1._wp ) 
    256             zwz(:,:) = ff(:,:) * zwz(:,:) 
    257  
    258             ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    259             DO jj = 2, jpj 
    260                DO ji = fs_2, jpi   ! vector opt. 
    261                   ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    262                   ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
    263                   ftse(ji,jj) = zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) 
    264                   ftsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
    265                END DO 
    266             END DO 
    267          ELSE 
     258            ! 
     259         ELSE                                !== all other schemes (ENE, ENS, MIX) 
    268260            zwz(:,:) = 0._wp 
    269             zhf(:,:) = 0. 
     261            zhf(:,:) = 0._wp 
    270262            IF ( .not. ln_sco ) THEN 
     263 
     264!!gm  agree the JC comment  : this should be done in a much clear way 
     265 
    271266! JC: It not clear yet what should be the depth at f-points over land in z-coordinate case 
    272267!     Set it to zero for the time being  
     
    280275 
    281276            DO jj = 1, jpjm1 
    282                zhf(:,jj) = zhf(:,jj)*(1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
     277               zhf(:,jj) = zhf(:,jj) * (1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
    283278            END DO 
    284279 
     
    301296      ! If forward start at previous time step, and centered integration,  
    302297      ! then update averaging weights: 
    303       IF ((.NOT.ln_bt_fw).AND.((neuler==0).AND.(kt==nit000+1))) THEN 
     298      IF (.NOT.ln_bt_fw .AND.( neuler==0 .AND. kt==nit000+1 ) ) THEN 
    304299         ll_fw_start=.FALSE. 
    305300         CALL ts_wgt(ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2) 
     
    342337         DO jj = 2, jpjm1 
    343338            DO ji = fs_2, fs_jpim1   ! vector opt. 
    344                zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 
    345                zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
    346                zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 
    347                zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     339               zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 
     340               zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     341               zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 
     342               zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    348343               ! energy conserving formulation for planetary vorticity term 
    349344               zu_trd(ji,jj) = z1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
     
    356351            DO ji = fs_2, fs_jpim1   ! vector opt. 
    357352               zy1 =   z1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) & 
    358                  &            + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
     353                 &            + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    359354               zx1 = - z1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) & 
    360                  &            + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     355                 &            + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    361356               zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    362357               zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     
    364359         END DO 
    365360         ! 
    366       ELSEIF ( ln_dynvor_een .or. ln_dynvor_een_old ) THEN  ! enstrophy and energy conserving scheme 
     361      ELSEIF ( ln_dynvor_een ) THEN  ! enstrophy and energy conserving scheme 
    367362         DO jj = 2, jpjm1 
    368363            DO ji = fs_2, fs_jpim1   ! vector opt. 
    369                zu_trd(ji,jj) = + z1_12 / e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
    370                 &                                      + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
    371                 &                                      + ftse(ji,jj  ) * zwy(ji  ,jj-1) & 
    372                 &                                      + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    373                zv_trd(ji,jj) = - z1_12 / e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) & 
    374                 &                                      + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
    375                 &                                      + ftnw(ji,jj  ) * zwx(ji-1,jj  ) & 
    376                 &                                      + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
     364               zu_trd(ji,jj) = + z1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
     365                &                                         + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
     366                &                                         + ftse(ji,jj  ) * zwy(ji  ,jj-1) & 
     367                &                                         + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     368               zv_trd(ji,jj) = - z1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) & 
     369                &                                         + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
     370                &                                         + ftnw(ji,jj  ) * zwx(ji-1,jj  ) & 
     371                &                                         + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    377372            END DO 
    378373         END DO 
     
    385380         DO jj = 2, jpjm1  
    386381            DO ji = fs_2, fs_jpim1   ! vector opt. 
    387                zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  sshn(ji+1,jj  ) - sshn(ji  ,jj  )  ) / e1u(ji,jj) 
    388                zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  sshn(ji  ,jj+1) - sshn(ji  ,jj  )  ) / e2v(ji,jj) 
     382               zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  sshn(ji+1,jj  ) - sshn(ji  ,jj  )  ) * r1_e1u(ji,jj) 
     383               zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  sshn(ji  ,jj+1) - sshn(ji  ,jj  )  ) * r1_e2v(ji,jj) 
    389384            END DO 
    390385         END DO 
     
    435430            DO jj = 2, jpjm1               
    436431               DO ji = fs_2, fs_jpim1   ! vector opt. 
    437                   zu_spg =  grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) /e1u(ji,jj) 
    438                   zv_spg =  grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) /e2v(ji,jj) 
     432                  zu_spg =  grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) * r1_e1u(ji,jj) 
     433                  zv_spg =  grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) * r1_e2v(ji,jj) 
    439434                  zu_frc(ji,jj) = zu_frc(ji,jj) + zu_spg 
    440435                  zv_frc(ji,jj) = zv_frc(ji,jj) + zv_spg 
     
    445440               DO ji = fs_2, fs_jpim1   ! vector opt. 
    446441                  zu_spg =  grav * z1_2 * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj)    & 
    447                       &                    + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) /e1u(ji,jj) 
     442                      &                    + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj) 
    448443                  zv_spg =  grav * z1_2 * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj)    & 
    449                       &                    + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) /e2v(ji,jj) 
     444                      &                    + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj) 
    450445                  zu_frc(ji,jj) = zu_frc(ji,jj) + zu_spg 
    451446                  zv_frc(ji,jj) = zv_frc(ji,jj) + zv_spg 
     
    458453      !                                         ! Surface net water flux and rivers 
    459454      IF (ln_bt_fw) THEN 
    460          zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) 
     455         zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 
    461456      ELSE 
    462457         zssh_frc(:,:) = zraur * z1_2 * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    463                 &                        + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) )       ) 
     458                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    464459      ENDIF 
    465460#if defined key_asminc 
    466461      !                                         ! Include the IAU weighted SSH increment 
    467462      IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 
    468          zssh_frc(:,:) = zssh_frc(:,:) + ssh_iau(:,:) 
    469       ENDIF 
    470 #endif 
    471       !                                   !* Fill boundary data arrays with AGRIF 
    472       !                                   ! ------------------------------------- 
     463         zssh_frc(:,:) = zssh_frc(:,:) - ssh_iau(:,:) 
     464      ENDIF 
     465#endif 
     466      !                                   !* Fill boundary data arrays for AGRIF 
     467      !                                   ! ------------------------------------ 
    473468#if defined key_agrif 
    474469         IF( .NOT.Agrif_Root() ) CALL agrif_dta_ts( kt ) 
     
    494489      IF (ln_bt_fw) THEN                  ! FORWARD integration: start from NOW fields                     
    495490         sshn_e(:,:) = sshn (:,:)             
    496          zun_e (:,:) = un_b (:,:)             
    497          zvn_e (:,:) = vn_b (:,:) 
     491         un_e (:,:) = un_b (:,:)             
     492         vn_e (:,:) = vn_b (:,:) 
    498493         ! 
    499494         hu_e  (:,:) = hu   (:,:)        
     
    503498      ELSE                                ! CENTRED integration: start from BEFORE fields 
    504499         sshn_e(:,:) = sshb (:,:) 
    505          zun_e (:,:) = ub_b (:,:)          
    506          zvn_e (:,:) = vb_b (:,:) 
     500         un_e (:,:) = ub_b (:,:)          
     501         vn_e (:,:) = vb_b (:,:) 
    507502         ! 
    508503         hu_e  (:,:) = hu_b (:,:)        
     
    518513      va_b  (:,:) = 0._wp 
    519514      ssha  (:,:) = 0._wp       ! Sum for after averaged sea level 
    520       zu_sum(:,:) = 0._wp       ! Sum for now transport issued from ts loop 
    521       zv_sum(:,:) = 0._wp 
     515      un_adv(:,:) = 0._wp       ! Sum for now transport issued from ts loop 
     516      vn_adv(:,:) = 0._wp 
    522517      !                                             ! ==================== ! 
    523518      DO jn = 1, icycle                             !  sub-time-step loop  ! 
     
    527522         ! Update only tidal forcing at open boundaries 
    528523#if defined key_tide 
    529          IF ( lk_bdy .AND. lk_tide )      CALL bdy_dta_tides( kt, kit=jn, time_offset=(noffset+1) ) 
    530          IF ( ln_tide_pot .AND. lk_tide ) CALL upd_tide( kt, kit=jn, koffset=noffset ) 
     524         IF ( lk_bdy .AND. lk_tide ) CALL bdy_dta_tides( kt, kit=jn, time_offset=(noffset+1) ) 
     525         IF ( ln_tide_pot .AND. lk_tide ) CALL upd_tide( kt, kit=jn, time_offset=noffset ) 
    531526#endif 
    532527         ! 
     
    543538 
    544539         ! Extrapolate barotropic velocities at step jit+0.5: 
    545          ua_e(:,:) = za1 * zun_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 
    546          va_e(:,:) = za1 * zvn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 
     540         ua_e(:,:) = za1 * un_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 
     541         va_e(:,:) = za1 * vn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 
    547542 
    548543         IF( lk_vvl ) THEN                                !* Update ocean depth (variable volume case only) 
     
    553548            DO jj = 2, jpjm1                                    ! Sea Surface Height at u- & v-points 
    554549               DO ji = 2, fs_jpim1   ! Vector opt. 
    555                   zwx(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj)     & 
    556                      &              * ( e12t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    557                      &              +   e12t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
    558                   zwy(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj)     & 
    559                      &              * ( e12t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
    560                      &              +   e12t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
    561                END DO 
    562             END DO 
    563             CALL lbc_lnk( zwx, 'U', 1._wp )    ;   CALL lbc_lnk( zwy, 'V', 1._wp ) 
     550                  zwx(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj)     & 
     551                     &              * ( e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
     552                     &              +   e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
     553                  zwy(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj)     & 
     554                     &              * ( e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     555                     &              +   e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
     556               END DO 
     557            END DO 
     558            CALL lbc_lnk_multi( zwx, 'U', 1._wp, zwy, 'V', 1._wp ) 
    564559            ! 
    565560            zhup2_e (:,:) = hu_0(:,:) + zwx(:,:)                ! Ocean depth at U- and V-points 
     
    606601         ! Sum over sub-time-steps to compute advective velocities 
    607602         za2 = wgtbtp2(jn) 
    608          zu_sum  (:,:) = zu_sum  (:,:) + za2 * zwx  (:,:) / e2u  (:,:) 
    609          zv_sum  (:,:) = zv_sum  (:,:) + za2 * zwy  (:,:) / e1v  (:,:) 
     603         un_adv(:,:) = un_adv(:,:) + za2 * zwx(:,:) * r1_e2u(:,:) 
     604         vn_adv(:,:) = vn_adv(:,:) + za2 * zwy(:,:) * r1_e1v(:,:) 
    610605         ! 
    611606         ! Set next sea level: 
     
    613608            DO ji = fs_2, fs_jpim1   ! vector opt. 
    614609               zhdiv(ji,jj) = (   zwx(ji,jj) - zwx(ji-1,jj)   & 
    615                   &             + zwy(ji,jj) - zwy(ji,jj-1)   ) * r1_e12t(ji,jj) 
     610                  &             + zwy(ji,jj) - zwy(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
    616611            END DO 
    617612         END DO 
     
    631626            DO jj = 2, jpjm1 
    632627               DO ji = 2, jpim1      ! NO Vector Opt. 
    633                   zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj)  & 
    634                      &              * ( e12t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
    635                      &              +   e12t(ji+1,jj  ) * ssha_e(ji+1,jj  ) ) 
    636                   zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj)  & 
    637                      &              * ( e12t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
    638                      &              +   e12t(ji  ,jj+1) * ssha_e(ji  ,jj+1) ) 
    639                END DO 
    640             END DO 
    641             CALL lbc_lnk( zsshu_a, 'U', 1._wp )   ;   CALL lbc_lnk( zsshv_a, 'V', 1._wp ) 
     628                  zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj)  & 
     629                     &              * ( e1e2t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
     630                     &              +   e1e2t(ji+1,jj  ) * ssha_e(ji+1,jj  ) ) 
     631                  zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj)  & 
     632                     &              * ( e1e2t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
     633                     &              +   e1e2t(ji  ,jj+1) * ssha_e(ji  ,jj+1) ) 
     634               END DO 
     635            END DO 
     636            CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) 
    642637         ENDIF    
    643638         !                                  
     
    670665            DO jj = 2, jpjm1                             
    671666               DO ji = 2, jpim1 
    672                   zx1 = z1_2 * umask(ji  ,jj,1) *  r1_e12u(ji  ,jj)    & 
    673                      &      * ( e12t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
    674                      &      +   e12t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
    675                   zy1 = z1_2 * vmask(ji  ,jj,1) *  r1_e12v(ji  ,jj  )  & 
    676                      &       * ( e12t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
    677                      &       +   e12t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
     667                  zx1 = z1_2 * umask(ji  ,jj,1) *  r1_e1e2u(ji  ,jj)    & 
     668                     &      * ( e1e2t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
     669                     &      +   e1e2t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
     670                  zy1 = z1_2 * vmask(ji  ,jj,1) *  r1_e1e2v(ji  ,jj  )  & 
     671                     &       * ( e1e2t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
     672                     &       +   e1e2t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
    678673                  zhust_e(ji,jj) = hu_0(ji,jj) + zx1  
    679674                  zhvst_e(ji,jj) = hv_0(ji,jj) + zy1 
     
    692687            DO jj = 2, jpjm1 
    693688               DO ji = fs_2, fs_jpim1   ! vector opt. 
    694                   zy1 = ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 
    695                   zy2 = ( zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
    696                   zx1 = ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 
    697                   zx2 = ( zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     689                  zy1 = ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 
     690                  zy2 = ( zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     691                  zx1 = ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 
     692                  zx2 = ( zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    698693                  zu_trd(ji,jj) = z1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    699694                  zv_trd(ji,jj) =-z1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
     
    705700               DO ji = fs_2, fs_jpim1   ! vector opt. 
    706701                  zy1 =   z1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) & 
    707                    &             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
     702                   &             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    708703                  zx1 = - z1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) & 
    709                    &             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     704                   &             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    710705                  zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    711706                  zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     
    713708            END DO 
    714709            ! 
    715          ELSEIF ( ln_dynvor_een .or. ln_dynvor_een_old ) THEN !==  energy and enstrophy conserving scheme  ==! 
     710         ELSEIF ( ln_dynvor_een ) THEN !==  energy and enstrophy conserving scheme  ==! 
    716711            DO jj = 2, jpjm1 
    717712               DO ji = fs_2, fs_jpim1   ! vector opt. 
    718                   zu_trd(ji,jj) = + z1_12 / e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
    719                      &                                    + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
    720                      &                                    + ftse(ji,jj  ) * zwy(ji  ,jj-1) &  
    721                      &                                    + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    722                   zv_trd(ji,jj) = - z1_12 / e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) &  
    723                      &                                    + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
    724                      &                                    + ftnw(ji,jj  ) * zwx(ji-1,jj  ) &  
    725                      &                                    + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
     713                  zu_trd(ji,jj) = + z1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
     714                     &                                       + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
     715                     &                                       + ftse(ji,jj  ) * zwy(ji  ,jj-1) &  
     716                     &                                       + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     717                  zv_trd(ji,jj) = - z1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) &  
     718                     &                                       + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
     719                     &                                       + ftnw(ji,jj  ) * zwx(ji-1,jj  ) &  
     720                     &                                       + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    726721               END DO 
    727722            END DO 
     
    733728            DO jj = 2, jpjm1 
    734729               DO ji = fs_2, fs_jpim1   ! vector opt. 
    735                   zu_spg = grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) / e1u(ji,jj) 
    736                   zv_spg = grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) / e2v(ji,jj) 
     730                  zu_spg = grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
     731                  zv_spg = grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
    737732                  zu_trd(ji,jj) = zu_trd(ji,jj) + zu_spg 
    738733                  zv_trd(ji,jj) = zv_trd(ji,jj) + zv_spg 
     
    742737         ! 
    743738         ! Add bottom stresses: 
    744          zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * zun_e(:,:) * hur_e(:,:) 
    745          zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 
     739         zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * un_e(:,:) * hur_e(:,:) 
     740         zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 
    746741         ! 
    747742         ! Surface pressure trend: 
     
    749744            DO ji = fs_2, fs_jpim1   ! vector opt. 
    750745               ! Add surface pressure gradient 
    751                zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) / e1u(ji,jj) 
    752                zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) / e2v(ji,jj) 
     746               zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
     747               zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
    753748               zwx(ji,jj) = zu_spg 
    754749               zwy(ji,jj) = zv_spg 
     
    760755            DO jj = 2, jpjm1 
    761756               DO ji = fs_2, fs_jpim1   ! vector opt. 
    762                   ua_e(ji,jj) = (                                zun_e(ji,jj)   &  
     757                  ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    763758                            &     + rdtbt * (                      zwx(ji,jj)   & 
    764759                            &                                 + zu_trd(ji,jj)   & 
     
    766761                            &   ) * umask(ji,jj,1) 
    767762 
    768                   va_e(ji,jj) = (                                zvn_e(ji,jj)   & 
     763                  va_e(ji,jj) = (                                 vn_e(ji,jj)   & 
    769764                            &     + rdtbt * (                      zwy(ji,jj)   & 
    770765                            &                                 + zv_trd(ji,jj)   & 
     
    781776                  zhvra = vmask(ji,jj,1)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - vmask(ji,jj,1)) 
    782777 
    783                   ua_e(ji,jj) = (                hu_e(ji,jj)  *  zun_e(ji,jj)   &  
     778                  ua_e(ji,jj) = (                hu_e(ji,jj)  *   un_e(ji,jj)   &  
    784779                            &     + rdtbt * ( zhust_e(ji,jj)  *    zwx(ji,jj)   &  
    785780                            &               + zhup2_e(ji,jj)  * zu_trd(ji,jj)   & 
     
    787782                            &   ) * zhura 
    788783 
    789                   va_e(ji,jj) = (                hv_e(ji,jj)  *  zvn_e(ji,jj)   & 
     784                  va_e(ji,jj) = (                hv_e(ji,jj)  *   vn_e(ji,jj)   & 
    790785                            &     + rdtbt * ( zhvst_e(ji,jj)  *    zwy(ji,jj)   & 
    791786                            &               + zhvp2_e(ji,jj)  * zv_trd(ji,jj)   & 
     
    807802         !                                                 !  ----------------------- 
    808803         ! 
    809          CALL lbc_lnk( ua_e  , 'U', -1._wp )               ! local domain boundaries  
    810          CALL lbc_lnk( va_e  , 'V', -1._wp ) 
     804         CALL lbc_lnk_multi( ua_e, 'U', -1._wp, va_e , 'V', -1._wp ) 
    811805 
    812806#if defined key_bdy   
    813807                                                           ! open boundaries 
    814          IF( lk_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, zun_e, zvn_e, hur_e, hvr_e, ssha_e ) 
     808         IF( lk_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
    815809#endif 
    816810#if defined key_agrif                                                            
     
    820814         !                                             !  ---- 
    821815         ubb_e  (:,:) = ub_e  (:,:) 
    822          ub_e   (:,:) = zun_e (:,:) 
    823          zun_e  (:,:) = ua_e  (:,:) 
     816         ub_e   (:,:) = un_e (:,:) 
     817         un_e   (:,:) = ua_e  (:,:) 
    824818         ! 
    825819         vbb_e  (:,:) = vb_e  (:,:) 
    826          vb_e   (:,:) = zvn_e (:,:) 
    827          zvn_e  (:,:) = va_e  (:,:) 
     820         vb_e   (:,:) = vn_e (:,:) 
     821         vn_e   (:,:) = va_e  (:,:) 
    828822         ! 
    829823         sshbb_e(:,:) = sshb_e(:,:) 
     
    850844      ! ----------------------------------------------------------------------------- 
    851845      ! 
    852       ! At this stage ssha holds a time averaged value 
    853       !                                                ! Sea Surface Height at u-,v- and f-points 
    854       IF( lk_vvl ) THEN                                ! (required only in key_vvl case) 
    855          DO jj = 1, jpjm1 
    856             DO ji = 1, jpim1      ! NO Vector Opt. 
    857                zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj) & 
    858                   &              * ( e12t(ji  ,jj) * ssha(ji  ,jj)    & 
    859                   &              +   e12t(ji+1,jj) * ssha(ji+1,jj) ) 
    860                zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj) & 
    861                   &              * ( e12t(ji,jj  ) * ssha(ji,jj  )    & 
    862                   &              +   e12t(ji,jj+1) * ssha(ji,jj+1) ) 
    863             END DO 
    864          END DO 
    865          CALL lbc_lnk( zsshu_a, 'U', 1._wp )   ;   CALL lbc_lnk( zsshv_a, 'V', 1._wp ) ! Boundary conditions 
    866       ENDIF 
    867       ! 
    868846      ! Set advection velocity correction: 
     847      zwx(:,:) = un_adv(:,:) 
     848      zwy(:,:) = vn_adv(:,:) 
    869849      IF (((kt==nit000).AND.(neuler==0)).OR.(.NOT.ln_bt_fw)) THEN      
    870          un_adv(:,:) = zu_sum(:,:)*hur(:,:) 
    871          vn_adv(:,:) = zv_sum(:,:)*hvr(:,:) 
     850         un_adv(:,:) = zwx(:,:)*hur(:,:) 
     851         vn_adv(:,:) = zwy(:,:)*hvr(:,:) 
    872852      ELSE 
    873          un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zu_sum(:,:)) * hur(:,:) 
    874          vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zv_sum(:,:)) * hvr(:,:) 
     853         un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:)) * hur(:,:) 
     854         vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:)) * hvr(:,:) 
    875855      END IF 
    876856 
    877857      IF (ln_bt_fw) THEN ! Save integrated transport for next computation 
    878          ub2_b(:,:) = zu_sum(:,:) 
    879          vb2_b(:,:) = zv_sum(:,:) 
     858         ub2_b(:,:) = zwx(:,:) 
     859         vb2_b(:,:) = zwy(:,:) 
    880860      ENDIF 
    881861      ! 
     
    887867         END DO 
    888868      ELSE 
     869         ! At this stage, ssha has been corrected: compute new depths at velocity points 
     870         DO jj = 1, jpjm1 
     871            DO ji = 1, jpim1      ! NO Vector Opt. 
     872               zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj) & 
     873                  &              * ( e1e2t(ji  ,jj) * ssha(ji  ,jj)    & 
     874                  &              +   e1e2t(ji+1,jj) * ssha(ji+1,jj) ) 
     875               zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj) & 
     876                  &              * ( e1e2t(ji,jj  ) * ssha(ji,jj  )    & 
     877                  &              +   e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
     878            END DO 
     879         END DO 
     880         CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
     881         ! 
    889882         DO jk=1,jpkm1 
    890883            ua(:,:,jk) = ua(:,:,jk) + hur(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b 
     
    905898#if defined key_agrif 
    906899      ! Save time integrated fluxes during child grid integration 
    907       ! (used to update coarse grid transports) 
    908       ! Useless with 2nd order momentum schemes 
     900      ! (used to update coarse grid transports at next time step) 
    909901      ! 
    910902      IF ( (.NOT.Agrif_Root()).AND.(ln_bt_fw) ) THEN 
     
    926918      ! 
    927919      CALL wrk_dealloc( jpi, jpj, zsshp2_e, zhdiv ) 
    928       CALL wrk_dealloc( jpi, jpj, zu_trd, zv_trd, zun_e, zvn_e ) 
    929       CALL wrk_dealloc( jpi, jpj, zwx, zwy, zu_sum, zv_sum, zssh_frc, zu_frc, zv_frc ) 
     920      CALL wrk_dealloc( jpi, jpj, zu_trd, zv_trd ) 
     921      CALL wrk_dealloc( jpi, jpj, zwx, zwy, zssh_frc, zu_frc, zv_frc ) 
    930922      CALL wrk_dealloc( jpi, jpj, zhup2_e, zhvp2_e, zhust_e, zhvst_e ) 
    931923      CALL wrk_dealloc( jpi, jpj, zsshu_a, zsshv_a                                   ) 
     
    10791071      ! 
    10801072      INTEGER  :: ji ,jj 
    1081       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    10821073      REAL(wp) :: zxr2, zyr2, zcmax 
    10831074      REAL(wp), POINTER, DIMENSION(:,:) :: zcu 
    10841075      !! 
    1085       NAMELIST/namsplit/ ln_bt_fw, ln_bt_av, ln_bt_nn_auto, & 
    1086       &                  nn_baro, rn_bt_cmax, nn_bt_flt 
    10871076      !!---------------------------------------------------------------------- 
    10881077      ! 
    1089       REWIND( numnam_ref )              ! Namelist namsplit in reference namelist : time splitting parameters 
    1090       READ  ( numnam_ref, namsplit, IOSTAT = ios, ERR = 901) 
    1091 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsplit in reference namelist', lwp ) 
    1092  
    1093       REWIND( numnam_cfg )              ! Namelist namsplit in configuration namelist : time splitting parameters 
    1094       READ  ( numnam_cfg, namsplit, IOSTAT = ios, ERR = 902 ) 
    1095 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsplit in configuration namelist', lwp ) 
    1096       IF(lwm) WRITE ( numond, namsplit ) 
    1097       ! 
    1098       !         ! Max courant number for ext. grav. waves 
     1078      ! Max courant number for ext. grav. waves 
    10991079      ! 
    11001080      CALL wrk_alloc( jpi, jpj, zcu ) 
    11011081      ! 
    1102       IF (lk_vvl) THEN  
    1103          DO jj = 1, jpj 
    1104             DO ji =1, jpi 
    1105                zxr2 = 1./(e1t(ji,jj)*e1t(ji,jj)) 
    1106                zyr2 = 1./(e2t(ji,jj)*e2t(ji,jj)) 
    1107                zcu(ji,jj) = sqrt(grav*ht_0(ji,jj)*(zxr2 + zyr2) ) 
    1108             END DO 
    1109          END DO 
    1110       ELSE 
    1111          DO jj = 1, jpj 
    1112             DO ji =1, jpi 
    1113                zxr2 = 1./(e1t(ji,jj)*e1t(ji,jj)) 
    1114                zyr2 = 1./(e2t(ji,jj)*e2t(ji,jj)) 
    1115                zcu(ji,jj) = sqrt(grav*ht(ji,jj)*(zxr2 + zyr2) ) 
    1116             END DO 
    1117          END DO 
    1118       ENDIF 
    1119  
    1120       zcmax = MAXVAL(zcu(:,:)) 
     1082      DO jj = 1, jpj 
     1083         DO ji =1, jpi 
     1084            zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 
     1085            zyr2 = r1_e2t(ji,jj) * r1_e2t(ji,jj) 
     1086            zcu(ji,jj) = SQRT( grav * ht_0(ji,jj) * (zxr2 + zyr2) ) 
     1087         END DO 
     1088      END DO 
     1089      ! 
     1090      zcmax = MAXVAL( zcu(:,:) ) 
    11211091      IF( lk_mpp )   CALL mpp_max( zcmax ) 
    11221092 
    11231093      ! Estimate number of iterations to satisfy a max courant number= rn_bt_cmax 
    1124       IF (ln_bt_nn_auto) nn_baro = CEILING( rdt / rn_bt_cmax * zcmax) 
     1094      IF (ln_bt_auto) nn_baro = CEILING( rdt / rn_bt_cmax * zcmax) 
    11251095       
    1126       rdtbt = rdt / FLOAT(nn_baro) 
     1096      rdtbt = rdt / REAL( nn_baro , wp ) 
    11271097      zcmax = zcmax * rdtbt 
    11281098                     ! Print results 
     
    11301100      IF(lwp) WRITE(numout,*) 'dyn_spg_ts : split-explicit free surface' 
    11311101      IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    1132       IF( ln_bt_nn_auto ) THEN 
    1133          IF(lwp) WRITE(numout,*) '     ln_ts_nn_auto=.true. Automatically set nn_baro ' 
     1102      IF( ln_bt_auto ) THEN 
     1103         IF(lwp) WRITE(numout,*) '     ln_ts_auto=.true. Automatically set nn_baro ' 
    11341104         IF(lwp) WRITE(numout,*) '     Max. courant number allowed: ', rn_bt_cmax 
    11351105      ELSE 
    1136          IF(lwp) WRITE(numout,*) '     ln_ts_nn_auto=.false.: Use nn_baro in namelist ' 
     1106         IF(lwp) WRITE(numout,*) '     ln_ts_auto=.false.: Use nn_baro in namelist ' 
    11371107      ENDIF 
    11381108 
     
    11791149   END SUBROUTINE dyn_spg_ts_init 
    11801150 
    1181 #else 
    1182    !!--------------------------------------------------------------------------- 
    1183    !!   Default case :   Empty module   No split explicit free surface 
    1184    !!--------------------------------------------------------------------------- 
    1185 CONTAINS 
    1186    INTEGER FUNCTION dyn_spg_ts_alloc()    ! Dummy function 
    1187       dyn_spg_ts_alloc = 0 
    1188    END FUNCTION dyn_spg_ts_alloc 
    1189    SUBROUTINE dyn_spg_ts( kt )            ! Empty routine 
    1190       INTEGER, INTENT(in) :: kt 
    1191       WRITE(*,*) 'dyn_spg_ts: You should not have seen this print! error?', kt 
    1192    END SUBROUTINE dyn_spg_ts 
    1193    SUBROUTINE ts_rst( kt, cdrw )          ! Empty routine 
    1194       INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    1195       CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    1196       WRITE(*,*) 'ts_rst    : You should not have seen this print! error?', kt, cdrw 
    1197    END SUBROUTINE ts_rst   
    1198    SUBROUTINE dyn_spg_ts_init( kt )       ! Empty routine 
    1199       INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    1200       WRITE(*,*) 'dyn_spg_ts_init   : You should not have seen this print! error?', kt 
    1201    END SUBROUTINE dyn_spg_ts_init 
    1202 #endif 
    1203     
    12041151   !!====================================================================== 
    12051152END MODULE dynspg_ts 
    1206  
    1207  
    1208  
Note: See TracChangeset for help on using the changeset viewer.