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.
2019WP/KERNEL-02_Storkey_Coward_IMMERSE_first_steps (diff) – NEMO

Changes between Version 2 and Version 3 of 2019WP/KERNEL-02_Storkey_Coward_IMMERSE_first_steps


Ignore:
Timestamp:
2019-02-08T15:02:30+01:00 (5 years ago)
Author:
acc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2019WP/KERNEL-02_Storkey_Coward_IMMERSE_first_steps

    v2 v3  
    8181{{{#!Fold title=Preview tag=h2 
    8282[=#preview] 
     83 
     84Part of the reorganisation for RK3 requires the refactoring of arrays such as un, ub into a single, 4 dimensional array with a time-level dimension. It is expected that much of the work required here can be automated to the extent that it is feasible to re-apply these changes after the annual merge. Below is a working example of how this might be achieved. Perl is used to carry out the pattern matching and substitution because of its ability to match patterns extending over several lines. A random subset of source files are used in this example and several to illustrate the successes and caveats for the method.  
     85 
     86'''Step 1''' 
     87Perl is used in a 'edit in place' mode so the original files will be overwritten. Step 1 is therefore to create copies of the test files: 
     88 
     89{{{ 
     90#!/bin/bash 
     91mkdir TEST_FILES 
     92cp FLO/flo_oce.F90 FLO/floats.F90 SBC/sbcfwb.F90 DYN/dynadv_ubs.F90 DYN/dynkeg.F90 DYN/dynvor.F90 DYN/dynadv_cen2.F90 TEST_FILES 
     93cp FLO/flo_oce.F90 FLO/floats.F90 SBC/sbcfwb.F90 DYN/dynadv_ubs.F90 DYN/dynkeg.F90 DYN/dynvor.F90 DYN/dynadv_cen2.F90 TEST_FILES_ORG 
     94}}} 
     95 
     96'''The refactoring script''' 
     97 
     98{{{ 
     99#!/bin/bash 
     100# 
     101 INVARS=( ub  vb  wb  un  vn  wn ) 
     102OUTVARS=( uu  vv  ww  uu  vv  ww ) 
     103  TLEVS=( jtb jtb jtb jtn jtn jtn ) 
     104# 
     105rm patch.list 
     106for f in TEST_FILES/*.F90 
     107do 
     108 echo "{{{#!diff" >> patch.list 
     109 echo "Index: "$f >> patch.list 
     110 echo "==============================" >> patch.list 
     111 n=0 
     112 for n in `seq 0 1 $(( ${#INVARS[*]} - 1 ))` 
     113 do 
     114  perl -0777 -pi -e 's:([\s+-\/\*\%])'${INVARS[$n]}'\s*\(([^)]*)\):\1'${OUTVARS[$n]}'\(\2,'${TLEVS[$n]}'\):g'  $f 
     115 done 
     116 diff -u TEST_FILES_ORG/`basename $f` $f >> patch.list 
     117 echo "}}}" >> patch.list 
     118done 
     119}}} 
     120 
     121'''The results (patch.list):''' 
     122 
     123{{{#!diff 
     124Index: TEST_FILES/dynadv_cen2.F90 
     125================================================== 
     126--- TEST_FILES_ORG/dynadv_cen2.F90      2019-02-08 10:51:12.000000000 +0000 
     127+++ TEST_FILES/dynadv_cen2.F90  2019-02-08 12:53:14.000000000 +0000 
     128@@ -66,14 +66,14 @@ 
     129       !                             !==  Horizontal advection  ==! 
     130       ! 
     131       DO jk = 1, jpkm1                    ! horizontal transport 
     132-         zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
     133-         zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     134+         zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u_n(:,:,jk) * uu(:,:,jk,jtn) 
     135+         zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v_n(:,:,jk) * vv(:,:,jk,jtn) 
     136          DO jj = 1, jpjm1                 ! horizontal momentum fluxes (at T- and F-point) 
     137             DO ji = 1, fs_jpim1   ! vector opt. 
     138-               zfu_t(ji+1,jj  ,jk) = ( zfu(ji,jj,jk) + zfu(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji+1,jj  ,jk) ) 
     139-               zfv_f(ji  ,jj  ,jk) = ( zfv(ji,jj,jk) + zfv(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji  ,jj+1,jk) ) 
     140-               zfu_f(ji  ,jj  ,jk) = ( zfu(ji,jj,jk) + zfu(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji+1,jj  ,jk) ) 
     141-               zfv_t(ji  ,jj+1,jk) = ( zfv(ji,jj,jk) + zfv(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji  ,jj+1,jk) ) 
     142+               zfu_t(ji+1,jj  ,jk) = ( zfu(ji,jj,jk) + zfu(ji+1,jj,jk) ) * ( uu(ji,jj,jk,jtn) + uu(ji+1,jj  ,jk,jtn) ) 
     143+               zfv_f(ji  ,jj  ,jk) = ( zfv(ji,jj,jk) + zfv(ji+1,jj,jk) ) * ( uu(ji,jj,jk,jtn) + uu(ji  ,jj+1,jk,jtn) ) 
     144+               zfu_f(ji  ,jj  ,jk) = ( zfu(ji,jj,jk) + zfu(ji,jj+1,jk) ) * ( vv(ji,jj,jk,jtn) + vv(ji+1,jj  ,jk,jtn) ) 
     145+               zfv_t(ji  ,jj+1,jk) = ( zfv(ji,jj,jk) + zfv(ji,jj+1,jk) ) * ( vv(ji,jj,jk,jtn) + vv(ji  ,jj+1,jk,jtn) ) 
     146             END DO 
     147          END DO 
     148          DO jj = 2, jpjm1                 ! divergence of horizontal momentum fluxes 
     149@@ -105,21 +105,21 @@ 
     150       IF( ln_linssh ) THEN                ! linear free surface: advection through the surface 
     151          DO jj = 2, jpjm1 
     152             DO ji = fs_2, fs_jpim1 
     153-               zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji+1,jj) * wn(ji+1,jj,1) ) * un(ji,jj,1) 
     154-               zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji,jj+1) * wn(ji,jj+1,1) ) * vn(ji,jj,1) 
     155+               zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * ww(ji,jj,1,jtn) + e1e2t(ji+1,jj) * ww(ji+1,jj,1,jtn) ) * uu(ji,jj,1,jtn) 
     156+               zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * ww(ji,jj,1,jtn) + e1e2t(ji,jj+1) * ww(ji,jj+1,1,jtn) ) * vv(ji,jj,1,jtn) 
     157             END DO 
     158          END DO 
     159       ENDIF 
     160       DO jk = 2, jpkm1                    ! interior advective fluxes 
     161          DO jj = 2, jpj                       ! 1/4 * Vertical transport 
     162             DO ji = 2, jpi 
     163-               zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * wn(ji,jj,jk) 
     164+               zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * ww(ji,jj,jk,jtn) 
     165             END DO 
     166          END DO 
     167          DO jj = 2, jpjm1 
     168             DO ji = fs_2, fs_jpim1   ! vector opt. 
     169-               zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji+1,jj  ,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) ) 
     170-               zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji  ,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) ) 
     171+               zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji+1,jj  ,jk) ) * ( uu(ji,jj,jk,jtn) + uu(ji,jj,jk-1,jtn) ) 
     172+               zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji  ,jj+1,jk) ) * ( vv(ji,jj,jk,jtn) + vv(ji,jj,jk-1,jtn) ) 
     173             END DO 
     174          END DO 
     175       END DO 
     176}}} 
     177 
     178{{{#!diff 
     179Index: TEST_FILES/dynadv_ubs.F90 
     180============================== 
     181--- TEST_FILES_ORG/dynadv_ubs.F90       2019-02-08 10:51:12.000000000 +0000 
     182+++ TEST_FILES/dynadv_ubs.F90   2019-02-08 12:53:14.000000000 +0000 
     183@@ -101,17 +101,17 @@ 
     184       DO jk = 1, jpkm1                       !  Laplacian of the velocity  ! 
     185          !                                   ! =========================== ! 
     186          !                                         ! horizontal volume fluxes 
     187-         zfu(:,:,jk) = e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
     188-         zfv(:,:,jk) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     189+         zfu(:,:,jk) = e2u(:,:) * e3u_n(:,:,jk) * uu(:,:,jk,jtn) 
     190+         zfv(:,:,jk) = e1v(:,:) * e3v_n(:,:,jk) * vv(:,:,jk,jtn) 
     191          ! 
     192          DO jj = 2, jpjm1                          ! laplacian 
     193             DO ji = fs_2, fs_jpim1   ! vector opt. 
     194-               zlu_uu(ji,jj,jk,1) = ( ub (ji+1,jj  ,jk) - 2.*ub (ji,jj,jk) + ub (ji-1,jj  ,jk) ) * umask(ji,jj,jk) 
     195-               zlv_vv(ji,jj,jk,1) = ( vb (ji  ,jj+1,jk) - 2.*vb (ji,jj,jk) + vb (ji  ,jj-1,jk) ) * vmask(ji,jj,jk) 
     196-               zlu_uv(ji,jj,jk,1) = ( ub (ji  ,jj+1,jk) - ub (ji  ,jj  ,jk) ) * fmask(ji  ,jj  ,jk)   & 
     197-                  &               - ( ub (ji  ,jj  ,jk) - ub (ji  ,jj-1,jk) ) * fmask(ji  ,jj-1,jk) 
     198-               zlv_vu(ji,jj,jk,1) = ( vb (ji+1,jj  ,jk) - vb (ji  ,jj  ,jk) ) * fmask(ji  ,jj  ,jk)   & 
     199-                  &               - ( vb (ji  ,jj  ,jk) - vb (ji-1,jj  ,jk) ) * fmask(ji-1,jj  ,jk) 
     200+               zlu_uu(ji,jj,jk,1) = ( uu(ji+1,jj  ,jk,jtb) - 2.*uu(ji,jj,jk,jtb) + uu(ji-1,jj  ,jk,jtb) ) * umask(ji,jj,jk) 
     201+               zlv_vv(ji,jj,jk,1) = ( vv(ji  ,jj+1,jk,jtb) - 2.*vv(ji,jj,jk,jtb) + vv(ji  ,jj-1,jk,jtb) ) * vmask(ji,jj,jk) 
     202+               zlu_uv(ji,jj,jk,1) = ( uu(ji  ,jj+1,jk,jtb) - uu(ji  ,jj  ,jk,jtb) ) * fmask(ji  ,jj  ,jk)   & 
     203+                  &               - ( uu(ji  ,jj  ,jk,jtb) - uu(ji  ,jj-1,jk,jtb) ) * fmask(ji  ,jj-1,jk) 
     204+               zlv_vu(ji,jj,jk,1) = ( vv(ji+1,jj  ,jk,jtb) - vv(ji  ,jj  ,jk,jtb) ) * fmask(ji  ,jj  ,jk)   & 
     205+                  &               - ( vv(ji  ,jj  ,jk,jtb) - vv(ji-1,jj  ,jk,jtb) ) * fmask(ji-1,jj  ,jk) 
     206                ! 
     207                zlu_uu(ji,jj,jk,2) = ( zfu(ji+1,jj  ,jk) - 2.*zfu(ji,jj,jk) + zfu(ji-1,jj  ,jk) ) * umask(ji,jj,jk) 
     208                zlv_vv(ji,jj,jk,2) = ( zfv(ji  ,jj+1,jk) - 2.*zfv(ji,jj,jk) + zfv(ji  ,jj-1,jk) ) * vmask(ji,jj,jk) 
     209@@ -131,13 +131,13 @@ 
     210       !                                      !  Horizontal advection  ! 
     211       DO jk = 1, jpkm1                       ! ====================== ! 
     212          !                                         ! horizontal volume fluxes 
     213-         zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
     214-         zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     215+         zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u_n(:,:,jk) * uu(:,:,jk,jtn) 
     216+         zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v_n(:,:,jk) * vv(:,:,jk,jtn) 
     217          ! 
     218          DO jj = 1, jpjm1                          ! horizontal momentum fluxes at T- and F-point 
     219             DO ji = 1, fs_jpim1   ! vector opt. 
     220-               zui = ( un(ji,jj,jk) + un(ji+1,jj  ,jk) ) 
     221-               zvj = ( vn(ji,jj,jk) + vn(ji  ,jj+1,jk) ) 
     222+               zui = ( uu(ji,jj,jk,jtn) + uu(ji+1,jj  ,jk,jtn) ) 
     223+               zvj = ( vv(ji,jj,jk,jtn) + vv(ji  ,jj+1,jk,jtn) ) 
     224                ! 
     225                IF( zui > 0 ) THEN   ;   zl_u = zlu_uu(ji  ,jj,jk,1) 
     226                ELSE                 ;   zl_u = zlu_uu(ji+1,jj,jk,1) 
     227@@ -163,9 +163,9 @@ 
     228                ENDIF 
     229                ! 
     230                zfv_f(ji  ,jj  ,jk) = ( zfvi - gamma2 * ( zlv_vu(ji,jj,jk,2) + zlv_vu(ji+1,jj  ,jk,2) )  )   & 
     231-                  &                * ( un(ji,jj,jk) + un(ji  ,jj+1,jk) - gamma1 * zl_u ) 
     232+                  &                * ( uu(ji,jj,jk,jtn) + uu(ji  ,jj+1,jk,jtn) - gamma1 * zl_u ) 
     233                zfu_f(ji  ,jj  ,jk) = ( zfuj - gamma2 * ( zlu_uv(ji,jj,jk,2) + zlu_uv(ji  ,jj+1,jk,2) )  )   & 
     234-                  &                * ( vn(ji,jj,jk) + vn(ji+1,jj  ,jk) - gamma1 * zl_v ) 
     235+                  &                * ( vv(ji,jj,jk,jtn) + vv(ji+1,jj  ,jk,jtn) - gamma1 * zl_v ) 
     236             END DO 
     237          END DO 
     238          DO jj = 2, jpjm1                          ! divergence of horizontal momentum fluxes 
     239@@ -198,21 +198,21 @@ 
     240       IF( ln_linssh ) THEN                         ! constant volume : advection through the surface 
     241          DO jj = 2, jpjm1 
     242             DO ji = fs_2, fs_jpim1 
     243-               zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji+1,jj) * wn(ji+1,jj,1) ) * un(ji,jj,1) 
     244-               zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji,jj+1) * wn(ji,jj+1,1) ) * vn(ji,jj,1) 
     245+               zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * ww(ji,jj,1,jtn) + e1e2t(ji+1,jj) * ww(ji+1,jj,1,jtn) ) * uu(ji,jj,1,jtn) 
     246+               zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * ww(ji,jj,1,jtn) + e1e2t(ji,jj+1) * ww(ji,jj+1,1,jtn) ) * vv(ji,jj,1,jtn) 
     247             END DO 
     248          END DO 
     249       ENDIF 
     250       DO jk = 2, jpkm1                          ! interior fluxes 
     251          DO jj = 2, jpj 
     252             DO ji = 2, jpi 
     253-               zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * wn(ji,jj,jk) 
     254+               zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * ww(ji,jj,jk,jtn) 
     255             END DO 
     256          END DO 
     257          DO jj = 2, jpjm1 
     258             DO ji = fs_2, fs_jpim1   ! vector opt. 
     259-               zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) ) 
     260-               zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) ) 
     261+               zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj,jk) ) * ( uu(ji,jj,jk,jtn) + uu(ji,jj,jk-1,jtn) ) 
     262+               zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji,jj+1,jk) ) * ( vv(ji,jj,jk,jtn) + vv(ji,jj,jk-1,jtn) ) 
     263             END DO 
     264          END DO 
     265       END DO 
     266}}} 
     267 
     268{{{#!diff 
     269Index: TEST_FILES/dynkeg.F90 
     270============================== 
     271--- TEST_FILES_ORG/dynkeg.F90   2019-02-08 10:51:12.000000000 +0000 
     272+++ TEST_FILES/dynkeg.F90       2019-02-08 12:53:14.000000000 +0000 
     273@@ -56,8 +56,8 @@ 
     274       !!         zhke = 1/2 [ mi-1( un^2 ) + mj-1( vn^2 ) ] 
     275       !!              * kscheme = nkeg_HW : Hollingsworth correction following 
     276       !!      Arakawa (2001). The now horizontal kinetic energy is given by: 
     277-      !!         zhke = 1/6 [ mi-1(  2 * un^2 + ((un(j+1)+un(j-1))/2)^2  ) 
     278-      !!                    + mj-1(  2 * vn^2 + ((vn(i+1)+vn(i-1))/2)^2  ) ] 
     279+      !!         zhke = 1/6 [ mi-1(  2 * un^2 + ((un(j+1)+uu(j-1,jtn))/2)^2  ) 
     280+      !!                    + mj-1(  2 * vn^2 + ((vn(i+1)+vv(i-1,jtn))/2)^2  ) ] 
     281       !! 
     282       !!      Take its horizontal gradient and add it to the general momentum 
     283       !!      trend (ua,va). 
     284@@ -108,7 +108,7 @@ 
     285                      ii   = idx_bdy(ib_bdy)%nbi(jb,igrd) 
     286                      ij   = idx_bdy(ib_bdy)%nbj(jb,igrd) 
     287                      ifu   = NINT( idx_bdy(ib_bdy)%flagu(jb,igrd) ) 
     288-                     un(ii-ifu,ij,jk) = un(ii,ij,jk) * umask(ii,ij,jk) 
     289+                     uu(ii-ifu,ij,jk,jtn) = uu(ii,ij,jk,jtn) * umask(ii,ij,jk) 
     290                   END DO 
     291                END DO 
     292                ! 
     293@@ -118,7 +118,7 @@ 
     294                      ii   = idx_bdy(ib_bdy)%nbi(jb,igrd) 
     295                      ij   = idx_bdy(ib_bdy)%nbj(jb,igrd) 
     296                      ifv   = NINT( idx_bdy(ib_bdy)%flagv(jb,igrd) ) 
     297-                     vn(ii,ij-ifv,jk) = vn(ii,ij,jk) * vmask(ii,ij,jk) 
     298+                     vv(ii,ij-ifv,jk,jtn) = vv(ii,ij,jk,jtn) * vmask(ii,ij,jk) 
     299                   END DO 
     300                END DO 
     301             ENDIF 
     302@@ -131,10 +131,10 @@ 
     303          DO jk = 1, jpkm1 
     304             DO jj = 2, jpj 
     305                DO ji = fs_2, jpi   ! vector opt. 
     306-                  zu =    un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
     307-                     &  + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk) 
     308-                  zv =    vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   & 
     309-                     &  + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk) 
     310+                  zu =    uu(ji-1,jj  ,jk,jtn) * uu(ji-1,jj  ,jk,jtn)   & 
     311+                     &  + uu(ji  ,jj  ,jk,jtn) * uu(ji  ,jj  ,jk,jtn) 
     312+                  zv =    vv(ji  ,jj-1,jk,jtn) * vv(ji  ,jj-1,jk,jtn)   & 
     313+                     &  + vv(ji  ,jj  ,jk,jtn) * vv(ji  ,jj  ,jk,jtn) 
     314                   zhke(ji,jj,jk) = 0.25_wp * ( zv + zu ) 
     315                END DO 
     316             END DO 
     317@@ -144,15 +144,15 @@ 
     318          DO jk = 1, jpkm1 
     319             DO jj = 2, jpjm1 
     320                DO ji = fs_2, jpim1   ! vector opt. 
     321-                  zu = 8._wp * ( un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)    & 
     322-                     &         + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk) )  & 
     323-                     &   +     ( un(ji-1,jj-1,jk) + un(ji-1,jj+1,jk) ) * ( un(ji-1,jj-1,jk) + un(ji-1,jj+1,jk) )   & 
     324-                     &   +     ( un(ji  ,jj-1,jk) + un(ji  ,jj+1,jk) ) * ( un(ji  ,jj-1,jk) + un(ji  ,jj+1,jk) ) 
     325+                  zu = 8._wp * ( uu(ji-1,jj  ,jk,jtn) * uu(ji-1,jj  ,jk,jtn)    & 
     326+                     &         + uu(ji  ,jj  ,jk,jtn) * uu(ji  ,jj  ,jk,jtn) )  & 
     327+                     &   +     ( uu(ji-1,jj-1,jk,jtn) + uu(ji-1,jj+1,jk,jtn) ) * ( uu(ji-1,jj-1,jk,jtn) + uu(ji-1,jj+1,jk,jtn) )   & 
     328+                     &   +     ( uu(ji  ,jj-1,jk,jtn) + uu(ji  ,jj+1,jk,jtn) ) * ( uu(ji  ,jj-1,jk,jtn) + uu(ji  ,jj+1,jk,jtn) ) 
     329                      ! 
     330-                  zv = 8._wp * ( vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)    & 
     331-                     &         + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk) )  & 
     332-                     &  +      ( vn(ji-1,jj-1,jk) + vn(ji+1,jj-1,jk) ) * ( vn(ji-1,jj-1,jk) + vn(ji+1,jj-1,jk) )   & 
     333-                     &  +      ( vn(ji-1,jj  ,jk) + vn(ji+1,jj  ,jk) ) * ( vn(ji-1,jj  ,jk) + vn(ji+1,jj  ,jk) ) 
     334+                  zv = 8._wp * ( vv(ji  ,jj-1,jk,jtn) * vv(ji  ,jj-1,jk,jtn)    & 
     335+                     &         + vv(ji  ,jj  ,jk,jtn) * vv(ji  ,jj  ,jk,jtn) )  & 
     336+                     &  +      ( vv(ji-1,jj-1,jk,jtn) + vv(ji+1,jj-1,jk,jtn) ) * ( vv(ji-1,jj-1,jk,jtn) + vv(ji+1,jj-1,jk,jtn) )   & 
     337+                     &  +      ( vv(ji-1,jj  ,jk,jtn) + vv(ji+1,jj  ,jk,jtn) ) * ( vv(ji-1,jj  ,jk,jtn) + vv(ji+1,jj  ,jk,jtn) ) 
     338                   zhke(ji,jj,jk) = r1_48 * ( zv + zu ) 
     339                END DO 
     340             END DO 
     341@@ -163,8 +163,8 @@ 
     342 
     343       IF (ln_bdy) THEN 
     344          ! restore velocity masks at points outside boundary 
     345-         un(:,:,:) = un(:,:,:) * umask(:,:,:) 
     346-         vn(:,:,:) = vn(:,:,:) * vmask(:,:,:) 
     347+         uu(:,:,:,jtn) = uu(:,:,:,jtn) * umask(:,:,:) 
     348+         vv(:,:,:,jtn) = vv(:,:,:,jtn) * vmask(:,:,:) 
     349       ENDIF 
     350 
     351       ! 
     352}}} 
     353 
     354{{{#!diff 
     355Index: TEST_FILES/dynvor.F90 
     356============================== 
     357}}} 
     358 
     359{{{#!diff 
     360Index: TEST_FILES/flo_oce.F90 
     361============================== 
     362--- TEST_FILES_ORG/flo_oce.F90  2019-02-08 10:51:12.000000000 +0000 
     363+++ TEST_FILES/flo_oce.F90      2019-02-08 12:53:14.000000000 +0000 
     364@@ -59,7 +59,7 @@ 
     365       !!---------------------------------------------------------------------- 
     366       !!                 ***  FUNCTION flo_oce_alloc  *** 
     367       !!---------------------------------------------------------------------- 
     368-      ALLOCATE( wb(jpi,jpj,jpk) , nfloat(jpnfl) , nisobfl(jpnfl) , ngrpfl(jpnfl) , & 
     369+      ALLOCATE( ww(jpi,jpj,jpk,jtb) , nfloat(jpnfl) , nisobfl(jpnfl) , ngrpfl(jpnfl) , & 
     370          &      flxx(jpnfl)     , flyy(jpnfl)   , flzz(jpnfl)    ,                 & 
     371          &      tpifl(jpnfl)    , tpjfl(jpnfl)  , tpkfl(jpnfl)   , STAT=flo_oce_alloc ) 
     372       ! 
     373}}} 
     374 
     375{{{#!diff 
     376Index: TEST_FILES/floats.F90 
     377============================== 
     378--- TEST_FILES_ORG/floats.F90   2019-02-08 10:51:12.000000000 +0000 
     379+++ TEST_FILES/floats.F90       2019-02-08 12:53:14.000000000 +0000 
     380@@ -64,7 +64,7 @@ 
     381       ! 
     382       CALL flo_rst( kt )      ! trajectories restart 
     383       ! 
     384-      wb(:,:,:) = wn(:,:,:)         ! Save the old vertical velocity field 
     385+      ww(:,:,:,jtb) = ww(:,:,:,jtn)         ! Save the old vertical velocity field 
     386       ! 
     387       IF( ln_timing )   CALL timing_stop('flo_stp') 
     388       ! 
     389@@ -131,7 +131,7 @@ 
     390       ! 
     391       CALL flo_dom                  ! compute/read initial position of floats 
     392       ! 
     393-      wb(:,:,:) = wn(:,:,:)         ! set wb for computation of floats trajectories at the first time step 
     394+      ww(:,:,:,jtb) = ww(:,:,:,jtn)         ! set wb for computation of floats trajectories at the first time step 
     395       ! 
     396    END SUBROUTINE flo_init 
     397 
     398}}} 
     399 
     400{{{#!diff 
     401Index: TEST_FILES/sbcfwb.F90 
     402============================== 
     403}}} 
     404 
     405 
    83406 
    84407Since the preview step must be completed before the PI starts the coding, the previewer(s) answers are expected to be completed within the two weeks after the PI has sent his request. \\