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

Changeset 14065


Ignore:
Timestamp:
2020-12-03T18:48:48+01:00 (3 years ago)
Author:
laurent
Message:

Keep up with trunk revision 14064

Location:
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/NST/agrif_oce_update.F90

    r14063 r14065  
    915915      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
    916916      LOGICAL                         , INTENT(in   ) ::   before 
     917      !! 
     918      REAL(wp), DIMENSION(jpi,jpj) ::   zpgu   ! 2D workspace 
    917919      !!  
    918920      INTEGER  :: ji, jj, jk 
     
    934936               !     
    935937               ! Update "now" 3d velocities: 
    936                spgu(ji,jj) = 0._wp 
     938               zpgu(ji,jj) = 0._wp 
    937939               DO jk=1,jpkm1 
    938                   spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kmm_a) * uu(ji,jj,jk,Kmm_a) 
     940                  zpgu(ji,jj) = zpgu(ji,jj) + e3u(ji,jj,jk,Kmm_a) * uu(ji,jj,jk,Kmm_a) 
    939941               END DO 
    940942               ! 
    941                zcorr = (tabres(ji,jj) - spgu(ji,jj)) * r1_hu(ji,jj,Kmm_a) 
     943               zcorr = (tabres(ji,jj) - zpgu(ji,jj)) * r1_hu(ji,jj,Kmm_a) 
    942944               DO jk=1,jpkm1               
    943945                  uu(ji,jj,jk,Kmm_a) = uu(ji,jj,jk,Kmm_a) + zcorr * umask(ji,jj,jk)            
     
    954956               !        
    955957               ! Correct "before" velocities to hold correct bt component: 
    956                spgu(ji,jj) = 0.e0 
     958               zpgu(ji,jj) = 0.e0 
    957959               DO jk=1,jpkm1 
    958                   spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kbb_a) * uu(ji,jj,jk,Kbb_a) 
     960                  zpgu(ji,jj) = zpgu(ji,jj) + e3u(ji,jj,jk,Kbb_a) * uu(ji,jj,jk,Kbb_a) 
    959961               END DO 
    960962               ! 
    961                zcorr = uu_b(ji,jj,Kbb_a) - spgu(ji,jj) * r1_hu(ji,jj,Kbb_a) 
     963               zcorr = uu_b(ji,jj,Kbb_a) - zpgu(ji,jj) * r1_hu(ji,jj,Kbb_a) 
    962964               DO jk=1,jpkm1               
    963965                  uu(ji,jj,jk,Kbb_a) = uu(ji,jj,jk,Kbb_a) + zcorr * umask(ji,jj,jk)            
     
    982984      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
    983985      LOGICAL                         , INTENT(in   ) ::   before 
     986      ! 
     987      REAL(wp), DIMENSION(jpi,jpj) ::   zpgv   ! 2D workspace 
    984988      !  
    985989      INTEGER  :: ji, jj, jk 
     
    10001004               !     
    10011005               ! Update "now" 3d velocities: 
    1002                spgv(ji,jj) = 0.e0 
     1006               zpgv(ji,jj) = 0.e0 
    10031007               DO jk=1,jpkm1 
    1004                   spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a) 
     1008                  zpgv(ji,jj) = zpgv(ji,jj) + e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a) 
    10051009               END DO 
    10061010               ! 
    1007                zcorr = (tabres(ji,jj) - spgv(ji,jj)) * r1_hv(ji,jj,Kmm_a) 
     1011               zcorr = (tabres(ji,jj) - zpgv(ji,jj)) * r1_hv(ji,jj,Kmm_a) 
    10081012               DO jk=1,jpkm1               
    10091013                  vv(ji,jj,jk,Kmm_a) = vv(ji,jj,jk,Kmm_a) + zcorr * vmask(ji,jj,jk)            
     
    10201024               !        
    10211025               ! Correct "before" velocities to hold correct bt component: 
    1022                spgv(ji,jj) = 0.e0 
     1026               zpgv(ji,jj) = 0.e0 
    10231027               DO jk=1,jpkm1 
    1024                   spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kbb_a) * vv(ji,jj,jk,Kbb_a) 
     1028                  zpgv(ji,jj) = zpgv(ji,jj) + e3v(ji,jj,jk,Kbb_a) * vv(ji,jj,jk,Kbb_a) 
    10251029               END DO 
    10261030               ! 
    1027                zcorr = vv_b(ji,jj,Kbb_a) - spgv(ji,jj) * r1_hv(ji,jj,Kbb_a) 
     1031               zcorr = vv_b(ji,jj,Kbb_a) - zpgv(ji,jj) * r1_hv(ji,jj,Kbb_a) 
    10281032               DO jk=1,jpkm1               
    10291033                  vv(ji,jj,jk,Kbb_a) = vv(ji,jj,jk,Kbb_a) + zcorr * vmask(ji,jj,jk)            
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/DYN/dynhpg.F90

    r14063 r14065  
    4444   USE in_out_manager  ! I/O manager 
    4545   USE prtctl          ! Print control 
    46    USE lbclnk          ! lateral boundary condition 
     46   USE lbclnk          ! lateral boundary condition  
    4747   USE lib_mpp         ! MPP library 
    4848   USE eosbn2          ! compute density 
     
    154154      !! 
    155155      INTEGER  ::   ji, jj, jk, ikt    ! dummy loop indices      ISF 
    156       REAL(wp) ::   znad 
    157156      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  zts_top, zrhd   ! hypothesys on isf density 
    158157      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::  zrhdtop_isf    ! density at bottom of ISF 
     
    206205      ! 
    207206      IF( ioptio /= 1 )   CALL ctl_stop( 'NO or several hydrostatic pressure gradient options used' ) 
    208       ! 
     207      !  
    209208      IF(lwp) THEN 
    210209         WRITE(numout,*) 
     
    219218         WRITE(numout,*) 
    220219      ENDIF 
    221       ! 
     220      !                           
    222221      IF ( ln_hpg_djc ) THEN 
    223222         IF (ln_hpg_djc_vnh) THEN ! Von Neumann boundary condition 
     
    265264      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
    266265      REAL(wp) ::   zcoef0, zcoef1   ! temporary scalars 
    267       REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zhpi, zhpj 
     266      REAL(wp), DIMENSION(jpi,jpj) ::  zhpi, zhpj 
    268267      !!---------------------------------------------------------------------- 
    269268      ! 
     
    273272         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   z-coordinate case ' 
    274273      ENDIF 
    275  
    276       zcoef0 = - grav * 0.5_wp      ! Local constant initialization 
    277  
    278       ! Surface value 
    279       DO_2D( 0, 0, 0, 0 ) 
     274      ! 
     275      zcoef0 = - grav * 0.5_wp            ! Local constant initialization 
     276      ! 
     277      DO_2D( 0, 0, 0, 0 )                 ! Surface value 
    280278         zcoef1 = zcoef0 * e3w(ji,jj,1,Kmm) 
    281          ! hydrostatic pressure gradient 
    282          zhpi(ji,jj,1) = zcoef1 * ( rhd(ji+1,jj,1) - rhd(ji,jj,1) ) * r1_e1u(ji,jj) 
    283          zhpj(ji,jj,1) = zcoef1 * ( rhd(ji,jj+1,1) - rhd(ji,jj,1) ) * r1_e2v(ji,jj) 
    284          ! add to the general momentum trend 
    285          puu(ji,jj,1,Krhs) = puu(ji,jj,1,Krhs) + zhpi(ji,jj,1) 
    286          pvv(ji,jj,1,Krhs) = pvv(ji,jj,1,Krhs) + zhpj(ji,jj,1) 
     279         !                                   ! hydrostatic pressure gradient 
     280         zhpi(ji,jj) = zcoef1 * ( rhd(ji+1,jj,1) - rhd(ji,jj,1) ) * r1_e1u(ji,jj) 
     281         zhpj(ji,jj) = zcoef1 * ( rhd(ji,jj+1,1) - rhd(ji,jj,1) ) * r1_e2v(ji,jj) 
     282         !                                   ! add to the general momentum trend 
     283         puu(ji,jj,1,Krhs) = puu(ji,jj,1,Krhs) + zhpi(ji,jj) 
     284         pvv(ji,jj,1,Krhs) = pvv(ji,jj,1,Krhs) + zhpj(ji,jj) 
    287285      END_2D 
    288  
    289       ! 
    290       ! interior value (2=<jk=<jpkm1) 
    291       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     286      ! 
     287      DO_3D( 0, 0, 0, 0, 2, jpkm1 )        ! interior value (2=<jk=<jpkm1) 
    292288         zcoef1 = zcoef0 * e3w(ji,jj,jk,Kmm) 
    293          ! hydrostatic pressure gradient 
    294          zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1)   & 
    295             &           + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )    & 
    296             &                       - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) * r1_e1u(ji,jj) 
    297  
    298          zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1)   & 
    299             &           + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )    & 
    300             &                       - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) * r1_e2v(ji,jj) 
    301          ! add to the general momentum trend 
    302          puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + zhpi(ji,jj,jk) 
    303          pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + zhpj(ji,jj,jk) 
     289         !                                   ! hydrostatic pressure gradient 
     290         zhpi(ji,jj) = zhpi(ji,jj) + zcoef1 * (  ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) )  & 
     291            &                                  - ( rhd(ji  ,jj,jk)+rhd(ji  ,jj,jk-1) )  ) * r1_e1u(ji,jj) 
     292 
     293         zhpj(ji,jj) = zhpj(ji,jj) + zcoef1 * (  ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) )  & 
     294            &                                  - ( rhd(ji,jj,  jk)+rhd(ji,jj  ,jk-1) )  ) * r1_e2v(ji,jj) 
     295         !                                   ! add to the general momentum trend 
     296         puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + zhpi(ji,jj) 
     297         pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + zhpj(ji,jj) 
    304298      END_3D 
    305299      ! 
     
    411405      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) ::  puu, pvv    ! ocean velocities and RHS of momentum equation 
    412406      !! 
    413       INTEGER  ::   ji, jj, jk, jii, jjj                 ! dummy loop indices 
    414       REAL(wp) ::   zcoef0, zuap, zvap, znad, ztmp       ! temporary scalars 
    415       LOGICAL  ::   ll_tmp1, ll_tmp2                     ! local logical variables 
     407      INTEGER  ::   ji, jj, jk, jii, jjj           ! dummy loop indices 
     408      REAL(wp) ::   zcoef0, zuap, zvap, ztmp       ! local scalars 
     409      LOGICAL  ::   ll_tmp1, ll_tmp2               ! local logical variables 
    416410      REAL(wp), DIMENSION(jpi,jpj,jpk)      ::   zhpi, zhpj 
    417411      REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   zcpx, zcpy   !W/D pressure filter 
     
    427421      ! 
    428422      zcoef0 = - grav * 0.5_wp 
    429       IF ( ln_linssh ) THEN   ;   znad = 0._wp         ! Fixed    volume: density anomaly 
    430       ELSE                    ;   znad = 1._wp         ! Variable volume: density 
    431       ENDIF 
    432423      ! 
    433424      IF( ln_wd_il ) THEN 
     
    450441            zcpx(ji,jj) = 0._wp 
    451442          END IF 
    452  
     443    
    453444          ll_tmp1 = MIN(  ssh(ji,jj,Kmm)              ,  ssh(ji,jj+1,Kmm) ) >                & 
    454445               &    MAX( -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) .AND.            & 
     
    471462        CALL lbc_lnk_multi( 'dynhpg', zcpx, 'U', 1.0_wp, zcpy, 'V', 1.0_wp ) 
    472463      END IF 
    473  
    474       ! Surface value 
    475       DO_2D( 0, 0, 0, 0 ) 
    476          ! hydrostatic pressure gradient along s-surfaces 
    477          zhpi(ji,jj,1) =   & 
    478             &  zcoef0 * (  e3w(ji+1,jj  ,1,Kmm) * ( znad + rhd(ji+1,jj  ,1) )    & 
    479             &            - e3w(ji  ,jj  ,1,Kmm) * ( znad + rhd(ji  ,jj  ,1) )  ) & 
    480             &           * r1_e1u(ji,jj) 
    481          zhpj(ji,jj,1) =   & 
    482             &  zcoef0 * (  e3w(ji  ,jj+1,1,Kmm) * ( znad + rhd(ji  ,jj+1,1) )    & 
    483             &            - e3w(ji  ,jj  ,1,Kmm) * ( znad + rhd(ji  ,jj  ,1) )  ) & 
    484             &           * r1_e2v(ji,jj) 
    485          ! s-coordinate pressure gradient correction 
    486          zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) + 2._wp * znad )   & 
     464      ! 
     465      DO_2D( 0, 0, 0, 0 )              ! Surface value 
     466         !                                   ! hydrostatic pressure gradient along s-surfaces 
     467         zhpi(ji,jj,1) = zcoef0 * r1_e1u(ji,jj)                      & 
     468            &          * (  e3w(ji+1,jj  ,1,Kmm) * rhd(ji+1,jj  ,1)  & 
     469            &             - e3w(ji  ,jj  ,1,Kmm) * rhd(ji  ,jj  ,1)  ) 
     470         zhpj(ji,jj,1) = zcoef0 * r1_e2v(ji,jj)                      & 
     471            &          * (  e3w(ji  ,jj+1,1,Kmm) * rhd(ji  ,jj+1,1)  & 
     472            &             - e3w(ji  ,jj  ,1,Kmm) * rhd(ji  ,jj  ,1)  ) 
     473         !                                   ! s-coordinate pressure gradient correction 
     474         zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) )   & 
    487475            &           * ( gde3w(ji+1,jj,1) - gde3w(ji,jj,1) ) * r1_e1u(ji,jj) 
    488          zvap = -zcoef0 * ( rhd    (ji,jj+1,1) + rhd    (ji,jj,1) + 2._wp * znad )   & 
     476         zvap = -zcoef0 * ( rhd    (ji,jj+1,1) + rhd    (ji,jj,1) )   & 
    489477            &           * ( gde3w(ji,jj+1,1) - gde3w(ji,jj,1) ) * r1_e2v(ji,jj) 
    490478         ! 
    491479         IF( ln_wd_il ) THEN 
    492480            zhpi(ji,jj,1) = zhpi(ji,jj,1) * zcpx(ji,jj) 
    493             zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj) 
     481            zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj)  
    494482            zuap = zuap * zcpx(ji,jj) 
    495483            zvap = zvap * zcpy(ji,jj) 
    496484         ENDIF 
    497          ! 
    498          ! add to the general momentum trend 
     485         !                                   ! add to the general momentum trend 
    499486         puu(ji,jj,1,Krhs) = puu(ji,jj,1,Krhs) + zhpi(ji,jj,1) + zuap 
    500487         pvv(ji,jj,1,Krhs) = pvv(ji,jj,1,Krhs) + zhpj(ji,jj,1) + zvap 
    501488      END_2D 
    502  
    503       ! interior value (2=<jk=<jpkm1) 
    504       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    505          ! hydrostatic pressure gradient along s-surfaces 
    506          zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 * r1_e1u(ji,jj)   & 
    507             &           * (  e3w(ji+1,jj,jk,Kmm) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) + 2*znad )   & 
    508             &              - e3w(ji  ,jj,jk,Kmm) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) + 2*znad )  ) 
    509          zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 * r1_e2v(ji,jj)   & 
    510             &           * (  e3w(ji,jj+1,jk,Kmm) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) + 2*znad )   & 
    511             &              - e3w(ji,jj  ,jk,Kmm) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) + 2*znad )  ) 
    512          ! s-coordinate pressure gradient correction 
    513          zuap = -zcoef0 * ( rhd    (ji+1,jj  ,jk) + rhd    (ji,jj,jk) + 2._wp * znad )   & 
     489      ! 
     490      DO_3D( 0, 0, 0, 0, 2, jpkm1 )    ! interior value (2=<jk=<jpkm1) 
     491         !                                   ! hydrostatic pressure gradient along s-surfaces 
     492         zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 * r1_e1u(ji,jj)                         & 
     493            &           * (  e3w(ji+1,jj,jk,Kmm) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) )  & 
     494            &              - e3w(ji  ,jj,jk,Kmm) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) 
     495         zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 * r1_e2v(ji,jj)                         & 
     496            &           * (  e3w(ji,jj+1,jk,Kmm) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) )  & 
     497            &              - e3w(ji,jj  ,jk,Kmm) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) )  ) 
     498         !                                   ! s-coordinate pressure gradient correction 
     499         zuap = -zcoef0 * ( rhd  (ji+1,jj  ,jk) + rhd  (ji,jj,jk) ) & 
    514500            &           * ( gde3w(ji+1,jj  ,jk) - gde3w(ji,jj,jk) ) * r1_e1u(ji,jj) 
    515          zvap = -zcoef0 * ( rhd    (ji  ,jj+1,jk) + rhd    (ji,jj,jk) + 2._wp * znad )  & 
     501         zvap = -zcoef0 * ( rhd  (ji  ,jj+1,jk) + rhd  (ji,jj,jk) ) & 
    516502            &           * ( gde3w(ji  ,jj+1,jk) - gde3w(ji,jj,jk) ) * r1_e2v(ji,jj) 
    517503         ! 
    518504         IF( ln_wd_il ) THEN 
    519505            zhpi(ji,jj,jk) = zhpi(ji,jj,jk) * zcpx(ji,jj) 
    520             zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj) 
     506            zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj)  
    521507            zuap = zuap * zcpx(ji,jj) 
    522508            zvap = zvap * zcpy(ji,jj) 
     
    549535      !!         pvv(:,:,:,Krhs) = pvv(:,:,:,Krhs) - 1/e2v * zhpj 
    550536      !!      iceload is added 
    551       !! 
     537      !!       
    552538      !! ** Action : - Update (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the now hydrastatic pressure trend 
    553539      !!---------------------------------------------------------------------- 
     
    556542      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) ::  puu, pvv    ! ocean velocities and RHS of momentum equation 
    557543      !! 
    558       INTEGER  ::   ji, jj, jk, ikt, iktp1i, iktp1j   ! dummy loop indices 
    559       REAL(wp) ::   zcoef0, zuap, zvap, znad          ! temporary scalars 
     544      INTEGER  ::   ji, jj, jk             ! dummy loop indices 
     545      INTEGER  ::   ikt ,  ikti1,  iktj1   ! local integer 
     546      REAL(wp) ::   ze3w, ze3wi1, ze3wj1   ! local scalars 
     547      REAL(wp) ::   zcoef0, zuap, zvap     !   -      - 
    560548      REAL(wp), DIMENSION(jpi,jpj,jpk ) ::  zhpi, zhpj 
    561549      REAL(wp), DIMENSION(jpi,jpj,jpts) ::  zts_top 
     
    565553      zcoef0 = - grav * 0.5_wp   ! Local constant initialization 
    566554      ! 
    567       znad=1._wp                 ! To use density and not density anomaly 
    568       ! 
    569       !                          ! iniitialised to 0. zhpi zhpi 
     555      !                          ! iniitialised to 0. zhpi zhpi  
    570556      zhpi(:,:,:) = 0._wp   ;   zhpj(:,:,:) = 0._wp 
    571557 
     
    581567      CALL eos( zts_top, risfdep, zrhdtop_oce ) 
    582568 
    583 !================================================================================== 
    584 !===== Compute surface value ===================================================== 
    585 !================================================================================== 
     569      !                     !===========================! 
     570      !                     !=====  surface value  =====! 
     571      !                     !===========================! 
    586572      DO_2D( 0, 0, 0, 0 ) 
    587          ikt    = mikt(ji,jj) 
    588          iktp1i = mikt(ji+1,jj) 
    589          iktp1j = mikt(ji,jj+1) 
    590          ! hydrostatic pressure gradient along s-surfaces and ice shelf pressure 
    591          ! we assume ISF is in isostatic equilibrium 
    592          zhpi(ji,jj,1) = zcoef0 / e1u(ji,jj) * ( 0.5_wp * e3w(ji+1,jj,iktp1i,Kmm)                                    & 
    593             &                                    * ( 2._wp * znad + rhd(ji+1,jj,iktp1i) + zrhdtop_oce(ji+1,jj) )   & 
    594             &                                  - 0.5_wp * e3w(ji,jj,ikt,Kmm)                                         & 
    595             &                                    * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) )          & 
    596             &                                  + ( risfload(ji+1,jj) - risfload(ji,jj))                            ) 
    597          zhpj(ji,jj,1) = zcoef0 / e2v(ji,jj) * ( 0.5_wp * e3w(ji,jj+1,iktp1j,Kmm)                                    & 
    598             &                                    * ( 2._wp * znad + rhd(ji,jj+1,iktp1j) + zrhdtop_oce(ji,jj+1) )   & 
    599             &                                  - 0.5_wp * e3w(ji,jj,ikt,Kmm)                                         & 
    600             &                                    * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) )          & 
    601             &                                  + ( risfload(ji,jj+1) - risfload(ji,jj))                            ) 
    602          ! s-coordinate pressure gradient correction (=0 if z coordinate) 
    603          zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) + 2._wp * znad )   & 
     573         ikt   = mikt(ji  ,jj  )   ;   ze3w   = e3w(ji  ,jj  ,ikt  ,Kmm) 
     574         ikti1 = mikt(ji+1,jj  )   ;   ze3wi1 = e3w(ji+1,jj  ,ikti1,Kmm) 
     575         iktj1 = mikt(ji  ,jj+1)   ;   ze3wj1 = e3w(ji  ,jj+1,iktj1,Kmm) 
     576         !                          ! hydrostatic pressure gradient along s-surfaces and ice shelf pressure 
     577         !                          ! we assume ISF is in isostatic equilibrium 
     578         zhpi(ji,jj,1) = zcoef0 * r1_e1u(ji,jj) * (   risfload(ji+1,jj) - risfload(ji,jj)  & 
     579            &                                       + 0.5_wp * ( ze3wi1 * ( rhd(ji+1,jj,ikti1) + zrhdtop_oce(ji+1,jj) )     & 
     580            &                                                  - ze3w   * ( rhd(ji  ,jj,ikt  ) + zrhdtop_oce(ji  ,jj) ) )   ) 
     581         zhpj(ji,jj,1) = zcoef0 * r1_e2v(ji,jj) * (   risfload(ji,jj+1) - risfload(ji,jj)  & 
     582            &                                       + 0.5_wp * ( ze3wj1 * ( rhd(ji,jj+1,iktj1) + zrhdtop_oce(ji,jj+1) )      & 
     583            &                                                  - ze3w   * ( rhd(ji,jj  ,ikt  ) + zrhdtop_oce(ji,jj  ) ) )   )  
     584         !                          ! s-coordinate pressure gradient correction (=0 if z coordinate) 
     585         zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) )   & 
    604586            &           * ( gde3w(ji+1,jj,1) - gde3w(ji,jj,1) ) * r1_e1u(ji,jj) 
    605          zvap = -zcoef0 * ( rhd    (ji,jj+1,1) + rhd    (ji,jj,1) + 2._wp * znad )   & 
     587         zvap = -zcoef0 * ( rhd    (ji,jj+1,1) + rhd    (ji,jj,1) )   & 
    606588            &           * ( gde3w(ji,jj+1,1) - gde3w(ji,jj,1) ) * r1_e2v(ji,jj) 
    607          ! add to the general momentum trend 
     589         !                          ! add to the general momentum trend 
    608590         puu(ji,jj,1,Krhs) = puu(ji,jj,1,Krhs) + (zhpi(ji,jj,1) + zuap) * umask(ji,jj,1) 
    609591         pvv(ji,jj,1,Krhs) = pvv(ji,jj,1,Krhs) + (zhpj(ji,jj,1) + zvap) * vmask(ji,jj,1) 
    610592      END_2D 
    611 !================================================================================== 
    612 !===== Compute interior value ===================================================== 
    613 !================================================================================== 
    614       ! interior value (2=<jk=<jpkm1) 
     593      !    
     594      !                     !=============================! 
     595      !                     !=====  interior values  =====! 
     596      !                     !=============================! 
    615597      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    616          ! hydrostatic pressure gradient along s-surfaces 
     598         ze3w   = e3w(ji  ,jj  ,jk,Kmm) 
     599         ze3wi1 = e3w(ji+1,jj  ,jk,Kmm) 
     600         ze3wj1 = e3w(ji  ,jj+1,jk,Kmm) 
     601         !                          ! hydrostatic pressure gradient along s-surfaces 
    617602         zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 / e1u(ji,jj)   & 
    618             &           * (  e3w(ji+1,jj,jk,Kmm)                   & 
    619             &                  * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) + 2*znad ) * wmask(ji+1,jj,jk)   & 
    620             &              - e3w(ji  ,jj,jk,Kmm)                   & 
    621             &                  * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) + 2*znad ) * wmask(ji  ,jj,jk)   ) 
     603            &           * (  ze3wi1 * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) ) * wmask(ji+1,jj,jk)   & 
     604            &              - ze3w   * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) ) * wmask(ji  ,jj,jk)   ) 
    622605         zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 / e2v(ji,jj)   & 
    623             &           * (  e3w(ji,jj+1,jk,Kmm)                   & 
    624             &                  * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) + 2*znad ) * wmask(ji,jj+1,jk)   & 
    625             &              - e3w(ji,jj  ,jk,Kmm)                   & 
    626             &                  * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) + 2*znad ) * wmask(ji,jj  ,jk)   ) 
    627          ! s-coordinate pressure gradient correction 
    628          zuap = -zcoef0 * ( rhd   (ji+1,jj  ,jk) + rhd   (ji,jj,jk) + 2._wp * znad )   & 
     606            &           * (  ze3wj1 * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) ) * wmask(ji,jj+1,jk)   & 
     607            &              - ze3w   * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) ) * wmask(ji,jj  ,jk)   ) 
     608         !                          ! s-coordinate pressure gradient correction 
     609         zuap = -zcoef0 * ( rhd   (ji+1,jj  ,jk) + rhd   (ji,jj,jk) )   & 
    629610            &           * ( gde3w(ji+1,jj  ,jk) - gde3w(ji,jj,jk) ) / e1u(ji,jj) 
    630          zvap = -zcoef0 * ( rhd   (ji  ,jj+1,jk) + rhd   (ji,jj,jk) + 2._wp * znad )   & 
     611         zvap = -zcoef0 * ( rhd   (ji  ,jj+1,jk) + rhd   (ji,jj,jk) )   & 
    631612            &           * ( gde3w(ji  ,jj+1,jk) - gde3w(ji,jj,jk) ) / e2v(ji,jj) 
    632          ! add to the general momentum trend 
     613         !                          ! add to the general momentum trend 
    633614         puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + (zhpi(ji,jj,jk) + zuap) * umask(ji,jj,jk) 
    634615         pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + (zhpj(ji,jj,jk) + zvap) * vmask(ji,jj,jk) 
     
    651632      !! 
    652633      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    653       INTEGER  ::   iktb, iktt          ! jk indices at tracer points for top and bottom points 
     634      INTEGER  ::   iktb, iktt          ! jk indices at tracer points for top and bottom points  
    654635      REAL(wp) ::   zcoef0, zep, cffw   ! temporary scalars 
    655636      REAL(wp) ::   z_grav_10, z1_12 
     
    658639      LOGICAL  ::   ll_tmp1, ll_tmp2    ! local logical variables 
    659640      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhpi, zhpj 
    660       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   rhd_opt 
    661  
     641  
    662642      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdzx, zdzy, zdzz                          ! Primitive grid differences ('delta_xyz') 
    663643      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdz_i, zdz_j, zdz_k                       ! Harmonic average of primitive grid differences ('d_xyz') 
     
    665645      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdrho_i, zdrho_j, zdrho_k                 ! Harmonic average of primitive rho differences ('d_rho') 
    666646      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z_rho_i, z_rho_j, z_rho_k                 ! Face intergrals 
    667       REAL(wp), DIMENSION(jpi,jpj)     ::   zz_dz_i, zz_dz_j, zz_drho_i, zz_drho_j    ! temporary arrays 
     647      REAL(wp), DIMENSION(jpi,jpj)     ::   zz_dz_i, zz_dz_j, zz_drho_i, zz_drho_j    ! temporary arrays  
    668648      REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   zcpx, zcpy   !W/D pressure filter 
    669649      !!---------------------------------------------------------------------- 
     
    688668            zcpx(ji,jj) = 0._wp 
    689669          END IF 
    690  
     670    
    691671          ll_tmp1 = MIN(  ssh(ji,jj,Kmm)              ,  ssh(ji,jj+1,Kmm) ) >                & 
    692672               &    MAX( -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) .AND.            & 
     
    721701      z1_12  = 1.0_wp / 12._wp 
    722702 
    723  
    724 !! To be removed once combined with KERNEL08.  KERNEL08 action removes znad from the hpg module, spg is calculated in spg moduel instead.  The final code will just have rhd(:,:,:), no rhd_opt(:,:,:) 
    725       IF( .NOT. ln_linssh ) THEN 
    726          rhd_opt(:,:,:) = rhd(:,:,:) + 1.0_wp ! for vvl option 
    727       ELSE 
    728          rhd_opt(:,:,:) = rhd(:,:,:) 
    729       END IF 
    730  
    731703      !---------------------------------------------------------------------------------------- 
    732       !  1. compute and store elementary vertical differences in provisional arrays 
     704      !  1. compute and store elementary vertical differences in provisional arrays  
    733705      !---------------------------------------------------------------------------------------- 
    734706 
    735707!!bug gm   Not a true bug, but... zdzz=e3w  for zdzx, zdzy verify what it is really 
    736708 
    737       DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
    738          zdrhoz(ji,jj,jk) =   rhd_opt    (ji  ,jj  ,jk) - rhd_opt    (ji,jj,jk-1) 
     709      DO_3D( 1, 1, 1, 1, 2, jpkm1 )   
     710         zdrhoz(ji,jj,jk) =   rhd    (ji  ,jj  ,jk) - rhd    (ji,jj,jk-1) 
    739711         zdzz  (ji,jj,jk) = - gde3w(ji  ,jj  ,jk) + gde3w(ji,jj,jk-1) 
    740712      END_3D 
     
    745717      zep = 1.e-15 
    746718 
    747 !! mb zdrho_k, zdz_k, zdrho_i, zdz_i, zdrho_j, zdz_j re-centred about the point (ji,jj,jk) 
     719!! mb zdrho_k, zdz_k, zdrho_i, zdz_i, zdrho_j, zdz_j re-centred about the point (ji,jj,jk)  
    748720      zdrho_k(:,:,:) = 0._wp 
    749721      zdz_k  (:,:,:) = 0._wp 
    750722 
    751       DO_3D( 1, 1, 1, 1, 2, jpk-2 ) 
     723      DO_3D( 1, 1, 1, 1, 2, jpk-2 )  
    752724         cffw = 2._wp * zdrhoz(ji  ,jj  ,jk) * zdrhoz(ji,jj,jk+1) 
    753725         IF( cffw > zep) THEN 
     
    763735 
    764736! mb for sea-ice shelves we will need to re-write this upper boundary condition in the same form as the lower boundary condition 
    765       zdrho_k(:,:,1) = aco_bc_vrt * ( rhd_opt    (:,:,2) - rhd_opt    (:,:,1) ) - bco_bc_vrt * zdrho_k(:,:,2) 
     737      zdrho_k(:,:,1) = aco_bc_vrt * ( rhd    (:,:,2) - rhd    (:,:,1) ) - bco_bc_vrt * zdrho_k(:,:,2) 
    766738      zdz_k  (:,:,1) = aco_bc_vrt * (-gde3w(:,:,2) + gde3w(:,:,1) ) - bco_bc_vrt * zdz_k  (:,:,2) 
    767739 
     
    769741         IF ( mbkt(ji,jj)>1 ) THEN 
    770742            iktb = mbkt(ji,jj) 
    771             zdrho_k(ji,jj,iktb) = aco_bc_vrt * (     rhd_opt(ji,jj,iktb) -     rhd_opt(ji,jj,iktb-1) ) - bco_bc_vrt * zdrho_k(ji,jj,iktb-1) 
    772             zdz_k  (ji,jj,iktb) = aco_bc_vrt * (-gde3w(ji,jj,iktb) + gde3w(ji,jj,iktb-1) ) - bco_bc_vrt * zdz_k  (ji,jj,iktb-1) 
     743            zdrho_k(ji,jj,iktb) = aco_bc_vrt * (     rhd(ji,jj,iktb) -     rhd(ji,jj,iktb-1) ) - bco_bc_vrt * zdrho_k(ji,jj,iktb-1) 
     744            zdz_k  (ji,jj,iktb) = aco_bc_vrt * (-gde3w(ji,jj,iktb) + gde3w(ji,jj,iktb-1) ) - bco_bc_vrt * zdz_k  (ji,jj,iktb-1)  
    773745         END IF 
    774746      END_2D 
     
    778750      !------------------------------------------------------------- 
    779751 
    780 !! ssh replaces e3w_n ; gde3w is a depth; the formulae involve heights 
    781 !! rho_k stores grav * FX / rho_0 
     752!! ssh replaces e3w_n ; gde3w is a depth; the formulae involve heights   
     753!! rho_k stores grav * FX / rho_0   
    782754 
    783755      !-------------------------------------------------------------- 
     
    786758! *** AY note: ssh(ji,jj,Kmm) + gde3w(ji,jj,1) = e3w(ji,jj,1) 
    787759      DO_2D( 0, 1, 0, 1) 
    788          z_rho_k(ji,jj,1) =  grav * ( ssh(ji,jj,Kmm) + gde3w(ji,jj,1) )                        & 
    789             &                     * (  rhd_opt(ji,jj,1)                                        & 
    790             &                     + 0.5_wp * (   rhd_opt    (ji,jj,2) - rhd_opt    (ji,jj,1) ) & 
     760         z_rho_k(ji,jj,1) =  grav * ( ssh(ji,jj,Kmm) + gde3w(ji,jj,1) )                        &  
     761            &                     * (  rhd(ji,jj,1)                                        & 
     762            &                     + 0.5_wp * (   rhd    (ji,jj,2) - rhd    (ji,jj,1) ) & 
    791763            &                              * (   ssh   (ji,jj,Kmm) + gde3w(ji,jj,1) )          & 
    792764            &                              / ( - gde3w(ji,jj,2) + gde3w(ji,jj,1) )  ) 
     
    798770 
    799771      DO_3D( 0, 1, 0, 1, 2, jpkm1 ) 
    800          z_rho_k(ji,jj,jk) = zcoef0 * (   rhd_opt    (ji,jj,jk) + rhd_opt    (ji,jj,jk-1) )                                   & 
     772         z_rho_k(ji,jj,jk) = zcoef0 * (   rhd    (ji,jj,jk) + rhd    (ji,jj,jk-1) )                                   & 
    801773            &                       * ( - gde3w(ji,jj,jk) + gde3w(ji,jj,jk-1) )                                               & 
    802774            &                       + z_grav_10 * (                                                                           & 
     
    804776            &   * ( - gde3w(ji,jj,jk) + gde3w(ji,jj,jk-1) - z1_12 * ( zdz_k  (ji,jj,jk) + zdz_k  (ji,jj,jk-1) ) )             & 
    805777            &   - ( zdz_k    (ji,jj,jk) - zdz_k    (ji,jj,jk-1) )                                                             & 
    806             &   * ( rhd_opt    (ji,jj,jk) - rhd_opt    (ji,jj,jk-1) - z1_12 * ( zdrho_k(ji,jj,jk) + zdrho_k(ji,jj,jk-1) ) )   & 
     778            &   * ( rhd    (ji,jj,jk) - rhd    (ji,jj,jk-1) - z1_12 * ( zdrho_k(ji,jj,jk) + zdrho_k(ji,jj,jk-1) ) )   & 
    807779            &                             ) 
    808780      END_3D 
    809781 
    810782      !---------------------------------------------------------------------------------------- 
    811       !  5. compute and store elementary horizontal differences in provisional arrays 
     783      !  5. compute and store elementary horizontal differences in provisional arrays  
    812784      !---------------------------------------------------------------------------------------- 
    813785 
    814786      DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    815          zdrhox(ji,jj,jk) =   rhd_opt    (ji+1,jj  ,jk) - rhd_opt    (ji,jj,jk  ) 
     787         zdrhox(ji,jj,jk) =   rhd    (ji+1,jj  ,jk) - rhd    (ji,jj,jk  ) 
    816788         zdzx  (ji,jj,jk) = - gde3w(ji+1,jj  ,jk) + gde3w(ji,jj,jk  ) 
    817          zdrhoy(ji,jj,jk) =   rhd_opt    (ji  ,jj+1,jk) - rhd_opt    (ji,jj,jk  ) 
     789         zdrhoy(ji,jj,jk) =   rhd    (ji  ,jj+1,jk) - rhd    (ji,jj,jk  ) 
    818790         zdzy  (ji,jj,jk) = - gde3w(ji  ,jj+1,jk) + gde3w(ji,jj,jk  ) 
    819791      END_3D 
    820792 
    821       CALL lbc_lnk_multi( 'dynhpg', zdrhox, 'U', 1., zdzx, 'U', 1., zdrhoy, 'V', 1., zdzy, 'V', 1. ) 
     793      CALL lbc_lnk_multi( 'dynhpg', zdrhox, 'U', 1., zdzx, 'U', 1., zdrhoy, 'V', 1., zdzy, 'V', 1. )  
    822794 
    823795      !------------------------------------------------------------------------- 
     
    854826         ENDIF 
    855827      END_3D 
    856  
    857 !!! Note that zdzx, zdzy, zdzz, zdrhox, zdrhoy and zdrhoz should NOT be used beyond this point 
     828       
     829!!! Note that zdzx, zdzy, zdzz, zdrhox, zdrhoy and zdrhoz should NOT be used beyond this point       
    858830 
    859831      !---------------------------------------------------------------------------------- 
     
    869841            ! Walls coming from left: should check from 2 to jpi-1 (and jpj=2-jpj) 
    870842            IF (ji < jpi) THEN 
    871                IF ( umask(ji,jj,jk) > 0.5_wp .AND. umask(ji-1,jj,jk) < 0.5_wp .AND. umask(ji+1,jj,jk) > 0.5_wp)  THEN 
    872                   zz_drho_i(ji,jj) = aco_bc_hor * ( rhd_opt    (ji+1,jj,jk) - rhd_opt    (ji,jj,jk) ) - bco_bc_hor * zdrho_i(ji+1,jj,jk) 
     843               IF ( umask(ji,jj,jk) > 0.5_wp .AND. umask(ji-1,jj,jk) < 0.5_wp .AND. umask(ji+1,jj,jk) > 0.5_wp)  THEN   
     844                  zz_drho_i(ji,jj) = aco_bc_hor * ( rhd    (ji+1,jj,jk) - rhd    (ji,jj,jk) ) - bco_bc_hor * zdrho_i(ji+1,jj,jk)  
    873845                  zz_dz_i  (ji,jj) = aco_bc_hor * (-gde3w(ji+1,jj,jk) + gde3w(ji,jj,jk) ) - bco_bc_hor * zdz_i  (ji+1,jj,jk) 
    874846               END IF 
     
    877849            IF (ji > 2) THEN 
    878850               IF ( umask(ji,jj,jk) < 0.5_wp .AND. umask(ji-1,jj,jk) > 0.5_wp .AND. umask(ji-2,jj,jk) > 0.5_wp) THEN 
    879                   zz_drho_i(ji,jj) = aco_bc_hor * ( rhd_opt    (ji,jj,jk) - rhd_opt    (ji-1,jj,jk) ) - bco_bc_hor * zdrho_i(ji-1,jj,jk) 
     851                  zz_drho_i(ji,jj) = aco_bc_hor * ( rhd    (ji,jj,jk) - rhd    (ji-1,jj,jk) ) - bco_bc_hor * zdrho_i(ji-1,jj,jk)   
    880852                  zz_dz_i  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj,jk) + gde3w(ji-1,jj,jk) ) - bco_bc_hor * zdz_i  (ji-1,jj,jk) 
    881853               END IF 
     
    884856            IF (jj < jpj) THEN 
    885857               IF ( vmask(ji,jj,jk) > 0.5_wp .AND. vmask(ji,jj-1,jk) < 0.5_wp .AND. vmask(ji,jj+1,jk) > 0.5_wp)  THEN 
    886                   zz_drho_j(ji,jj) = aco_bc_hor * ( rhd_opt    (ji,jj+1,jk) - rhd_opt    (ji,jj,jk) ) - bco_bc_hor * zdrho_j(ji,jj+1,jk) 
     858                  zz_drho_j(ji,jj) = aco_bc_hor * ( rhd    (ji,jj+1,jk) - rhd    (ji,jj,jk) ) - bco_bc_hor * zdrho_j(ji,jj+1,jk) 
    887859                  zz_dz_j  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj+1,jk) + gde3w(ji,jj,jk) ) - bco_bc_hor * zdz_j  (ji,jj+1,jk) 
    888860               END IF 
    889             END IF 
     861            END IF  
    890862            ! Walls coming from right: should check from 3 to jpj (and jpi=2-jpi) 
    891863            IF (jj > 2) THEN 
    892                IF ( vmask(ji,jj,jk) < 0.5_wp .AND. vmask(ji,jj-1,jk) > 0.5_wp .AND. vmask(ji,jj-2,jk) > 0.5_wp) THEN 
    893                   zz_drho_j(ji,jj) = aco_bc_hor * ( rhd_opt    (ji,jj,jk) - rhd_opt    (ji,jj-1,jk) ) - bco_bc_hor * zdrho_j(ji,jj-1,jk) 
     864               IF ( vmask(ji,jj,jk) < 0.5_wp .AND. vmask(ji,jj-1,jk) > 0.5_wp .AND. vmask(ji,jj-2,jk) > 0.5_wp) THEN  
     865                  zz_drho_j(ji,jj) = aco_bc_hor * ( rhd    (ji,jj,jk) - rhd    (ji,jj-1,jk) ) - bco_bc_hor * zdrho_j(ji,jj-1,jk)  
    894866                  zz_dz_j  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj,jk) + gde3w(ji,jj-1,jk) ) - bco_bc_hor * zdz_j  (ji,jj-1,jk) 
    895867               END IF 
     
    903875 
    904876      !-------------------------------------------------------------- 
    905       ! 7. Calculate integrals on side faces 
     877      ! 7. Calculate integrals on side faces   
    906878      !------------------------------------------------------------- 
    907879 
    908880      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    909881! two -ve signs cancel in next two lines (within zcoef0 and because gde3w is a depth not a height) 
    910          z_rho_i(ji,jj,jk) = zcoef0 * ( rhd_opt    (ji+1,jj,jk) + rhd_opt    (ji,jj,jk) )                                       & 
    911              &                    * ( gde3w(ji+1,jj,jk) - gde3w(ji,jj,jk) ) 
     882         z_rho_i(ji,jj,jk) = zcoef0 * ( rhd    (ji+1,jj,jk) + rhd    (ji,jj,jk) )                                       & 
     883             &                    * ( gde3w(ji+1,jj,jk) - gde3w(ji,jj,jk) )                                     
    912884         IF ( umask(ji-1, jj, jk) > 0.5 .OR. umask(ji+1, jj, jk) > 0.5 ) THEN 
    913885            z_rho_i(ji,jj,jk) = z_rho_i(ji,jj,jk) - z_grav_10 * (                                                               & 
     
    915887             &   * ( - gde3w(ji+1,jj,jk) + gde3w(ji,jj,jk) - z1_12 * ( zdz_i  (ji+1,jj,jk) + zdz_i  (ji,jj,jk) ) )              & 
    916888             &   - (   zdz_i    (ji+1,jj,jk) - zdz_i    (ji,jj,jk) )                                                            & 
    917              &   * (   rhd_opt    (ji+1,jj,jk) - rhd_opt    (ji,jj,jk) - z1_12 * ( zdrho_i(ji+1,jj,jk) + zdrho_i(ji,jj,jk) ) )  & 
     889             &   * (   rhd    (ji+1,jj,jk) - rhd    (ji,jj,jk) - z1_12 * ( zdrho_i(ji+1,jj,jk) + zdrho_i(ji,jj,jk) ) )  & 
    918890             &                                               ) 
    919891         END IF 
    920  
    921          z_rho_j(ji,jj,jk) = zcoef0 * ( rhd_opt    (ji,jj+1,jk) + rhd_opt    (ji,jj,jk) )                                       & 
    922              &                    * ( gde3w(ji,jj+1,jk) - gde3w(ji,jj,jk) ) 
     892   
     893         z_rho_j(ji,jj,jk) = zcoef0 * ( rhd    (ji,jj+1,jk) + rhd    (ji,jj,jk) )                                       & 
     894             &                    * ( gde3w(ji,jj+1,jk) - gde3w(ji,jj,jk) )                                   
    923895         IF ( vmask(ji, jj-1, jk) > 0.5 .OR. vmask(ji, jj+1, jk) > 0.5 ) THEN 
    924896            z_rho_j(ji,jj,jk) = z_rho_j(ji,jj,jk) - z_grav_10 * (                                                               & 
     
    926898             &   * ( - gde3w(ji,jj+1,jk) + gde3w(ji,jj,jk) - z1_12 * ( zdz_j  (ji,jj+1,jk) + zdz_j  (ji,jj,jk) ) )              & 
    927899             &   - (   zdz_j    (ji,jj+1,jk) - zdz_j    (ji,jj,jk) )                                                            & 
    928              &   * (   rhd_opt    (ji,jj+1,jk) - rhd_opt    (ji,jj,jk) - z1_12 * ( zdrho_j(ji,jj+1,jk) + zdrho_j(ji,jj,jk) ) )  & 
     900             &   * (   rhd    (ji,jj+1,jk) - rhd    (ji,jj,jk) - z1_12 * ( zdrho_j(ji,jj+1,jk) + zdrho_j(ji,jj,jk) ) )  & 
    929901             &                                                 ) 
    930902         END IF 
     
    932904 
    933905      !-------------------------------------------------------------- 
    934       ! 8. Integrate in the vertical 
     906      ! 8. Integrate in the vertical    
    935907      !------------------------------------------------------------- 
    936  
     908      ! 
    937909      ! --------------- 
    938910      !  Surface value 
     
    943915         IF( ln_wd_il ) THEN 
    944916           zhpi(ji,jj,1) = zhpi(ji,jj,1) * zcpx(ji,jj) 
    945            zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj) 
     917           zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj)  
    946918         ENDIF 
    947919         ! add to the general momentum trend 
     
    963935         IF( ln_wd_il ) THEN 
    964936           zhpi(ji,jj,jk) = zhpi(ji,jj,jk) * zcpx(ji,jj) 
    965            zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj) 
     937           zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj)  
    966938         ENDIF 
    967939         ! add to the general momentum trend 
     
    1000972      REAL(wp) :: zrhdt1 
    1001973      REAL(wp) :: zdpdx1, zdpdx2, zdpdy1, zdpdy2 
     974      REAL(wp), DIMENSION(jpi,jpj)     ::   zpgu, zpgv   ! 2D workspace 
     975      REAL(wp), DIMENSION(jpi,jpj)     ::   zsshu_n, zsshv_n 
    1002976      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdept, zrhh 
    1003977      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhpi, zu, zv, fsp, xsp, asp, bsp, csp, dsp 
    1004       REAL(wp), DIMENSION(jpi,jpj)   ::   zsshu_n, zsshv_n 
    1005978      REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   zcpx, zcpy   !W/D pressure filter 
    1006979      !!---------------------------------------------------------------------- 
     
    1015988      zcoef0 = - grav 
    1016989      znad = 1._wp 
    1017       IF( ln_linssh )   znad = 0._wp 
    1018  
     990      IF( ln_linssh )   znad = 1._wp 
     991      ! 
     992      ! --------------- 
     993      !  Surface pressure gradient to be removed 
     994      ! --------------- 
     995      DO_2D( 0, 0, 0, 0 ) 
     996         zpgu(ji,jj) = - grav * ( ssh(ji+1,jj,Kmm) - ssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) 
     997         zpgv(ji,jj) = - grav * ( ssh(ji,jj+1,Kmm) - ssh(ji,jj,Kmm) ) * r1_e2v(ji,jj) 
     998      END_2D 
     999      ! 
    10191000      IF( ln_wd_il ) THEN 
    10201001         ALLOCATE( zcpx(jpi,jpj) , zcpy(jpi,jpj) ) 
     
    10341015            zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Kmm) + ht_0(ji+1,jj) - ssh(ji,jj,Kmm) - ht_0(ji,jj)) & 
    10351016                        &    / (ssh(ji+1,jj,Kmm) -  ssh(ji  ,jj,Kmm)) ) 
    1036  
     1017            
    10371018             zcpx(ji,jj) = max(min( zcpx(ji,jj) , 1.0_wp),0.0_wp) 
    10381019          ELSE 
    10391020            zcpx(ji,jj) = 0._wp 
    10401021          END IF 
    1041  
     1022    
    10421023          ll_tmp1 = MIN(  ssh(ji,jj,Kmm)              ,  ssh(ji,jj+1,Kmm) ) >                & 
    10431024               &    MAX( -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) .AND.            & 
     
    10821063      ! Transfer the depth of "T(:,:,:)" to vertical coordinate "zdept(:,:,:)" 
    10831064      DO_2D( 1, 1, 1, 1 ) 
    1084          zdept(ji,jj,1) = 0.5_wp * e3w(ji,jj,1,Kmm) - ssh(ji,jj,Kmm) * znad 
     1065         zdept(ji,jj,1) = 0.5_wp * e3w(ji,jj,1,Kmm) - ssh(ji,jj,Kmm) 
    10851066      END_2D 
    10861067 
     
    11201101!!gm BUG ?    if it is ssh at u- & v-point then it should be: 
    11211102!          zsshu_n(ji,jj) = (e1e2t(ji,jj) * ssh(ji,jj,Kmm) + e1e2t(ji+1,jj) * ssh(ji+1,jj,Kmm)) * & 
    1122 !                         & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp 
     1103!                         & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp  
    11231104!          zsshv_n(ji,jj) = (e1e2t(ji,jj) * ssh(ji,jj,Kmm) + e1e2t(ji,jj+1) * ssh(ji,jj+1,Kmm)) * & 
    1124 !                         & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp 
     1105!                         & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp  
    11251106!!gm not this: 
    11261107       zsshu_n(ji,jj) = (e1e2u(ji,jj) * ssh(ji,jj,Kmm) + e1e2u(ji+1, jj) * ssh(ji+1,jj,Kmm)) * & 
    1127                       & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp 
     1108                      & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp  
    11281109       zsshv_n(ji,jj) = (e1e2v(ji,jj) * ssh(ji,jj,Kmm) + e1e2v(ji+1, jj) * ssh(ji,jj+1,Kmm)) * & 
    1129                       & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp 
     1110                      & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp  
    11301111      END_2D 
    11311112 
     
    11331114 
    11341115      DO_2D( 0, 0, 0, 0 ) 
    1135        zu(ji,jj,1) = - ( e3u(ji,jj,1,Kmm) - zsshu_n(ji,jj) * znad) 
    1136        zv(ji,jj,1) = - ( e3v(ji,jj,1,Kmm) - zsshv_n(ji,jj) * znad) 
     1116       zu(ji,jj,1) = - ( e3u(ji,jj,1,Kmm) - zsshu_n(ji,jj) )  
     1117       zv(ji,jj,1) = - ( e3v(ji,jj,1,Kmm) - zsshv_n(ji,jj) ) 
    11371118      END_2D 
    11381119 
     
    12161197            zdpdx2 = zdpdx2 * zcpx(ji,jj) * wdrampu(ji,jj) 
    12171198         ENDIF 
    1218          puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + (zdpdx1 + zdpdx2) * umask(ji,jj,jk) 
     1199         puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + (zdpdx1 + zdpdx2 - zpgu(ji,jj)) * umask(ji,jj,jk)  
    12191200      ENDIF 
    12201201 
     
    12721253         ENDIF 
    12731254         IF( ln_wd_il ) THEN 
    1274             zdpdy1 = zdpdy1 * zcpy(ji,jj) * wdrampv(ji,jj) 
    1275             zdpdy2 = zdpdy2 * zcpy(ji,jj) * wdrampv(ji,jj) 
    1276          ENDIF 
    1277  
    1278          pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + (zdpdy1 + zdpdy2) * vmask(ji,jj,jk) 
     1255            zdpdy1 = zdpdy1 * zcpy(ji,jj) * wdrampv(ji,jj)  
     1256            zdpdy2 = zdpdy2 * zcpy(ji,jj) * wdrampv(ji,jj)  
     1257         ENDIF 
     1258 
     1259         pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + (zdpdy1 + zdpdy2 - zpgv(ji,jj)) * vmask(ji,jj,jk) 
    12791260      ENDIF 
    12801261         ! 
     
    13071288      !!---------------------------------------------------------------------- 
    13081289      ! 
    1309 !!gm  WHAT !!!!!   THIS IS VERY DANGEROUS !!!!! 
     1290!!gm  WHAT !!!!!   THIS IS VERY DANGEROUS !!!!!   
    13101291      jpi   = size(fsp,1) 
    13111292      jpj   = size(fsp,2) 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/DYN/dynspg.F90

    r14021 r14065  
    8282      INTEGER  ::   ji, jj, jk                   ! dummy loop indices 
    8383      REAL(wp) ::   z2dt, zg_2, zintp, zgrho0r, zld   ! local scalars 
    84       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zpice 
    85       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdu, ztrdv 
     84      REAL(wp)             , DIMENSION(jpi,jpj) ::   zpgu, zpgv   ! 2D workspace 
     85      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   zpice 
     86      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   ztrdu, ztrdv 
    8687      !!---------------------------------------------------------------------- 
    8788      ! 
     
    99100         ! 
    100101         DO_2D( 0, 0, 0, 0 ) 
    101             spgu(ji,jj) = 0._wp 
    102             spgv(ji,jj) = 0._wp 
     102            zpgu(ji,jj) = 0._wp 
     103            zpgv(ji,jj) = 0._wp 
    103104         END_2D 
    104105         ! 
     
    106107            zg_2 = grav * 0.5 
    107108            DO_2D( 0, 0, 0, 0 )                       ! gradient of Patm using inverse barometer ssh 
    108                spgu(ji,jj) = spgu(ji,jj) + zg_2 * (  ssh_ib (ji+1,jj) - ssh_ib (ji,jj)    & 
     109               zpgu(ji,jj) = zpgu(ji,jj) + zg_2 * (  ssh_ib (ji+1,jj) - ssh_ib (ji,jj)    & 
    109110                  &                                + ssh_ibb(ji+1,jj) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj) 
    110                spgv(ji,jj) = spgv(ji,jj) + zg_2 * (  ssh_ib (ji,jj+1) - ssh_ib (ji,jj)    & 
     111               zpgv(ji,jj) = zpgv(ji,jj) + zg_2 * (  ssh_ib (ji,jj+1) - ssh_ib (ji,jj)    & 
    111112                  &                                + ssh_ibb(ji,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj) 
    112113            END_2D 
     
    121122            ! 
    122123            DO_2D( 0, 0, 0, 0 )                      ! add tide potential forcing 
    123                spgu(ji,jj) = spgu(ji,jj) + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
    124                spgv(ji,jj) = spgv(ji,jj) + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
     124               zpgu(ji,jj) = zpgu(ji,jj) + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
     125               zpgv(ji,jj) = zpgv(ji,jj) + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
    125126            END_2D 
    126127            ! 
     
    128129               zld = rn_scal_load * grav 
    129130               DO_2D( 0, 0, 0, 0 )                   ! add scalar approximation for load potential 
    130                   spgu(ji,jj) = spgu(ji,jj) + zld * ( pssh(ji+1,jj,Kmm) - pssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) 
    131                   spgv(ji,jj) = spgv(ji,jj) + zld * ( pssh(ji,jj+1,Kmm) - pssh(ji,jj,Kmm) ) * r1_e2v(ji,jj) 
     131                  zpgu(ji,jj) = zpgu(ji,jj) + zld * ( pssh(ji+1,jj,Kmm) - pssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) 
     132                  zpgv(ji,jj) = zpgv(ji,jj) + zld * ( pssh(ji,jj+1,Kmm) - pssh(ji,jj,Kmm) ) * r1_e2v(ji,jj) 
    132133               END_2D 
    133134            ENDIF 
     
    140141            zpice(:,:) = (  zintp * snwice_mass(:,:) + ( 1.- zintp ) * snwice_mass_b(:,:)  ) * zgrho0r 
    141142            DO_2D( 0, 0, 0, 0 ) 
    142                spgu(ji,jj) = spgu(ji,jj) + ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj) 
    143                spgv(ji,jj) = spgv(ji,jj) + ( zpice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj) 
     143               zpgu(ji,jj) = zpgu(ji,jj) + ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj) 
     144               zpgv(ji,jj) = zpgv(ji,jj) + ( zpice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj) 
    144145            END_2D 
    145146            DEALLOCATE( zpice ) 
     
    148149         IF( ln_wave .and. ln_bern_srfc ) THEN          !== Add J terms: depth-independent Bernoulli head 
    149150            DO_2D( 0, 0, 0, 0 ) 
    150                spgu(ji,jj) = spgu(ji,jj) + ( bhd_wave(ji+1,jj) - bhd_wave(ji,jj) ) / e1u(ji,jj)   !++ bhd_wave from wave model in m2/s2 [BHD parameters in WW3] 
    151                spgv(ji,jj) = spgv(ji,jj) + ( bhd_wave(ji,jj+1) - bhd_wave(ji,jj) ) / e2v(ji,jj) 
     151               zpgu(ji,jj) = zpgu(ji,jj) + ( bhd_wave(ji+1,jj) - bhd_wave(ji,jj) ) / e1u(ji,jj)   !++ bhd_wave from wave model in m2/s2 [BHD parameters in WW3] 
     152               zpgv(ji,jj) = zpgv(ji,jj) + ( bhd_wave(ji,jj+1) - bhd_wave(ji,jj) ) / e2v(ji,jj) 
    152153            END_2D 
    153154         ENDIF 
    154155         ! 
    155156         DO_3D( 0, 0, 0, 0, 1, jpkm1 )       !== Add all terms to the general trend 
    156             puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + spgu(ji,jj) 
    157             pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + spgv(ji,jj) 
     157            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + zpgu(ji,jj) 
     158            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + zpgv(ji,jj) 
    158159         END_3D 
    159160         ! 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/DYN/dynspg_exp.F90

    r13497 r14065  
    6060      !! 
    6161      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     62      REAL(wp), DIMENSION(jpi,jpj) ::   zpgu, zpgv   ! 2D workspace 
    6263      !!---------------------------------------------------------------------- 
    6364      ! 
     
    6768         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   (explicit free surface)' 
    6869         ! 
    69          spgu(:,:) = 0._wp   ;   spgv(:,:) = 0._wp 
     70         zpgu(:,:) = 0._wp   ;   zpgv(:,:) = 0._wp 
    7071         ! 
    7172         IF( .NOT.ln_linssh .AND. lwp ) WRITE(numout,*) '      non linear free surface: spg is included in dynhpg' 
    7273      ENDIF 
    73  
    74       IF( ln_linssh ) THEN          !* linear free surface : add the surface pressure gradient trend 
    75          ! 
    76          DO_2D( 0, 0, 0, 0 )                 ! now surface pressure gradient 
    77             spgu(ji,jj) = - grav * ( ssh(ji+1,jj,Kmm) - ssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) 
    78             spgv(ji,jj) = - grav * ( ssh(ji,jj+1,Kmm) - ssh(ji,jj,Kmm) ) * r1_e2v(ji,jj) 
    79          END_2D 
    80          ! 
    81          DO_3D( 0, 0, 0, 0, 1, jpkm1 )       ! Add it to the general trend 
    82             puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + spgu(ji,jj) 
    83             pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + spgv(ji,jj) 
    84          END_3D 
    85          ! 
    86       ENDIF 
     74      ! 
     75      DO_2D( 0, 0, 0, 0 ) 
     76         zpgu(ji,jj) = - grav * ( ssh(ji+1,jj,Kmm) - ssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) 
     77         zpgv(ji,jj) = - grav * ( ssh(ji,jj+1,Kmm) - ssh(ji,jj,Kmm) ) * r1_e2v(ji,jj) 
     78      END_2D 
     79      ! 
     80      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     81         puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + zpgu(ji,jj) 
     82         pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + zpgv(ji,jj) 
     83      END_3D 
    8784      ! 
    8885   END SUBROUTINE dyn_spg_exp 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/DYN/dynspg_ts.F90

    r14063 r14065  
    11MODULE dynspg_ts 
    22 
    3    !! Includes ROMS wd scheme with diagnostic outputs ; puu(:,:,:,Kmm) and puu(:,:,:,Krhs) updates are commented out ! 
     3   !! Includes ROMS wd scheme with diagnostic outputs ; puu(:,:,:,Kmm) and puu(:,:,:,Krhs) updates are commented out !  
    44 
    55   !!====================================================================== 
     
    2323 
    2424   !!---------------------------------------------------------------------- 
    25    !!   dyn_spg_ts     : compute surface pressure gradient trend using a time-splitting scheme 
     25   !!   dyn_spg_ts     : compute surface pressure gradient trend using a time-splitting scheme  
    2626   !!   dyn_spg_ts_init: initialisation of the time-splitting scheme 
    2727   !!   ts_wgt         : set time-splitting weights for temporal averaging (or not) 
     
    5050   USE agrif_oce 
    5151#endif 
    52 #if defined key_asminc 
     52#if defined key_asminc    
    5353   USE asminc          ! Assimilation increment 
    5454#endif 
     
    6666   PRIVATE 
    6767 
    68    PUBLIC dyn_spg_ts        ! called by dyn_spg 
     68   PUBLIC dyn_spg_ts        ! called by dyn_spg  
    6969   PUBLIC dyn_spg_ts_init   !    -    - dyn_spg_init 
    7070 
     
    122122      !! ** Purpose : - Compute the now trend due to the explicit time stepping 
    123123      !!              of the quasi-linear barotropic system, and add it to the 
    124       !!              general momentum trend. 
     124      !!              general momentum trend.  
    125125      !! 
    126126      !! ** Method  : - split-explicit schem (time splitting) : 
    127127      !!      Barotropic variables are advanced from internal time steps 
    128128      !!      "n"   to "n+1" if ln_bt_fw=T 
    129       !!      or from 
     129      !!      or from  
    130130      !!      "n-1" to "n+1" if ln_bt_fw=F 
    131131      !!      thanks to a generalized forward-backward time stepping (see ref. below). 
     
    136136      !!      -Compute barotropic advective fluxes at step "n"     : un_adv, vn_adv 
    137137      !!      These are used to advect tracers and are compliant with discrete 
    138       !!      continuity equation taken at the baroclinic time steps. This 
     138      !!      continuity equation taken at the baroclinic time steps. This  
    139139      !!      ensures tracers conservation. 
    140140      !!      - (puu(:,:,:,Krhs), pvv(:,:,:,Krhs)) momentum trend updated with barotropic component. 
    141141      !! 
    142       !! References : Shchepetkin and McWilliams, Ocean Modelling, 2005. 
     142      !! References : Shchepetkin and McWilliams, Ocean Modelling, 2005.  
    143143      !!--------------------------------------------------------------------- 
    144144      INTEGER                             , INTENT( in )  ::  kt                  ! ocean time-step index 
     
    148148      ! 
    149149      INTEGER  ::   ji, jj, jk, jn        ! dummy loop indices 
    150       LOGICAL  ::   ll_fw_start           ! =T : forward integration 
     150      LOGICAL  ::   ll_fw_start           ! =T : forward integration  
    151151      LOGICAL  ::   ll_init               ! =T : special startup of 2d equations 
    152152      INTEGER  ::   noffset               ! local integers  : time offset for bdy update 
     
    162162      REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v   ! top/bottom stress at u- & v-points 
    163163      REAL(wp), DIMENSION(jpi,jpj) :: zhU, zhV         ! fluxes 
     164#if defined key_qco  
    164165      REAL(wp), DIMENSION(jpi, jpj, jpk) :: ze3u, ze3v 
    165       ! 
    166       REAL(wp) ::   zwdramp                     ! local scalar - only used if ln_wd_dl = .True. 
     166#endif 
     167      ! 
     168      REAL(wp) ::   zwdramp                     ! local scalar - only used if ln_wd_dl = .True.  
    167169 
    168170      INTEGER  :: iwdg, jwdg, kwdg   ! short-hand values for the indices of the output point 
     
    179181      IF( ln_wd_dl ) ALLOCATE( ztwdmask(jpi,jpj), zuwdmask(jpi,jpj), zvwdmask(jpi,jpj), zuwdav2(jpi,jpj), zvwdav2(jpi,jpj)) 
    180182      ! 
    181       zwdramp = r_rn_wdmin1               ! simplest ramp 
     183      zwdramp = r_rn_wdmin1               ! simplest ramp  
    182184!     zwdramp = 1._wp / (rn_wdmin2 - rn_wdmin1) ! more general ramp 
    183       !                                         ! inverse of baroclinic time step 
    184       r1_Dt_b = 1._wp / rDt 
    185       ! 
    186       ll_init     = ln_bt_av                    ! if no time averaging, then no specific restart 
     185      !                                         ! inverse of baroclinic time step  
     186      r1_Dt_b = 1._wp / rDt  
     187      ! 
     188      ll_init     = ln_bt_av                    ! if no time averaging, then no specific restart  
    187189      ll_fw_start = .FALSE. 
    188190      !                                         ! time offset in steps for bdy data update 
    189191      IF( .NOT.ln_bt_fw ) THEN   ;   noffset = - nn_e 
    190       ELSE                       ;   noffset =   0 
     192      ELSE                       ;   noffset =   0  
    191193      ENDIF 
    192194      ! 
     
    215217            ! and the averaging weights. We don't have an easy way of telling whether we did 
    216218            ! an Euler timestep on the first timestep (because l_1st_euler is reset to .false. 
    217             ! at the end of the first timestep) so just do this in all cases. 
     219            ! at the end of the first timestep) so just do this in all cases.  
    218220            ll_fw_start = .FALSE. 
    219221            CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
     
    225227      !  Phase 1 : Coupling between general trend and barotropic estimates (1st step) 
    226228      ! ----------------------------------------------------------------------------- 
    227       ! 
     229      !       
    228230      ! 
    229231      !                                   !=  zu_frc =  1/H e3*d/dt(Ua)  =!  (Vertical mean of Ua, the 3D trends) 
    230232      !                                   !  ---------------------------  ! 
     233#if defined key_qco  
    231234      DO jk = 1 , jpk 
    232235         ze3u(:,:,jk) = e3u(:,:,jk,Kmm) 
     
    236239      zu_frc(:,:) = SUM( ze3u(:,:,:) * uu(:,:,:,Krhs) * umask(:,:,:) , DIM=3 ) * r1_hu(:,:,Kmm) 
    237240      zv_frc(:,:) = SUM( ze3v(:,:,:) * vv(:,:,:,Krhs) * vmask(:,:,:) , DIM=3 ) * r1_hv(:,:,Kmm) 
     241#else 
     242      zu_frc(:,:) = SUM( e3u(:,:,:,Kmm) * uu(:,:,:,Krhs) * umask(:,:,:) , DIM=3 ) * r1_hu(:,:,Kmm) 
     243      zv_frc(:,:) = SUM( e3v(:,:,:,Kmm) * vv(:,:,:,Krhs) * vmask(:,:,:) , DIM=3 ) * r1_hv(:,:,Kmm) 
     244#endif  
    238245      ! 
    239246      ! 
     
    243250         vv(:,:,jk,Krhs) = ( vv(:,:,jk,Krhs) - zv_frc(:,:) ) * vmask(:,:,jk) 
    244251      END DO 
    245  
     252       
    246253!!gm  Question here when removing the Vertically integrated trends, we remove the vertically integrated NL trends on momentum.... 
    247254!!gm  Is it correct to do so ?   I think so... 
    248  
    249       !                                   !=  remove 2D Coriolis and pressure gradient trends  =! 
    250       !                                   !  -------------------------------------------------  ! 
     255       
     256      !                                   !=  remove 2D Coriolis trend  =! 
     257      !                                   !  --------------------------  ! 
    251258      ! 
    252259      IF( kt == nit000 .OR. .NOT. ln_linssh )   CALL dyn_cor_2D_init( Kmm )   ! Set zwz, the barotropic Coriolis force coefficient 
    253       !       ! recompute zwz = f/depth  at every time step for (.NOT.ln_linssh) as the water colomn height changes 
     260      !                      ! recompute zwz = f/depth  at every time step for (.NOT.ln_linssh) as the water colomn height changes 
    254261      ! 
    255262      !                                         !* 2D Coriolis trends 
    256       zhU(:,:) = puu_b(:,:,Kmm) * hu(:,:,Kmm) * e2u(:,:)        ! now fluxes 
     263      zhU(:,:) = puu_b(:,:,Kmm) * hu(:,:,Kmm) * e2u(:,:)        ! now fluxes  
    257264      zhV(:,:) = pvv_b(:,:,Kmm) * hv(:,:,Kmm) * e1v(:,:)        ! NB: FULL domain : put a value in last row and column 
    258265      ! 
    259266      CALL dyn_cor_2d( ht(:,:), hu(:,:,Kmm), hv(:,:,Kmm), puu_b(:,:,Kmm), pvv_b(:,:,Kmm), zhU, zhV,  &   ! <<== in 
    260          &                                                                     zu_trd, zv_trd   )   ! ==>> out 
    261       ! 
    262       IF( .NOT.ln_linssh ) THEN                 !* surface pressure gradient   (variable volume only) 
    263          ! 
    264          IF( ln_wd_il ) THEN                       ! W/D : limiter applied to spgspg 
    265             CALL wad_spg( pssh(:,:,Kmm), zcpx, zcpy )          ! Calculating W/D gravity filters, zcpx and zcpy 
    266             DO_2D( 0, 0, 0, 0 )                                ! SPG with the application of W/D gravity filters 
    267                zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( pssh(ji+1,jj  ,Kmm) - pssh(ji  ,jj ,Kmm) )   & 
    268                   &                          * r1_e1u(ji,jj) * zcpx(ji,jj)  * wdrampu(ji,jj)  !jth 
    269                zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( pssh(ji  ,jj+1,Kmm) - pssh(ji  ,jj ,Kmm) )   & 
    270                   &                          * r1_e2v(ji,jj) * zcpy(ji,jj)  * wdrampv(ji,jj)  !jth 
    271             END_2D 
    272          ELSE                                      ! now suface pressure gradient 
    273             DO_2D( 0, 0, 0, 0 ) 
    274                zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  pssh(ji+1,jj  ,Kmm) - pssh(ji  ,jj  ,Kmm)  ) * r1_e1u(ji,jj) 
    275                zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  pssh(ji  ,jj+1,Kmm) - pssh(ji  ,jj  ,Kmm)  ) * r1_e2v(ji,jj) 
    276             END_2D 
    277          ENDIF 
    278          ! 
    279       ENDIF 
     267         &                                                                          zu_trd, zv_trd   )   ! ==>> out 
    280268      ! 
    281269      DO_2D( 0, 0, 0, 0 )                          ! Remove coriolis term (and possibly spg) from barotropic trend 
     
    287275      !                                   !  -----------------------------------------------------------  ! 
    288276      CALL dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, zu_frc, zv_frc,  zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
     277      ! 
    289278      !                                   !=  Add atmospheric pressure forcing  =! 
    290279      !                                   !  ----------------------------------  ! 
     
    319308            zv_frc(ji,jj) =  zv_frc(ji,jj) + zztmp * ( vtau_b(ji,jj) + vtau(ji,jj) ) * r1_hv(ji,jj,Kmm) 
    320309         END_2D 
    321       ENDIF 
     310      ENDIF   
    322311      ! 
    323312      !              !----------------! 
     
    330319      ELSE                                        ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 
    331320         zztmp = r1_rho0 * r1_2 
    332          zssh_frc(:,:) = zztmp * (  emp(:,:)        + emp_b(:,:)                    & 
    333                 &                 - rnf(:,:)        - rnf_b(:,:)                    & 
    334                 &                 + fwfisf_cav(:,:) + fwfisf_cav_b(:,:)             & 
    335                 &                 + fwfisf_par(:,:) + fwfisf_par_b(:,:)             ) 
     321         zssh_frc(:,:) = zztmp * (   emp(:,:)        + emp_b(:,:)          & 
     322            &                      - rnf(:,:)        - rnf_b(:,:)          & 
     323            &                      + fwfisf_cav(:,:) + fwfisf_cav_b(:,:)   & 
     324            &                      + fwfisf_par(:,:) + fwfisf_par_b(:,:)   ) 
    336325      ENDIF 
    337326      !                                   !=  Add Stokes drift divergence  =!   (if exist) 
     
    369358      ! 
    370359      ! ----------------------------------------------------------------------- 
    371       !  Phase 2 : Integration of the barotropic equations 
     360      !  Phase 2 : Integration of the barotropic equations  
    372361      ! ----------------------------------------------------------------------- 
    373362      ! 
    374363      !                                             ! ==================== ! 
    375364      !                                             !    Initialisations   ! 
    376       !                                             ! ==================== ! 
    377       ! Initialize barotropic variables: 
     365      !                                             ! ==================== !   
     366      ! Initialize barotropic variables:       
    378367      IF( ll_init )THEN 
    379368         sshbb_e(:,:) = 0._wp 
     
    391380      ENDIF 
    392381      ! 
    393       IF( ln_bt_fw ) THEN                 ! FORWARD integration: start from NOW fields 
    394          sshn_e(:,:) =    pssh (:,:,Kmm) 
    395          un_e  (:,:) =    puu_b(:,:,Kmm) 
     382      IF( ln_bt_fw ) THEN                 ! FORWARD integration: start from NOW fields                     
     383         sshn_e(:,:) =    pssh (:,:,Kmm)             
     384         un_e  (:,:) =    puu_b(:,:,Kmm)             
    396385         vn_e  (:,:) =    pvv_b(:,:,Kmm) 
    397386         ! 
    398          hu_e  (:,:) =    hu(:,:,Kmm) 
    399          hv_e  (:,:) =    hv(:,:,Kmm) 
    400          hur_e (:,:) = r1_hu(:,:,Kmm) 
     387         hu_e  (:,:) =    hu(:,:,Kmm)        
     388         hv_e  (:,:) =    hv(:,:,Kmm)  
     389         hur_e (:,:) = r1_hu(:,:,Kmm)     
    401390         hvr_e (:,:) = r1_hv(:,:,Kmm) 
    402391      ELSE                                ! CENTRED integration: start from BEFORE fields 
    403392         sshn_e(:,:) =    pssh (:,:,Kbb) 
    404          un_e  (:,:) =    puu_b(:,:,Kbb) 
     393         un_e  (:,:) =    puu_b(:,:,Kbb)          
    405394         vn_e  (:,:) =    pvv_b(:,:,Kbb) 
    406395         ! 
    407          hu_e  (:,:) =    hu(:,:,Kbb) 
    408          hv_e  (:,:) =    hv(:,:,Kbb) 
    409          hur_e (:,:) = r1_hu(:,:,Kbb) 
     396         hu_e  (:,:) =    hu(:,:,Kbb)        
     397         hv_e  (:,:) =    hv(:,:,Kbb)  
     398         hur_e (:,:) = r1_hu(:,:,Kbb)     
    410399         hvr_e (:,:) = r1_hv(:,:,Kbb) 
    411400      ENDIF 
    412401      ! 
    413402      ! Initialize sums: 
    414       puu_b (:,:,Kaa) = 0._wp       ! After barotropic velocities (or transport if flux form) 
     403      puu_b (:,:,Kaa) = 0._wp       ! After barotropic velocities (or transport if flux form)           
    415404      pvv_b (:,:,Kaa) = 0._wp 
    416405      pssh  (:,:,Kaa) = 0._wp       ! Sum for after averaged sea level 
     
    419408      ! 
    420409      IF( ln_wd_dl ) THEN 
    421          zuwdmask(:,:) = 0._wp  ! set to zero for definiteness (not sure this is necessary) 
    422          zvwdmask(:,:) = 0._wp  ! 
    423          zuwdav2 (:,:) = 0._wp 
    424          zvwdav2 (:,:) = 0._wp 
    425       END IF 
     410         zuwdmask(:,:) = 0._wp  ! set to zero for definiteness (not sure this is necessary)  
     411         zvwdmask(:,:) = 0._wp  !  
     412         zuwdav2 (:,:) = 0._wp  
     413         zvwdav2 (:,:) = 0._wp    
     414      END IF  
    426415 
    427416      !                                             ! ==================== ! 
     
    443432         ! 
    444433         !                       !* Set extrapolation coefficients for predictor step: 
    445          IF ((jn<3).AND.ll_init) THEN      ! Forward 
    446            za1 = 1._wp 
    447            za2 = 0._wp 
    448            za3 = 0._wp 
    449          ELSE                              ! AB3-AM4 Coefficients: bet=0.281105 
     434         IF ((jn<3).AND.ll_init) THEN      ! Forward            
     435           za1 = 1._wp                                           
     436           za2 = 0._wp                         
     437           za3 = 0._wp                         
     438         ELSE                              ! AB3-AM4 Coefficients: bet=0.281105  
    450439           za1 =  1.781105_wp              ! za1 =   3/2 +   bet 
    451440           za2 = -1.06221_wp               ! za2 = -(1/2 + 2*bet) 
     
    467456            !--------------------------------------------------------------------------------! 
    468457            zsshp2_e(:,:) = za1 * sshn_e(:,:)  + za2 * sshb_e(:,:) + za3 * sshbb_e(:,:) 
    469  
     458             
    470459            ! set wetting & drying mask at tracer points for this barotropic mid-step 
    471460            IF( ln_wd_dl )   CALL wad_tmsk( zsshp2_e, ztwdmask ) 
     
    495484                    &                                 + e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1)  ) * ssvmask(ji,jj) 
    496485            END_2D 
    497 #endif 
     486#endif                
    498487            ! 
    499488         ENDIF 
     
    504493         !                             ! values of zhup2_e and zhvp2_e on the halo are not needed in bdy_vol2d 
    505494         IF( ln_bdy .AND. ln_vol ) CALL bdy_vol2d( kt, jn, ua_e, va_e, zhup2_e, zhvp2_e ) 
    506          ! 
     495         !       
    507496         !                             ! resulting flux at mid-step (not over the full domain) 
    508497         zhU(1:jpim1,1:jpj  ) = e2u(1:jpim1,1:jpj  ) * ua_e(1:jpim1,1:jpj  ) * zhup2_e(1:jpim1,1:jpj  )   ! not jpi-column 
     
    515504         IF( ln_wd_il )   CALL wad_lmt_bt(zhU, zhV, sshn_e, zssh_frc, rDt_e)    !!gm wad_lmt_bt use of lbc_lnk on zhU, zhV 
    516505 
    517          IF( ln_wd_dl ) THEN           ! un_e and vn_e are set to zero at faces where 
     506         IF( ln_wd_dl ) THEN           ! un_e and vn_e are set to zero at faces where  
    518507            !                          ! the direction of the flow is from dry cells 
    519508            CALL wad_Umsk( ztwdmask, zhU, zhV, un_e, vn_e, zuwdmask, zvwdmask )   ! not jpi colomn for U, not jpj row for V 
    520509            ! 
    521          ENDIF 
     510         ENDIF     
    522511         ! 
    523512         ! 
     
    543532         un_adv(:,:) = un_adv(:,:) + za2 * zhU(:,:) * r1_e2u(:,:) 
    544533         vn_adv(:,:) = vn_adv(:,:) + za2 * zhV(:,:) * r1_e1v(:,:) 
    545          ! sum over sub-time-steps to decide which baroclinic velocities to set to zero (zuwdav2 is only used when ln_wd_dl_bc=True) 
     534         ! sum over sub-time-steps to decide which baroclinic velocities to set to zero (zuwdav2 is only used when ln_wd_dl_bc=True)  
    546535         IF ( ln_wd_dl_bc ) THEN 
    547536            zuwdav2(1:jpim1,1:jpj  ) = zuwdav2(1:jpim1,1:jpj  ) + za2 * zuwdmask(1:jpim1,1:jpj  )   ! not jpi-column 
     
    549538         END IF 
    550539         ! 
    551          ! 
     540         !   
    552541         ! Sea Surface Height at u-,v-points (vvl case only) 
    553542         IF( .NOT.ln_linssh ) THEN 
     
    569558#endif 
    570559         ENDIF 
    571          ! 
     560         !          
    572561         ! Half-step back interpolation of SSH for surface pressure computation at step jit+1/2 
    573562         !--            m+1/2           m+1              m               m-1              m-2     --! 
     
    626615         IF( ln_dynadv_vec .OR. ln_linssh ) THEN      !* Vector form 
    627616            DO_2D( 0, 0, 0, 0 ) 
    628                ua_e(ji,jj) = (                                 un_e(ji,jj)   & 
     617               ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    629618                         &     + rDt_e * (                   zu_spg(ji,jj)   & 
    630619                         &                                 + zu_trd(ji,jj)   & 
    631                          &                                 + zu_frc(ji,jj) ) & 
     620                         &                                 + zu_frc(ji,jj) ) &  
    632621                         &   ) * ssumask(ji,jj) 
    633622 
     
    657646               z1_hv = ssvmask(ji,jj) / ( hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
    658647               ! 
    659                ua_e(ji,jj) = (               hu_e  (ji,jj) *   un_e (ji,jj)      & 
     648               ua_e(ji,jj) = (               hu_e  (ji,jj) *   un_e (ji,jj)      &  
    660649                    &            + rDt_e * (  zhu_bck        * zu_spg (ji,jj)  &   ! 
    661650                    &                       + zhup2_e(ji,jj) * zu_trd (ji,jj)  &   ! 
     
    675664            END_2D 
    676665         ENDIF 
    677  
     666        
    678667         IF( .NOT.ln_linssh ) THEN !* Update ocean depth (variable volume case only) 
    679668            hu_e (2:jpim1,2:jpjm1) =    hu_0(2:jpim1,2:jpjm1) + zsshu_a(2:jpim1,2:jpjm1) 
     
    692681         !                                                 ! open boundaries 
    693682         IF( ln_bdy )   CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
    694 #if defined key_agrif 
     683#if defined key_agrif                                                            
    695684         IF( .NOT.Agrif_Root() )  CALL agrif_dyn_ts( jn )  ! Agrif 
    696685#endif 
     
    711700         !                                             !* Sum over whole bt loop 
    712701         !                                             !  ---------------------- 
    713          za1 = wgtbtp1(jn) 
     702         za1 = wgtbtp1(jn)                                     
    714703         IF( ln_dynadv_vec .OR. ln_linssh ) THEN    ! Sum velocities 
    715             puu_b  (:,:,Kaa) = puu_b  (:,:,Kaa) + za1 * ua_e  (:,:) 
    716             pvv_b  (:,:,Kaa) = pvv_b  (:,:,Kaa) + za1 * va_e  (:,:) 
     704            puu_b  (:,:,Kaa) = puu_b  (:,:,Kaa) + za1 * ua_e  (:,:)  
     705            pvv_b  (:,:,Kaa) = pvv_b  (:,:,Kaa) + za1 * va_e  (:,:)  
    717706         ELSE                                       ! Sum transports 
    718             IF ( .NOT.ln_wd_dl ) THEN 
     707            IF ( .NOT.ln_wd_dl ) THEN   
    719708               puu_b  (:,:,Kaa) = puu_b  (:,:,Kaa) + za1 * ua_e  (:,:) * hu_e (:,:) 
    720709               pvv_b  (:,:,Kaa) = pvv_b  (:,:,Kaa) + za1 * va_e  (:,:) * hv_e (:,:) 
    721             ELSE 
     710            ELSE  
    722711               puu_b  (:,:,Kaa) = puu_b  (:,:,Kaa) + za1 * ua_e  (:,:) * hu_e (:,:) * zuwdmask(:,:) 
    723712               pvv_b  (:,:,Kaa) = pvv_b  (:,:,Kaa) + za1 * va_e  (:,:) * hv_e (:,:) * zvwdmask(:,:) 
    724             END IF 
     713            END IF  
    725714         ENDIF 
    726715         !                                          ! Sum sea level 
     
    740729               zun_save = un_adv(ji,jj) 
    741730               zvn_save = vn_adv(ji,jj) 
    742                !                          ! apply the previously computed correction 
     731               !                          ! apply the previously computed correction  
    743732               un_adv(ji,jj) = r1_2 * ( ub2_b(ji,jj) + zun_save - rn_atfp * un_bf(ji,jj) ) 
    744733               vn_adv(ji,jj) = r1_2 * ( vb2_b(ji,jj) + zvn_save - rn_atfp * vn_bf(ji,jj) ) 
     
    781770               &                                      + e1e2t(ji,jj+1) * pssh(ji,jj+1,Kaa) ) * ssvmask(ji,jj) 
    782771         END_2D 
    783 #endif 
     772#endif    
    784773         CALL lbc_lnk_multi( 'dynspg_ts', zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
    785774         ! 
     
    796785 
    797786 
    798       ! Correct velocities so that the barotropic velocity equals (un_adv, vn_adv) (in all cases) 
     787      ! Correct velocities so that the barotropic velocity equals (un_adv, vn_adv) (in all cases)   
    799788      DO jk = 1, jpkm1 
    800789         puu(:,:,jk,Kmm) = ( puu(:,:,jk,Kmm) + un_adv(:,:)*r1_hu(:,:,Kmm) - puu_b(:,:,Kmm) ) * umask(:,:,jk) 
     
    802791      END DO 
    803792 
    804       IF ( ln_wd_dl .and. ln_wd_dl_bc) THEN 
     793      IF ( ln_wd_dl .and. ln_wd_dl_bc) THEN  
    805794         DO jk = 1, jpkm1 
    806795            puu(:,:,jk,Kmm) = ( un_adv(:,:)*r1_hu(:,:,Kmm) & 
    807                        & + zuwdav2(:,:)*(puu(:,:,jk,Kmm) - un_adv(:,:)*r1_hu(:,:,Kmm)) ) * umask(:,:,jk) 
    808             pvv(:,:,jk,Kmm) = ( vn_adv(:,:)*r1_hv(:,:,Kmm) & 
    809                        & + zvwdav2(:,:)*(pvv(:,:,jk,Kmm) - vn_adv(:,:)*r1_hv(:,:,Kmm)) ) * vmask(:,:,jk) 
     796                       & + zuwdav2(:,:)*(puu(:,:,jk,Kmm) - un_adv(:,:)*r1_hu(:,:,Kmm)) ) * umask(:,:,jk)  
     797            pvv(:,:,jk,Kmm) = ( vn_adv(:,:)*r1_hv(:,:,Kmm) &  
     798                       & + zvwdav2(:,:)*(pvv(:,:,jk,Kmm) - vn_adv(:,:)*r1_hv(:,:,Kmm)) ) * vmask(:,:,jk)   
    810799         END DO 
    811       END IF 
    812  
    813  
     800      END IF  
     801 
     802       
    814803      CALL iom_put(  "ubar", un_adv(:,:)*r1_hu(:,:,Kmm) )    ! barotropic i-current 
    815804      CALL iom_put(  "vbar", vn_adv(:,:)*r1_hv(:,:,Kmm) )    ! barotropic i-current 
     
    829818         vb2_i_b(:,:) = vb2_i_b(:,:) + za1 * vb2_b(:,:) 
    830819      ENDIF 
    831 #endif 
     820#endif       
    832821      !                                   !* write time-spliting arrays in the restart 
    833822      IF( lrst_oce .AND.ln_bt_fw )   CALL ts_rst( kt, 'WRITE' ) 
     
    850839      LOGICAL, INTENT(in) ::   ll_av      ! temporal averaging=.true. 
    851840      LOGICAL, INTENT(in) ::   ll_fw      ! forward time splitting =.true. 
    852       INTEGER, INTENT(inout) :: jpit      ! cycle length 
     841      INTEGER, INTENT(inout) :: jpit      ! cycle length     
    853842      REAL(wp), DIMENSION(3*nn_e), INTENT(inout) ::   zwgt1, & ! Primary weights 
    854843                                                         zwgt2    ! Secondary weights 
    855  
     844       
    856845      INTEGER ::  jic, jn, ji                      ! temporary integers 
    857846      REAL(wp) :: za1, za2 
     
    862851 
    863852      ! Set time index when averaged value is requested 
    864       IF (ll_fw) THEN 
     853      IF (ll_fw) THEN  
    865854         jic = nn_e 
    866855      ELSE 
     
    870859      ! Set primary weights: 
    871860      IF (ll_av) THEN 
    872            ! Define simple boxcar window for primary weights 
    873            ! (width = nn_e, centered around jic) 
     861           ! Define simple boxcar window for primary weights  
     862           ! (width = nn_e, centered around jic)      
    874863         SELECT CASE ( nn_bt_flt ) 
    875864              CASE( 0 )  ! No averaging 
     
    879868              CASE( 1 )  ! Boxcar, width = nn_e 
    880869                 DO jn = 1, 3*nn_e 
    881                     za1 = ABS(float(jn-jic))/float(nn_e) 
     870                    za1 = ABS(float(jn-jic))/float(nn_e)  
    882871                    IF (za1 < 0.5_wp) THEN 
    883872                      zwgt1(jn) = 1._wp 
     
    888877              CASE( 2 )  ! Boxcar, width = 2 * nn_e 
    889878                 DO jn = 1, 3*nn_e 
    890                     za1 = ABS(float(jn-jic))/float(nn_e) 
     879                    za1 = ABS(float(jn-jic))/float(nn_e)  
    891880                    IF (za1 < 1._wp) THEN 
    892881                      zwgt1(jn) = 1._wp 
     
    901890         jpit = jic 
    902891      ENDIF 
    903  
     892     
    904893      ! Set secondary weights 
    905894      DO jn = 1, jpit 
     
    930919      !!---------------------------------------------------------------------- 
    931920      ! 
    932       IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise 
     921      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    933922         !                                   ! --------------- 
    934923         IF( ln_rstart .AND. ln_bt_fw .AND. .NOT.l_1st_euler ) THEN    !* Read the restart file 
    935             CALL iom_get( numror, jpdom_auto, 'ub2_b'  , ub2_b  (:,:), cd_type = 'U', psgn = -1._wp ) 
    936             CALL iom_get( numror, jpdom_auto, 'vb2_b'  , vb2_b  (:,:), cd_type = 'V', psgn = -1._wp ) 
    937             CALL iom_get( numror, jpdom_auto, 'un_bf'  , un_bf  (:,:), cd_type = 'U', psgn = -1._wp ) 
    938             CALL iom_get( numror, jpdom_auto, 'vn_bf'  , vn_bf  (:,:), cd_type = 'V', psgn = -1._wp ) 
     924            CALL iom_get( numror, jpdom_auto, 'ub2_b'  , ub2_b  (:,:), cd_type = 'U', psgn = -1._wp )    
     925            CALL iom_get( numror, jpdom_auto, 'vb2_b'  , vb2_b  (:,:), cd_type = 'V', psgn = -1._wp )  
     926            CALL iom_get( numror, jpdom_auto, 'un_bf'  , un_bf  (:,:), cd_type = 'U', psgn = -1._wp )    
     927            CALL iom_get( numror, jpdom_auto, 'vn_bf'  , vn_bf  (:,:), cd_type = 'V', psgn = -1._wp )  
    939928            IF( .NOT.ln_bt_av ) THEN 
    940                CALL iom_get( numror, jpdom_auto, 'sshbb_e'  , sshbb_e(:,:), cd_type = 'T', psgn =  1._wp ) 
    941                CALL iom_get( numror, jpdom_auto, 'ubb_e'    ,   ubb_e(:,:), cd_type = 'U', psgn = -1._wp ) 
     929               CALL iom_get( numror, jpdom_auto, 'sshbb_e'  , sshbb_e(:,:), cd_type = 'T', psgn =  1._wp )    
     930               CALL iom_get( numror, jpdom_auto, 'ubb_e'    ,   ubb_e(:,:), cd_type = 'U', psgn = -1._wp )    
    942931               CALL iom_get( numror, jpdom_auto, 'vbb_e'    ,   vbb_e(:,:), cd_type = 'V', psgn = -1._wp ) 
    943                CALL iom_get( numror, jpdom_auto, 'sshb_e'   ,  sshb_e(:,:), cd_type = 'T', psgn =  1._wp ) 
    944                CALL iom_get( numror, jpdom_auto, 'ub_e'     ,    ub_e(:,:), cd_type = 'U', psgn = -1._wp ) 
     932               CALL iom_get( numror, jpdom_auto, 'sshb_e'   ,  sshb_e(:,:), cd_type = 'T', psgn =  1._wp )  
     933               CALL iom_get( numror, jpdom_auto, 'ub_e'     ,    ub_e(:,:), cd_type = 'U', psgn = -1._wp )    
    945934               CALL iom_get( numror, jpdom_auto, 'vb_e'     ,    vb_e(:,:), cd_type = 'V', psgn = -1._wp ) 
    946935            ENDIF 
     
    948937            ! Read time integrated fluxes 
    949938            IF ( .NOT.Agrif_Root() ) THEN 
    950                CALL iom_get( numror, jpdom_auto, 'ub2_i_b'  , ub2_i_b(:,:), cd_type = 'U', psgn = -1._wp ) 
     939               CALL iom_get( numror, jpdom_auto, 'ub2_i_b'  , ub2_i_b(:,:), cd_type = 'U', psgn = -1._wp )    
    951940               CALL iom_get( numror, jpdom_auto, 'vb2_i_b'  , vb2_i_b(:,:), cd_type = 'V', psgn = -1._wp ) 
    952941            ELSE 
     
    974963         ! 
    975964         IF (.NOT.ln_bt_av) THEN 
    976             CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:) ) 
     965            CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:) )  
    977966            CALL iom_rstput( kt, nitrst, numrow, 'ubb_e'    ,   ubb_e(:,:) ) 
    978967            CALL iom_rstput( kt, nitrst, numrow, 'vbb_e'    ,   vbb_e(:,:) ) 
     
    10171006      ! Estimate number of iterations to satisfy a max courant number= rn_bt_cmax 
    10181007      IF( ln_bt_auto )   nn_e = CEILING( rn_Dt / rn_bt_cmax * zcmax) 
    1019  
     1008       
    10201009      rDt_e = rn_Dt / REAL( nn_e , wp ) 
    10211010      zcmax = zcmax * rDt_e 
     
    10531042         CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '           Dirac' 
    10541043         CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_e' 
    1055          CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_e' 
     1044         CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_e'  
    10561045         CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1, or 2' ) 
    10571046      END SELECT 
     
    10711060      ENDIF 
    10721061      IF( zcmax>0.9_wp ) THEN 
    1073          CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_e !' ) 
     1062         CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_e !' )           
    10741063      ENDIF 
    10751064      ! 
     
    10821071   END SUBROUTINE dyn_spg_ts_init 
    10831072 
    1084  
     1073    
    10851074   SUBROUTINE dyn_cor_2D_init( Kmm ) 
    10861075      !!--------------------------------------------------------------------- 
     
    11081097            DO_2D( 0, 0, 0, 0 ) 
    11091098               zwz(ji,jj) = ( ht(ji,jj+1) + ht(ji+1,jj+1)   & 
    1110                     &       + ht(ji,jj  ) + ht(ji+1,jj  ) ) * 0.25_wp 
     1099                    &       + ht(ji,jj  ) + ht(ji+1,jj  ) ) * 0.25_wp   
    11111100               IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
    11121101            END_2D 
     
    11451134         ! 
    11461135      END SELECT 
    1147  
     1136       
    11481137   END SUBROUTINE dyn_cor_2d_init 
    11491138 
     
    11701159               ! 
    11711160            zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * z1_hv                    & 
    1172                &               * (  e1e2t(ji,jj+1)*pht(ji,jj+1)*ff_t(ji,jj+1) * ( punb(ji,jj+1) + punb(ji-1,jj+1) )   & 
    1173                &                  + e1e2t(ji,jj  )*pht(ji,jj  )*ff_t(ji,jj  ) * ( punb(ji,jj  ) + punb(ji-1,jj  ) )   ) 
    1174          END_2D 
    1175          ! 
     1161               &               * (  e1e2t(ji,jj+1)*pht(ji,jj+1)*ff_t(ji,jj+1) * ( punb(ji,jj+1) + punb(ji-1,jj+1) )   &  
     1162               &                  + e1e2t(ji,jj  )*pht(ji,jj  )*ff_t(ji,jj  ) * ( punb(ji,jj  ) + punb(ji-1,jj  ) )   )  
     1163         END_2D 
     1164         !          
    11761165      CASE( np_ENE , np_MIX )        ! energy conserving scheme (t-point) ENE or MIX 
    11771166         DO_2D( 0, 0, 0, 0 ) 
     
    11951184         END_2D 
    11961185         ! 
    1197       CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f) 
     1186      CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f)          
    11981187         DO_2D( 0, 0, 0, 0 ) 
    11991188            zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zhV(ji  ,jj  ) & 
     
    12151204      !!---------------------------------------------------------------------- 
    12161205      !!                  ***  ROUTINE wad_lmt  *** 
    1217       !! 
    1218       !! ** Purpose :   set wetting & drying mask at tracer points 
    1219       !!              for the current barotropic sub-step 
    1220       !! 
    1221       !! ** Method  :   ??? 
     1206      !!                     
     1207      !! ** Purpose :   set wetting & drying mask at tracer points  
     1208      !!              for the current barotropic sub-step  
     1209      !! 
     1210      !! ** Method  :   ???  
    12221211      !! 
    12231212      !! ** Action  :  ptmsk : wetting & drying t-mask 
     
    12291218      !!---------------------------------------------------------------------- 
    12301219      ! 
    1231       IF( ln_wd_dl_rmp ) THEN 
     1220      IF( ln_wd_dl_rmp ) THEN      
    12321221         DO_2D( 1, 1, 1, 1 ) 
    1233             IF    ( pssh(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN 
    1234                !           IF    ( pssh(ji,jj) + ht_0(ji,jj) >          rn_wdmin2 ) THEN 
     1222            IF    ( pssh(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN  
     1223               !           IF    ( pssh(ji,jj) + ht_0(ji,jj) >          rn_wdmin2 ) THEN  
    12351224               ptmsk(ji,jj) = 1._wp 
    12361225            ELSEIF( pssh(ji,jj) + ht_0(ji,jj) >          rn_wdmin1 ) THEN 
    12371226               ptmsk(ji,jj) = TANH( 50._wp*( ( pssh(ji,jj) + ht_0(ji,jj) -  rn_wdmin1 )*r_rn_wdmin1) ) 
    1238             ELSE 
     1227            ELSE  
    12391228               ptmsk(ji,jj) = 0._wp 
    12401229            ENDIF 
    12411230         END_2D 
    1242       ELSE 
     1231      ELSE   
    12431232         DO_2D( 1, 1, 1, 1 ) 
    12441233            IF ( pssh(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN   ;   ptmsk(ji,jj) = 1._wp 
     
    12541243      !!---------------------------------------------------------------------- 
    12551244      !!                  ***  ROUTINE wad_lmt  *** 
    1256       !! 
    1257       !! ** Purpose :   set wetting & drying mask at tracer points 
    1258       !!              for the current barotropic sub-step 
    1259       !! 
    1260       !! ** Method  :   ??? 
     1245      !!                     
     1246      !! ** Purpose :   set wetting & drying mask at tracer points  
     1247      !!              for the current barotropic sub-step  
     1248      !! 
     1249      !! ** Method  :   ???  
    12611250      !! 
    12621251      !! ** Action  :  ptmsk : wetting & drying t-mask 
     
    12701259      ! 
    12711260      DO_2D( 1, 1, 1, 0 )   ! not jpi-column 
    1272          IF ( phU(ji,jj) > 0._wp ) THEN   ;   pUmsk(ji,jj) = pTmsk(ji  ,jj) 
    1273          ELSE                             ;   pUmsk(ji,jj) = pTmsk(ji+1,jj) 
     1261         IF ( phU(ji,jj) > 0._wp ) THEN   ;   pUmsk(ji,jj) = pTmsk(ji  ,jj)  
     1262         ELSE                             ;   pUmsk(ji,jj) = pTmsk(ji+1,jj)   
    12741263         ENDIF 
    12751264         phU(ji,jj) = pUmsk(ji,jj)*phU(ji,jj) 
     
    12791268      DO_2D( 1, 0, 1, 1 )   ! not jpj-row 
    12801269         IF ( phV(ji,jj) > 0._wp ) THEN   ;   pVmsk(ji,jj) = pTmsk(ji,jj  ) 
    1281          ELSE                             ;   pVmsk(ji,jj) = pTmsk(ji,jj+1) 
    1282          ENDIF 
    1283          phV(ji,jj) = pVmsk(ji,jj)*phV(ji,jj) 
     1270         ELSE                             ;   pVmsk(ji,jj) = pTmsk(ji,jj+1)   
     1271         ENDIF 
     1272         phV(ji,jj) = pVmsk(ji,jj)*phV(ji,jj)  
    12841273         pv (ji,jj) = pVmsk(ji,jj)*pv (ji,jj) 
    12851274      END_2D 
     
    12921281      !!                   ***  ROUTINE  wad_sp  *** 
    12931282      !! 
    1294       !! ** Purpose : 
     1283      !! ** Purpose :  
    12951284      !!---------------------------------------------------------------------- 
    12961285      INTEGER  ::   ji ,jj               ! dummy loop indices 
     
    13251314              &      MAX(   pshn(ji,jj)              ,  pshn(ji,jj+1) ) >                & 
    13261315              &      MAX(  -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    1327  
     1316          
    13281317         IF(ll_tmp1) THEN 
    13291318            zcpy(ji,jj) = 1.0_wp 
     
    13371326         ENDIF 
    13381327      END_2D 
    1339  
     1328             
    13401329   END SUBROUTINE wad_spg 
    1341  
     1330      
    13421331 
    13431332   SUBROUTINE dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
    13441333      !!---------------------------------------------------------------------- 
    13451334      !!                  ***  ROUTINE dyn_drg_init  *** 
    1346       !! 
    1347       !! ** Purpose : - add the baroclinic top/bottom drag contribution to 
     1335      !!                     
     1336      !! ** Purpose : - add the baroclinic top/bottom drag contribution to  
    13481337      !!              the baroclinic part of the barotropic RHS 
    13491338      !!              - compute the barotropic drag coefficients 
    13501339      !! 
    1351       !! ** Method  :   computation done over the INNER domain only 
     1340      !! ** Method  :   computation done over the INNER domain only  
    13521341      !!---------------------------------------------------------------------- 
    13531342      INTEGER                             , INTENT(in   ) ::  Kbb, Kmm           ! ocean time level indices 
     
    13661355      ! 
    13671356      IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
    1368  
     1357          
    13691358         DO_2D( 0, 0, 0, 0 ) 
    13701359            pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) + rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) 
     
    13811370      ! 
    13821371      IF( ln_bt_fw ) THEN                 ! FORWARD integration: use NOW bottom baroclinic velocities 
    1383  
     1372          
    13841373         DO_2D( 0, 0, 0, 0 ) 
    1385             ikbu = mbku(ji,jj) 
    1386             ikbv = mbkv(ji,jj) 
     1374            ikbu = mbku(ji,jj)        
     1375            ikbv = mbkv(ji,jj)     
    13871376            zu_i(ji,jj) = puu(ji,jj,ikbu,Kmm) - puu_b(ji,jj,Kmm) 
    13881377            zv_i(ji,jj) = pvv(ji,jj,ikbv,Kmm) - pvv_b(ji,jj,Kmm) 
    13891378         END_2D 
    13901379      ELSE                                ! CENTRED integration: use BEFORE bottom baroclinic velocities 
    1391  
     1380          
    13921381         DO_2D( 0, 0, 0, 0 ) 
    1393             ikbu = mbku(ji,jj) 
    1394             ikbv = mbkv(ji,jj) 
     1382            ikbu = mbku(ji,jj)        
     1383            ikbv = mbkv(ji,jj)     
    13951384            zu_i(ji,jj) = puu(ji,jj,ikbu,Kbb) - puu_b(ji,jj,Kbb) 
    13961385            zv_i(ji,jj) = pvv(ji,jj,ikbv,Kbb) - pvv_b(ji,jj,Kbb) 
     
    14011390         zztmp = -1._wp / rDt_e 
    14021391         DO_2D( 0, 0, 0, 0 ) 
    1403             pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 & 
     1392            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
    14041393                 &                              r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) , zztmp  ) 
    1405             pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + zv_i(ji,jj) *  wdrampv(ji,jj) * MAX(                                 & 
     1394            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + zv_i(ji,jj) *  wdrampv(ji,jj) * MAX(                                 &  
    14061395                 &                              r1_hv(ji,jj,Kmm) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) , zztmp  ) 
    14071396         END_2D 
    14081397      ELSE                    ! use "unclipped" drag (even if explicit friction is used in 3D calculation) 
    1409  
     1398          
    14101399         DO_2D( 0, 0, 0, 0 ) 
    14111400            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zu_i(ji,jj) 
     
    14191408         ! 
    14201409         IF( ln_bt_fw ) THEN                ! FORWARD integration: use NOW top baroclinic velocity 
    1421  
     1410             
    14221411            DO_2D( 0, 0, 0, 0 ) 
    14231412               iktu = miku(ji,jj) 
     
    14271416            END_2D 
    14281417         ELSE                                ! CENTRED integration: use BEFORE top baroclinic velocity 
    1429  
     1418             
    14301419            DO_2D( 0, 0, 0, 0 ) 
    14311420               iktu = miku(ji,jj) 
     
    14371426         ! 
    14381427         !                    ! use "unclipped" top drag (even if explicit friction is used in 3D calculation) 
    1439  
     1428          
    14401429         DO_2D( 0, 0, 0, 0 ) 
    14411430            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zu_i(ji,jj) 
     
    14581447      !                             ! set Half-step back interpolation coefficient 
    14591448      IF    ( jn==1 .AND. ll_init ) THEN   !* Forward-backward 
    1460          za0 = 1._wp 
    1461          za1 = 0._wp 
     1449         za0 = 1._wp                         
     1450         za1 = 0._wp                            
    14621451         za2 = 0._wp 
    14631452         za3 = 0._wp 
     
    14661455         za1 =-0.1666666666666_wp                 ! za1 = gam 
    14671456         za2 = 0.0833333333333_wp                 ! za2 = eps 
    1468          za3 = 0._wp 
    1469       ELSE                                 !* AB3-AM4 Coefficients; bet=0.281105 ; eps=0.013 ; gam=0.0880 
    1470          IF( rn_bt_alpha == 0._wp ) THEN      ! Time diffusion 
     1457         za3 = 0._wp               
     1458      ELSE                                 !* AB3-AM4 Coefficients; bet=0.281105 ; eps=0.013 ; gam=0.0880  
     1459         IF( rn_bt_alpha == 0._wp ) THEN      ! Time diffusion   
    14711460            za0 = 0.614_wp                        ! za0 = 1/2 +   gam + 2*eps 
    14721461            za1 = 0.285_wp                        ! za1 = 1/2 - 2*gam - 3*eps 
     
    14801469            za2 = zgamma 
    14811470            za3 = zepsilon 
    1482          ENDIF 
     1471         ENDIF  
    14831472      ENDIF 
    14841473   END SUBROUTINE ts_bck_interp 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/IOM/iom.F90

    r14063 r14065  
    22802280      ! 
    22812281      CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=Ni0glo,nj_glo=Nj0glo,ibegin=mig0(Nis0)-1,jbegin=mjg0(Njs0)-1,ni=Ni_0,nj=Nj_0) 
    2282       CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = -nn_hls, data_ni = jpi, data_jbegin = -nn_hls, data_nj = jpj) 
     2282      CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = -nn_hls, data_ni=jpi, data_jbegin = -nn_hls, data_nj=jpj) 
    22832283!don't define lon and lat for restart reading context. 
    22842284      IF ( .NOT.ldrxios ) & 
     
    22892289         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    22902290         SELECT CASE ( cdgrd ) 
    2291          CASE('T')   ;   zmask(:,:,:)       = tmask(:,:,:) 
    2292          CASE('U')   ;   zmask(2:jpim1,:,:) = tmask(2:jpim1,:,:) + tmask(3:jpi,:,:) 
    2293          CASE('V')   ;   zmask(:,2:jpjm1,:) = tmask(:,2:jpjm1,:) + tmask(:,3:jpj,:) 
     2291         CASE('T')   ;   zmask( :     , :     ,:) = tmask(:,:,:) 
     2292         CASE('U')   ;   zmask(2:jpim1, :     ,:) = tmask(2:jpim1, :     ,:) + tmask(3:jpi  , :   ,:) 
     2293         CASE('V')   ;   zmask( :     ,2:jpjm1,:) = tmask( :     ,2:jpjm1,:) + tmask( :     ,3:jpj,:) 
     2294         CASE('F')   ;   zmask(2:jpim1,2:jpjm1,:) = tmask(2:jpim1,2:jpjm1,:) + tmask(2:jpim1,3:jpj,:)    & 
     2295            &                                     + tmask(3:jpi  ,2:jpjm1,:) + tmask(3:jpi  ,3:jpj,:) 
    22942296         CASE('W')   ;   zmask(:,:,2:jpk  ) = tmask(:,:,1:jpkm1) + tmask(:,:,2:jpk)   ;   zmask(:,:,1) = tmask(:,:,1) 
    22952297         END SELECT 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/ISF/isf_oce.F90

    r13558 r14065  
    11MODULE isf_oce 
    22   !!====================================================================== 
    3    !!                       ***  MODULE  sbcisf  *** 
    4    !! Surface module :  compute iceshelf melt and heat flux 
     3   !!                       ***  MODULE  isf_oce  *** 
     4   !! Ice shelves :  ice shelves variables defined in memory 
    55   !!====================================================================== 
    66   !! History :  3.2  !  2011-02  (C.Harris  ) Original code isf cav 
     
    146146   END SUBROUTINE isf_alloc_par 
    147147 
     148    
    148149   SUBROUTINE isf_alloc_cav() 
    149150      !!--------------------------------------------------------------------- 
     
    173174   END SUBROUTINE isf_alloc_cav 
    174175 
     176    
    175177   SUBROUTINE isf_alloc_cpl() 
    176178      !!--------------------------------------------------------------------- 
     
    184186      ierr = 0 
    185187      ! 
    186       ALLOCATE( risfcpl_ssh(jpi,jpj), risfcpl_tsc(jpi,jpj,jpk,jpts), risfcpl_vol(jpi,jpj,jpk), STAT=ialloc ) 
    187       ierr = ierr + ialloc 
    188       ! 
    189       risfcpl_tsc(:,:,:,:) = 0.0 ; risfcpl_vol(:,:,:) = 0.0 ; risfcpl_ssh(:,:) = 0.0 
    190  
    191       IF ( ln_isfcpl_cons) THEN 
    192          ALLOCATE( risfcpl_cons_tsc(jpi,jpj,jpk,jpts) , risfcpl_cons_vol(jpi,jpj,jpk) ,risfcpl_cons_ssh(jpi,jpj), STAT=ialloc ) 
     188      ALLOCATE( risfcpl_ssh(jpi,jpj) , risfcpl_tsc(jpi,jpj,jpk,jpts) , risfcpl_vol(jpi,jpj,jpk) , STAT=ialloc ) 
     189      ierr = ierr + ialloc 
     190      ! 
     191      risfcpl_tsc(:,:,:,:) = 0._wp ; risfcpl_vol(:,:,:) = 0._wp ; risfcpl_ssh(:,:) = 0._wp 
     192 
     193      IF ( ln_isfcpl_cons ) THEN 
     194         ALLOCATE( risfcpl_cons_tsc(jpi,jpj,jpk,jpts) , risfcpl_cons_vol(jpi,jpj,jpk) , risfcpl_cons_ssh(jpi,jpj) , STAT=ialloc ) 
    193195         ierr = ierr + ialloc 
    194196         ! 
    195          risfcpl_cons_tsc(:,:,:,:) = 0.0 ; risfcpl_cons_vol(:,:,:) = 0.0 ; risfcpl_cons_ssh(:,:) = 0.0 
     197         risfcpl_cons_tsc(:,:,:,:) = 0._wp ; risfcpl_cons_vol(:,:,:) = 0._wp ; risfcpl_cons_ssh(:,:) = 0._wp 
    196198         ! 
    197199      END IF 
     
    202204   END SUBROUTINE isf_alloc_cpl 
    203205 
     206    
    204207   SUBROUTINE isf_dealloc_cpl() 
    205208      !!--------------------------------------------------------------------- 
     
    213216      ierr = 0 
    214217      ! 
    215       DEALLOCATE( risfcpl_ssh, risfcpl_tsc, risfcpl_vol, STAT=ialloc ) 
     218      DEALLOCATE( risfcpl_ssh , risfcpl_tsc , risfcpl_vol , STAT=ialloc ) 
    216219      ierr = ierr + ialloc 
    217220      ! 
     
    221224   END SUBROUTINE isf_dealloc_cpl 
    222225 
     226    
    223227   SUBROUTINE isf_alloc() 
    224228      !!--------------------------------------------------------------------- 
     
    233237      ierr = 0       ! set to zero if no array to be allocated 
    234238      ! 
    235       ALLOCATE(fwfisf_par(jpi,jpj)  , fwfisf_par_b(jpi,jpj), & 
    236          &     fwfisf_cav(jpi,jpj)  , fwfisf_cav_b(jpi,jpj), & 
    237          &     fwfisf_oasis(jpi,jpj),            STAT=ialloc ) 
    238       ierr = ierr + ialloc 
    239       ! 
    240       ALLOCATE(risf_par_tsc(jpi,jpj,jpts), risf_par_tsc_b(jpi,jpj,jpts), STAT=ialloc ) 
    241       ierr = ierr + ialloc 
    242       ! 
    243       ALLOCATE(risf_cav_tsc(jpi,jpj,jpts), risf_cav_tsc_b(jpi,jpj,jpts), STAT=ialloc ) 
    244       ierr = ierr + ialloc 
    245       ! 
    246       ALLOCATE(risfload(jpi,jpj), STAT=ialloc) 
    247       ierr = ierr + ialloc 
    248       ! 
    249       ALLOCATE( mskisf_cav(jpi,jpj), STAT=ialloc) 
     239      ALLOCATE( fwfisf_par  (jpi,jpj) , fwfisf_par_b(jpi,jpj) ,    & 
     240         &      fwfisf_cav  (jpi,jpj) , fwfisf_cav_b(jpi,jpj) ,    & 
     241         &      fwfisf_oasis(jpi,jpj)                         , STAT=ialloc ) 
     242      ierr = ierr + ialloc 
     243      ! 
     244      ALLOCATE( risf_par_tsc(jpi,jpj,jpts) , risf_par_tsc_b(jpi,jpj,jpts) , STAT=ialloc ) 
     245      ierr = ierr + ialloc 
     246      ! 
     247      ALLOCATE( risf_cav_tsc(jpi,jpj,jpts) , risf_cav_tsc_b(jpi,jpj,jpts) , STAT=ialloc ) 
     248      ierr = ierr + ialloc 
     249      ! 
     250      ALLOCATE( risfload(jpi,jpj) , STAT=ialloc ) 
     251      ierr = ierr + ialloc 
     252      ! 
     253      ALLOCATE( mskisf_cav(jpi,jpj) , STAT=ialloc ) 
    250254      ierr = ierr + ialloc 
    251255      ! 
     
    254258      ! 
    255259      ! initalisation of fwf and tsc array to 0 
    256       risfload(:,:)       = 0.0_wp 
    257       fwfisf_oasis(:,:)   = 0.0_wp 
    258       fwfisf_par(:,:)     = 0.0_wp    ; fwfisf_par_b(:,:)     = 0.0_wp 
    259       fwfisf_cav(:,:)     = 0.0_wp    ; fwfisf_cav_b(:,:)     = 0.0_wp 
    260       risf_cav_tsc(:,:,:) = 0.0_wp    ; risf_cav_tsc_b(:,:,:) = 0.0_wp 
    261       risf_par_tsc(:,:,:) = 0.0_wp    ; risf_par_tsc_b(:,:,:) = 0.0_wp 
    262       ! 
    263  
     260      risfload    (:,:)   = 0._wp 
     261      fwfisf_oasis(:,:)   = 0._wp 
     262      fwfisf_par  (:,:)   = 0._wp   ;   fwfisf_par_b  (:,:)   = 0._wp 
     263      fwfisf_cav  (:,:)   = 0._wp   ;   fwfisf_cav_b  (:,:)   = 0._wp 
     264      risf_cav_tsc(:,:,:) = 0._wp   ;   risf_cav_tsc_b(:,:,:) = 0._wp 
     265      risf_par_tsc(:,:,:) = 0._wp   ;   risf_par_tsc_b(:,:,:) = 0._wp 
     266      ! 
    264267   END SUBROUTINE isf_alloc 
    265  
     268    
     269   !!====================================================================== 
    266270END MODULE isf_oce 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/ISF/isfload.F90

    r13295 r14065  
    22   !!====================================================================== 
    33   !!                       ***  MODULE  isfload  *** 
    4    !! isfload module :  compute ice shelf load (needed for the hpg) 
     4   !! Ice Shelves :   compute ice shelf load (needed for the hpg) 
    55   !!====================================================================== 
    66   !! History :  4.1  !  2019-09  (P. Mathiot) original code 
     
    88 
    99   !!---------------------------------------------------------------------- 
    10    !!   isfload      : compute ice shelf load 
     10   !!   isf_load      : compute ice shelf load 
    1111   !!---------------------------------------------------------------------- 
    1212 
     
    2323   PRIVATE 
    2424 
    25    PUBLIC isf_load 
     25   PUBLIC   isf_load   ! called by isfstp.F90 
     26   ! 
    2627   !! * Substitutions 
    2728#  include "do_loop_substitute.h90" 
    2829#  include "domzgr_substitute.h90" 
    29  
     30   !!---------------------------------------------------------------------- 
     31   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     32   !! $Id: sbcisf.F90 10536 2019-01-16 19:21:09Z mathiot $ 
     33   !! Software governed by the CeCILL license (see ./LICENSE) 
     34   !!---------------------------------------------------------------------- 
    3035CONTAINS 
    3136 
     
    3742      !! 
    3843      !!-------------------------------------------------------------------- 
    39       !!-------------------------- OUT ------------------------------------- 
    40       REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pisfload 
    41       !!-------------------------- IN  ------------------------------------- 
    42       INTEGER,                      INTENT(in)    :: Kmm           ! ocean time level index 
     44      INTEGER,                      INTENT(in   ) ::   Kmm        ! ocean time level index       
     45      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   pisfload   ! ice shelf load 
    4346      !!---------------------------------------------------------------------- 
    4447      ! 
     
    4649      !               the smaller the residual flow is, the better it is. 
    4750      ! 
    48       ! ice shelf cavity 
     51      ! type of ice shelf cavity 
    4952      SELECT CASE ( cn_isfload ) 
    5053      CASE ( 'uniform' ) 
     
    5659   END SUBROUTINE isf_load 
    5760 
    58    SUBROUTINE isf_load_uniform( Kmm, pisfload ) 
     61    
     62   SUBROUTINE isf_load_uniform( Kmm, pload ) 
    5963      !!-------------------------------------------------------------------- 
    6064      !!                  ***  SUBROUTINE isf_load  *** 
     
    6771      !! 
    6872      !!-------------------------------------------------------------------- 
    69       !!-------------------------- OUT ------------------------------------- 
    70       REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pisfload 
    71       !!-------------------------- IN  ------------------------------------- 
    72       INTEGER,                      INTENT(in)    :: Kmm           ! ocean time level index 
    73       !!-------------------------------------------------------------------- 
     73      INTEGER,                      INTENT(in   ) ::   Kmm     ! ocean time level index       
     74      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   pload   ! ice shelf load 
     75      ! 
    7476      INTEGER  :: ji, jj, jk 
    7577      INTEGER  :: ikt 
    76       REAL(wp)                          :: znad        !  
    7778      REAL(wp), DIMENSION(jpi,jpj)      :: zrhdtop_isf ! water density    displaced by the ice shelf (at the interface) 
    7879      REAL(wp), DIMENSION(jpi,jpj,jpts) :: zts_top     ! water properties displaced by the ice shelf    
    7980      REAL(wp), DIMENSION(jpi,jpj,jpk)  :: zrhd        ! water density    displaced by the ice shelf 
    8081      !!---------------------------------------------------------------------- 
    81       ! 
    82       znad = 1._wp                     !- To use density and not density anomaly 
    8382      ! 
    8483      !                                !- assume water displaced by the ice shelf is at T=rn_isfload_T and S=rn_isfload_S (rude) 
     
    8786      DO jk = 1, jpk                   !- compute density of the water displaced by the ice shelf  
    8887         CALL eos( zts_top(:,:,:), gdept(:,:,jk,Kmm), zrhd(:,:,jk) ) 
     88!!st ==>> CALL eos( zts_top(:,:,:), gdept_0(:,:,jk), zrhd(:,:,jk) ) 
    8989      END DO 
    9090      ! 
     
    9393      ! 
    9494      !                                !- Surface value + ice shelf gradient 
    95       pisfload(:,:) = 0._wp                       ! compute pressure due to ice shelf load  
     95      pload(:,:) = 0._wp                      ! compute pressure due to ice shelf load  
    9696      DO_2D( 1, 1, 1, 1 ) 
    9797         ikt = mikt(ji,jj) 
    9898         ! 
    9999         IF ( ikt > 1 ) THEN 
     100            !                                 ! top layer of the ice shelf 
     101            pload(ji,jj) = pload(ji,jj)   & 
     102               &         + zrhd (ji,jj,1) * e3w(ji,jj,1,Kmm) 
    100103            ! 
    101             ! top layer of the ice shelf 
    102             pisfload(ji,jj) = pisfload(ji,jj) + (znad + zrhd(ji,jj,1) )   & 
    103                &                                * e3w(ji,jj,1,Kmm) 
    104             ! 
    105             ! core layers of the ice shelf 
    106             DO jk = 2, ikt-1 
    107                pisfload(ji,jj) = pisfload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk))   & 
    108                   &                                * e3w(ji,jj,jk,Kmm) 
     104            DO jk = 2, ikt-1                  ! core layers of the ice shelf 
     105               pload(ji,jj) = pload(ji,jj) + (zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk))   & 
     106                  &                        *   e3w(ji,jj,jk,Kmm) 
    109107            END DO 
    110             ! 
    111             ! deepest part of the ice shelf (between deepest T point and ice/ocean interface 
    112             pisfload(ji,jj) = pisfload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) & 
    113                &                                              * ( risfdep(ji,jj) - gdept(ji,jj,ikt-1,Kmm) ) 
     108            !                                 ! deepest part of the ice shelf (between deepest T point and ice/ocean interface 
     109            pload(ji,jj) = pload(ji,jj) + ( zrhdtop_isf(ji,jj) +  zrhd(ji,jj,ikt-1)     )   & 
     110               &                        * (     risfdep(ji,jj) - gdept(ji,jj,ikt-1,Kmm) ) 
     111!!st ==>>     &                        * (     risfdep(ji,jj) - gdept_0(ji,jj,ikt-1) ) 
    114112            ! 
    115113         END IF 
     
    117115      ! 
    118116   END SUBROUTINE isf_load_uniform 
    119  
     117    
     118   !!====================================================================== 
    120119END MODULE isfload 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/ISF/isfstp.F90

    r13237 r14065  
    22   !!====================================================================== 
    33   !!                       ***  MODULE  isfstp  *** 
    4    !! Surface module :  compute iceshelf load, melt and heat flux 
     4   !! Ice Shelves :  compute iceshelf load, melt and heat flux 
    55   !!====================================================================== 
    66   !! History :  3.2  !  2011-02  (C.Harris  ) Original code isf cav 
     
    4242   !! Software governed by the CeCILL license (see ./LICENSE) 
    4343   !!---------------------------------------------------------------------- 
    44  
    4544CONTAINS 
    4645  
    47   SUBROUTINE isf_stp( kt, Kmm ) 
     46   SUBROUTINE isf_stp( kt, Kmm ) 
    4847      !!--------------------------------------------------------------------- 
    4948      !!                  ***  ROUTINE isf_stp  *** 
     
    5857      !!              - compute fluxes 
    5958      !!              - write restart variables 
    60       !! 
    61       !!---------------------------------------------------------------------- 
    62       INTEGER, INTENT(in) ::   kt   ! ocean time step 
    63       INTEGER, INTENT(in) ::   Kmm  ! ocean time level index 
    64       !!---------------------------------------------------------------------- 
    65       INTEGER :: jk                               ! loop index 
    66       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t    ! e3t  
     59      !!---------------------------------------------------------------------- 
     60      INTEGER, INTENT(in) ::   kt    ! ocean time step 
     61      INTEGER, INTENT(in) ::   Kmm   ! ocean time level index 
     62      ! 
     63      INTEGER :: jk                              ! loop index 
     64#if defined key_qco 
     65      REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t   ! 3D workspace 
     66#endif 
    6767      !!--------------------------------------------------------------------- 
    6868      ! 
     
    8383         ! 1.2: compute misfkb, rhisf_tbl, rfrac (deepest level, thickness, fraction of deepest cell affected by tbl) 
    8484         rhisf_tbl_cav(:,:) = rn_htbl * mskisf_cav(:,:) 
     85#if defined key_qco 
    8586         DO jk = 1, jpk 
    8687            ze3t(:,:,jk) = e3t(:,:,jk,Kmm) 
    8788         END DO  
    88          CALL isf_tbl_lvl(ht(:,:), ze3t, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav) 
     89         CALL isf_tbl_lvl( ht(:,:), ze3t, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav ) 
     90#else 
     91         CALL isf_tbl_lvl( ht(:,:),  e3t, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav ) 
     92#endif 
    8993         ! 
    9094         ! 1.3: compute ice shelf melt 
    91          CALL isf_cav( kt, Kmm, risf_cav_tsc, fwfisf_cav) 
     95         CALL isf_cav( kt, Kmm, risf_cav_tsc, fwfisf_cav ) 
    9296         ! 
    9397      END IF 
     
    108112         ! by simplicity, we assume the top level where param applied do not change with time (done in init part) 
    109113         rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:) 
     114#if defined key_qco 
    110115         DO jk = 1, jpk 
    111116            ze3t(:,:,jk) = e3t(:,:,jk,Kmm) 
    112117         END DO 
    113          CALL isf_tbl_lvl(ht(:,:), ze3t, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par) 
     118         CALL isf_tbl_lvl( ht(:,:), ze3t, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par ) 
     119#else 
     120         CALL isf_tbl_lvl( ht(:,:),  e3t, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par ) 
     121#endif 
    114122         ! 
    115123         ! 2.3: compute ice shelf melt 
    116          CALL isf_par( kt, Kmm, risf_par_tsc, fwfisf_par) 
     124         CALL isf_par( kt, Kmm, risf_par_tsc, fwfisf_par ) 
    117125         ! 
    118126      END IF 
     
    128136   END SUBROUTINE isf_stp 
    129137 
    130    SUBROUTINE isf_init(Kbb, Kmm, Kaa) 
     138    
     139   SUBROUTINE isf_init( Kbb, Kmm, Kaa ) 
    131140      !!--------------------------------------------------------------------- 
    132141      !!                  ***  ROUTINE isfstp_init  *** 
     
    142151      !!              - call cav/param/isfcpl init routine 
    143152      !!---------------------------------------------------------------------- 
    144       INTEGER, INTENT(in) :: Kbb, Kmm, Kaa      ! ocean time level indices 
     153      INTEGER, INTENT(in) ::   Kbb, Kmm, Kaa   ! ocean time level indices 
     154      !!---------------------------------------------------------------------- 
    145155      ! 
    146156      ! constrain: l_isfoasis need to be known 
    147157      ! 
    148       ! Read namelist 
    149       CALL isf_nam() 
    150       ! 
    151       ! Allocate public array 
    152       CALL isf_alloc() 
    153       ! 
    154       ! check option compatibility 
    155       CALL isf_ctl() 
    156       ! 
    157       ! compute ice shelf load 
    158       IF ( ln_isfcav ) CALL isf_load( Kmm, risfload ) 
     158      CALL isf_nam()                                              ! Read namelist 
     159      ! 
     160      CALL isf_alloc()                                            ! Allocate public array 
     161      ! 
     162      CALL isf_ctl()                                              ! check option compatibility 
     163      ! 
     164      IF( ln_isfcav ) CALL isf_load( Kmm, risfload )              ! compute ice shelf load 
    159165      ! 
    160166      ! terminate routine now if no ice shelf melt formulation specify 
    161       IF ( ln_isf ) THEN 
    162          ! 
    163          !--------------------------------------------------------------------------------------------------------------------- 
    164          ! initialisation melt in the cavity 
    165          IF ( ln_isfcav_mlt ) CALL isf_cav_init() 
    166          ! 
    167          !--------------------------------------------------------------------------------------------------------------------- 
    168          ! initialisation parametrised melt 
    169          IF ( ln_isfpar_mlt ) CALL isf_par_init() 
    170          ! 
    171          !--------------------------------------------------------------------------------------------------------------------- 
    172          ! initialisation ice sheet coupling 
    173          IF( ln_isfcpl ) CALL isfcpl_init(Kbb, Kmm, Kaa) 
     167      IF( ln_isf ) THEN 
     168         ! 
     169         IF( ln_isfcav_mlt )   CALL isf_cav_init()                ! initialisation melt in the cavity 
     170         ! 
     171         IF( ln_isfpar_mlt )   CALL isf_par_init()                ! initialisation parametrised melt 
     172         ! 
     173         IF( ln_isfcpl     )   CALL isfcpl_init( Kbb, Kmm, Kaa )  ! initialisation ice sheet coupling 
    174174         ! 
    175175      END IF 
     
    177177  END SUBROUTINE isf_init 
    178178 
     179   
    179180  SUBROUTINE isf_ctl() 
    180181      !!--------------------------------------------------------------------- 
     
    283284      END IF 
    284285   END SUBROUTINE isf_ctl 
    285    ! 
     286 
     287    
    286288   SUBROUTINE isf_nam 
    287289      !!--------------------------------------------------------------------- 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/oce.F90

    r14063 r14065  
    5050   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b, vb2_i_b         !: Half step time integrated fluxes  
    5151#endif 
    52    ! 
    53    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   spgu, spgv               !: horizontal surface pressure gradient 
    5452 
    5553   !! interpolated gradient (only used in zps case) 
     
    9189      ! 
    9290      ierr(:) = 0  
    93       ALLOCATE( uu   (jpi,jpj,jpk,jpt)  , vv   (jpi,jpj,jpk,jpt) ,                              &           
    94          &      ww   (jpi,jpj,jpk)      , hdiv(jpi,jpj,jpk)      ,                              & 
    95          &      ts   (jpi,jpj,jpk,jpts,jpt),                                                    & 
    96          &      rab_b(jpi,jpj,jpk,jpts) , rab_n(jpi,jpj,jpk,jpts) ,                             & 
    97          &      rn2b (jpi,jpj,jpk)      , rn2  (jpi,jpj,jpk)      ,                             & 
    98          &      rhd  (jpi,jpj,jpk)      , rhop (jpi,jpj,jpk)                              , STAT=ierr(1) ) 
     91      ALLOCATE( uu   (jpi,jpj,jpk,jpt)  , vv   (jpi,jpj,jpk,jpt)           ,     &           
     92         &      ww   (jpi,jpj,jpk)      , hdiv(jpi,jpj,jpk)                ,     & 
     93         &      ts   (jpi,jpj,jpk,jpts,jpt)                                ,     & 
     94         &      rab_b(jpi,jpj,jpk,jpts) , rab_n(jpi,jpj,jpk,jpts)          ,     & 
     95         &      rn2b (jpi,jpj,jpk)      , rn2  (jpi,jpj,jpk)               ,     & 
     96         &      rhd  (jpi,jpj,jpk)      , rhop (jpi,jpj,jpk)               , STAT=ierr(1) ) 
    9997         ! 
    100       ALLOCATE( ssh(jpi,jpj,jpt)  , uu_b(jpi,jpj,jpt) , vv_b(jpi,jpj,jpt) , & 
    101          &      spgu  (jpi,jpj)   , spgv(jpi,jpj)                     ,     & 
    102          &      gtsu(jpi,jpj,jpts), gtsv(jpi,jpj,jpts)                ,     & 
    103          &      gru(jpi,jpj)      , grv(jpi,jpj)                      ,     & 
    104          &      gtui(jpi,jpj,jpts), gtvi(jpi,jpj,jpts)                ,     & 
    105          &      grui(jpi,jpj)     , grvi(jpi,jpj)                     ,     & 
    106          &      riceload(jpi,jpj)                                     , STAT=ierr(2) ) 
     98      ALLOCATE( ssh (jpi,jpj,jpt)  , uu_b(jpi,jpj,jpt) , vv_b(jpi,jpj,jpt) ,     & 
     99         &      gtsu(jpi,jpj,jpts) , gtsv(jpi,jpj,jpts)                    ,     & 
     100         &      gru (jpi,jpj)      , grv (jpi,jpj)                         ,     & 
     101         &      gtui(jpi,jpj,jpts) , gtvi(jpi,jpj,jpts)                    ,     & 
     102         &      grui(jpi,jpj)      , grvi(jpi,jpj)                         ,     & 
     103         &      riceload(jpi,jpj)                                          , STAT=ierr(2) ) 
    107104         ! 
    108105      ALLOCATE( fraqsr_1lev(jpi,jpj) , STAT=ierr(3) ) 
Note: See TracChangeset for help on using the changeset viewer.