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

Changeset 10009


Ignore:
Timestamp:
2018-07-29T11:23:51+02:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-04): RK3 branch - step II.1 time-level dimension on ssh

Location:
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src
Files:
51 edited
1 copied

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/ICE/iceistate.F90

    r10001 r10009  
    415415      IF( ln_ice_embd ) THEN           ! embedded sea-ice: deplete the initial ssh below sea-ice area 
    416416         ! 
    417          sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rho0 
    418          sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rho0 
     417         ssh(:,:,Nnn) = ssh(:,:,Nnn) - snwice_mass(:,:) * r1_rho0 
     418         ssh(:,:,Nbb) = ssh(:,:,Nbb) - snwice_mass(:,:) * r1_rho0 
    419419         ! 
    420420         IF( .NOT.ln_linssh ) THEN     ! modified the now and before vertical mesh and scale factors  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/ICE/iceupdate.F90

    r9939 r10009  
    1515   !!   ice_update_tau   : update i- and j-stresses, and its modulus at the ocean surface 
    1616   !!---------------------------------------------------------------------- 
    17    USE oce     , ONLY : sshn, sshb 
    1817   USE phycst         ! physical constants 
    1918   USE dom_oce        ! ocean domain 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/NST/agrif_oce_interp.F90

    r9806 r10009  
    520520         DO jj = 1, jpj 
    521521            DO ji = 2, indx 
    522                ssha(ji,jj) = hbdy_w(ji-1,jj) 
    523             ENDDO 
    524          ENDDO 
     522               ssh(ji,jj,Naa) = hbdy_w(ji-1,jj) 
     523            END DO 
     524         END DO 
    525525      ENDIF 
    526526      ! 
     
    530530         DO jj = 1, jpj 
    531531            DO ji = indx, nlci-1 
    532                ssha(ji,jj) = hbdy_e(ji-indx+1,jj) 
    533             ENDDO 
    534          ENDDO 
     532               ssh(ji,jj,Naa) = hbdy_e(ji-indx+1,jj) 
     533            END DO 
     534         END DO 
    535535      ENDIF 
    536536      ! 
     
    540540         DO jj = 2, indy 
    541541            DO ji = 1, jpi 
    542                ssha(ji,jj) = hbdy_s(ji,jj-1) 
    543             ENDDO 
    544          ENDDO 
     542               ssh(ji,jj,Naa) = hbdy_s(ji,jj-1) 
     543            END DO 
     544         END DO 
    545545      ENDIF 
    546546      ! 
     
    550550         DO jj = indy, nlcj-1 
    551551            DO ji = 1, jpi 
    552                ssha(ji,jj) = hbdy_n(ji,jj-indy+1) 
    553             ENDDO 
    554          ENDDO 
     552               ssh(ji,jj,Naa) = hbdy_n(ji,jj-indy+1) 
     553            END DO 
     554         END DO 
    555555      ENDIF 
    556556      ! 
     
    576576            DO ji = 2, indx 
    577577               ssha_e(ji,jj) = hbdy_w(ji-1,jj) 
    578             ENDDO 
    579          ENDDO 
     578            END DO 
     579         END DO 
    580580      ENDIF 
    581581      ! 
     
    586586            DO ji = indx, nlci-1 
    587587               ssha_e(ji,jj) = hbdy_e(ji-indx+1,jj) 
    588             ENDDO 
    589          ENDDO 
     588            END DO 
     589         END DO 
    590590      ENDIF 
    591591      ! 
     
    596596            DO ji = 1, jpi 
    597597               ssha_e(ji,jj) = hbdy_s(ji,jj-1) 
    598             ENDDO 
    599          ENDDO 
     598            END DO 
     599         END DO 
    600600      ENDIF 
    601601      ! 
     
    606606            DO ji = 1, jpi 
    607607               ssha_e(ji,jj) = hbdy_n(ji,jj-indy+1) 
    608             ENDDO 
    609          ENDDO 
     608            END DO 
     609         END DO 
    610610      ENDIF 
    611611      ! 
     
    700700                  N_out = N_out + 1 
    701701                  h_out(jk) = e3t_n(iref,jref,jk) 
    702                ENDDO 
     702               END DO 
    703703               IF (N_in > 0) THEN 
    704704                  DO jn=1,jpts 
    705705                     call reconstructandremap(tabin(1:N_in,jn),h_in,ptab_child(ji,jj,1:N_out,jn),h_out,N_in,N_out) 
    706                   ENDDO 
     706                  END DO 
    707707               ENDIF 
    708             ENDDO 
    709          ENDDO 
     708            END DO 
     709         END DO 
    710710# else 
    711711         ptab_child(i1:i2,j1:j2,1:jpk,1:jpts) = ptab(i1:i2,j1:j2,1:jpk,1:jpts) 
     
    848848   END SUBROUTINE interptsn 
    849849 
     850 
    850851   SUBROUTINE interpsshn( ptab, i1, i2, j1, j2, before, nb, ndir ) 
    851852      !!---------------------------------------------------------------------- 
     
    861862      ! 
    862863      IF( before) THEN 
    863          ptab(i1:i2,j1:j2) = sshn(i1:i2,j1:j2) 
     864         ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Nnn) 
    864865      ELSE 
    865866         western_side  = (nb == 1).AND.(ndir == 1) 
     
    868869         northern_side = (nb == 2).AND.(ndir == 2) 
    869870         !! clem ghost 
    870          IF(western_side)  hbdy_w(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
    871          IF(eastern_side)  hbdy_e(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
    872          IF(southern_side) hbdy_s(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)  
    873          IF(northern_side) hbdy_n(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     871         IF(western_side )   hbdy_w(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     872         IF(eastern_side )   hbdy_e(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     873         IF(southern_side)   hbdy_s(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)  
     874         IF(northern_side)   hbdy_n(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
    874875      ENDIF 
    875876      ! 
    876877   END SUBROUTINE interpsshn 
     878 
    877879 
    878880   SUBROUTINE interpun( ptab, i1, i2, j1, j2, k1, k2, m1, m2, before, nb, ndir ) 
     
    925927                  tabin(jk) = ptab(ji,jj,jk,1)/ptab(ji,jj,jk,2) 
    926928                  h_in(N_in) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
    927               ENDDO 
     929              END DO 
    928930          
    929931              IF (N_in == 0) THEN 
     
    937939                 N_out = N_out + 1 
    938940                 h_out(N_out) = e3u_a(iref,jj,jk) 
    939               ENDDO 
     941              END DO 
    940942          
    941943              IF (N_out == 0) THEN 
     
    953955              ENDIF 
    954956              call reconstructandremap(tabin(1:N_in),h_in(1:N_in),ua(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out) 
    955             ENDDO 
    956          ENDDO 
     957            END DO 
     958         END DO 
    957959 
    958960# else 
     
    14161418                  N_out = N_out + 1 
    14171419                  h_out(jk) = e3t_n(ji,jj,jk) 
    1418                ENDDO 
     1420               END DO 
    14191421               IF (N_in > 0) THEN 
    14201422                  CALL reconstructandremap(tabin(1:N_in),h_in,avm_k(ji,jj,1:N_out),h_out,N_in,N_out) 
    14211423               ENDIF 
    1422             ENDDO 
    1423          ENDDO 
     1424            END DO 
     1425         END DO 
    14241426#else 
    14251427         avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2,1) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/NST/agrif_oce_update.F90

    r9939 r10009  
    10151015      !  
    10161016      IF( before ) THEN 
    1017          DO jj=j1,j2 
    1018             DO ji=i1,i2 
    1019                tabres(ji,jj) = sshn(ji,jj) 
     1017         DO jj = j1, j2 
     1018            DO ji = i1, i2 
     1019               tabres(ji,jj) = ssh(ji,jj,Nnn) 
    10201020            END DO 
    10211021         END DO 
     
    10231023         IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN 
    10241024!!gm         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    1025             DO jj=j1,j2 
    1026                DO ji=i1,i2 
    1027                   sshb(ji,jj) = sshb(ji,jj) + rn_atfp * ( tabres(ji,jj) - sshn(ji,jj) ) * tmask(ji,jj,1) 
    1028                END DO 
    1029             END DO 
    1030          ENDIF 
    1031          ! 
    1032          DO jj=j1,j2 
    1033             DO ji=i1,i2 
    1034                sshn(ji,jj) = tabres(ji,jj) * tmask(ji,jj,1) 
     1025            DO jj = j1, j2 
     1026               DO ji = i1, i2 
     1027                  ssh(ji,jj,Nbb) = ssh(ji,jj,Nbb) + rn_atfp * ( tabres(ji,jj) - ssh(ji,jj,Nnn) ) * tmask(ji,jj,1) 
     1028               END DO 
     1029            END DO 
     1030         ENDIF 
     1031         ! 
     1032         DO jj = j1, j2 
     1033            DO ji = i1, i2 
     1034               ssh(ji,jj,Nnn) = tabres(ji,jj) * tmask(ji,jj,1) 
    10351035            END DO 
    10361036         END DO 
     
    10381038         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
    10391039!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    1040             sshb(i1:i2,j1:j2)  = sshn(i1:i2,j1:j2) 
     1040            ssh(i1:i2,j1:j2,Nbb)  = ssh(i1:i2,j1:j2,Nnn) 
    10411041         ENDIF 
    10421042         ! 
     
    11191119            DO jj=j1,j2 
    11201120               zcor = rn_Dt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj))  
    1121                sshn(i1  ,jj) = sshn(i1  ,jj) + zcor 
    1122                IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   sshb(i1  ,jj) = sshb(i1  ,jj) + rn_atfp * zcor 
     1121               ssh(i1  ,jj,Nnn) = ssh(i1  ,jj,Nnn) + zcor 
     1122               IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   ssh(i1  ,jj,Nbb) = ssh(i1  ,jj,Nbb) + rn_atfp * zcor 
    11231123!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i1  ,jj) = sshb(i1  ,jj) + rn_atfp * zcor 
    11241124            END DO 
     
    11271127            DO jj=j1,j2 
    11281128               zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 
    1129                sshn(i2+1,jj) = sshn(i2+1,jj) + zcor 
    1130                IF (.NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   sshb(i2+1,jj) = sshb(i2+1,jj) + rn_atfp * zcor 
     1129               ssh(i2+1,jj,Nnn) = ssh(i2+1,jj,Nnn) + zcor 
     1130               IF (.NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   ssh(i2+1,jj,Nbb) = ssh(i2+1,jj,Nbb) + rn_atfp * zcor 
    11311131!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i2+1,jj) = sshb(i2+1,jj) + rn_atfp * zcor 
    11321132            END DO 
     
    12101210         IF (southern_side) THEN 
    12111211            DO ji=i1,i2 
    1212                zcor = rn_Dt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vb2_b(ji,j1)-tabres(ji,j1)) 
    1213                sshn(ji,j1  ) = sshn(ji,j1  ) + zcor 
    1214                IF ( .NOT.( lk_agrif_fstep .AND. l_euler ) )   sshb(ji,j1  ) = sshb(ji,j1) + rn_atfp * zcor 
     1212               zcor = rn_Dt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * ( vb2_b(ji,j1)-tabres(ji,j1) ) 
     1213               ssh(ji,j1  ,Nnn) = ssh(ji,j1  ,Nnn) + zcor 
     1214               IF ( .NOT.( lk_agrif_fstep .AND. l_euler ) )   ssh(ji,j1  ,Nbb) = ssh(ji,j1,Nbb) + rn_atfp * zcor 
    12151215!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j1  ) = sshb(ji,j1) + rn_atfp * zcor 
    12161216            END DO 
     
    12181218         IF (northern_side) THEN                
    12191219            DO ji=i1,i2 
    1220                zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vb2_b(ji,j2)-tabres(ji,j2)) 
    1221                sshn(ji,j2+1) = sshn(ji,j2+1) + zcor 
    1222                IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   sshb(ji,j2+1) = sshb(ji,j2+1) + rn_atfp * zcor 
     1220               zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * ( vb2_b(ji,j2)-tabres(ji,j2) ) 
     1221               ssh(ji,j2+1,Nnn) = ssh(ji,j2+1,Nnn) + zcor 
     1222               IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   ssh(ji,j2+1,Nbb) = ssh(ji,j2+1,Nbb) + rn_atfp * zcor 
    12231223!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j2+1) = sshb(ji,j2+1) + rn_atfp * zcor 
    12241224            END DO 
     
    13501350         ! Update e3t from ssh (z* case only) 
    13511351         DO jk = 1, jpkm1 
    1352             DO jj=j1,j2 
    1353                DO ji=i1,i2 
    1354                   ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + sshn(ji,jj) & 
    1355                                      & *ssmask(ji,jj)/(ht_0(ji,jj)-1._wp + ssmask(ji,jj))) 
     1352            DO jj = j1, j2 
     1353               DO ji = i1, i2 
     1354                  ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + ssh(ji,jj,Nnn) * r1_ht_0(ji,jj) *tmask(ji,jj,jk) ) 
    13561355               END DO 
    13571356            END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/NST/agrif_user.F90

    r9939 r10009  
    190190   Agrif_UseSpecialValue = .TRUE. 
    191191   CALL Agrif_Bc_variable(sshn_id,calledweight=1., procname=interpsshn ) 
    192    hbdy_w(:,:) = 0.e0 ; hbdy_e(:,:) = 0.e0 ; hbdy_n(:,:) = 0.e0 ; hbdy_s(:,:) = 0.e0 
    193    ssha(:,:) = 0.e0 
     192   hbdy_w(:,:) = 0._wp   ;   hbdy_e(:,:) = 0._wp  
     193   hbdy_n(:,:) = 0._wp   ;   hbdy_s(:,:) = 0._wp 
     194   ! 
     195   ssh   (:,:,Naa) = 0._wp 
    194196 
    195197   IF ( ln_dynspg_ts ) THEN 
     
    199201      CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b) 
    200202      CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b) 
    201       ubdy_w(:,:) = 0.e0 ; vbdy_w(:,:) = 0.e0 
    202       ubdy_e(:,:) = 0.e0 ; vbdy_e(:,:) = 0.e0 
    203       ubdy_n(:,:) = 0.e0 ; vbdy_n(:,:) = 0.e0 
    204       ubdy_s(:,:) = 0.e0 ; vbdy_s(:,:) = 0.e0 
     203      ubdy_w(:,:) = 0._wp   ;   vbdy_w(:,:) = 0._wp 
     204      ubdy_e(:,:) = 0._wp   ;   vbdy_e(:,:) = 0._wp 
     205      ubdy_n(:,:) = 0._wp   ;   vbdy_n(:,:) = 0._wp 
     206      ubdy_s(:,:) = 0._wp   ;   vbdy_s(:,:) = 0._wp 
    205207   ENDIF 
    206208 
    207209   Agrif_UseSpecialValue = .FALSE.  
    208    ! reset velocities to zero 
    209    ua(:,:,:) = 0. 
    210    va(:,:,:) = 0. 
     210    
     211   ua(:,:,:) = 0._wp   ! reset velocities to zero 
     212   va(:,:,:) = 0._wp 
    211213 
    212214   ! 3. Some controls 
     
    214216   check_namelist = .TRUE. 
    215217 
    216    IF( check_namelist ) THEN  
    217  
    218       ! Check time steps            
     218   IF( check_namelist ) THEN           
     219      ! Check time steps  
    219220      IF( NINT(Agrif_Rhot()) * NINT(rn_Dt) /= Agrif_Parent(rn_Dt) ) THEN 
    220221         WRITE(cl_check1,*)  NINT(Agrif_Parent(rn_Dt)) 
     
    222223         WRITE(cl_check3,*)  NINT(Agrif_Parent(rn_Dt)/Agrif_Rhot()) 
    223224         CALL ctl_stop( 'Incompatible time step between ocean grids',   & 
    224                &               'parent grid value : '//cl_check1    ,   &  
    225                &               'child  grid value : '//cl_check2    ,   &  
    226                &               'value on child grid should be changed to : '//cl_check3 ) 
     225            &                  'parent grid value : '//cl_check1    ,   &  
     226            &                  'child  grid value : '//cl_check2    ,   &  
     227            &                  'value on child grid should be changed to : '//cl_check3 ) 
    227228      ENDIF 
    228229 
     
    292293END SUBROUTINE Agrif_InitValues_cont 
    293294 
     295 
    294296SUBROUTINE agrif_declare_var 
    295297   !!---------------------------------------------------------------------- 
     
    450452 
    451453#if defined key_si3 
     454 
    452455SUBROUTINE Agrif_InitValues_cont_ice 
    453456   !!---------------------------------------------------------------------- 
     
    493496   ! 
    494497END SUBROUTINE Agrif_InitValues_cont_ice 
     498 
    495499 
    496500SUBROUTINE agrif_declare_var_ice 
     
    548552 
    549553END SUBROUTINE agrif_declare_var_ice 
     554 
    550555#endif 
    551556 
    552557 
    553558# if defined key_top 
     559 
    554560SUBROUTINE Agrif_InitValues_cont_top 
    555561   !!---------------------------------------------------------------------- 
     
    808814 
    809815#else 
     816 
    810817SUBROUTINE Subcalledbyagrif 
    811818   !!---------------------------------------------------------------------- 
     
    814821   WRITE(*,*) 'Impossible to be here' 
    815822END SUBROUTINE Subcalledbyagrif 
     823 
    816824#endif 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ASM/asmbkg.F90

    r9598 r10009  
    103103            CALL iom_rstput( kt, nitbkg_r, inum, 'tn'     , tsn(:,:,:,jp_tem) ) 
    104104            CALL iom_rstput( kt, nitbkg_r, inum, 'sn'     , tsn(:,:,:,jp_sal) ) 
    105             CALL iom_rstput( kt, nitbkg_r, inum, 'sshn'   , sshn              ) 
     105            CALL iom_rstput( kt, nitbkg_r, inum, 'sshn'   , ssh(:,:,Nnn)      ) 
    106106            IF( ln_zdftke )   CALL iom_rstput( kt, nitbkg_r, inum, 'en'     , en                ) 
    107107            ! 
     
    138138            CALL iom_rstput( kt, nitdin_r, inum, 'tn'     , tsn(:,:,:,jp_tem) ) 
    139139            CALL iom_rstput( kt, nitdin_r, inum, 'sn'     , tsn(:,:,:,jp_sal) ) 
    140             CALL iom_rstput( kt, nitdin_r, inum, 'sshn'   , sshn              ) 
     140            CALL iom_rstput( kt, nitdin_r, inum, 'sshn'   , ssh(:,:,Nnn)      ) 
    141141#if defined key_si3 
    142142            IF( nn_ice == 2 ) THEN 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ASM/asminc.F90

    r10001 r10009  
    728728            IF(lwp) THEN 
    729729               WRITE(numout,*)  
    730                WRITE(numout,*) 'ssh_asm_inc : SSH IAU at time step = ', & 
    731                   &  kt,' with IAU weight = ', wgtiau(it) 
     730               WRITE(numout,*) 'ssh_asm_inc : SSH IAU at time step = ', kt,' with IAU weight = ', wgtiau(it) 
    732731               WRITE(numout,*) '~~~~~~~~~~~~' 
    733732            ENDIF 
     
    755754         IF ( kt == nitdin_r ) THEN 
    756755            ! 
    757             l_1st_euler = .TRUE.                         ! Force Euler forward step 
    758             ! 
    759             sshn(:,:) = ssh_bkg(:,:) + ssh_bkginc(:,:)   ! Initialize the now fields the background + increment 
    760             ! 
    761             sshb(:,:) = sshn(:,:)                        ! Update before fields 
    762             e3t_b(:,:,:) = e3t_n(:,:,:) 
     756            l_1st_euler = .TRUE.                            ! Force Euler forward step 
     757            ! 
     758            ssh(:,:,Nnn) = ssh_bkg(:,:) + ssh_bkginc(:,:)   ! Initialize the now fields the background + increment 
     759            ! 
     760            ssh  (:,:,Nbb) = ssh  (:,:,Nnn)                 ! Update before fields 
     761            e3t_b(:,:,:)   = e3t_n(:,:,:) 
    763762             
    764763!!gm BUG :   missing the update of all other scale factors (e3u e3v e3w  etc... _n and _b)  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdydta.F90

    r9810 r10009  
    111111                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    112112                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    113                      dta_bdy(jbdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)          
     113                     dta_bdy(jbdy)%ssh(ib) = ssh(ii,ij,Nnn) * tmask(ii,ij,1)          
    114114                  END DO  
    115115               ENDIF 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdydyn.F90

    r9598 r10009  
    9797      !------------------------------------------------------- 
    9898 
    99       IF( ll_dyn2d )   CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, r1_hu_a(:,:), r1_hv_a(:,:), ssha ) 
     99      IF( ll_dyn2d )   CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, r1_hu_a(:,:), r1_hv_a(:,:), ssh(:,:,Naa) ) 
    100100 
    101101      IF( ll_dyn3d )   CALL bdy_dyn3d( kt ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/CRS/crsfld.F90

    r9598 r10009  
    219219       
    220220      !  sbc fields   
    221       CALL crs_dom_ope( sshn , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t           , psgn=1.0 )  
    222       CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u  , p_surf_crs=e2u_crs  , psgn=1.0 ) 
    223       CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v  , p_surf_crs=e1v_crs  , psgn=1.0 ) 
    224       CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    225       CALL crs_dom_ope( rnf  , 'MAX', 'T', tmask, rnf_crs                                     , psgn=1.0 ) 
    226       CALL crs_dom_ope( qsr  , 'SUM', 'T', tmask, qsr_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    227       CALL crs_dom_ope( emp_b, 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    228       CALL crs_dom_ope( emp  , 'SUM', 'T', tmask, emp_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    229       CALL crs_dom_ope( sfx  , 'SUM', 'T', tmask, sfx_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    230       CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     221      CALL crs_dom_ope( ssh(:,:,Nnn) , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t           , psgn=1.0 )  
     222      CALL crs_dom_ope( utau         , 'SUM', 'U', umask, utau_crs , p_e12=e2u  , p_surf_crs=e2u_crs  , psgn=1.0 ) 
     223      CALL crs_dom_ope( vtau         , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v  , p_surf_crs=e1v_crs  , psgn=1.0 ) 
     224      CALL crs_dom_ope( wndm         , 'SUM', 'T', tmask, wndm_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     225      CALL crs_dom_ope( rnf          , 'MAX', 'T', tmask, rnf_crs                                     , psgn=1.0 ) 
     226      CALL crs_dom_ope( qsr          , 'SUM', 'T', tmask, qsr_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     227      CALL crs_dom_ope( emp_b        , 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     228      CALL crs_dom_ope( emp          , 'SUM', 'T', tmask, emp_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     229      CALL crs_dom_ope( sfx          , 'SUM', 'T', tmask, sfx_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     230      CALL crs_dom_ope( fr_i         , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    231231 
    232232      CALL iom_put( "ssh"      , sshn_crs )   ! ssh output  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/dia25h.F90

    r9939 r10009  
    9494      ! ------------------------- ! 
    9595      cnt_25h = 1  ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible)  
    96       tn_25h  (:,:,:) = tsb (:,:,:,jp_tem) 
    97       sn_25h  (:,:,:) = tsb (:,:,:,jp_sal) 
    98       sshn_25h(:,:)   = sshb(:,:) 
    99       un_25h  (:,:,:) = ub  (:,:,:) 
    100       vn_25h  (:,:,:) = vb  (:,:,:) 
    101       wn_25h  (:,:,:) = wn  (:,:,:) 
    102       avt_25h (:,:,:) = avt (:,:,:) 
    103       avm_25h (:,:,:) = avm (:,:,:) 
     96      tn_25h  (:,:,:) = tsb(:,:,:,jp_tem) 
     97      sn_25h  (:,:,:) = tsb(:,:,:,jp_sal) 
     98      sshn_25h(:,:)   = ssh(:,:,Nbb) 
     99      un_25h  (:,:,:) = ub (:,:,:) 
     100      vn_25h  (:,:,:) = vb (:,:,:) 
     101      wn_25h  (:,:,:) = wn (:,:,:) 
     102      avt_25h (:,:,:) = avt(:,:,:) 
     103      avm_25h (:,:,:) = avm(:,:,:) 
    104104      IF( ln_zdftke ) THEN 
    105105         en_25h(:,:,:) = en(:,:,:) 
     
    156156         ENDIF 
    157157 
    158          tn_25h  (:,:,:)     = tn_25h  (:,:,:) + tsn (:,:,:,jp_tem) 
    159          sn_25h  (:,:,:)     = sn_25h  (:,:,:) + tsn (:,:,:,jp_sal) 
    160          sshn_25h(:,:)       = sshn_25h(:,:)   + sshn(:,:) 
    161          un_25h  (:,:,:)     = un_25h  (:,:,:) + un  (:,:,:) 
    162          vn_25h  (:,:,:)     = vn_25h  (:,:,:) + vn  (:,:,:) 
    163          wn_25h  (:,:,:)     = wn_25h  (:,:,:) + wn  (:,:,:) 
    164          avt_25h (:,:,:)     = avt_25h (:,:,:) + avt (:,:,:) 
    165          avm_25h (:,:,:)     = avm_25h (:,:,:) + avm (:,:,:) 
     158         tn_25h  (:,:,:)     = tn_25h  (:,:,:) + tsn(:,:,:,jp_tem) 
     159         sn_25h  (:,:,:)     = sn_25h  (:,:,:) + tsn(:,:,:,jp_sal) 
     160         sshn_25h(:,:)       = sshn_25h(:,:)   + ssh(:,:,Nnn) 
     161         un_25h  (:,:,:)     = un_25h  (:,:,:) + un (:,:,:) 
     162         vn_25h  (:,:,:)     = vn_25h  (:,:,:) + vn (:,:,:) 
     163         wn_25h  (:,:,:)     = wn_25h  (:,:,:) + wn (:,:,:) 
     164         avt_25h (:,:,:)     = avt_25h (:,:,:) + avt(:,:,:) 
     165         avm_25h (:,:,:)     = avm_25h (:,:,:) + avm(:,:,:) 
    166166         IF( ln_zdftke ) THEN 
    167167            en_25h(:,:,:)    = en_25h  (:,:,:) + en(:,:,:) 
     
    206206         zmdi=1.e+20 !missing data indicator for masking 
    207207         ! write tracers (instantaneous) 
    208          zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    209          CALL iom_put("temper25h", zw3d)   ! potential temperature 
    210          zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    211          CALL iom_put( "salin25h", zw3d  )   ! salinity 
    212          zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 
    213          CALL iom_put( "ssh25h", zw2d )   ! sea surface  
     208         zw3d(:,:,:) = tn_25h  (:,:,:)* tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put("temper25h"  , zw3d )   ! potential temperature 
     209         zw3d(:,:,:) = sn_25h  (:,:,:)* tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put( "salin25h"  , zw3d )   ! salinity 
     210         zw2d(:,:)   = sshn_25h(:,:)  *ssmask(:,:)   + zmdi*(1.0-tmask(:,:,1))   ;   CALL iom_put( "ssh25h"    , zw2d )   ! sea surface  
    214211         ! Write velocities (instantaneous) 
    215          zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 
    216          CALL iom_put("vozocrtx25h", zw3d)    ! i-current 
    217          zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 
    218          CALL iom_put("vomecrty25h", zw3d  )   ! j-current 
    219          zw3d(:,:,:) = wn_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    220          CALL iom_put("vomecrtz25h", zw3d )   ! k-current 
     212         zw3d(:,:,:) = un_25h  (:,:,:)* umask(:,:,:) + zmdi*(1.0-umask(:,:,:))   ;   CALL iom_put("vozocrtx25h", zw3d )   ! i-current 
     213         zw3d(:,:,:) = vn_25h  (:,:,:)* vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:))   ;   CALL iom_put("vomecrty25h", zw3d )   ! j-current 
     214         zw3d(:,:,:) = wn_25h  (:,:,:)* wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put("vomecrtz25h", zw3d )   ! k-current 
    221215         ! Write vertical physics 
    222          zw3d(:,:,:) = avt_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    223          CALL iom_put("avt25h", zw3d )   ! diffusivity 
    224          zw3d(:,:,:) = avm_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    225          CALL iom_put("avm25h", zw3d)   ! viscosity 
    226          IF( ln_zdftke ) THEN 
    227             zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    228             CALL iom_put("tke25h", zw3d)   ! tke 
    229          ENDIF 
    230          IF( ln_zdfgls ) THEN 
    231             zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    232             CALL iom_put("tke25h", zw3d)   ! tke 
    233             zw3d(:,:,:) = rmxln_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
    234             CALL iom_put( "mxln25h",zw3d) 
     216         zw3d(:,:,:) = avt_25h (:,:,:)* wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put("avt25h"     , zw3d )   ! diffusivity 
     217         zw3d(:,:,:) = avm_25h (:,:,:)* wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put("avm25h"     , zw3d )   ! viscosity 
     218         IF( ln_zdftke ) THEN 
     219            zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put("tke25h"     , zw3d )   ! tke 
     220         ENDIF 
     221         IF( ln_zdfgls ) THEN 
     222            zw3d(:,:,:) = en_25h   (:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put("tke25h"  , zw3d )   ! tke 
     223            zw3d(:,:,:) = rmxln_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))   ;   CALL iom_put( "mxln25h", zw3d ) 
    235224         ENDIF 
    236225         ! 
    237226         ! After the write reset the values to cnt=1 and sum values equal current value  
    238          tn_25h  (:,:,:) = tsn (:,:,:,jp_tem) 
    239          sn_25h  (:,:,:) = tsn (:,:,:,jp_sal) 
    240          sshn_25h(:,:)   = sshn(:,:) 
    241          un_25h  (:,:,:) = un  (:,:,:) 
    242          vn_25h  (:,:,:) = vn  (:,:,:) 
    243          wn_25h  (:,:,:) = wn  (:,:,:) 
    244          avt_25h (:,:,:) = avt (:,:,:) 
    245          avm_25h (:,:,:) = avm (:,:,:) 
     227         tn_25h  (:,:,:) = tsn(:,:,:,jp_tem) 
     228         sn_25h  (:,:,:) = tsn(:,:,:,jp_sal) 
     229         sshn_25h(:,:)   = ssh(:,:,Nnn) 
     230         un_25h  (:,:,:) = un (:,:,:) 
     231         vn_25h  (:,:,:) = vn (:,:,:) 
     232         wn_25h  (:,:,:) = wn (:,:,:) 
     233         avt_25h (:,:,:) = avt(:,:,:) 
     234         avm_25h (:,:,:) = avm(:,:,:) 
    246235         IF( ln_zdftke ) THEN 
    247236            en_25h(:,:,:) = en(:,:,:) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diaar5.F90

    r9939 r10009  
    8989         ALLOCATE( zrhd(jpi,jpj,jpk) , zrhop(jpi,jpj,jpk) ) 
    9090         ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) 
    91          zarea_ssh(:,:) = area(:,:) * sshn(:,:) 
     91         zarea_ssh(:,:) = area(:,:) * ssh(:,:,Nnn) 
    9292      ENDIF 
    9393      ! 
     
    100100         CALL iom_put( 'voltot', zvol               ) 
    101101         CALL iom_put( 'sshtot', zvolssh / area_tot ) 
    102          CALL iom_put( 'sshdyn', sshn(:,:) - (zvolssh / area_tot) ) 
     102         CALL iom_put( 'sshdyn', ssh(:,:,Nnn) - (zvolssh / area_tot) ) 
    103103         ! 
    104104      ENDIF 
     
    118118               DO ji = 1, jpi 
    119119                  DO jj = 1, jpj 
    120                      zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
     120                     zbotpres(ji,jj) = zbotpres(ji,jj) + ssh(ji,jj,Nnn) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
    121121                  END DO 
    122122               END DO 
    123123            ELSE 
    124                zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     124               zbotpres(:,:) = zbotpres(:,:) + ssh(:,:,Nnn) * zrhd(:,:,1) 
    125125            END IF 
    126126!!gm 
     
    147147               DO ji = 1,jpi 
    148148                  DO jj = 1,jpj 
    149                      zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
     149                     zbotpres(ji,jj) = zbotpres(ji,jj) + ssh(ji,jj,Nnn) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
    150150                  END DO 
    151151               END DO 
    152152            ELSE 
    153                zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     153               zbotpres(:,:) = zbotpres(:,:) + ssh(:,:,Nnn) * zrhd(:,:,1) 
    154154            END IF 
    155155         END IF 
     
    162162         !                                         ! ocean bottom pressure 
    163163         zztmp = rho0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
    164          zbotpres(:,:) = zztmp * ( zbotpres(:,:) + sshn(:,:) + thick0(:,:) ) 
     164         zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh(:,:,Nnn) + thick0(:,:) ) 
    165165         CALL iom_put( 'botpres', zbotpres ) 
    166166         ! 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diadct.F90

    r9939 r10009  
    491491     !! 
    492492     !---------------------------------------------------------------------------- 
    493      !! * arguments 
    494493     TYPE(SECTION),INTENT(INOUT) :: sec 
    495494     CHARACTER(len=1),INTENT(IN) :: cdind   ! = 'I'/'J' 
    496495     CHARACTER(len=8),INTENT(IN) :: cdextr  ! = 'top_list'/'bot_list' 
    497496     LOGICAL,INTENT(IN)          :: ld_debug                      
    498  
    499      !! * Local variables 
     497     ! 
    500498     INTEGER :: iextr         ,& !extremity of listpoint that we verify 
    501499                iind          ,& !coord     of listpoint that we verify 
     
    588586     REAL(wp)::   zumid, zvmid, zumid_ice, zvmid_ice   ! U/V ocean & ice velocity on a cell segment  
    589587     REAL(wp)::   zTnorm                               ! transport of velocity through one cell's sides  
    590      REAL(wp)::   ztn, zsn, zrhoi, zrhop, zsshn, zdep  ! temperature/salinity/potential density/ssh/depth at u/v point 
     588     REAL(wp)::   ztn, zsn, zrhoi, zrhop, zssh, zdep   ! temperature/salinity/potential density/ssh/depth at u/v point 
    591589     TYPE(POINT_SECTION) ::   k 
    592590      !!-------------------------------------------------------- 
     
    680678                  zrhop = interp(k%I,k%J,jk,'V',rhop)  
    681679                  zrhoi = interp(k%I,k%J,jk,'V',rhd*rho0+rho0)  
    682                   zsshn =  0.5*( sshn(k%I,k%J) + sshn(k%I,k%J+1)    ) * vmask(k%I,k%J,1)  
     680                  zssh  =  0.5*( ssh(k%I,k%J,Nnn) + ssh(k%I,k%J+1,Nnn)    ) * vmask(k%I,k%J,1)  
    683681               CASE(2,3)  
    684682                  ztn   = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) )  
     
    686684                  zrhop = interp(k%I,k%J,jk,'U',rhop)  
    687685                  zrhoi = interp(k%I,k%J,jk,'U',rhd*rho0+rho0)  
    688                   zsshn =  0.5*( sshn(k%I,k%J) + sshn(k%I+1,k%J)    ) * umask(k%I,k%J,1)   
     686                  zssh  =  0.5*( ssh(k%I,k%J,Nnn) + ssh(k%I+1,k%J,Nnn)    ) * umask(k%I,k%J,1)   
    689687               END SELECT  
    690688               ! 
     
    706704 
    707705!!gm  THIS is WRONG  no transport due to ssh in linear free surface case !!!!! 
    708                IF( ln_linssh ) THEN              !add transport due to free surface  
    709                   IF( jk==1 ) THEN  
    710                      zTnorm = zTnorm + zumid* e2u(k%I,k%J) * zsshn * umask(k%I,k%J,jk)   &  
    711                         &            + zvmid* e1v(k%I,k%J) * zsshn * vmask(k%I,k%J,jk)  
    712                   ENDIF  
    713                ENDIF 
     706!               IF( ln_linssh ) THEN              !add transport due to free surface  
     707!                  IF( jk==1 ) THEN  
     708!                     zTnorm = zTnorm + zumid* e2u(k%I,k%J) * zssh * umask(k%I,k%J,jk)   &  
     709!                        &            + zvmid* e1v(k%I,k%J) * zssh * vmask(k%I,k%J,jk)  
     710!                  ENDIF  
     711!               ENDIF 
    714712!!gm end 
    715713              !COMPUTE TRANSPORT   
     
    792790     TYPE(POINT_SECTION) :: k  
    793791     INTEGER  :: jk,jseg,jclass                        ! dummy variables for looping on level/segment/classes   
    794      REAL(wp) :: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/ssh/potential density /depth at u/v point  
     792     REAL(wp) :: ztn, zsn, zrhoi, zrhop, zssh, zdep ! temperature/salinity/ssh/potential density /depth at u/v point  
    795793     !!-------------------------------------------------------------  
    796794  
     
    858856                 zrhop = interp(k%I,k%J,jk,'U',rhop)  
    859857                 zrhoi = interp(k%I,k%J,jk,'U',rhd*rho0+rho0)  
    860                  zsshn =  0.5*( sshn(k%I,k%J)    + sshn(k%I+1,k%J)    ) * umask(k%I,k%J,1)   
     858                 zssh  =  0.5*(  ssh(k%I,k%J,Nnn) + ssh(k%I+1,k%J,Nnn)  ) * umask(k%I,k%J,1)   
    861859              END SELECT  
    862860  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diaharm.F90

    r9939 r10009  
    193193                  DO ji = 1,jpi 
    194194                     ! Elevation 
    195                      ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*sshn(ji,jj)*ssmask (ji,jj)         
    196                      ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj)*ssumask(ji,jj) 
    197                      ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj)*ssvmask(ji,jj) 
     195                     ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*ssh (ji,jj,Nnn)*ssmask (ji,jj)         
     196                     ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj)    *ssumask(ji,jj) 
     197                     ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj)    *ssvmask(ji,jj) 
    198198                  END DO 
    199199               END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diahsb.F90

    r9939 r10009  
    135135 
    136136      !                    ! volume variation (calculated with ssh) 
    137       zdiff_v1 = glob_sum_full( surf(:,:)*sshn(:,:) - surf_ini(:,:)*ssh_ini(:,:) ) 
     137      zdiff_v1 = glob_sum_full( surf(:,:)*ssh(:,:,Nnn) - surf_ini(:,:)*ssh_ini(:,:) ) 
    138138 
    139139      !                    ! heat & salt content variation (associated with ssh) 
     
    142142            DO ji = 1, jpi 
    143143               DO jj = 1, jpj 
    144                   z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) - ssh_hc_loc_ini(ji,jj) )  
    145                   z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) - ssh_sc_loc_ini(ji,jj) )  
     144                  z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_tem) * ssh(ji,jj,Nnn) - ssh_hc_loc_ini(ji,jj) ) 
     145                  z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_sal) * ssh(ji,jj,Nnn) - ssh_sc_loc_ini(ji,jj) ) 
    146146               END DO 
    147147            END DO 
    148148         ELSE                          ! no under ice-shelf seas 
    149             z2d0(:,:) = surf(:,:) * ( tsn(:,:,1,jp_tem) * sshn(:,:) - ssh_hc_loc_ini(:,:) )  
    150             z2d1(:,:) = surf(:,:) * ( tsn(:,:,1,jp_sal) * sshn(:,:) - ssh_sc_loc_ini(:,:) )  
     149            z2d0(:,:) = surf(:,:) * ( tsn(:,:,1,jp_tem) * ssh(:,:,Nnn) - ssh_hc_loc_ini(:,:) )  
     150            z2d1(:,:) = surf(:,:) * ( tsn(:,:,1,jp_sal) * ssh(:,:,Nnn) - ssh_sc_loc_ini(:,:) )  
    151151         END IF 
    152152         z_ssh_hc = glob_sum_full( z2d0 )  
     
    191191!!gm to be added ? 
    192192!      IF( ln_linssh ) THEN            ! fixed volume, add the ssh contribution 
    193 !        zvol_tot = zvol_tot + glob_sum( surf(:,:) * sshn(:,:) ) 
     193!        zvol_tot = zvol_tot + glob_sum( surf(:,:) * ssh(:,:,Nnn) ) 
    194194!      ENDIF 
    195195!!gm end 
     
    281281            IF(lwp) WRITE(numout,*) 
    282282            surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:)         ! initial ocean surface 
    283             ssh_ini(:,:) = sshn(:,:)                          ! initial ssh 
     283            ssh_ini (:,:) = ssh(:,:,Nnn)                      ! initial ssh 
    284284            DO jk = 1, jpk 
    285285              ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). 
     
    295295                  DO ji = 1, jpi 
    296296                     DO jj = 1, jpj 
    297                         ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj)   ! initial heat content in ssh 
    298                         ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj)   ! initial salt content in ssh 
     297                        ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * ssh(ji,jj,Nnn)   ! initial heat content in ssh 
     298                        ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * ssh(ji,jj,Nnn)   ! initial salt content in ssh 
    299299                     END DO 
    300300                   END DO 
    301301                ELSE 
    302                   ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:)   ! initial heat content in ssh 
    303                   ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:)   ! initial salt content in ssh 
     302                  ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * ssh(:,:,Nnn)   ! initial heat content in ssh 
     303                  ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * ssh(:,:,Nnn)   ! initial salt content in ssh 
    304304               END IF 
    305305               frc_wn_t = 0._wp                                       ! initial heat content misfit due to free surface 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diahth.F90

    r9939 r10009  
    311311      END DO 
    312312      ! surface boundary condition 
    313       IF( ln_linssh ) THEN   ;   zthick(:,:) = sshn(:,:)   ;   htc3(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) * tmask(:,:,1)   
    314       ELSE                   ;   zthick(:,:) = 0._wp       ;   htc3(:,:) = 0._wp                                    
     313      IF( ln_linssh ) THEN   ;   zthick(:,:) = ssh(:,:,Nnn)   ;   htc3(:,:) = tsn(:,:,1,jp_tem) * ssh(:,:,Nnn) * tmask(:,:,1) 
     314      ELSE                   ;   zthick(:,:) = 0._wp          ;   htc3(:,:) = 0._wp                                    
    315315      ENDIF 
    316316      ! integration down to ilevel 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diatmb.F90

    r9598 r10009  
    108108      CALL dia_calctmb( tsn(:,:,:,jp_tem), zwtmb ) 
    109109      !ssh already output but here we output it masked 
    110       CALL iom_put( "sshnmasked", sshn(:,:)*tmask(:,:,1) + zmdi*(1.0 - tmask(:,:,1)) ) 
     110      CALL iom_put( "sshnmasked", ssh(:,:,Nnn)*ssmask(:,:) + zmdi*(1._wp - ssmask(:,:)) ) 
    111111      CALL iom_put( "top_temp"  , zwtmb(:,:,1) )    ! tmb Temperature 
    112112      CALL iom_put( "mid_temp"  , zwtmb(:,:,2) )    ! tmb Temperature 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diawri.F90

    r10001 r10009  
    136136 
    137137      IF( ll_wd ) THEN 
    138          CALL iom_put( "ssh" , (sshn+ssh_ref)*tmask(:,:,1) )   ! sea surface height (brought back to the reference used for wetting and drying) 
     138         CALL iom_put( "ssh" , ( ssh(:,:,Nnn)+ssh_ref)*ssmask(:,:) )   ! sea surface height (brought back to the reference used for wetting and drying) 
    139139      ELSE 
    140          CALL iom_put( "ssh" , sshn )              ! sea surface height 
     140         CALL iom_put( "ssh" ,   ssh(:,:,Nnn) )              ! sea surface height 
    141141      ENDIF 
    142142 
    143143      IF( iom_use("wetdep") )   &                  ! wet depth 
    144          CALL iom_put( "wetdep" , ht_0(:,:) + sshn(:,:) ) 
     144         CALL iom_put( "wetdep" , ht_0(:,:) + ssh(:,:,Nnn) ) 
    145145       
    146146      CALL iom_put( "toce", tsn(:,:,:,jp_tem) )    ! 3D temperature 
     
    771771         CALL histwrite( nid_T, "vovvldef", it, zw3d             , ndim_T , ndex_T  )   ! level thickness deformation 
    772772      ENDIF 
    773       CALL histwrite( nid_T, "sossheig", it, sshn          , ndim_hT, ndex_hT )   ! sea surface height 
     773      CALL histwrite( nid_T, "sossheig", it, ssh(:,:,Nnn)  , ndim_hT, ndex_hT )   ! sea surface height 
    774774      CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf )   , ndim_hT, ndex_hT )   ! upward water flux 
    775775      CALL histwrite( nid_T, "sorunoff", it, rnf           , ndim_hT, ndex_hT )   ! river runoffs 
     
    993993      CALL histwrite( id_i, "votemper", kt, tsn(:,:,:,jp_tem), jpi*jpj*jpk, idex )    ! now temperature 
    994994      CALL histwrite( id_i, "vosaline", kt, tsn(:,:,:,jp_sal), jpi*jpj*jpk, idex )    ! now salinity 
    995       CALL histwrite( id_i, "sossheig", kt, sshn             , jpi*jpj    , idex )    ! sea surface height 
     995      CALL histwrite( id_i, "sossheig", kt, ssh(:,:,Nnn)     , jpi*jpj    , idex )    ! sea surface height 
    996996      CALL histwrite( id_i, "vozocrtx", kt, un               , jpi*jpj*jpk, idex )    ! now i-velocity 
    997997      CALL histwrite( id_i, "vomecrty", kt, vn               , jpi*jpj*jpk, idex )    ! now j-velocity 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/domain.F90

    r10001 r10009  
    1515   !!            3.7  !  2015-11  (G. Madec, A. Coward)  time varying zgr by default 
    1616   !!            4.0  !  2016-10  (G. Madec, S. Flavoni)  domain configuration / user defined interface 
     17   !!            5.0  !  2018-07  (G. Madec)  RK3: add a time-level dimension to time-varying variables 
    1718   !!---------------------------------------------------------------------- 
    1819    
     
    4849   PRIVATE 
    4950 
     51   PUBLIC   dom_nam      ! called by nemogcm.F90 
    5052   PUBLIC   dom_init     ! called by nemogcm.F90 
    5153   PUBLIC   domain_cfg   ! called by nemogcm.F90 
     
    118120      ! 
    119121      CALL dom_glo                     ! global domain versus local domain 
    120       CALL dom_nam                     ! read namelist ( namrun, namdom ) 
    121       ! 
    122       IF( lwxios ) THEN 
    123 !define names for restart write and set core output (restart.F90) 
     122      ! 
     123      IF( lwxios ) THEN                ! define names for restart write and set core output (restart.F90) 
    124124         CALL iom_set_rst_vars(rst_wfields) 
    125125         CALL iom_set_rstw_core(cdstr) 
    126126      ENDIF 
    127 !reset namelist for SAS 
    128       IF(cdstr == 'SAS') THEN 
     127      IF( cdstr == 'SAS' ) THEN        ! reset namelist for SAS 
    129128         IF(lrxios) THEN 
    130129               IF(lwp) write(numout,*) 'Disable reading restart file using XIOS for SAS' 
     
    184183         r1_hu_b = r1_hu_0   ;   r1_hu_n = r1_hu_0   ; r1_hu_a = r1_hu_0   ! 1 / water column 
    185184         r1_hv_b = r1_hv_0   ;   r1_hv_n = r1_hv_0   ; r1_hv_a = r1_hv_0   !       thickness 
    186          ! 
    187185         ! 
    188186      ELSE                       != time varying : initialize before/now/after variables 
     
    307305      ENDIF 
    308306      ! 
    309       REWIND( numnam_ref )              ! Namelist namdom in reference namelist : space & time domain (bathymetry, mesh, timestep) 
     307      REWIND( numnam_ref )                ! Namelist namdom in reference namelist : space & time domain (bathymetry, mesh, timestep) 
    310308      READ  ( numnam_ref, namdom, IOSTAT = ios, ERR = 903) 
    311309903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namdom in reference namelist', lwp ) 
    312       REWIND( numnam_cfg )              ! Namelist namdom in configuration namelist : space & time domain (bathymetry, mesh, timestep) 
     310      REWIND( numnam_cfg )                ! Namelist namdom in configuration namelist : space & time domain (bathymetry, mesh, timestep) 
    313311      READ  ( numnam_cfg, namdom, IOSTAT = ios, ERR = 904 ) 
    314312904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namdom in configuration namelist', lwp ) 
     
    316314      ! 
    317315      IF(lwp) THEN 
    318          WRITE(numout,*) 
    319316         WRITE(numout,*) '   Namelist : namdom   ---   space & time domain' 
    320317         WRITE(numout,*) '      3rd order Runge-Kutta scheme            ln_RK3      = ', ln_RK3 
     
    337334      ENDIF 
    338335      ! 
    339       REWIND( numnam_ref )              ! Namelist namrun in reference namelist : Parameters of the run 
     336      !                                   ! Set the number of time-level 
     337      ! 
     338      IF    ( ln_RK3 ) THEN                  ! two-level time-stepping scheme 
     339         Nt = 2                                    ! number of time-level 
     340         Nbb = 1     ! before=now                  ! time indexes 
     341         Nnn = 1     ! now   (n  ) 
     342         Naa = 2     ! after (n+1) 
     343         ! 
     344      ELSEIF( ln_MLF ) THEN                  ! three-level time-stepping scheme 
     345         Nt = 3                                    ! number of time-level 
     346         Nbb = 1     ! before (n-1) 
     347         Nnn = 2     ! now    (n  ) 
     348         Naa = 3     ! after  (n+1) 
     349      ENDIF 
     350      ! 
     351      REWIND( numnam_ref )                ! Namelist namrun in reference namelist : Parameters of the run 
    340352      READ  ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 
    341353901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namrun in reference namelist', lwp ) 
    342       REWIND( numnam_cfg )              ! Namelist namrun in configuration namelist : Parameters of the run 
     354      REWIND( numnam_cfg )                ! Namelist namrun in configuration namelist : Parameters of the run 
    343355      READ  ( numnam_cfg, namrun, IOSTAT = ios, ERR = 902 ) 
    344356902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namrun in configuration namelist', lwp ) 
    345357      IF(lwm) WRITE ( numond, namrun ) 
    346358      ! 
    347       IF(lwp) THEN                  ! control print 
     359      IF(lwp) THEN                        ! control print 
    348360         WRITE(numout,*) 
    349361         WRITE(numout,*) '   Namelist : namrun   ---   run parameters' 
     
    383395      ENDIF 
    384396 
    385       cexper = cn_exp         ! conversion DOCTOR names into model names (this should disappear soon) 
     397      cexper = cn_exp         ! conversion from namelist names to model names (this should disappear) 
    386398      nrstdt = nn_rstctl 
    387399      nit000 = nn_it000 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/domvvl.F90

    r10001 r10009  
    135135      IF( dom_vvl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 
    136136      ! 
    137       !                    ! Read or initialize e3t_(b/n), ssh(b/n) 
     137      !                    ! Read or initialize ssh(Nbb) & ssh(Nnn) 
    138138      CALL dom_vvl_rst( nit000, 'READ' ) 
    139139      ! 
     
    142142      !                          !* BEFORE fields :  
    143143      CALL ssh2e3_before               ! set:      hu , hv , r1_hu, r1_hv  
    144       !                                    !  e3t, e3w, e3u, e3uw, e3v, e3vw 
    145       ! 
    146       !                                ! set one for all last level to the e3._0 value 
     144      !                                !      e3t, e3w, e3u, e3uw, e3v, e3vw        (from 1 to jpkm1) 
     145      ! 
     146      !                                ! set jpk level one to the e3._0 values 
    147147      e3t_b(:,:,jpk) = e3t_0(:,:,jpk)  ;   e3u_b(:,:,jpk) =  e3w_0(:,:,jpk)  ;   e3v_b(:,:,jpk) =  e3v_0(:,:,jpk) 
    148148      e3w_b(:,:,jpk) = e3w_0(:,:,jpk)  ;  e3uw_b(:,:,jpk) = e3uw_0(:,:,jpk)  ;  e3vw_b(:,:,jpk) = e3vw_0(:,:,jpk) 
     
    150150      !                          !* NOW fields :  
    151151      CALL ssh2e3_now                  ! set: ht , hu , hv , r1_hu, r1_hv 
    152       !                                !      e3t, e3w, e3u, e3uw, e3v, e3vw, e3f 
     152      !                                !      e3t, e3w, e3u, e3uw, e3v, e3vw, e3f   (from 1 to jpkm1) 
    153153      !                                !      gdept_n, gdepw_n, gde3w_n 
     154!!gm issue?   gdept_n, gdepw_n, gde3w_n never defined at jpk 
    154155      ! 
    155156      !                                ! set one for all last level to the e3._0 value 
     
    230231      !                                   !==  after ssh  ==!  (u- and v-points) 
    231232      DO jj = 2, jpjm1   ;   DO ji = 2, jpim1 
    232          zsshu_h(ji,jj) = 0.5_wp * ( ssha(ji,jj) + ssha(ji+1,jj) ) * ssumask(ji,jj) 
    233          zsshv_h(ji,jj) = 0.5_wp * ( ssha(ji,jj) + ssha(ji,jj+1) ) * ssvmask(ji,jj) 
     233         zsshu_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Naa) + ssh(ji+1,jj,Naa) ) * ssumask(ji,jj) 
     234         zsshv_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Naa) + ssh(ji,jj+1,Naa) ) * ssvmask(ji,jj) 
    234235      END DO             ;   END DO       
    235236      CALL lbc_lnk_multi( zsshu_h(:,:), 'U', 1._wp , zsshv_h(:,:), 'V', 1._wp ) 
     
    242243      ! 
    243244      !                                   !==  after scale factors  ==!  (e3t , e3u , e3v) 
    244       zssht_h(:,:) = ssha   (:,:) * r1_ht_0(:,:)           ! t-point 
    245       zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)           ! u-point 
    246       zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)           ! v-point 
     245      zssht_h(:,:) = ssh    (:,:,Naa) * r1_ht_0(:,:)     ! t-point 
     246      zsshu_h(:,:) = zsshu_h(:,:)     * r1_hu_0(:,:)     ! u-point 
     247      zsshv_h(:,:) = zsshv_h(:,:)     * r1_hv_0(:,:)     ! v-point 
    247248      DO jk = 1, jpkm1 
    248249         e3t_a(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
     
    318319         e3v_n  (:,:,jk) = e3v_a  (:,:,jk) 
    319320      END DO 
    320       ht_n(:,:) = ht_0(:,:) + sshn(:,:)            ! ocean thickness 
     321      ht_n(:,:) = ht_0(:,:) + ssh(:,:,Nnn)            ! ocean thickness 
    321322      ! 
    322323      hu_n(:,:) = hu_a(:,:)   ;   r1_hu_n(:,:) = r1_hu_a(:,:) 
     
    326327      !                                            !* ssh at u- and v-points) 
    327328      DO jj = 2, jpjm1   ;   DO ji = 2, jpim1 
    328          zsshu_h(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji+1,jj  ) ) * ssumask(ji,jj) 
    329          zsshv_h(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji  ,jj+1) ) * ssvmask(ji,jj) 
     329         zsshu_h(ji,jj) = 0.5_wp  * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj  ,Nbb) ) * ssumask(ji,jj) 
     330         zsshv_h(ji,jj) = 0.5_wp  * ( ssh(ji,jj,Nbb) + ssh(ji  ,jj+1,Nbb) ) * ssvmask(ji,jj) 
    330331      END DO             ;   END DO       
    331332      CALL lbc_lnk_multi( zsshu_h(:,:),'U', 1._wp , zsshv_h(:,:),'V', 1._wp ) 
    332333      ! 
    333334      !                                            !*  e3w_b , e3uw_b , e3vw_b 
    334       zssht_h(:,:) = sshb (:,:) * r1_ht_0(:,:)           ! w-point 
    335       zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)           ! uw-point 
    336       zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)           ! vw-point 
     335      zssht_h(:,:) = ssh    (:,:,Nbb) * r1_ht_0(:,:)     ! w-point 
     336      zsshu_h(:,:) = zsshu_h(:,:)     * r1_hu_0(:,:)     ! uw-point 
     337      zsshv_h(:,:) = zsshv_h(:,:)     * r1_hv_0(:,:)     ! vw-point 
    337338      DO jk = 1, jpkm1 
    338           e3w_b(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
     339          e3w_b(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 
    339340         e3uw_b(:,:,jk) = e3uw_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * umask(:,:,jk) ) 
    340341         e3vw_b(:,:,jk) = e3vw_0(:,:,jk) * ( 1._wp + zsshv_h(:,:) * vmask(:,:,jk) ) 
     
    344345      !                                            !* ssh at u- and v-points) 
    345346      DO jj = 1, jpjm1   ;   DO ji = 1, jpim1            ! start from 1 for f-point 
    346          zsshu_h(ji,jj) = 0.50_wp * ( sshn(ji  ,jj) + sshn(ji+1,jj  ) ) * ssumask(ji,jj) 
    347          zsshv_h(ji,jj) = 0.50_wp * ( sshn(ji  ,jj) + sshn(ji  ,jj+1) ) * ssvmask(ji,jj) 
    348          zsshf_h(ji,jj) = 0.25_wp * ( sshn(ji  ,jj) + sshn(ji  ,jj+1)   &  
    349             &                       + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) * ssfmask(ji,jj) 
     347         zsshu_h(ji,jj) = 0.50_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji+1,jj  ,Nnn) ) * ssumask(ji,jj) 
     348         zsshv_h(ji,jj) = 0.50_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji  ,jj+1,Nnn) ) * ssvmask(ji,jj) 
     349         zsshf_h(ji,jj) = 0.25_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji  ,jj+1,Nnn)   &  
     350            &                       + ssh(ji+1,jj,Nnn) + ssh(ji+1,jj+1,Nnn) ) * ssfmask(ji,jj) 
    350351      END DO             ;   END DO       
    351352      CALL lbc_lnk_multi( zsshu_h(:,:),'U', 1._wp , zsshv_h(:,:),'V', 1._wp , zsshf_h(:,:),'F', 1._wp )       
    352353      ! 
    353354      !                                            !* e3w_n , e3uw_n , e3vw_n, e3f_n  
    354       zssht_h(:,:) = sshn   (:,:) * r1_ht_0(:,:)           ! t- & w-point 
    355       zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)           ! uw-point 
    356       zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)           ! vw-point 
    357       zsshf_h(:,:) = zsshf_h(:,:) * r1_hf_0(:,:)           ! f-point 
     355      zssht_h(:,:) = ssh    (:,:,Nnn) * r1_ht_0(:,:)     ! t- & w-point 
     356      zsshu_h(:,:) = zsshu_h(:,:)     * r1_hu_0(:,:)     ! uw-point 
     357      zsshv_h(:,:) = zsshv_h(:,:)     * r1_hv_0(:,:)     ! vw-point 
     358      zsshf_h(:,:) = zsshf_h(:,:)     * r1_hf_0(:,:)     ! f-point 
    358359      DO jk = 1, jpkm1 
    359           e3w_n(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) *  tmask(:,:,jk) ) 
     360          e3w_n(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 
    360361         e3uw_n(:,:,jk) = e3uw_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * wumask(:,:,jk) ) 
    361362         e3vw_n(:,:,jk) = e3vw_0(:,:,jk) * ( 1._wp + zsshv_h(:,:) * wvmask(:,:,jk) ) 
     
    363364      END DO       
    364365      !  
    365       zssht_h(:,:) = 1._wp + sshn (:,:) * r1_ht_0(:,:)   ! t-point 
     366      zssht_h(:,:) = 1._wp + zssht_h(:,:)               ! t-point 
    366367      ! 
    367368      IF( ln_isfcav ) THEN    ! ISF cavities : ssh scaling not applied over the iceshelf thickness  
     
    369370            gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 
    370371            gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 
    371             gde3w_n(:,:,jk) =   gdept_n(:,:,jk) - sshn   (:,:) 
     372            gde3w_n(:,:,jk) =   gdept_n(:,:,jk) - ssh    (:,:,Nnn) 
    372373         END DO 
    373374      ELSE                    ! no ISF cavities  
     
    375376            gdept_n(:,:,jk) = gdept_0(:,:,jk) * zssht_h(:,:) 
    376377            gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * zssht_h(:,:) 
    377             gde3w_n(:,:,jk) = gdept_n(:,:,jk) - sshn(:,:) 
     378            gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh    (:,:,Nnn) 
    378379         END DO 
    379380      ENDIF 
     
    420421!!gm  Question: use jpdom_data above to read data over jpi x jpj    (like is dom_hgr_read and dom_zgr_read) 
    421422!!              so that it will work with land processor suppression 
    422 !               CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lrxios    ) 
    423 !               CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb, ldxios = lrxios    ) 
     423!               CALL iom_get( numror, jpdom_autoglo, 'sshn'   , ssh(:,:,Nnn), ldxios = lrxios    ) 
     424!               CALL iom_get( numror, jpdom_autoglo, 'sshb'   , ssh(:,:,Nbb), ldxios = lrxios    ) 
    424425!!gm  
    425                CALL iom_get( numror, jpdom_data, 'sshn'   , sshn, ldxios = lrxios    ) 
    426                CALL iom_get( numror, jpdom_data, 'sshb'   , sshb, ldxios = lrxios    ) 
     426               CALL iom_get( numror, jpdom_data, 'sshn'   , ssh(:,:,Nnn), ldxios = lrxios    ) 
     427               CALL iom_get( numror, jpdom_data, 'sshb'   , ssh(:,:,Nbb), ldxios = lrxios    ) 
    427428!!gm end 
    428                IF( l_1st_euler ) THEN 
    429                   sshb(:,:) = sshn(:,:) 
    430                ENDIF 
     429               IF( l_1st_euler )   ssh(:,:,Nbb) = ssh(:,:,Nnn) 
    431430            ELSE IF( id1 > 0 ) THEN 
    432431               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : sshn not found in restart files' 
    433                IF(lwp) write(numout,*) '   set sshn = sshb  and force l_1st_euler = true' 
     432               IF(lwp) write(numout,*) '   set ssh(Nnn) = ssh(Nbb)  and force l_1st_euler = true' 
    434433!!gm               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lrxios ) 
    435                CALL iom_get( numror, jpdom_data, 'sshb', sshb, ldxios = lrxios ) 
    436                sshn(:,:) = sshb(:,:) 
     434               CALL iom_get( numror, jpdom_data, 'sshb', ssh(:,:,Nbb), ldxios = lrxios ) 
     435               ssh(:,:,Nnn) = ssh(:,:,Nbb) 
    437436               l_1st_euler = .TRUE. 
    438437            ELSE IF( id2 > 0 ) THEN 
    439438               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : sshb not found in restart files' 
    440                IF(lwp) write(numout,*) 'set sshb = sshn  and force l_1st_euler = true' 
    441                CALL iom_get( numror, jpdom_data, 'sshn', sshb, ldxios = lrxios ) 
    442                sshb(:,:) = sshn(:,:) 
     439               IF(lwp) write(numout,*) 'set ssh(Nbb) = ssh(Nnn)  and force l_1st_euler = true' 
     440               CALL iom_get( numror, jpdom_data, 'sshn', ssh(:,:,Nnn), ldxios = lrxios ) 
     441               ssh(:,:,Nbb) = ssh(:,:,Nnn) 
    443442               l_1st_euler = .TRUE. 
    444443            ELSE 
    445444               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : sshb and sshn not found in restart file' 
    446                IF(lwp) write(numout,*) 'set sshb = sshn = 0  and force l_1st_euler = true' 
    447                sshb(:,:) = 0._wp 
    448                sshn(:,:) = 0._wp 
     445               IF(lwp) write(numout,*) 'set ssh(Nbb) = ssh(Nnn) = 0  and force l_1st_euler = true' 
     446               ssh(:,:,Nbb) = 0._wp 
     447               ssh(:,:,Nnn) = 0._wp 
    449448               l_1st_euler = .TRUE. 
    450449            ENDIF 
     
    454453               ! 
    455454               IF( cn_cfg == 'wad' ) THEN             ! Wetting and drying test case 
    456                   CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, sshb  ) 
    457                   tsn  (:,:,:,:) = tsb (:,:,:,:)            ! set now values from to before ones 
    458                   sshn (:,:)     = sshb(:,:) 
    459                   un   (:,:,:)   = ub (:,:,:) 
    460                   vn   (:,:,:)   = vb (:,:,:) 
     455                  CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, ssh(:,:,Nbb)  ) 
     456                  tsn(:,:,:,:) = tsb(:,:,:,:)            ! set now values from to before ones 
     457                  ssh(:,:,Nnn) = ssh(:,:,Nbb) 
     458                  un (:,:,:)   = ub (:,:,:) 
     459                  vn (:,:,:)   = vb (:,:,:) 
    461460               ELSE                                   ! Not the test case 
    462                   sshn(:,:) = -ssh_ref 
    463                   sshb(:,:) = -ssh_ref 
     461                  ssh(:,:,Nnn) = -ssh_ref 
     462                  ssh(:,:,Nbb) = -ssh_ref 
    464463                  ! 
    465464                  DO jj = 1, jpj 
    466465                     DO ji = 1, jpi 
    467466                        IF( ht_0(ji,jj)-ssh_ref <  rn_wdmin1 ) THEN  ! if total depth is less than min depth 
    468                            sshb(ji,jj) = rn_wdmin1 - (ht_0(ji,jj) ) 
    469                            sshn(ji,jj) = rn_wdmin1 - (ht_0(ji,jj) ) 
    470                            ssha(ji,jj) = rn_wdmin1 - (ht_0(ji,jj) ) 
     467                           ssh(ji,jj,Nbb) = rn_wdmin1 - (ht_0(ji,jj) ) 
     468                           ssh(ji,jj,Nnn) = rn_wdmin1 - (ht_0(ji,jj) ) 
     469                           ssh(ji,jj,Naa) = rn_wdmin1 - (ht_0(ji,jj) ) 
    471470                        ENDIF 
    472471                     END DO 
     
    485484               ! 
    486485               ! Just to read set ssh in fact, called latter once vertical grid is set up: 
    487 !               CALL usr_def_istate( gdept_0, tmask, tsb, ub, vb, sshb  ) 
    488                sshn(:,:) = 0._wp 
    489                sshb(:,:) = 0._wp 
     486!               CALL usr_def_istate( gdept_0, tmask, tsb, ub, vb, ssh(:,:,Nbb)  ) 
     487               ssh(:,:,Nnn) = 0._wp 
     488               ssh(:,:,Nbb) = 0._wp 
    490489               ! 
    491490            END IF 
     
    496495         !                                   ! =================== 
    497496 
    498 !!gm      DO NOTHING,   sshb and sshn  are written in restart.F90 
     497!!gm      DO NOTHING,   ssh(Nbb) and ssh(Nnn)  are written in restart.F90 
    499498 
    500499      ENDIF 
     
    594593      DO jj = 1, jpjm1                    ! start from 1 due to f-point 
    595594         DO ji = 1, jpim1 
    596             zsshu_h(ji,jj) = 0.50_wp * ( sshn(ji  ,jj) + sshn(ji+1,jj  ) ) * ssumask(ji,jj) 
    597             zsshv_h(ji,jj) = 0.50_wp * ( sshn(ji  ,jj) + sshn(ji  ,jj+1) ) * ssvmask(ji,jj) 
    598             zsshf_h(ji,jj) = 0.25_wp * ( sshn(ji  ,jj) + sshn(ji  ,jj+1)   &  
    599                &                       + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) * ssfmask(ji,jj) 
     595            zsshu_h(ji,jj) = 0.50_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji+1,jj  ,Nnn) ) * ssumask(ji,jj) 
     596            zsshv_h(ji,jj) = 0.50_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji  ,jj+1,Nnn) ) * ssvmask(ji,jj) 
     597            zsshf_h(ji,jj) = 0.25_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji  ,jj+1,Nnn)   &  
     598               &                       + ssh(ji+1,jj,Nnn) + ssh(ji+1,jj+1,Nnn) ) * ssfmask(ji,jj) 
    600599         END DO 
    601600      END DO       
     
    604603      !                             !==  ht, hu and hv  == !   (and their inverse) 
    605604      ! 
    606       ht_n   (:,:) = ht_0(:,:) +  sshn  (:,:) 
     605      ht_n   (:,:) = ht_0(:,:) +  ssh   (:,:,Nnn) 
    607606      hu_n   (:,:) = hu_0(:,:) + zsshu_h(:,:) 
    608607      hv_n   (:,:) = hv_0(:,:) + zsshv_h(:,:) 
     
    612611      !                             !==  ssh / h  factor at t-, u- ,v- & f-points  ==! 
    613612      ! 
    614       zssht_h(:,:) =  sshn  (:,:) * r1_ht_0(:,:) 
    615       zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) 
    616       zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) 
    617       zsshf_h(:,:) = zsshf_h(:,:) * r1_hf_0(:,:) 
     613      zssht_h(:,:) =  ssh   (:,:,Nnn) * r1_ht_0(:,:) 
     614      zsshu_h(:,:) = zsshu_h(:,:)     * r1_hu_0(:,:) 
     615      zsshv_h(:,:) = zsshv_h(:,:)     * r1_hv_0(:,:) 
     616      zsshf_h(:,:) = zsshf_h(:,:)     * r1_hf_0(:,:) 
    618617      ! 
    619618      !                             !==  e3t, e3w  ,  e3u, e3uw ,  e3v, e3vw  , and e3f  ==! 
    620619      !       
    621620      DO jk = 1, jpkm1 
    622           e3t_n(:,:,jk) =  e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
    623           e3w_n(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
     621          e3t_n(:,:,jk) =  e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) *      tmask(:,:,jk)                    ) 
     622          e3w_n(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 
    624623          ! 
    625624          e3u_n(:,:,jk) =  e3u_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) *  umask(:,:,jk) ) 
     
    634633      !                             !== depth of t- and w-points  ==! 
    635634      ! 
    636       zssht_h(:,:) = 1._wp + zssht_h(:,:)     ! = 1 + sshn / ht_0 
     635      zssht_h(:,:) = 1._wp + zssht_h(:,:)     ! = 1 + ssh(Nnn) / ht_0 
    637636      ! 
    638637      IF( ln_isfcav ) THEN    ! ISF cavities : ssh scaling not applied over the iceshelf thickness  
     
    640639            gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 
    641640            gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 
    642             gde3w_n(:,:,jk) =   gdept_n(:,:,jk) - sshn(:,:) 
     641            gde3w_n(:,:,jk) =   gdept_n(:,:,jk) - ssh(:,:,Nnn) 
    643642         END DO 
    644643      ELSE                    ! no ISF cavities 
     644!!gm BUG ???    gdept should be updated down to the ocean floor !  ===>> jpk NOT jpkm1 !!! 
    645645         DO jk = 1, jpkm1 
    646646            gdept_n(:,:,jk) = gdept_0(:,:,jk) * zssht_h(:,:) 
    647647            gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * zssht_h(:,:) 
    648             gde3w_n(:,:,jk) = gdept_n(:,:,jk) - sshn(:,:) 
     648            gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 
    649649         END DO 
    650650      ENDIF 
     
    664664      DO jj = 2, jpjm1 
    665665         DO ji = 2, jpim1 
    666             zsshu_h(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji+1,jj  ) ) * ssumask(ji,jj) 
    667             zsshv_h(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji  ,jj+1) ) * ssvmask(ji,jj) 
     666            zsshu_h(ji,jj) = 0.5_wp  * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj  ,Nbb) ) * ssumask(ji,jj) 
     667            zsshv_h(ji,jj) = 0.5_wp  * ( ssh(ji,jj,Nbb) + ssh(ji  ,jj+1,Nbb) ) * ssvmask(ji,jj) 
    668668         END DO 
    669669      END DO       
     
    678678      !       
    679679      !                             !==  ssh / h  factor at t-, u- ,v- & f-points  ==! 
    680       zssht_h(:,:) = sshb (:,:) * r1_ht_0(:,:) 
    681       zsshu_h   (:,:) = zsshu_h(:,:) * r1_hu_0(:,:) 
    682       zsshv_h   (:,:) = zsshv_h(:,:) * r1_hv_0(:,:) 
     680      zssht_h(:,:) = ssh    (:,:,Nbb) * r1_ht_0(:,:) 
     681      zsshu_h(:,:) = zsshu_h(:,:)    * r1_hu_0(:,:) 
     682      zsshv_h(:,:) = zsshv_h(:,:)    * r1_hv_0(:,:) 
    683683      ! 
    684684      !                             !==  e3t, e3w  ,  e3u, e3uw , and  e3v, e3vw  ==! 
    685685      DO jk = 1, jpkm1 
    686           e3t_b(:,:,jk) =  e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
    687           e3w_b(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
     686          e3t_b(:,:,jk) =  e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) *      tmask(:,:,jk)                    ) 
     687          e3w_b(:,:,jk) =  e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 
    688688          ! 
    689689          e3u_b(:,:,jk) =  e3u_0(:,:,jk) * ( 1._wp + zsshu_h  (:,:) *  umask(:,:,jk) ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/iscplhsb.F90

    r9598 r10009  
    8787      ! diagnose the heat, salt and volume input and compute the correction variable 
    8888      !============================================================================== 
    89  
    9089      !  
    91       zdssh(:,:) = sshn(:,:) * ssmask(:,:) - sshb(:,:) * psmask_b(:,:) 
    92       IF (.NOT. ln_linssh ) zdssh = 0.0_wp ! already included in the levels by definition 
    93        
     90      zdssh(:,:) = ssh(:,:,Nnn) * ssmask(:,:) - ssh(:,:,Nbb) * psmask_b(:,:) 
     91      IF (.NOT. ln_linssh )   zdssh = 0._wp    ! already included in the levels by definition 
     92      ! 
    9493      DO jk = 1,jpk-1 
    9594         DO jj = 2,jpj-1 
    9695            DO ji = fs_2,fs_jpim1 
    97                IF (tmask_h(ji,jj) == 1._wp) THEN 
    98  
    99                   ! volume differences 
     96               IF ( tmask_h(ji,jj) == 1._wp ) THEN 
     97                  ! 
     98                  !                                   ! volume differences 
    10099                  zde3t = e3t_n(ji,jj,jk) * tmask(ji,jj,jk) - pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 
    101100 
    102                   ! heat diff 
    103                   zdtem = tsn(ji,jj,jk,jp_tem) * e3t_n(ji,jj,jk) *  tmask  (ji,jj,jk)   & 
    104                         - tsb(ji,jj,jk,jp_tem) * pe3t_b (ji,jj,jk) * ptmask_b(ji,jj,jk) 
    105                   ! salt diff 
    106                   zdsal = tsn(ji,jj,jk,jp_sal) * e3t_n(ji,jj,jk) *  tmask  (ji,jj,jk)   & 
    107                         - tsb(ji,jj,jk,jp_sal) * pe3t_b (ji,jj,jk) * ptmask_b(ji,jj,jk) 
    108                 
    109                   ! shh changes 
     101                  !                                   ! heat diff 
     102                  zdtem = tsn(ji,jj,jk,jp_tem) *  e3t_n(ji,jj,jk) *  tmask  (ji,jj,jk)   & 
     103                        - tsb(ji,jj,jk,jp_tem) * pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 
     104                  !                                   ! salt diff 
     105                  zdsal = tsn(ji,jj,jk,jp_sal) *  e3t_n(ji,jj,jk) *  tmask  (ji,jj,jk)   & 
     106                        - tsb(ji,jj,jk,jp_sal) * pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 
     107                  !                                   ! shh changes 
    110108                  IF ( ptmask_b(ji,jj,jk) == 1._wp .OR. tmask(ji,jj,jk) == 1._wp ) THEN  
    111                      zde3t = zde3t + zdssh(ji,jj) ! zdssh = 0 if vvl 
     109                     zde3t = zde3t + zdssh(ji,jj)     ! zdssh = 0 if vvl 
    112110                     zdssh(ji,jj) = 0._wp 
    113111                  END IF 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/iscplrst.F90

    r10001 r10009  
    4444      !!  
    4545      !! ** Purpose : compute initialisation 
    46       !!              compute extrapolation of restart variable un, vn, tsn, sshn (wetting/drying)    
     46      !!              compute extrapolation of restart variable un, vn, tsn, ssh(Nnn) (wetting/drying)    
    4747      !!              compute correction term if needed 
    4848      !!  
     
    9191      ! 
    9292      !                       ! set _b and _n variables equal 
    93       tsb (:,:,:,:) = tsn (:,:,:,:) 
    94       ub  (:,:,:)   = un (:,:,:) 
    95       vb  (:,:,:)   = vn (:,:,:) 
    96       sshb(:,:)     = sshn(:,:) 
     93      tsb(:,:,:,:) = tsn(:,:,:,:) 
     94      ub (:,:,:)   = un (:,:,:) 
     95      vb (:,:,:)   = vn (:,:,:) 
     96      ssh(:,:,Nbb) = ssh(:,:,Nnn) 
    9797      ! 
    9898      !                       ! set _b and _n vertical scale factor equal 
     
    117117      !!                   ***  ROUTINE iscpl_rst_interpol  *** 
    118118      !!  
    119       !! ** Purpose :   compute new tn, sn, un, vn and sshn in case of evolving geometry of ice shelves  
     119      !! ** Purpose :   compute new tn, sn, un, vn and ssh(Nnn) in case of evolving geometry of ice shelves  
    120120      !!                compute 2d fields of heat, salt and volume correction 
    121121      !!  
     
    155155      !     
    156156      !                 ! compute new ssh if we open a full water column (average of the closest neigbourgs)   
    157       sshb (:,:)=sshn(:,:) 
    158       zssh0(:,:)=sshn(:,:) 
    159       zsmask0(:,:) = psmask_b(:,:) 
    160       zsmask1(:,:) = psmask_b(:,:) 
     157      ssh  (:,:,Nbb) = ssh(:,:,Nnn) 
     158      zssh0(:,:)     = ssh(:,:,Nnn) 
     159      zsmask0(:,:)   = psmask_b(:,:) 
     160      zsmask1(:,:)   = psmask_b(:,:) 
    161161      DO iz = 1, 10                 ! need to be tuned (configuration dependent) (OK for ISOMIP+) 
    162162         zdsmask(:,:) = ssmask(:,:)-zsmask0(:,:) 
     
    165165               summsk = zsmask0(ji+1,jj)+zsmask0(ji-1,jj)+zsmask0(ji,jj+1)+zsmask0(ji,jj-1) 
    166166               IF (zdsmask(ji,jj) == 1._wp .AND. summsk /= 0._wp) THEN 
    167                   sshn(ji,jj)=( zssh0(ji+1,jj)*zsmask0(ji+1,jj)     & 
    168                   &           + zssh0(ji-1,jj)*zsmask0(ji-1,jj)     & 
    169                   &           + zssh0(ji,jj+1)*zsmask0(ji,jj+1)     & 
    170                   &           + zssh0(ji,jj-1)*zsmask0(ji,jj+1)) / summsk 
     167                  ssh(ji,jj,Nnn)=( zssh0(ji+1,jj)*zsmask0(ji+1,jj)     & 
     168                  &              + zssh0(ji-1,jj)*zsmask0(ji-1,jj)     & 
     169                  &              + zssh0(ji,jj+1)*zsmask0(ji,jj+1)     & 
     170                  &              + zssh0(ji,jj-1)*zsmask0(ji,jj+1)) / summsk 
    171171                  zsmask1(ji,jj) = 1._wp 
    172172               ENDIF 
    173173            END DO 
    174174         END DO 
    175          CALL lbc_lnk_multi( sshn, 'T', 1., zsmask1, 'T', 1. ) 
    176          zssh0   = sshn 
     175         CALL lbc_lnk_multi( ssh(:,:,Nnn), 'T', 1., zsmask1, 'T', 1. ) 
     176         zssh0(:,:) = ssh(:,:,Nnn) 
    177177         zsmask0 = zsmask1 
    178178      END DO 
    179       sshn(:,:) = sshn(:,:) * ssmask(:,:) 
     179      ssh(:,:,Nnn) = ssh(:,:,Nnn) * ssmask(:,:) 
    180180 
    181181!============================================================================= 
     
    201201               IF ( tmask(ji,jj,1) == 0._wp .OR. ptmask_b(ji,jj,1) == 0._wp ) THEN 
    202202                  DO jk = 1, jpk 
    203                      e3t_n(ji,jj,jk) = e3t_0(ji,jj,jk) * ( 1._wp + sshn(ji,jj) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) ) 
     203                     e3t_n(ji,jj,jk) = e3t_0(ji,jj,jk) * ( 1._wp + ssh(ji,jj,Nnn) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) ) 
    204204                  END DO 
    205205               ENDIF 
     
    214214         !                                            !* ssh at u- and v-points) 
    215215         DO jj = 1, jpjm1   ;   DO ji = 1, jpim1            ! start from 1 due to f-point 
    216             zsshu(ji,jj) = 0.5_wp  * ( sshn(ji  ,jj) + sshn(ji+1,jj  ) ) * ssumask(ji,jj) 
    217             zsshv(ji,jj) = 0.5_wp  * ( sshn(ji  ,jj) + sshn(ji  ,jj+1) ) * ssvmask(ji,jj) 
    218             zsshf(ji,jj) = 0.25_wp * ( sshn(ji  ,jj) + sshn(ji  ,jj+1)   &  
    219                &                     + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) * ssfmask(ji,jj) 
     216            zsshu(ji,jj) = 0.5_wp  * ( ssh(ji  ,jj,Nnn) + ssh(ji+1,jj  ,Nnn) ) * ssumask(ji,jj) 
     217            zsshv(ji,jj) = 0.5_wp  * ( ssh(ji  ,jj,Nnn) + ssh(ji  ,jj+1,Nnn) ) * ssvmask(ji,jj) 
     218            zsshf(ji,jj) = 0.25_wp * ( ssh(ji  ,jj,Nnn) + ssh(ji  ,jj+1,Nnn)   &  
     219               &                     + ssh(ji+1,jj,Nnn) + ssh(ji+1,jj+1,Nnn) ) * ssfmask(ji,jj) 
    220220         END DO             ;   END DO       
    221221         CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp , zsshf(:,:),'F', 1._wp ) 
    222222         ! 
    223223         !                                            !* hu and hv (and their inverse)  
    224          ht_n   (:,:) = ht_0(:,:) +  sshn(:,:) 
     224         ht_n   (:,:) = ht_0(:,:) +  ssh (:,:,Nnn) 
    225225         hu_n   (:,:) = hu_0(:,:) + zsshu(:,:) 
    226226         hv_n   (:,:) = hv_0(:,:) + zsshv(:,:) 
     
    229229         ! 
    230230         !                                            !* e3u, e3uw  and  e3v, e3vw 
    231          z_ssh_h0(:,:) = sshn (:,:) * r1_ht_0(:,:)           ! t-point 
     231         z_ssh_h0(:,:) = ssh(:,:,Nnn) * r1_ht_0(:,:)         ! t-point 
    232232         DO jk = 1, jpkm1 
    233233            e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + z_ssh_h0(:,:) * tmask(:,:,jk) ) 
     
    248248         END DO 
    249249 
    250          z_ssh_h0(:,:) = 1._wp + sshn(:,:) * r1_ht_0(:,:)    ! t-point 
     250         z_ssh_h0(:,:) = 1._wp + ssh(:,:,Nnn) * r1_ht_0(:,:)    ! t-point 
    251251         ! 
    252252         IF( ln_isfcav ) THEN    ! iceshelf cavities : ssh scaling not applied over the iceshelf thickness  
     
    254254               gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * z_ssh_h0(:,:) + risfdep(:,:) 
    255255               gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * z_ssh_h0(:,:) + risfdep(:,:) 
    256                gde3w_n(:,:,jk) = gdept_n(:,:,jk) - sshn(:,:) 
     256               gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 
    257257            END DO 
    258258         ELSE 
     
    260260               gdept_n(:,:,jk) = gdept_0(:,:,jk) * z_ssh_h0(:,:) 
    261261               gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * z_ssh_h0(:,:) 
    262                gde3w_n(:,:,jk) = gdept_n(:,:,jk) - sshn(:,:) 
     262               gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 
    263263            END DO 
    264264         ENDIF 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/istate.F90

    r9939 r10009  
    9999            CALL dta_tsd( nit000, tsb )       ! read 3D T and S data at nit000 
    100100            ! 
    101             sshb(:,:)   = 0._wp               ! set the ocean at rest 
    102             ub  (:,:,:) = 0._wp 
    103             vb  (:,:,:) = 0._wp   
     101            ssh(:,:,Nbb) = 0._wp              ! set the ocean at rest 
     102            ub (:,:,:)  = 0._wp 
     103            vb (:,:,:)  = 0._wp   
    104104            ! 
    105105         ELSE                                 ! user defined initial T and S 
    106             CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, sshb )          
     106            CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, ssh(:,:,Nbb) )          
    107107         ENDIF 
    108          tsn  (:,:,:,:) = tsb (:,:,:,:)       ! set now values from to before ones 
    109          sshn (:,:)     = sshb(:,:)    
    110          un   (:,:,:)   = ub  (:,:,:) 
    111          vn   (:,:,:)   = vb  (:,:,:) 
     108         tsn  (:,:,:,:) = tsb(:,:,:,:)       ! set now values from to before ones 
     109         ssh  (:,:,Nnn) = ssh(:,:,Nbb) 
     110         un   (:,:,:)   = ub (:,:,:) 
     111         vn   (:,:,:)   = vb (:,:,:) 
    112112         hdivn(:,:,jpk) = 0._wp               ! bottom divergence set one for 0 to zero at jpk level 
    113113         CALL div_hor( 0 )                    ! compute interior hdivn value   
     
    115115 
    116116!!gm POTENTIAL BUG : 
    117 !!gm  ISSUE :  if sshb /= 0  then, in non linear free surface, the e3._n, e3._b should be recomputed 
     117!!gm  ISSUE :  if ssh(Nbb) /= 0  then, in non linear free surface, the e3._n, e3._b should be recomputed 
    118118!!             as well as gdept and gdepw....   !!!!!  
    119119!!      ===>>>>   probably a call to domvvl initialisation here.... 
     
    131131         ! 
    132132!!gm This is to be changed !!!! 
    133 !         ! - ML - sshn could be modified by istate_eel, so that initialization of e3t_b is done here 
     133!         ! - ML - ssh(Nnn) could be modified by istate_eel, so that initialization of e3t_b is done here 
    134134!         IF( .NOT.ln_linssh ) THEN 
    135135!            DO jk = 1, jpk 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/restart.F90

    r9939 r10009  
    155155         CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lwxios ) 
    156156         CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lwxios ) 
    157          CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb             , ldxios = lwxios ) 
     157         CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , ssh(:,:,Nbb)     , ldxios = lwxios ) 
    158158         ! 
    159159         CALL iom_rstput( kt, nitrst, numrow, 'un'     , un               , ldxios = lwxios )     ! now fields 
     
    161161         CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lwxios ) 
    162162         CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lwxios ) 
    163          CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn             , ldxios = lwxios ) 
     163         CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , ssh(:,:,Nnn)     , ldxios = lwxios ) 
    164164         CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop             , ldxios = lwxios ) 
    165165         ! 
     
    281281       
    282282      IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0  .AND. .NOT.l_1st_euler ) THEN 
    283          CALL iom_get( numror, jpdom_autoglo, 'ub'     , ub, ldxios = lrxios                )   ! before fields 
    284          CALL iom_get( numror, jpdom_autoglo, 'vb'     , vb, ldxios = lrxios                ) 
    285          CALL iom_get( numror, jpdom_autoglo, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lrxios ) 
    286          CALL iom_get( numror, jpdom_autoglo, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lrxios ) 
    287          CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb, ldxios = lrxios              ) 
     283         CALL iom_get( numror, jpdom_autoglo, 'ub'  , ub               , ldxios = lrxios )   ! before fields 
     284         CALL iom_get( numror, jpdom_autoglo, 'vb'  , vb               , ldxios = lrxios ) 
     285         CALL iom_get( numror, jpdom_autoglo, 'tb'  , tsb(:,:,:,jp_tem), ldxios = lrxios ) 
     286         CALL iom_get( numror, jpdom_autoglo, 'sb'  , tsb(:,:,:,jp_sal), ldxios = lrxios ) 
     287         CALL iom_get( numror, jpdom_autoglo, 'sshb', ssh(:,:,Nbb)     , ldxios = lrxios ) 
    288288      ELSE 
    289289         l_1st_euler =  .TRUE.      ! before field not found, forced euler 1st time-step 
    290290      ENDIF 
    291291      ! 
    292       CALL iom_get( numror, jpdom_autoglo, 'un'     , un, ldxios = lrxios )   ! now    fields 
    293       CALL iom_get( numror, jpdom_autoglo, 'vn'     , vn, ldxios = lrxios ) 
     292      CALL iom_get( numror, jpdom_autoglo, 'un'     , un               , ldxios = lrxios )   ! now    fields 
     293      CALL iom_get( numror, jpdom_autoglo, 'vn'     , vn               , ldxios = lrxios ) 
    294294      CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lrxios ) 
    295295      CALL iom_get( numror, jpdom_autoglo, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lrxios ) 
    296       CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lrxios ) 
     296      CALL iom_get( numror, jpdom_autoglo, 'sshn'   , ssh(:,:,Nnn)     , ldxios = lrxios ) 
    297297      IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 
    298          CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop, ldxios = lrxios )   ! now    potential density 
     298         CALL iom_get( numror, jpdom_autoglo, 'rhop', rhop             , ldxios = lrxios )   ! now    potential density 
    299299      ELSE 
    300300         CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) )    
     
    302302      ! 
    303303      IF( l_1st_euler ) THEN              ! Euler restart 
    304          tsb (:,:,:,:) = tsn (:,:,:,:)          ! all before fields set to now values 
    305          ub  (:,:,:)   = un (:,:,:) 
    306          vb  (:,:,:)   = vn (:,:,:) 
    307          sshb(:,:)     = sshn(:,:) 
     304         tsb(:,:,:,:) = tsn(:,:,:,:)          ! all before fields set to now values 
     305         ub (:,:,:)   = un (:,:,:) 
     306         vb (:,:,:)   = vn (:,:,:) 
     307         ssh(:,:,Nbb) = ssh(:,:,Nnn) 
    308308         IF( .NOT.ln_linssh )   e3t_b(:,:,:) = e3t_n(:,:,:) 
    309309      ENDIF 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dyncor.F90

    r9939 r10009  
    1 MODULE dynvor 
     1MODULE dyncor 
    22   !!====================================================================== 
    3    !!                       ***  MODULE  dynvor  *** 
    4    !! Ocean dynamics: Update the momentum trend with the relative and 
    5    !!                 planetary vorticity trends 
     3   !!                       ***  MODULE  dyncor  *** 
     4   !! Ocean dynamics: Update the momentum trend with the planetary vorticity trends 
    65   !!====================================================================== 
    7    !! History :  OPA  ! 1989-12  (P. Andrich)  vor_ens: Original code 
    8    !!            5.0  ! 1991-11  (G. Madec)  vor_ene, vor_mix: Original code 
    9    !!            6.0  ! 1996-01  (G. Madec)  s-coord, suppress work arrays 
    10    !!   NEMO     0.5  ! 2002-08  (G. Madec)  F90: Free form and module 
    11    !!            1.0  ! 2004-02  (G. Madec)  vor_een: Original code 
    12    !!             -   ! 2003-08  (G. Madec)  add vor_ctl 
    13    !!             -   ! 2005-11  (G. Madec)  add dyn_vor (new step architecture) 
    14    !!            2.0  ! 2006-11  (G. Madec)  flux form advection: add metric term 
    15    !!            3.2  ! 2009-04  (R. Benshila)  vvl: correction of een scheme 
    16    !!            3.3  ! 2010-10  (C. Ethe, G. Madec)  reorganisation of initialisation phase 
    17    !!            3.7  ! 2014-04  (G. Madec)  trend simplification: suppress jpdyn_trd_dat vorticity  
    18    !!             -   ! 2014-06  (G. Madec)  suppression of velocity curl from in-core memory 
    19    !!             -   ! 2016-12  (G. Madec, E. Clementi) add Stokes-Coriolis trends (ln_stcor=T) 
    20    !!            4.0  ! 2017-07  (G. Madec)  linear dynamics + trends diag. with Stokes-Coriolis 
    21    !!             -   ! 2018-03  (G. Madec)  add two new schemes (ln_dynvor_enT and ln_dynvor_eet) 
    22    !!             -   ! 2018-04  (G. Madec)  add pre-computed gradient for metric term calculation 
    23    !!---------------------------------------------------------------------- 
    24  
    25    !!---------------------------------------------------------------------- 
    26    !!   dyn_vor       : Update the momentum trend with the vorticity trend 
     6   !! History :  5.0  ! 2018-07  (G. Madec)  Coriolis trend for Flux Form 
     7   !!---------------------------------------------------------------------- 
     8 
     9   !!---------------------------------------------------------------------- 
     10   !!   dyn_cor       : Update the momentum trend with the vorticity trend 
    2711   !!       vor_ens   : enstrophy conserving scheme       (ln_dynvor_ens=T) 
    2812   !!       vor_ene   : energy conserving scheme          (ln_dynvor_ene=T) 
    2913   !!       vor_een   : energy and enstrophy conserving   (ln_dynvor_een=T) 
    30    !!   dyn_vor_init  : set and control of the different vorticity option 
     14   !!   dyn_cor_init  : set and control of the different vorticity option 
    3115   !!---------------------------------------------------------------------- 
    3216   USE oce            ! ocean dynamics and tracers 
     
    4832   PRIVATE 
    4933 
    50    PUBLIC   dyn_vor        ! routine called by step.F90 
    51    PUBLIC   dyn_vor_init   ! routine called by nemogcm.F90 
     34   PUBLIC   dyn_cor        ! routine called by step.F90 
     35   PUBLIC   dyn_cor_init   ! routine called by nemogcm.F90 
    5236 
    5337   !                                   !!* Namelist namdyn_vor: vorticity term 
     
    9680CONTAINS 
    9781 
    98    SUBROUTINE dyn_vor( kt ) 
     82   SUBROUTINE dyn_cor( kt ) 
    9983      !!---------------------------------------------------------------------- 
    10084      !! 
     
    11195      !!---------------------------------------------------------------------- 
    11296      ! 
    113       IF( ln_timing )   CALL timing_start('dyn_vor') 
     97      IF( ln_timing )   CALL timing_start('dyn_cor') 
    11498      ! 
    11599      IF( l_trddyn ) THEN     !==  trend diagnostics case : split the added trend in two parts  ==! 
     
    119103         ztrdu(:,:,:) = ua(:,:,:)            !* planetary vorticity trend (including Stokes-Coriolis force) 
    120104         ztrdv(:,:,:) = va(:,:,:) 
    121          SELECT CASE( nvor_scheme ) 
    122          CASE( np_ENS )           ;   CALL vor_ens( kt, ncor, un , vn , ua, va )   ! enstrophy conserving scheme 
    123             IF( ln_stcor )            CALL vor_ens( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    124          CASE( np_ENE, np_MIX )   ;   CALL vor_ene( kt, ncor, un , vn , ua, va )   ! energy conserving scheme 
    125             IF( ln_stcor )            CALL vor_ene( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    126          CASE( np_ENT )           ;   CALL vor_enT( kt, ncor, un , vn , ua, va )   ! energy conserving scheme (T-pts) 
    127             IF( ln_stcor )            CALL vor_enT( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    128          CASE( np_EET )           ;   CALL vor_eeT( kt, ncor, un , vn , ua, va )   ! energy conserving scheme (een with e3t) 
    129             IF( ln_stcor )            CALL vor_eeT( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    130          CASE( np_EEN )           ;   CALL vor_een( kt, ncor, un , vn , ua, va )   ! energy & enstrophy scheme 
    131             IF( ln_stcor )            CALL vor_een( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    132          END SELECT 
     105 
     106         CALL cor_ene( kt, ncor, un , vn , ua, va )   ! energy conserving scheme (T-pts) 
     107 
    133108         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    134109         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    138113            ztrdu(:,:,:) = ua(:,:,:) 
    139114            ztrdv(:,:,:) = va(:,:,:) 
    140             SELECT CASE( nvor_scheme ) 
    141             CASE( np_ENT )           ;   CALL vor_enT( kt, nrvm, un , vn , ua, va )  ! energy conserving scheme (T-pts) 
    142             CASE( np_EET )           ;   CALL vor_eeT( kt, nrvm, un , vn , ua, va )  ! energy conserving scheme (een with e3t) 
    143             CASE( np_ENE )           ;   CALL vor_ene( kt, nrvm, un , vn , ua, va )  ! energy conserving scheme 
    144             CASE( np_ENS, np_MIX )   ;   CALL vor_ens( kt, nrvm, un , vn , ua, va )  ! enstrophy conserving scheme 
    145             CASE( np_EEN )           ;   CALL vor_een( kt, nrvm, un , vn , ua, va )  ! energy & enstrophy scheme 
    146             END SELECT 
     115            CALL cor_ene( kt, nrvm, un , vn , ua, va )  ! energy conserving scheme (T-pts) 
    147116            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    148117            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    152121         DEALLOCATE( ztrdu, ztrdv ) 
    153122         ! 
    154       ELSE              !==  total vorticity trend added to the general trend  ==! 
    155          ! 
    156          SELECT CASE ( nvor_scheme )      !==  vorticity trend added to the general trend  ==! 
    157          CASE( np_ENT )                        !* energy conserving scheme  (T-pts) 
    158                              CALL vor_enT( kt, ntot, un , vn , ua, va )   ! total vorticity trend 
    159             IF( ln_stcor )   CALL vor_enT( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    160          CASE( np_EET )                        !* energy conserving scheme (een scheme using e3t) 
    161                              CALL vor_eeT( kt, ntot, un , vn , ua, va )   ! total vorticity trend 
    162             IF( ln_stcor )   CALL vor_eeT( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    163          CASE( np_ENE )                        !* energy conserving scheme 
    164                              CALL vor_ene( kt, ntot, un , vn , ua, va )   ! total vorticity trend 
    165             IF( ln_stcor )   CALL vor_ene( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    166          CASE( np_ENS )                        !* enstrophy conserving scheme 
    167                              CALL vor_ens( kt, ntot, un , vn , ua, va )  ! total vorticity trend 
    168             IF( ln_stcor )   CALL vor_ens( kt, ncor, usd, vsd, ua, va )  ! add the Stokes-Coriolis trend 
    169          CASE( np_MIX )                        !* mixed ene-ens scheme 
    170                              CALL vor_ens( kt, nrvm, un , vn , ua, va )   ! relative vorticity or metric trend (ens) 
    171                              CALL vor_ene( kt, ncor, un , vn , ua, va )   ! planetary vorticity trend (ene) 
    172             IF( ln_stcor )   CALL vor_ene( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    173          CASE( np_EEN )                        !* energy and enstrophy conserving scheme 
    174                              CALL vor_een( kt, ntot, un , vn , ua, va )   ! total vorticity trend 
    175             IF( ln_stcor )   CALL vor_een( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    176          END SELECT 
     123      ELSE              !==  Coriolis (+metric) trend added to the general trend  ==! 
     124         ! 
     125         !                    !* energy conserving scheme  (T-pts) 
     126         IF( ln_stcor )   CALL cor_ene( kt, ntot, usd, vsd , ua, va )   !  Stokes drift 
     127                          CALL cor_ene( kt, ncor, un , vn  , ua, va )   !   
    177128         ! 
    178129      ENDIF 
     
    182133         &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    183134      ! 
    184       IF( ln_timing )   CALL timing_stop('dyn_vor') 
    185       ! 
    186    END SUBROUTINE dyn_vor 
    187  
    188  
    189    SUBROUTINE vor_enT( kt, kvor, pu, pv, pu_rhs, pv_rhs ) 
     135      IF( ln_timing )   CALL timing_stop('dyn_cor') 
     136      ! 
     137   END SUBROUTINE dyn_cor 
     138 
     139 
     140   SUBROUTINE cor_ene( kt, kvor, pu, pv, pu_rhs, pv_rhs ) 
    190141      !!---------------------------------------------------------------------- 
    191142      !!                  ***  ROUTINE vor_enT  *** 
    192143      !! 
    193       !! ** Purpose :   Compute the now total vorticity trend and add it to  
    194       !!      the general trend of the momentum equation. 
     144      !! ** Purpose :   Compute the now Coriolis (+ metric term) trend and  
     145      !!      add it to the general trend of the momentum equation. 
    195146      !! 
    196147      !! ** Method  :   Trend evaluated using now fields (centered in time)  
     
    228179         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    229180            zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t_n(:,:,jk) 
    230          CASE ( np_RVO )                           !* relative vorticity 
    231             DO jj = 1, jpjm1 
    232                DO ji = 1, jpim1 
    233                   zwz(ji,jj) = (  e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    234                      &          - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    235                END DO 
    236             END DO 
    237             IF( ln_dynvor_msk ) THEN                     ! mask/unmask relative vorticity  
    238                DO jj = 1, jpjm1 
    239                   DO ji = 1, jpim1 
    240                      zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    241                   END DO 
    242                END DO 
    243             ENDIF 
    244             CALL lbc_lnk( zwz, 'F', 1. ) 
    245             DO jj = 2, jpj 
    246                DO ji = 2, jpi   ! vector opt. 
    247                   zwt(ji,jj) = r1_4 * (   zwz(ji-1,jj  ) + zwz(ji,jj  )   & 
    248                      &                  + zwz(ji-1,jj-1) + zwz(ji,jj-1)   ) * e1e2t(ji,jj)*e3t_n(ji,jj,jk) 
    249                END DO 
    250             END DO 
    251181         CASE ( np_MET )                           !* metric term 
    252182            DO jj = 2, jpj 
     
    254184                  zwt(ji,jj) = (   ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj)   & 
    255185                     &           - ( pu(ji,jj,jk) + pu(ji-1,jj,jk) ) * dj_e1v_2(ji,jj)   ) * e3t_n(ji,jj,jk) 
    256                END DO 
    257             END DO 
    258          CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    259             DO jj = 1, jpjm1 
    260                DO ji = 1, jpim1                          ! relative vorticity 
    261                   zwz(ji,jj) = (   e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)   & 
    262                      &           - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)   ) * r1_e1e2f(ji,jj) 
    263                END DO 
    264             END DO 
    265             IF( ln_dynvor_msk ) THEN                     ! mask/unmask relative vorticity  
    266                DO jj = 1, jpjm1 
    267                   DO ji = 1, jpim1 
    268                      zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    269                   END DO 
    270                END DO 
    271             ENDIF 
    272             CALL lbc_lnk( zwz, 'F', 1. ) 
    273             DO jj = 2, jpj 
    274                DO ji = 2, jpi   ! vector opt. 
    275                   zwt(ji,jj) = (  ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj  ) + zwz(ji,jj  )    & 
    276                      &                                 + zwz(ji-1,jj-1) + zwz(ji,jj-1) )  ) * e1e2t(ji,jj)*e3t_n(ji,jj,jk) 
    277186               END DO 
    278187            END DO 
     
    304213      END DO                                           !   End of slab 
    305214      !                                                ! =============== 
    306    END SUBROUTINE vor_enT 
    307  
    308  
    309    SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 
    310       !!---------------------------------------------------------------------- 
    311       !!                  ***  ROUTINE vor_ene  *** 
    312       !! 
    313       !! ** Purpose :   Compute the now total vorticity trend and add it to  
    314       !!      the general trend of the momentum equation. 
    315       !! 
    316       !! ** Method  :   Trend evaluated using now fields (centered in time)  
    317       !!       and the Sadourny (1975) flux form formulation : conserves the 
    318       !!       horizontal kinetic energy. 
    319       !!         The general trend of momentum is increased due to the vorticity  
    320       !!       term which is given by: 
    321       !!          voru = 1/e1u  mj-1[ (rvor+f)/e3f  mi(e1v*e3v vn) ] 
    322       !!          vorv = 1/e2v  mi-1[ (rvor+f)/e3f  mj(e2u*e3u un) ] 
    323       !!       where rvor is the relative vorticity 
    324       !! 
    325       !! ** Action : - Update (ua,va) with the now vorticity term trend 
    326       !! 
    327       !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    328       !!---------------------------------------------------------------------- 
    329       INTEGER                         , INTENT(in   ) ::   kt          ! ocean time-step index 
    330       INTEGER                         , INTENT(in   ) ::   kvor        ! total, planetary, relative, or metric 
    331       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pun, pvn    ! now velocities 
    332       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pua, pva    ! total v-trend 
    333       ! 
    334       INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    335       REAL(wp) ::   zx1, zy1, zx2, zy2   ! local scalars 
    336       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! 2D workspace 
    337       !!---------------------------------------------------------------------- 
    338       ! 
    339       IF( kt == nit000 ) THEN 
    340          IF(lwp) WRITE(numout,*) 
    341          IF(lwp) WRITE(numout,*) 'dyn:vor_ene : vorticity term: energy conserving scheme' 
    342          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    343       ENDIF 
    344       ! 
    345       !                                                ! =============== 
    346       DO jk = 1, jpkm1                                 ! Horizontal slab 
    347          !                                             ! =============== 
    348          ! 
    349          SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    350          CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    351             zwz(:,:) = ff_f(:,:)  
    352          CASE ( np_RVO )                           !* relative vorticity 
    353             DO jj = 1, jpjm1 
    354                DO ji = 1, fs_jpim1   ! vector opt. 
    355                   zwz(ji,jj) = (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
    356                      &          - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    357                END DO 
    358             END DO 
    359          CASE ( np_MET )                           !* metric term 
    360             DO jj = 1, jpjm1 
    361                DO ji = 1, fs_jpim1   ! vector opt. 
    362                   zwz(ji,jj) = ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    363                      &       - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    364                END DO 
    365             END DO 
    366          CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    367             DO jj = 1, jpjm1 
    368                DO ji = 1, fs_jpim1   ! vector opt. 
    369                   zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk)      & 
    370                      &                        - e1u(ji,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    371                END DO 
    372             END DO 
    373          CASE ( np_CME )                           !* Coriolis + metric 
    374             DO jj = 1, jpjm1 
    375                DO ji = 1, fs_jpim1   ! vector opt. 
    376                   zwz(ji,jj) = ff_f(ji,jj) + ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    377                      &                     - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    378                END DO 
    379             END DO 
    380          CASE DEFAULT                                             ! error 
    381             CALL ctl_stop('STOP','dyn_vor: wrong value for kvor'  ) 
    382          END SELECT 
    383          ! 
    384          IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    385             DO jj = 1, jpjm1 
    386                DO ji = 1, fs_jpim1   ! vector opt. 
    387                   zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    388                END DO 
    389             END DO 
    390          ENDIF 
    391  
    392          IF( ln_sco ) THEN 
    393             zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 
    394             zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
    395             zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    396          ELSE 
    397             zwx(:,:) = e2u(:,:) * pun(:,:,jk) 
    398             zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 
    399          ENDIF 
    400          !                                   !==  compute and add the vorticity term trend  =! 
    401          DO jj = 2, jpjm1 
    402             DO ji = fs_2, fs_jpim1   ! vector opt. 
    403                zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 
    404                zy2 = zwy(ji,jj  ) + zwy(ji+1,jj  ) 
    405                zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 
    406                zx2 = zwx(ji  ,jj) + zwx(ji  ,jj+1) 
    407                pua(ji,jj,jk) = pua(ji,jj,jk) + r1_4 * r1_e1u(ji,jj) * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    408                pva(ji,jj,jk) = pva(ji,jj,jk) - r1_4 * r1_e2v(ji,jj) * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 )  
    409             END DO   
    410          END DO   
    411          !                                             ! =============== 
    412       END DO                                           !   End of slab 
    413       !                                                ! =============== 
    414    END SUBROUTINE vor_ene 
    415  
    416  
    417    SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 
    418       !!---------------------------------------------------------------------- 
    419       !!                ***  ROUTINE vor_ens  *** 
    420       !! 
    421       !! ** Purpose :   Compute the now total vorticity trend and add it to 
    422       !!      the general trend of the momentum equation. 
    423       !! 
    424       !! ** Method  :   Trend evaluated using now fields (centered in time) 
    425       !!      and the Sadourny (1975) flux FORM formulation : conserves the 
    426       !!      potential enstrophy of a horizontally non-divergent flow. the 
    427       !!      trend of the vorticity term is given by: 
    428       !!          voru = 1/e1u  mj-1[ (rvor+f)/e3f ]  mj-1[ mi(e1v*e3v vn) ] 
    429       !!          vorv = 1/e2v  mi-1[ (rvor+f)/e3f ]  mi-1[ mj(e2u*e3u un) ] 
    430       !!      Add this trend to the general momentum trend (ua,va): 
    431       !!          (ua,va) = (ua,va) + ( voru , vorv ) 
    432       !! 
    433       !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 
    434       !! 
    435       !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    436       !!---------------------------------------------------------------------- 
    437       INTEGER                         , INTENT(in   ) ::   kt          ! ocean time-step index 
    438       INTEGER                         , INTENT(in   ) ::   kvor        ! total, planetary, relative, or metric 
    439       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pun, pvn    ! now velocities 
    440       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pua, pva    ! total v-trend 
    441       ! 
    442       INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    443       REAL(wp) ::   zuav, zvau   ! local scalars 
    444       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz, zww   ! 2D workspace 
    445       !!---------------------------------------------------------------------- 
    446       ! 
    447       IF( kt == nit000 ) THEN 
    448          IF(lwp) WRITE(numout,*) 
    449          IF(lwp) WRITE(numout,*) 'dyn:vor_ens : vorticity term: enstrophy conserving scheme' 
    450          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    451       ENDIF 
    452       !                                                ! =============== 
    453       DO jk = 1, jpkm1                                 ! Horizontal slab 
    454          !                                             ! =============== 
    455          ! 
    456          SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    457          CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    458             zwz(:,:) = ff_f(:,:)  
    459          CASE ( np_RVO )                           !* relative vorticity 
    460             DO jj = 1, jpjm1 
    461                DO ji = 1, fs_jpim1   ! vector opt. 
    462                   zwz(ji,jj) = (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
    463                      &          - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    464                END DO 
    465             END DO 
    466          CASE ( np_MET )                           !* metric term 
    467             DO jj = 1, jpjm1 
    468                DO ji = 1, fs_jpim1   ! vector opt. 
    469                   zwz(ji,jj) = ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    470                      &       - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    471                END DO 
    472             END DO 
    473          CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    474             DO jj = 1, jpjm1 
    475                DO ji = 1, fs_jpim1   ! vector opt. 
    476                   zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)  & 
    477                      &                        - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    478                END DO 
    479             END DO 
    480          CASE ( np_CME )                           !* Coriolis + metric 
    481             DO jj = 1, jpjm1 
    482                DO ji = 1, fs_jpim1   ! vector opt. 
    483                   zwz(ji,jj) = ff_f(ji,jj) + ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    484                      &                     - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    485                END DO 
    486             END DO 
    487          CASE DEFAULT                                             ! error 
    488             CALL ctl_stop('STOP','dyn_vor: wrong value for kvor'  ) 
    489          END SELECT 
    490          ! 
    491          IF( ln_dynvor_msk ) THEN           !==  mask/unmask vorticity ==! 
    492             DO jj = 1, jpjm1 
    493                DO ji = 1, fs_jpim1   ! vector opt. 
    494                   zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    495                END DO 
    496             END DO 
    497          ENDIF 
    498          ! 
    499          IF( ln_sco ) THEN                   !==  horizontal fluxes  ==! 
    500             zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 
    501             zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
    502             zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    503          ELSE 
    504             zwx(:,:) = e2u(:,:) * pun(:,:,jk) 
    505             zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 
    506          ENDIF 
    507          !                                   !==  compute and add the vorticity term trend  =! 
    508          DO jj = 2, jpjm1 
    509             DO ji = fs_2, fs_jpim1   ! vector opt. 
    510                zuav = r1_8 * r1_e1u(ji,jj) * (  zwy(ji  ,jj-1) + zwy(ji+1,jj-1)  & 
    511                   &                           + zwy(ji  ,jj  ) + zwy(ji+1,jj  )  ) 
    512                zvau =-r1_8 * r1_e2v(ji,jj) * (  zwx(ji-1,jj  ) + zwx(ji-1,jj+1)  & 
    513                   &                           + zwx(ji  ,jj  ) + zwx(ji  ,jj+1)  ) 
    514                pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    515                pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
    516             END DO   
    517          END DO   
    518          !                                             ! =============== 
    519       END DO                                           !   End of slab 
    520       !                                                ! =============== 
    521    END SUBROUTINE vor_ens 
    522  
    523  
    524    SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 
    525       !!---------------------------------------------------------------------- 
    526       !!                ***  ROUTINE vor_een  *** 
    527       !! 
    528       !! ** Purpose :   Compute the now total vorticity trend and add it to  
    529       !!      the general trend of the momentum equation. 
    530       !! 
    531       !! ** Method  :   Trend evaluated using now fields (centered in time)  
    532       !!      and the Arakawa and Lamb (1980) flux form formulation : conserves  
    533       !!      both the horizontal kinetic energy and the potential enstrophy 
    534       !!      when horizontal divergence is zero (see the NEMO documentation) 
    535       !!      Add this trend to the general momentum trend (ua,va). 
    536       !! 
    537       !! ** Action : - Update (ua,va) with the now vorticity term trend 
    538       !! 
    539       !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    540       !!---------------------------------------------------------------------- 
    541       INTEGER                         , INTENT(in   ) ::   kt          ! ocean time-step index 
    542       INTEGER                         , INTENT(in   ) ::   kvor        ! total, planetary, relative, or metric 
    543       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pun, pvn    ! now velocities 
    544       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pua, pva    ! total v-trend 
    545       ! 
    546       INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    547       INTEGER  ::   ierr         ! local integer 
    548       REAL(wp) ::   zua, zva     ! local scalars 
    549       REAL(wp) ::   zmsk, ze3f   ! local scalars 
    550       REAL(wp), DIMENSION(jpi,jpj) ::   zwx , zwy , zwz , z1_e3f 
    551       REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse 
    552       !!---------------------------------------------------------------------- 
    553       ! 
    554       IF( kt == nit000 ) THEN 
    555          IF(lwp) WRITE(numout,*) 
    556          IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 
    557          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    558       ENDIF 
    559       ! 
    560       !                                                ! =============== 
    561       DO jk = 1, jpkm1                                 ! Horizontal slab 
    562          !                                             ! =============== 
    563          ! 
    564          SELECT CASE( nn_een_e3f )           ! == reciprocal of e3 at F-point 
    565          CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    566             DO jj = 1, jpjm1 
    567                DO ji = 1, fs_jpim1   ! vector opt. 
    568                   ze3f = (  e3t_n(ji,jj+1,jk)*tmask(ji,jj+1,jk) + e3t_n(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk)   & 
    569                      &    + e3t_n(ji,jj  ,jk)*tmask(ji,jj  ,jk) + e3t_n(ji+1,jj  ,jk)*tmask(ji+1,jj  ,jk)  ) 
    570                   IF( ze3f /= 0._wp ) THEN   ;   z1_e3f(ji,jj) = 4._wp / ze3f 
    571                   ELSE                       ;   z1_e3f(ji,jj) = 0._wp 
    572                   ENDIF 
    573                END DO 
    574             END DO 
    575          CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    576             DO jj = 1, jpjm1 
    577                DO ji = 1, fs_jpim1   ! vector opt. 
    578                   ze3f = (  e3t_n(ji,jj+1,jk)*tmask(ji,jj+1,jk) + e3t_n(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk)   & 
    579                      &    + e3t_n(ji,jj  ,jk)*tmask(ji,jj  ,jk) + e3t_n(ji+1,jj  ,jk)*tmask(ji+1,jj  ,jk)  ) 
    580                   zmsk = (                    tmask(ji,jj+1,jk) +                     tmask(ji+1,jj+1,jk)   & 
    581                      &                      + tmask(ji,jj  ,jk) +                     tmask(ji+1,jj  ,jk)  ) 
    582                   IF( ze3f /= 0._wp ) THEN   ;   z1_e3f(ji,jj) = zmsk / ze3f 
    583                   ELSE                       ;   z1_e3f(ji,jj) = 0._wp 
    584                   ENDIF 
    585                END DO 
    586             END DO 
    587          END SELECT 
    588          ! 
    589          SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    590          CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    591             DO jj = 1, jpjm1 
    592                DO ji = 1, fs_jpim1   ! vector opt. 
    593                   zwz(ji,jj) = ff_f(ji,jj) * z1_e3f(ji,jj) 
    594                END DO 
    595             END DO 
    596          CASE ( np_RVO )                           !* relative vorticity 
    597             DO jj = 1, jpjm1 
    598                DO ji = 1, fs_jpim1   ! vector opt. 
    599                   zwz(ji,jj) = ( e2v(ji+1,jj  ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk)  & 
    600                      &         - e1u(ji  ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) 
    601                END DO 
    602             END DO 
    603          CASE ( np_MET )                           !* metric term 
    604             DO jj = 1, jpjm1 
    605                DO ji = 1, fs_jpim1   ! vector opt. 
    606                   zwz(ji,jj) = (   ( pvn(ji+1,jj,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    607                      &           - ( pun(ji,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
    608                END DO 
    609             END DO 
    610          CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    611             DO jj = 1, jpjm1 
    612                DO ji = 1, fs_jpim1   ! vector opt. 
    613                   zwz(ji,jj) = (  ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk)      & 
    614                      &                           - e1u(ji  ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  )   & 
    615                      &                        * r1_e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
    616                END DO 
    617             END DO 
    618          CASE ( np_CME )                           !* Coriolis + metric 
    619             DO jj = 1, jpjm1 
    620                DO ji = 1, fs_jpim1   ! vector opt. 
    621                   zwz(ji,jj) = (   ff_f(ji,jj) + ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    622                      &                         - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
    623                END DO 
    624             END DO 
    625          CASE DEFAULT                                             ! error 
    626             CALL ctl_stop('STOP','dyn_vor: wrong value for kvor'  ) 
    627          END SELECT 
    628          ! 
    629          IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    630             DO jj = 1, jpjm1 
    631                DO ji = 1, fs_jpim1   ! vector opt. 
    632                   zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    633                END DO 
    634             END DO 
    635          ENDIF 
    636          ! 
    637          CALL lbc_lnk( zwz, 'F', 1. ) 
    638          ! 
    639          !                                   !==  horizontal fluxes  ==! 
    640          zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
    641          zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    642  
    643          !                                   !==  compute and add the vorticity term trend  =! 
    644          jj = 2 
    645          ztne(1,:) = 0   ;   ztnw(1,:) = 0   ;   ztse(1,:) = 0   ;   ztsw(1,:) = 0 
    646          DO ji = 2, jpi          ! split in 2 parts due to vector opt. 
    647                ztne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    648                ztnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
    649                ztse(ji,jj) = zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) 
    650                ztsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
    651          END DO 
    652          DO jj = 3, jpj 
    653             DO ji = fs_2, jpi   ! vector opt. ok because we start at jj = 3 
    654                ztne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    655                ztnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
    656                ztse(ji,jj) = zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) 
    657                ztsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
    658             END DO 
    659          END DO 
    660          DO jj = 2, jpjm1 
    661             DO ji = fs_2, fs_jpim1   ! vector opt. 
    662                zua = + r1_12 * r1_e1u(ji,jj) * (  ztne(ji,jj  ) * zwy(ji  ,jj  ) + ztnw(ji+1,jj) * zwy(ji+1,jj  )   & 
    663                   &                             + ztse(ji,jj  ) * zwy(ji  ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    664                zva = - r1_12 * r1_e2v(ji,jj) * (  ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji  ,jj+1)   & 
    665                   &                             + ztnw(ji,jj  ) * zwx(ji-1,jj  ) + ztne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    666                pua(ji,jj,jk) = pua(ji,jj,jk) + zua 
    667                pva(ji,jj,jk) = pva(ji,jj,jk) + zva 
    668             END DO   
    669          END DO   
    670          !                                             ! =============== 
    671       END DO                                           !   End of slab 
    672       !                                                ! =============== 
    673    END SUBROUTINE vor_een 
    674  
    675  
    676  
    677    SUBROUTINE vor_eeT( kt, kvor, pun, pvn, pua, pva ) 
    678       !!---------------------------------------------------------------------- 
    679       !!                ***  ROUTINE vor_eeT  *** 
    680       !! 
    681       !! ** Purpose :   Compute the now total vorticity trend and add it to  
    682       !!      the general trend of the momentum equation. 
    683       !! 
    684       !! ** Method  :   Trend evaluated using now fields (centered in time)  
    685       !!      and the Arakawa and Lamb (1980) vector form formulation using  
    686       !!      a modified version of Arakawa and Lamb (1980) scheme (see vor_een). 
    687       !!      The change consists in  
    688       !!      Add this trend to the general momentum trend (ua,va). 
    689       !! 
    690       !! ** Action : - Update (ua,va) with the now vorticity term trend 
    691       !! 
    692       !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    693       !!---------------------------------------------------------------------- 
    694       INTEGER                         , INTENT(in   ) ::   kt          ! ocean time-step index 
    695       INTEGER                         , INTENT(in   ) ::   kvor        ! total, planetary, relative, or metric 
    696       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pun, pvn    ! now velocities 
    697       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pua, pva    ! total v-trend 
    698       ! 
    699       INTEGER  ::   ji, jj, jk     ! dummy loop indices 
    700       INTEGER  ::   ierr           ! local integer 
    701       REAL(wp) ::   zua, zva       ! local scalars 
    702       REAL(wp) ::   zmsk, z1_e3t   ! local scalars 
    703       REAL(wp), DIMENSION(jpi,jpj) ::   zwx , zwy , zwz 
    704       REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse 
    705       !!---------------------------------------------------------------------- 
    706       ! 
    707       IF( kt == nit000 ) THEN 
    708          IF(lwp) WRITE(numout,*) 
    709          IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 
    710          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    711       ENDIF 
    712       ! 
    713       !                                                ! =============== 
    714       DO jk = 1, jpkm1                                 ! Horizontal slab 
    715          !                                             ! =============== 
    716          ! 
    717          ! 
    718          SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    719          CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    720             DO jj = 1, jpjm1 
    721                DO ji = 1, fs_jpim1   ! vector opt. 
    722                   zwz(ji,jj) = ff_f(ji,jj) 
    723                END DO 
    724             END DO 
    725          CASE ( np_RVO )                           !* relative vorticity 
    726             DO jj = 1, jpjm1 
    727                DO ji = 1, fs_jpim1   ! vector opt. 
    728                   zwz(ji,jj) = (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
    729                      &          - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) & 
    730                      &       * r1_e1e2f(ji,jj) 
    731                END DO 
    732             END DO 
    733          CASE ( np_MET )                           !* metric term 
    734             DO jj = 1, jpjm1 
    735                DO ji = 1, fs_jpim1   ! vector opt. 
    736                   zwz(ji,jj) = ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    737                      &       - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    738                END DO 
    739             END DO 
    740          CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    741             DO jj = 1, jpjm1 
    742                DO ji = 1, fs_jpim1   ! vector opt. 
    743                   zwz(ji,jj) = (  ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
    744                      &                           - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) & 
    745                      &                      * r1_e1e2f(ji,jj)    ) 
    746                END DO 
    747             END DO 
    748          CASE ( np_CME )                           !* Coriolis + metric 
    749             DO jj = 1, jpjm1 
    750                DO ji = 1, fs_jpim1   ! vector opt. 
    751                   zwz(ji,jj) = ff_f(ji,jj) + ( pvn(ji+1,jj  ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    752                      &                     - ( pun(ji  ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    753                END DO 
    754             END DO 
    755          CASE DEFAULT                                             ! error 
    756             CALL ctl_stop('STOP','dyn_vor: wrong value for kvor'  ) 
    757          END SELECT 
    758          ! 
    759          IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    760             DO jj = 1, jpjm1 
    761                DO ji = 1, fs_jpim1   ! vector opt. 
    762                   zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    763                END DO 
    764             END DO 
    765          ENDIF 
    766          ! 
    767          CALL lbc_lnk( zwz, 'F', 1. ) 
    768          ! 
    769          !                                   !==  horizontal fluxes  ==! 
    770          zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
    771          zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    772  
    773          !                                   !==  compute and add the vorticity term trend  =! 
    774          jj = 2 
    775          ztne(1,:) = 0   ;   ztnw(1,:) = 0   ;   ztse(1,:) = 0   ;   ztsw(1,:) = 0 
    776          DO ji = 2, jpi          ! split in 2 parts due to vector opt. 
    777                z1_e3t = 1._wp / e3t_n(ji,jj,jk) 
    778                ztne(ji,jj) = ( zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) ) * z1_e3t 
    779                ztnw(ji,jj) = ( zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) ) * z1_e3t 
    780                ztse(ji,jj) = ( zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) ) * z1_e3t 
    781                ztsw(ji,jj) = ( zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) ) * z1_e3t 
    782          END DO 
    783          DO jj = 3, jpj 
    784             DO ji = fs_2, jpi   ! vector opt. ok because we start at jj = 3 
    785                z1_e3t = 1._wp / e3t_n(ji,jj,jk) 
    786                ztne(ji,jj) = ( zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) ) * z1_e3t 
    787                ztnw(ji,jj) = ( zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) ) * z1_e3t 
    788                ztse(ji,jj) = ( zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) ) * z1_e3t 
    789                ztsw(ji,jj) = ( zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) ) * z1_e3t 
    790             END DO 
    791          END DO 
    792          DO jj = 2, jpjm1 
    793             DO ji = fs_2, fs_jpim1   ! vector opt. 
    794                zua = + r1_12 * r1_e1u(ji,jj) * (  ztne(ji,jj  ) * zwy(ji  ,jj  ) + ztnw(ji+1,jj) * zwy(ji+1,jj  )   & 
    795                   &                             + ztse(ji,jj  ) * zwy(ji  ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    796                zva = - r1_12 * r1_e2v(ji,jj) * (  ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji  ,jj+1)   & 
    797                   &                             + ztnw(ji,jj  ) * zwx(ji-1,jj  ) + ztne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    798                pua(ji,jj,jk) = pua(ji,jj,jk) + zua 
    799                pva(ji,jj,jk) = pva(ji,jj,jk) + zva 
    800             END DO   
    801          END DO   
    802          !                                             ! =============== 
    803       END DO                                           !   End of slab 
    804       !                                                ! =============== 
    805    END SUBROUTINE vor_eeT 
    806  
    807  
    808    SUBROUTINE dyn_vor_init 
     215   END SUBROUTINE cor_ene 
     216 
     217 
     218   SUBROUTINE dyn_cor_init 
    809219      !!--------------------------------------------------------------------- 
    810       !!                  ***  ROUTINE dyn_vor_init  *** 
     220      !!                  ***  ROUTINE dyn_cor_init  *** 
    811221      !! 
    812222      !! ** Purpose :   Control the consistency between cpp options for 
     
    882292      SELECT CASE( n_dynadv ) 
    883293      CASE( np_LIN_dyn ) 
    884          IF(lwp) WRITE(numout,*) '   ==>>>   linear dynamics : total vorticity = Coriolis' 
     294         IF(lwp) WRITE(numout,*) '   ==>>>   linear dynamics : only Coriolis, no metric term' 
    885295         nrvm = np_COR        ! planetary vorticity 
    886296         ntot = np_COR        !     -         - 
    887297      CASE( np_VEC_c2  ) 
    888          IF(lwp) WRITE(numout,*) '   ==>>>   vector form dynamics : total vorticity = Coriolis + relative vorticity'  
    889          nrvm = np_RVO        ! relative vorticity 
    890          ntot = np_CRV        ! relative + planetary vorticity          
     298         CALL ctl_stop( 'dyncor_init : cor_ene requires FLUX form dynamics, not VECTOR form' ) 
    891299      CASE( np_FLX_c2 , np_FLX_ubs  ) 
    892300         IF(lwp) WRITE(numout,*) '   ==>>>   flux form dynamics : total vorticity = Coriolis + metric term' 
     
    894302         ntot = np_CME        ! Coriolis + metric term 
    895303         ! 
    896          SELECT CASE( nvor_scheme )    ! pre-computed gradients for the metric term: 
    897          CASE( np_ENT )                      !* T-point metric term :   pre-compute di(e2u)/2 and dj(e1v)/2 
     304         !                    ! pre-computed gradients for the metric term: 
     305         !                         !* T-point metric term :   pre-compute di(e2u)/2 and dj(e1v)/2 
    898306            ALLOCATE( di_e2u_2(jpi,jpj), dj_e1v_2(jpi,jpj) ) 
    899307            DO jj = 2, jpjm1 
     
    905313            CALL lbc_lnk_multi( di_e2u_2, 'T', -1. , dj_e1v_2, 'T', -1. )   ! Lateral boundary conditions 
    906314            ! 
    907          CASE DEFAULT                        !* F-point metric term :   pre-compute di(e2u)/(2*e1e2f) and dj(e1v)/(2*e1e2f) 
    908             ALLOCATE( di_e2v_2e1e2f(jpi,jpj), dj_e1u_2e1e2f(jpi,jpj) ) 
    909             DO jj = 1, jpjm1 
    910                DO ji = 1, jpim1 
    911                   di_e2v_2e1e2f(ji,jj) = ( e2v(ji+1,jj  ) - e2v(ji,jj) )  * 0.5 * r1_e1e2f(ji,jj) 
    912                   dj_e1u_2e1e2f(ji,jj) = ( e1u(ji  ,jj+1) - e1u(ji,jj) )  * 0.5 * r1_e1e2f(ji,jj) 
    913                END DO 
    914             END DO 
    915             CALL lbc_lnk_multi( di_e2v_2e1e2f, 'F', -1. , dj_e1u_2e1e2f, 'F', -1. )   ! Lateral boundary conditions 
    916          END SELECT 
    917315         ! 
    918316      END SELECT 
    919        
    920       IF(lwp) THEN                   ! Print the choice 
    921          WRITE(numout,*) 
    922          SELECT CASE( nvor_scheme ) 
    923          CASE( np_ENS )   ;   WRITE(numout,*) '   ==>>>   enstrophy conserving scheme (ENS)' 
    924          CASE( np_ENE )   ;   WRITE(numout,*) '   ==>>>   energy conserving scheme (Coriolis at F-points) (ENE)' 
    925          CASE( np_ENT )   ;   WRITE(numout,*) '   ==>>>   energy conserving scheme (Coriolis at T-points) (ENT)' 
    926          CASE( np_EET )   ;   WRITE(numout,*) '   ==>>>   energy conserving scheme (EEN scheme using e3t) (EET)' 
    927          CASE( np_EEN )   ;   WRITE(numout,*) '   ==>>>   energy and enstrophy conserving scheme (EEN)' 
    928          CASE( np_MIX )   ;   WRITE(numout,*) '   ==>>>   mixed enstrophy/energy conserving scheme (MIX)' 
    929          END SELECT          
    930       ENDIF 
    931       ! 
    932    END SUBROUTINE dyn_vor_init 
     317      !       
     318      IF(lwp) WRITE(numout,*) 
     319      IF(lwp) WRITE(numout,*) '   ==>>>   energy conserving scheme (Coriolis at F-points) (ENE)' 
     320      ! 
     321   END SUBROUTINE dyn_cor_init 
    933322 
    934323   !!============================================================================== 
    935 END MODULE dynvor 
     324END MODULE dyncor 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynhpg.F90

    r9598 r10009  
    453453        DO jj = 2, jpjm1 
    454454           DO ji = 2, jpim1  
    455              ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji+1,jj) ) >                & 
    456                   &    MAX( -ht_0(ji,jj)               , -ht_0(ji+1,jj) ) .AND.            & 
    457                   &    MAX(  sshn(ji,jj) +  ht_0(ji,jj),  sshn(ji+1,jj) + ht_0(ji+1,jj) )  & 
    458                   &                                                       > rn_wdmin1 + rn_wdmin2 
    459              ll_tmp2 = ( ABS( sshn(ji,jj)              -  sshn(ji+1,jj) ) > 1.E-12 ) .AND. (       & 
    460                   &    MAX(   sshn(ji,jj)              ,  sshn(ji+1,jj) ) >                & 
    461                   &    MAX(  -ht_0(ji,jj)              , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
     455             ll_tmp1 = MIN(  ssh(ji,jj,Nnn)               , ssh(ji+1,jj,Nnn)                  )                            & 
     456                  &  > MAX(                 - ht_0(ji,jj) ,                  - ht_0(ji+1,jj)  )  .AND.                     & 
     457                  &    MAX(  ssh(ji,jj,Nnn) + ht_0(ji,jj) , ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj)  )    >   rn_wdmin1 + rn_wdmin2 
     458                  ! 
     459             ll_tmp2 = ABS( ssh(ji,jj,Nnn) -  ssh(ji+1,jj,Nnn) ) > 1.E-12                        .AND.                     & 
     460                  &    MAX( ssh(ji,jj,Nnn) ,  ssh(ji+1,jj,Nnn) ) > MAX( ht_0(ji,jj) , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 
    462461 
    463462             IF(ll_tmp1) THEN 
    464463               zcpx(ji,jj) = 1.0_wp 
    465464             ELSE IF(ll_tmp2) THEN 
    466                ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
    467                zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj)) & 
    468                            &    / (sshn(ji+1,jj) - sshn(ji  ,jj)) ) 
     465               ! no worries about  ssh(ji+1,jj,,Nnn) -  ssh(ji,jj,Nnn) = 0, it won't happen ! here 
     466               zcpx(ji,jj) = ABS(   ( ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 
     467                           &      / ( ssh(ji+1,jj,Nnn)                 - ssh(ji,jj,Nnn)               ) ) 
    469468             ELSE 
    470469               zcpx(ji,jj) = 0._wp 
    471470             END IF 
    472471       
    473              ll_tmp1 = MIN(  sshn(ji,jj)              ,  sshn(ji,jj+1) ) >                & 
    474                   &    MAX( -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) .AND.            & 
    475                   &    MAX(  sshn(ji,jj) + ht_0(ji,jj),  sshn(ji,jj+1) + ht_0(ji,jj+1) )  & 
    476                   &                                                      > rn_wdmin1 + rn_wdmin2 
    477              ll_tmp2 = ( ABS( sshn(ji,jj)             -  sshn(ji,jj+1) ) > 1.E-12 ) .AND. (        & 
    478                   &    MAX(   sshn(ji,jj)             ,  sshn(ji,jj+1) ) >                & 
    479                   &    MAX(  -ht_0(ji,jj)             , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     472             ll_tmp1 = MIN(  ssh (ji,jj,Nnn)             ,  ssh (ji,jj+1,Nnn) )                     & 
     473                  &  > MAX( -ht_0(ji,jj)                 , -ht_0(ji,jj+1) )              .AND.      & 
     474                  &    MAX(  ssh(ji,jj,Nnn) + ht_0(ji,jj),  ssh (ji,jj+1,Nnn) + ht_0(ji,jj+1) )     & 
     475                  &  > rn_wdmin1 + rn_wdmin2 
     476             ll_tmp2 = ( ABS( ssh (ji,jj,Nnn)            -  ssh (ji,jj+1,Nnn) ) > 1.E-12 ) .AND.    & 
     477                  &  ( MAX(   ssh (ji,jj,Nnn)            ,  ssh (ji,jj+1,Nnn) ) >                   & 
     478                  &    MAX(  -ht_0(ji,jj)                , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    480479 
    481480             IF(ll_tmp1) THEN 
    482481               zcpy(ji,jj) = 1.0_wp 
    483482             ELSE IF(ll_tmp2) THEN 
    484                ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
    485                zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj)) & 
    486                            &    / (sshn(ji,jj+1) - sshn(ji,jj  )) ) 
     483               ! no worries about  ssh(ji,jj+1,Nnn) - ssh(ji,jj  ,Nnn) = 0, it won't happen ! here 
     484               zcpy(ji,jj) = ABS( ( ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 
     485                  &             / ( ssh(ji,jj+1,Nnn)                 - ssh(ji,jj,Nnn)               ) ) 
    487486             ELSE 
    488487               zcpy(ji,jj) = 0._wp 
     
    687686        DO jj = 2, jpjm1 
    688687           DO ji = 2, jpim1  
    689              ll_tmp1 = MIN(  sshn(ji,jj)              ,  sshn(ji+1,jj) ) >                & 
    690                   &    MAX( -ht_0(ji,jj)              , -ht_0(ji+1,jj) ) .AND.            & 
    691                   &    MAX(  sshn(ji,jj) + ht_0(ji,jj),  sshn(ji+1,jj) + ht_0(ji+1,jj) )  & 
    692                   &                                                      > rn_wdmin1 + rn_wdmin2 
    693              ll_tmp2 = ( ABS( sshn(ji,jj)             -  sshn(ji+1,jj) ) > 1.E-12 ) .AND. (        & 
    694                   &    MAX(   sshn(ji,jj)             ,  sshn(ji+1,jj) ) >                & 
     688             ll_tmp1 = MIN(  ssh (ji,jj,Nnn)              ,  ssh (ji+1,jj,Nnn) )                  & 
     689                  &  > MAX( -ht_0(ji,jj)                  , -ht_0(ji+1,jj)    ) .AND.            & 
     690                  &    MAX(  ssh (ji,jj,Nnn) + ht_0(ji,jj),  ssh (ji+1,jj,Nnn) + ht_0(ji+1,jj) )  & 
     691                  & > rn_wdmin1 + rn_wdmin2 
     692             ll_tmp2 = ( ABS( ssh (ji,jj,Nnn)             -  ssh (ji+1,jj,Nnn) ) > 1.E-12 ) .AND. (   & 
     693                  &    MAX(   ssh (ji,jj,Nnn)             ,  ssh (ji+1,jj,Nnn) ) >                & 
    695694                  &    MAX(  -ht_0(ji,jj)             , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
    696695             IF(ll_tmp1) THEN 
    697696               zcpx(ji,jj) = 1.0_wp 
    698697             ELSE IF(ll_tmp2) THEN 
    699                ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
    700                zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj)) & 
    701                            &    / (sshn(ji+1,jj) - sshn(ji  ,jj)) ) 
     698               ! no worries about  ssh(ji+1,jj,Nnn) -  ssh(ji  ,jj,Nnn) = 0, it won't happen ! here 
     699               zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 
     700                           &    / (ssh(ji+1,jj,Nnn)                 - ssh(ji,jj,Nnn)               ) ) 
    702701             ELSE 
    703702               zcpx(ji,jj) = 0._wp 
    704703             END IF 
    705704       
    706              ll_tmp1 = MIN(  sshn(ji,jj)              ,  sshn(ji,jj+1) ) >                & 
    707                   &    MAX( -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) .AND.            & 
    708                   &    MAX(  sshn(ji,jj) + ht_0(ji,jj),  sshn(ji,jj+1) + ht_0(ji,jj+1) )  & 
    709                   &                                                      > rn_wdmin1 + rn_wdmin2 
    710              ll_tmp2 = ( ABS( sshn(ji,jj)             -  sshn(ji,jj+1) ) > 1.E-12 ) .AND. (        & 
    711                   &    MAX(   sshn(ji,jj)             ,  sshn(ji,jj+1) ) >                & 
     705             ll_tmp1 = MIN(  ssh (ji,jj,Nnn)              ,  ssh (ji,jj+1,Nnn) ) >                & 
     706                  &    MAX( -ht_0(ji,jj)                  , -ht_0(ji,jj+1) )          .AND.       & 
     707                  &    MAX(  ssh (ji,jj,Nnn) + ht_0(ji,jj),  ssh (ji,jj+1,Nnn) + ht_0(ji,jj+1) )  & 
     708                  &  > rn_wdmin1 + rn_wdmin2 
     709             ll_tmp2 = ( ABS( ssh (ji,jj,Nnn)             -  ssh (ji,jj+1,Nnn) ) > 1.E-12 ) .AND. (        & 
     710                  &    MAX(   ssh (ji,jj,Nnn)             ,  ssh (ji,jj+1,Nnn) ) >                & 
    712711                  &    MAX(  -ht_0(ji,jj)             , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    713712 
     
    715714               zcpy(ji,jj) = 1.0_wp 
    716715             ELSE IF(ll_tmp2) THEN 
    717                ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
    718                zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj)) & 
    719                            &    / (sshn(ji,jj+1) - sshn(ji,jj  )) ) 
     716               ! no worries about  ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) = 0, it won't happen ! here 
     717               zcpy(ji,jj) = ABS( (ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj) )  & 
     718                           &    / (ssh(ji,jj+1,Nnn)                 - ssh(ji,jj,Nnn)               )  ) 
    720719             ELSE 
    721720               zcpy(ji,jj) = 0._wp 
     
    975974         DO jj = 2, jpjm1 
    976975           DO ji = 2, jpim1  
    977              ll_tmp1 = MIN(  sshn(ji,jj)              ,  sshn(ji+1,jj) ) >                & 
     976             ll_tmp1 = MIN(  ssh (ji,jj,Nnn)              ,  ssh(ji+1,jj,Nnn) ) >                & 
    978977                  &    MAX( -ht_0(ji,jj)              , -ht_0(ji+1,jj) ) .AND.            & 
    979                   &    MAX(  sshn(ji,jj) + ht_0(ji,jj),  sshn(ji+1,jj) + ht_0(ji+1,jj) )  & 
    980                   &                                                      > rn_wdmin1 + rn_wdmin2 
    981              ll_tmp2 = ( ABS( sshn(ji,jj)             -  sshn(ji+1,jj) ) > 1.E-12 ) .AND. (         & 
    982                   &    MAX(   sshn(ji,jj)             ,  sshn(ji+1,jj) ) >                & 
     978                  &    MAX(  ssh(ji,jj,Nnn) + ht_0(ji,jj),  ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) )  & 
     979                  &  > rn_wdmin1 + rn_wdmin2 
     980             ll_tmp2 = ( ABS( ssh(ji,jj,Nnn)             -  ssh (ji+1,jj,Nnn) ) > 1.E-12 ) .AND. (         & 
     981                  &    MAX(   ssh(ji,jj,Nnn)             ,  ssh (ji+1,jj,Nnn) ) >                & 
    983982                  &    MAX(  -ht_0(ji,jj)             , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
    984983 
     
    986985               zcpx(ji,jj) = 1.0_wp 
    987986             ELSE IF(ll_tmp2) THEN 
    988                ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
    989                zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj)) & 
    990                            &    / (sshn(ji+1,jj) -  sshn(ji  ,jj)) ) 
     987               ! no worries about  ssh(ji+1,jj,Nnn) -  ssh(ji,jj,Nnn) = 0, it won't happen ! here 
     988               zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 
     989                           &    / (ssh(ji+1,jj,Nnn)                 - ssh(ji,jj,Nnn)               ) ) 
    991990               
    992991                zcpx(ji,jj) = max(min( zcpx(ji,jj) , 1.0_wp),0.0_wp) 
     
    995994             END IF 
    996995       
    997              ll_tmp1 = MIN(  sshn(ji,jj)              ,  sshn(ji,jj+1) ) >                & 
     996             ll_tmp1 = MIN(  ssh (ji,jj,Nnn)          ,  ssh(ji,jj+1,Nnn) ) >                & 
    998997                  &    MAX( -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) .AND.            & 
    999                   &    MAX(  sshn(ji,jj) + ht_0(ji,jj),  sshn(ji,jj+1) + ht_0(ji,jj+1) )  & 
    1000                   &                                                      > rn_wdmin1 + rn_wdmin2 
    1001              ll_tmp2 = ( ABS( sshn(ji,jj)             -  sshn(ji,jj+1) ) > 1.E-12 ) .AND. (      & 
    1002                   &    MAX(   sshn(ji,jj)             ,  sshn(ji,jj+1) ) >                & 
     998                  &    MAX(  ssh (ji,jj,Nnn) + ht_0(ji,jj),  ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) )  & 
     999                  &  > rn_wdmin1 + rn_wdmin2 
     1000             ll_tmp2 = ( ABS( ssh (ji,jj,Nnn)         -  ssh (ji,jj+1,Nnn) ) > 1.E-12 ) .AND. (      & 
     1001                  &    MAX(   ssh (ji,jj,Nnn)         ,  ssh (ji,jj+1,Nnn) ) >                & 
    10031002                  &    MAX(  -ht_0(ji,jj)             , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    10041003 
     
    10061005               zcpy(ji,jj) = 1.0_wp 
    10071006             ELSE IF(ll_tmp2) THEN 
    1008                ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
    1009                zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj)) & 
    1010                            &    / (sshn(ji,jj+1) - sshn(ji,jj  )) ) 
     1007               ! no worries about  ssh(ji,jj+1,Nnn) -  ssh(ji,jj,Nnn) = 0, it won't happen ! here 
     1008               zcpy(ji,jj) = ABS(  ( ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj))  & 
     1009                           &     / ( ssh(ji,jj+1,Nnn)                 - ssh(ji,jj,Nnn)              )  ) 
    10111010                zcpy(ji,jj) = max(min( zcpy(ji,jj) , 1.0_wp),0.0_wp) 
    10121011 
     
    10411040      DO jj = 1, jpj 
    10421041         DO ji = 1, jpi 
    1043             zdept(ji,jj,1) = 0.5_wp * e3w_n(ji,jj,1) - sshn(ji,jj) * znad 
     1042            zdept(ji,jj,1) = 0.5_wp * e3w_n(ji,jj,1) - ssh(ji,jj,Nnn) * znad 
    10441043         END DO 
    10451044      END DO 
     
    10871086 
    10881087      ! Prepare zsshu_n and zsshv_n 
     1088!!gm Vector form    
     1089!         DO jj = 2, jpjm1 
     1090!           DO ji = 2, jpim1 
     1091!   !!gm BUG ?    if it is ssh at u- & v-point then it should be: 
     1092!   !          zsshu_n(ji,jj) = (e1e2t(ji,jj) * ssh(ji,jj,Nnn) + e1e2t(ji+1,jj) * ssh(ji+1,jj,Nnn)) * & 
     1093!   !                         & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp  
     1094!   !          zsshv_n(ji,jj) = (e1e2t(ji,jj) * ssh(ji,jj,Nnn) + e1e2t(ji,jj+1) * ssh(ji,jj+1,Nnn)) * & 
     1095!   !                         & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp  
     1096!   !!gm not this: 
     1097!             zsshu_n(ji,jj) = (e1e2u(ji,jj) * ssh(ji,jj,Nnn) + e1e2u(ji+1, jj) * ssh(ji+1,jj,Nnn)) * & 
     1098!                            & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp  
     1099!             zsshv_n(ji,jj) = (e1e2v(ji,jj) * ssh(ji,jj,Nnn) + e1e2v(ji+1, jj) * ssh(ji,jj+1,Nnn)) * & 
     1100!                            & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp  
     1101!           END DO 
     1102!         END DO 
     1103!!gm Flux form : 
    10891104      DO jj = 2, jpjm1 
    1090         DO ji = 2, jpim1 
    1091 !!gm BUG ?    if it is ssh at u- & v-point then it should be: 
    1092 !          zsshu_n(ji,jj) = (e1e2t(ji,jj) * sshn(ji,jj) + e1e2t(ji+1,jj) * sshn(ji+1,jj)) * & 
    1093 !                         & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp  
    1094 !          zsshv_n(ji,jj) = (e1e2t(ji,jj) * sshn(ji,jj) + e1e2t(ji,jj+1) * sshn(ji,jj+1)) * & 
    1095 !                         & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp  
    1096 !!gm not this: 
    1097           zsshu_n(ji,jj) = (e1e2u(ji,jj) * sshn(ji,jj) + e1e2u(ji+1, jj) * sshn(ji+1,jj)) * & 
    1098                          & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp  
    1099           zsshv_n(ji,jj) = (e1e2v(ji,jj) * sshn(ji,jj) + e1e2v(ji+1, jj) * sshn(ji,jj+1)) * & 
    1100                          & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp  
     1105         DO ji = 2, jpim1 
     1106            zsshu_n(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji+1,jj,Nnn) ) * ssumask(ji,jj) 
     1107            zsshv_n(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji,jj+1,Nnn) ) * ssvmask(ji,jj) 
    11011108        END DO 
    11021109      END DO 
    1103  
    11041110      CALL lbc_lnk_multi (zsshu_n, 'U', 1., zsshv_n, 'V', 1. ) 
    1105  
     1111      ! 
    11061112      DO jj = 2, jpjm1 
    1107         DO ji = 2, jpim1 
    1108           zu(ji,jj,1) = - ( e3u_n(ji,jj,1) - zsshu_n(ji,jj) * znad)  
    1109           zv(ji,jj,1) = - ( e3v_n(ji,jj,1) - zsshv_n(ji,jj) * znad) 
     1113         DO ji = 2, jpim1 
     1114            zu(ji,jj,1) = - ( e3u_n(ji,jj,1) - zsshu_n(ji,jj) * znad)  
     1115            zv(ji,jj,1) = - ( e3v_n(ji,jj,1) - zsshv_n(ji,jj) * znad) 
    11101116        END DO 
    11111117      END DO 
    1112  
     1118      ! 
    11131119      DO jk = 2, jpkm1 
    1114         DO jj = 2, jpjm1 
    1115           DO ji = 2, jpim1 
    1116             zu(ji,jj,jk) = zu(ji,jj,jk-1) - e3u_n(ji,jj,jk) 
    1117             zv(ji,jj,jk) = zv(ji,jj,jk-1) - e3v_n(ji,jj,jk) 
    1118           END DO 
    1119         END DO 
     1120         DO jj = 2, jpjm1 
     1121            DO ji = 2, jpim1 
     1122               zu(ji,jj,jk) = zu(ji,jj,jk-1) - e3u_n(ji,jj,jk) 
     1123               zv(ji,jj,jk) = zv(ji,jj,jk-1) - e3v_n(ji,jj,jk) 
     1124            END DO 
     1125         END DO 
     1126      END DO 
     1127      ! 
     1128      DO jk = 1, jpkm1 
     1129         DO jj = 2, jpjm1 
     1130            DO ji = 2, jpim1 
     1131               zu(ji,jj,jk) = zu(ji,jj,jk) + 0.5_wp * e3u_n(ji,jj,jk) 
     1132               zv(ji,jj,jk) = zv(ji,jj,jk) + 0.5_wp * e3v_n(ji,jj,jk) 
     1133            END DO 
     1134         END DO 
     1135      END DO 
     1136 
     1137      DO jk = 1, jpkm1 
     1138         DO jj = 2, jpjm1 
     1139            DO ji = 2, jpim1 
     1140               zu(ji,jj,jk) = MIN(  zu(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) )  ) 
     1141               zu(ji,jj,jk) = MAX(  zu(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) )  ) 
     1142               zv(ji,jj,jk) = MIN(  zv(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) )  ) 
     1143               zv(ji,jj,jk) = MAX(  zv(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) )  ) 
     1144            END DO 
     1145         END DO 
    11201146      END DO 
    11211147 
     
    11231149        DO jj = 2, jpjm1 
    11241150          DO ji = 2, jpim1 
    1125             zu(ji,jj,jk) = zu(ji,jj,jk) + 0.5_wp * e3u_n(ji,jj,jk) 
    1126             zv(ji,jj,jk) = zv(ji,jj,jk) + 0.5_wp * e3v_n(ji,jj,jk) 
    1127           END DO 
    1128         END DO 
    1129       END DO 
    1130  
    1131       DO jk = 1, jpkm1 
    1132         DO jj = 2, jpjm1 
    1133           DO ji = 2, jpim1 
    1134             zu(ji,jj,jk) = MIN(  zu(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) )  ) 
    1135             zu(ji,jj,jk) = MAX(  zu(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) )  ) 
    1136             zv(ji,jj,jk) = MIN(  zv(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) )  ) 
    1137             zv(ji,jj,jk) = MAX(  zv(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) )  ) 
    1138           END DO 
    1139         END DO 
    1140       END DO 
    1141  
    1142  
    1143       DO jk = 1, jpkm1 
    1144         DO jj = 2, jpjm1 
    1145           DO ji = 2, jpim1 
    1146             zpwes = 0._wp; zpwed = 0._wp 
    1147             zpnss = 0._wp; zpnsd = 0._wp 
     1151            zpwes = 0._wp   ;   zpwed = 0._wp 
     1152            zpnss = 0._wp   ;   zpnsd = 0._wp 
    11481153            zuijk = zu(ji,jj,jk) 
    11491154            zvijk = zv(ji,jj,jk) 
     
    11761181               DO WHILE ( -zdept(jid,jj,jk1) < zuijk ) 
    11771182                 IF( jk1 == 1 ) THEN 
    1178                    zdeps = zdept(jid,jj,1) + MIN(zuijk, sshn(jid,jj)*znad) 
     1183                   zdeps = zdept(jid,jj,1) + MIN(zuijk, ssh(jid,jj,Nnn)*znad) 
    11791184                   zrhdt1 = zrhh(jid,jj,1) - interp3(zdept(jid,jj,1), asp(jid,jj,1), & 
    11801185                                                     bsp(jid,jj,1),   csp(jid,jj,1), & 
     
    11961201               IF( .NOT.ln_linssh ) THEN 
    11971202                 zdpdx2 = zcoef0 * r1_e1u(ji,jj) * & 
    1198                     &    ( REAL(jis-jid, wp) * (zpwes + zpwed) + (sshn(ji+1,jj)-sshn(ji,jj)) ) 
     1203                    &    ( REAL(jis-jid, wp) * (zpwes + zpwed) + (ssh(ji+1,jj,Nnn)-ssh(ji,jj,Nnn)) ) 
    11991204                ELSE 
    12001205                 zdpdx2 = zcoef0 * r1_e1u(ji,jj) * REAL(jis-jid, wp) * (zpwes + zpwed) 
     
    12341239               DO WHILE ( -zdept(ji,jjd,jk1) < zvijk ) 
    12351240                 IF( jk1 == 1 ) THEN 
    1236                    zdeps = zdept(ji,jjd,1) + MIN(zvijk, sshn(ji,jjd)*znad) 
     1241                   zdeps = zdept(ji,jjd,1) + MIN(zvijk, ssh(ji,jjd,Nnn)*znad) 
    12371242                   zrhdt1 = zrhh(ji,jjd,1) - interp3(zdept(ji,jjd,1), asp(ji,jjd,1), & 
    12381243                                                     bsp(ji,jjd,1),   csp(ji,jjd,1), & 
     
    12551260               IF( .NOT.ln_linssh ) THEN 
    12561261                  zdpdy2 = zcoef0 * r1_e2v(ji,jj) * & 
    1257                           ( REAL(jjs-jjd, wp) * (zpnss + zpnsd) + (sshn(ji,jj+1)-sshn(ji,jj)) ) 
     1262                          ( REAL(jjs-jjd, wp) * (zpnss + zpnsd) + (ssh(ji,jj+1,Nnn)-ssh(ji,jj,Nnn)) ) 
    12581263               ELSE 
    12591264                  zdpdy2 = zcoef0 * r1_e2v(ji,jj) * REAL(jjs-jjd, wp) * (zpnss + zpnsd ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynnxt.F90

    r10001 r10009  
    252252               !                                            !* ssh at u- and v-points) 
    253253               DO jj = 2, jpjm1   ;   DO ji = 2, jpim1 
    254                   zsshu(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji+1,jj  ) ) * ssumask(ji,jj) 
    255                   zsshv(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji  ,jj+1) ) * ssvmask(ji,jj) 
     254                  zsshu(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj  ,Nbb) ) * ssumask(ji,jj) 
     255                  zsshv(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji  ,jj+1,Nbb) ) * ssvmask(ji,jj) 
    256256               END DO             ;   END DO       
    257257               CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) 
     
    288288               !                                            !* ssh at u- and v-points) 
    289289               DO jj = 2, jpjm1   ;   DO ji = 2, jpim1 
    290                   zsshu(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji+1,jj  ) ) * ssumask(ji,jj) 
    291                   zsshv(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji  ,jj+1) ) * ssvmask(ji,jj) 
     290                  zsshu(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj  ,Nbb) ) * ssumask(ji,jj) 
     291                  zsshv(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji  ,jj+1,Nbb) ) * ssvmask(ji,jj) 
    292292               END DO             ;   END DO       
    293293               CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) 
     
    355355      IF(.NOT.ln_linssh ) THEN 
    356356         DO jj = 2, jpjm1   ;   DO ji = 2, jpim1 
    357             zsshu(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji+1,jj  ) ) * ssumask(ji,jj) 
    358             zsshv(ji,jj) = 0.5_wp  * ( sshb(ji  ,jj) + sshb(ji  ,jj+1) ) * ssvmask(ji,jj) 
     357            zsshu(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj  ,Nbb) ) * ssumask(ji,jj) 
     358            zsshv(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji  ,jj+1,Nbb) ) * ssvmask(ji,jj) 
    359359         END DO             ;   END DO       
    360360         CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg.F90

    r9939 r10009  
    120120                  DO jj = 2, jpjm1                    ! add tide potential + scalar approximation of load potential 
    121121                     DO ji = fs_2, fs_jpim1   ! vector opt. 
    122                         spgu(ji,jj) = spgu(ji,jj) + (  grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) )  & 
    123                            &                         + zld  * ( sshn     (ji+1,jj) - sshn     (ji,jj) )  ) * r1_e1u(ji,jj) 
    124                         spgv(ji,jj) = spgv(ji,jj) + (  grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) )  & 
    125                            &                         + zld  * ( sshn     (ji,jj+1) - sshn     (ji,jj) )  ) * r1_e2v(ji,jj) 
     122                        spgu(ji,jj) = spgu(ji,jj) + (  grav * ( pot_astro(ji+1,jj)     - pot_astro(ji,jj)    )  & 
     123                           &                         + zld  * ( ssh      (ji+1,jj,Nnn) - ssh      (ji,jj,Nnn) )  ) * r1_e1u(ji,jj) 
     124                        spgv(ji,jj) = spgv(ji,jj) + (  grav * ( pot_astro(ji,jj+1)     - pot_astro(ji,jj)    )  & 
     125                           &                         + zld  * ( ssh      (ji,jj+1,Nnn) - ssh      (ji,jj,Nnn) )  ) * r1_e2v(ji,jj) 
    126126                     END DO  
    127127                  END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg_exp.F90

    r9939 r10009  
    4949      !!              momentum trend the surface pressure gradient : 
    5050      !!                      (ua,va) = (ua,va) + (spgu,spgv) 
    51       !!              where spgu = -1/rho0 d/dx(ps) = -g/e1u di( sshn ) 
    52       !!                    spgv = -1/rho0 d/dy(ps) = -g/e2v dj( sshn ) 
     51      !!              where spgu = -1/rho0 d/dx(ps) = -g/e1u di( ssh(Nnn) ) 
     52      !!                    spgv = -1/rho0 d/dy(ps) = -g/e2v dj( ssh(Nnn) ) 
    5353      !! 
    5454      !! ** Action :   (ua,va)   trend of horizontal velocity increased by  
     
    7474         DO jj = 2, jpjm1                    ! now surface pressure gradient 
    7575            DO ji = fs_2, fs_jpim1   ! vector opt. 
    76                spgu(ji,jj) = - grav * ( sshn(ji+1,jj) - sshn(ji,jj) ) * r1_e1u(ji,jj) 
    77                spgv(ji,jj) = - grav * ( sshn(ji,jj+1) - sshn(ji,jj) ) * r1_e2v(ji,jj) 
     76               spgu(ji,jj) = - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 
     77               spgv(ji,jj) = - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 
    7878            END DO  
    7979         END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg_ts.F90

    r9939 r10009  
    130130      !! 
    131131      !! ** Action : 
    132       !!      -Update the filtered free surface at step "n+1"      : ssha 
     132      !!      -Update the filtered free surface at step "n+1"      : ssh(Naa) 
    133133      !!      -Update filtered barotropic velocities at step "n+1" : ua_b, va_b 
    134134      !!      -Compute barotropic advective fluxes at step "n"     : un_adv, vn_adv 
     
    440440            DO jj = 2, jpjm1 
    441441               DO ji = 2, jpim1  
    442                   ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji+1,jj) ) >                & 
    443                      &      MAX( -ht_0(ji,jj)               , -ht_0(ji+1,jj) ) .AND.            & 
    444                      &      MAX(  sshn(ji,jj) + ht_0(ji,jj) ,  sshn(ji+1,jj) + ht_0(ji+1,jj) )  & 
    445                      &                                                         > rn_wdmin1 + rn_wdmin2 
    446                   ll_tmp2 = ( ABS( sshn(ji+1,jj)            -  sshn(ji  ,jj))  > 1.E-12 ).AND.( & 
    447                      &      MAX(   sshn(ji,jj)              ,  sshn(ji+1,jj) ) >                & 
    448                      &      MAX(  -ht_0(ji,jj)              , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
     442                  ll_tmp1 = MIN(  ssh(ji,jj,Nnn)               ,  ssh(ji+1,jj,Nnn)                 )   >                       & 
     443                     &      MAX(                 - ht_0(ji,jj) ,                   - ht_0(ji+1,jj) ) .AND.                     & 
     444                     &      MAX(  ssh(ji,jj,Nnn) + ht_0(ji,jj) ,  ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) )   >   rn_wdmin1 + rn_wdmin2 
     445                     ! 
     446                  ll_tmp2 = ABS(  ssh(ji+1,jj,Nnn)   -   ssh(ji,jj,Nnn)  )  > 1.E-12    .AND.    & 
     447                     &      MAX(  ssh(ji+1,jj,Nnn)   ,   ssh(ji,jj,Nnn)  )  >                    & 
     448                     &      MAX(-ht_0(ji+1,jj)       , -ht_0(ji,jj)      ) + rn_wdmin1 + rn_wdmin2 
    449449                  IF(ll_tmp1) THEN 
    450450                     zcpx(ji,jj) = 1.0_wp 
    451451                  ELSEIF(ll_tmp2) THEN 
    452                      ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
    453                      zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj)) & 
    454                                  &    / (sshn(ji+1,jj) - sshn(ji  ,jj)) ) 
     452                     ! no worries about  ssh(ji+1,jj,Nnn) -  ssh(ji,jj,Nnn) = 0, it won't happen ! here 
     453                     zcpx(ji,jj) = ABS(  ( ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) )  & 
     454                                 &     / ( ssh(ji+1,jj,Nnn)                 - ssh(ji,jj,Nnn)               )  ) 
    455455                     zcpx(ji,jj) = MAX(  0._wp , MIN( zcpx(ji,jj) , 1._wp )  ) 
    456456                  ELSE 
     
    458458                  ENDIF 
    459459                  ! 
    460                   ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji,jj+1) ) >                & 
    461                      &      MAX( -ht_0(ji,jj)               , -ht_0(ji,jj+1) ) .AND.            & 
    462                      &      MAX(  sshn(ji,jj) + ht_0(ji,jj) ,  sshn(ji,jj+1) + ht_0(ji,jj+1) )  & 
    463                      &                                                       > rn_wdmin1 + rn_wdmin2 
    464                   ll_tmp2 = ( ABS( sshn(ji,jj)              -  sshn(ji,jj+1))  > 1.E-12 ).AND.( & 
    465                      &      MAX(   sshn(ji,jj)              ,  sshn(ji,jj+1) ) >                & 
    466                      &      MAX(  -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     460                  ll_tmp1 = MIN(  ssh(ji,jj,Nnn)               ,  ssh(ji,jj+1,Nnn)                 )   >                     & 
     461                     &      MAX(                 - ht_0(ji,jj) ,                   - ht_0(ji,jj+1) ) .AND.                   & 
     462                     &      MAX(  ssh(ji,jj,Nnn) + ht_0(ji,jj) ,  ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) )   > rn_wdmin1 + rn_wdmin2 
     463                     ! 
     464                  ll_tmp2 = ABS(  ssh(ji,jj,Nnn)  -  ssh(ji,jj+1,Nnn) )  > 1.E-12   .AND.      & 
     465                     &      MAX(  ssh(ji,jj,Nnn)  ,  ssh(ji,jj+1,Nnn) )  >                      & 
     466                     &    ( MAX(-ht_0(ji,jj)      ,-ht_0(ji,jj+1)    ) + rn_wdmin1 + rn_wdmin2 ) 
    467467   
    468468                  IF(ll_tmp1) THEN 
    469469                     zcpy(ji,jj) = 1.0_wp 
    470470                  ELSE IF(ll_tmp2) THEN 
    471                      ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
    472                      zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj)) & 
    473                         &             / (sshn(ji,jj+1) - sshn(ji,jj  )) ) 
     471                     ! no worries about   ssh(ji,jj+1,Nnn) -  ssh(ji,jj  ,Nnn) = 0, it won't happen ! here 
     472                     zcpy(ji,jj) = ABS( ( ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 
     473                        &             / ( ssh(ji,jj+1,Nnn)                 - ssh(ji,jj,Nnn)               ) ) 
    474474                     zcpy(ji,jj) = MAX(  0._wp , MIN( zcpy(ji,jj) , 1.0_wp )  ) 
    475475                  ELSE 
     
    481481            DO jj = 2, jpjm1 
    482482               DO ji = 2, jpim1 
    483                   zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( sshn(ji+1,jj  ) - sshn(ji  ,jj ) )   & 
     483                  zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) )   & 
    484484                     &                          * r1_e1u(ji,jj) * zcpx(ji,jj)  * wdrampu(ji,jj)  !jth 
    485                   zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( sshn(ji  ,jj+1) - sshn(ji  ,jj ) )   & 
     485                  zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) )   & 
    486486                     &                          * r1_e2v(ji,jj) * zcpy(ji,jj)  * wdrampv(ji,jj)  !jth 
    487487               END DO 
     
    492492            DO jj = 2, jpjm1 
    493493               DO ji = fs_2, fs_jpim1   ! vector opt. 
    494                   zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  sshn(ji+1,jj  ) - sshn(ji  ,jj  )  ) * r1_e1u(ji,jj) 
    495                   zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  sshn(ji  ,jj+1) - sshn(ji  ,jj  )  ) * r1_e2v(ji,jj)  
     494                  zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn)  ) * r1_e1u(ji,jj) 
     495                  zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn)  ) * r1_e2v(ji,jj)  
    496496               END DO 
    497497            END DO 
     
    665665      ! 
    666666      IF (ln_bt_fw) THEN                  ! FORWARD integration: start from NOW fields                     
    667          sshn_e(:,:) =    sshn(:,:)             
     667         sshn_e(:,:) =    ssh (:,:,Nnn)             
    668668         un_e  (:,:) =    un_b(:,:)             
    669669         vn_e  (:,:) =    vn_b(:,:) 
     
    674674         hvr_e (:,:) = r1_hv_n(:,:) 
    675675      ELSE                                ! CENTRED integration: start from BEFORE fields 
    676          sshn_e(:,:) =    sshb(:,:) 
     676         sshn_e(:,:) =    ssh (:,:,Nbb) 
    677677         un_e  (:,:) =    ub_b(:,:)          
    678678         vn_e  (:,:) =    vb_b(:,:) 
     
    687687      ! 
    688688      ! Initialize sums: 
    689       ua_b  (:,:) = 0._wp       ! After barotropic velocities (or transport if flux form)           
    690       va_b  (:,:) = 0._wp 
    691       ssha  (:,:) = 0._wp       ! Sum for after averaged sea level 
    692       un_adv(:,:) = 0._wp       ! Sum for now transport issued from ts loop 
    693       vn_adv(:,:) = 0._wp 
     689      ua_b  (:,:)     = 0._wp       ! After barotropic velocities (or transport if flux form)           
     690      va_b  (:,:)     = 0._wp 
     691      ssh   (:,:,Naa) = 0._wp       ! Sum for after averaged sea level 
     692      un_adv(:,:)     = 0._wp       ! Sum for now transport issued from ts loop 
     693      vn_adv(:,:)     = 0._wp 
    694694      ! 
    695695      IF( ln_wd_dl ) THEN 
     
    11851185         ENDIF 
    11861186         !                                          ! Sum sea level 
    1187          ssha(:,:) = ssha(:,:) + za1 * ssha_e(:,:) 
     1187         ssh(:,:,Naa) = ssh(:,:,Naa) + za1 * ssha_e(:,:) 
    11881188 
    11891189         !                                                 ! ==================== ! 
     
    12231223         END DO 
    12241224      ELSE 
    1225          ! At this stage, ssha has been corrected: compute new depths at velocity points 
     1225         ! At this stage, ssh(Naa) has been corrected: compute new depths at velocity points 
     1226!!gm KE conserving expression in Vector form  
     1227!         DO jj = 1, jpjm1 
     1228!            DO ji = 1, jpim1      ! NO Vector Opt. 
     1229!               zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj) * (   e1e2t(ji  ,jj) * ssh(ji  ,jj,Naa)   & 
     1230!                  &                                                         + e1e2t(ji+1,jj) * ssh(ji+1,jj,Naa)   ) 
     1231!               zsshv_a(ji,jj) = r1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj) * (   e1e2t(ji,jj  ) * ssh(ji,jj  ,Naa)   & 
     1232!                  &                                                         + e1e2t(ji,jj+1) * ssh(ji,jj+1,Naa) ) 
     1233!            END DO 
     1234!         END DO 
     1235!! replace by the KE conserving expression in flux form 
    12261236         DO jj = 1, jpjm1 
    12271237            DO ji = 1, jpim1      ! NO Vector Opt. 
    1228                zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj)  * r1_e1e2u(ji,jj) * (   e1e2t(ji  ,jj) * ssha(ji  ,jj)   & 
    1229                   &                                                          + e1e2t(ji+1,jj) * ssha(ji+1,jj)   ) 
    1230                zsshv_a(ji,jj) = r1_2 * ssvmask(ji,jj)  * r1_e1e2v(ji,jj) * (   e1e2t(ji,jj  ) * ssha(ji,jj  )   & 
    1231                   &                                                          + e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
    1232             END DO 
    1233          END DO 
     1238               zsshu_a(ji,jj) = r1_2 * ( ssh(ji,jj,Naa) + ssh(ji+1,jj,Naa)  ) * ssumask(ji,jj) 
     1239               zsshv_a(ji,jj) = r1_2 * ( ssh(ji,jj,Naa) + ssh(ji,jj+1,Naa)  ) * ssvmask(ji,jj) 
     1240            END DO 
     1241         END DO 
     1242!!gm end 
    12341243         CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
    12351244         ! 
    1236          DO jk=1,jpkm1 
     1245         DO jk = 1, jpkm1 
    12371246            ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * r1_Dt 
    12381247            va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * r1_Dt 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/sshwzv.F90

    r9939 r10009  
    5656      !!                ***  ROUTINE ssh_nxt  *** 
    5757      !!                    
    58       !! ** Purpose :   compute the after ssh (ssha) 
     58      !! ** Purpose :   compute the after ssh(Naa) 
    5959      !! 
    6060      !! ** Method  : - Using the incompressibility hypothesis, the ssh increment 
     
    6262      !!      by the time step. 
    6363      !! 
    64       !! ** action  :   ssha, after sea surface height 
     64      !! ** action  :    ssh(Naa), after sea surface height 
    6565      !! 
    6666      !! Reference  : Leclair, M., and G. Madec, 2009, Ocean Modelling. 
     
    8787      !                                           !------------------------------! 
    8888 
    89       IF(ln_wd_il)   CALL wad_lmt( sshb, z1_2rho0 * (emp_b(:,:) + emp(:,:)), rDt ) 
     89      IF(ln_wd_il)   CALL wad_lmt( ssh(:,:,Nbb), z1_2rho0 * (emp_b(:,:) + emp(:,:)), rDt ) 
    9090 
    9191      CALL div_hor( kt )                               ! Horizontal divergence 
     
    9999      ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 
    100100      !  
    101       ssha(:,:) = (  sshb(:,:) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
     101      ssh(:,:,Naa) = (  ssh(:,:,Nbb) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
    102102      ! 
    103103#if defined key_agrif 
     
    107107      IF ( .NOT.ln_dynspg_ts ) THEN 
    108108         IF( ln_bdy ) THEN 
    109             CALL lbc_lnk( ssha, 'T', 1. )    ! Not sure that's necessary 
    110             CALL bdy_ssh( ssha )             ! Duplicate sea level across open boundaries 
     109            CALL lbc_lnk( ssh(:,:,Naa), 'T', 1. )    ! Not sure that's necessary 
     110            CALL bdy_ssh( ssh(:,:,Naa) )             ! Duplicate sea level across open boundaries 
    111111         ENDIF 
    112112      ENDIF 
     
    115115      !                                           !------------------------------! 
    116116      ! 
    117       IF(ln_ctl)   CALL prt_ctl( tab2d_1=ssha, clinfo1=' ssha  - : ', mask1=tmask ) 
     117      IF(ln_ctl)   CALL prt_ctl( tab2d_1=ssh(:,:,Naa), clinfo1=' ssha  - : ', mask1=tmask ) 
    118118      ! 
    119119      IF( ln_timing )   CALL timing_stop('ssh_nxt') 
     
    212212      !! ** Purpose :   achieve the sea surface  height time stepping by  
    213213      !!              applying Asselin time filter and swapping the arrays 
    214       !!              ssha  already computed in ssh_nxt   
     214      !!              ssh(Naa)  already computed in ssh_nxt   
    215215      !! 
    216216      !! ** Method  : - apply Asselin time fiter to now ssh (excluding the forcing 
    217       !!              from the filter, see Leclair and Madec 2010) and swap : 
    218       !!                sshn = ssha + rn_atfp * ( sshb -2 sshn + ssha ) 
    219       !!                            - rn_atfp * rn_Dt * ( emp_b - emp ) / rho0 
    220       !!                sshn = ssha 
    221       !! 
    222       !! ** action  : - sshb, sshn   : before & now sea surface height 
    223       !!                               ready for the next time step 
     217      !!              from the filter, see Leclair and Madec 2010) : 
     218      !!                ssh(Nnn) = ssh(Naa) + rn_atfp * ( ssh(Nbb) -2 ssh(Nnn) + ssh(Naa) ) 
     219      !!                                  - rn_atfp * rn_Dt * ( emp_b - emp ) / rho0 
     220      !!              - swap the time-level indexes 
     221      !! 
     222      !! ** action  : - ssh(Nbb), ssh(Nnn) : new before & now sea surface height 
     223      !!                                     ready for the next time step 
    224224      !! 
    225225      !! Reference  : Leclair, M., and G. Madec, 2009, Ocean Modelling. 
     
    227227      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    228228      ! 
     229      INTEGER  ::   isave   ! local integer 
    229230      REAL(wp) ::   zcoef   ! local scalar 
    230231      !!---------------------------------------------------------------------- 
     
    240241      IF ( l_1st_euler ) THEN    !==  Euler time-stepping  ==!   no filter, just swap 
    241242         ! 
    242          sshn(:,:) = ssha(:,:)               ! now    <-- after  (before already = now) 
     243         isave = Nnn 
     244         Nnn   = Naa                   ! now   <-- after  (before remains unchanged) 
     245         Naa   = isave                 ! after <-- previously now index 
    243246         ! 
    244247      ELSE                       !==  Leap-Frog time-stepping  ==!   Asselin filter + swap 
    245248         ! 
    246249         !                                   ! before <-- now filtered 
    247          sshb(:,:) = sshn(:,:) + rn_atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) ) 
     250         ssh(:,:,Nbb) = ssh(:,:,Nnn) + rn_atfp * ( ssh(:,:,Nbb) - 2 * ssh(:,:,Nnn) + ssh(:,:,Naa) ) 
    248251         IF( .NOT.ln_linssh ) THEN           ! before <-- with forcing removed 
    249252            zcoef = rn_atfp * rn_Dt * r1_rho0 
    250             sshb(:,:) = sshb(:,:) - zcoef * (     emp_b(:,:) - emp   (:,:)   & 
    251                &                             -    rnf_b(:,:) + rnf   (:,:)   & 
    252                &                             + fwfisf_b(:,:) - fwfisf(:,:)   ) * ssmask(:,:) 
     253            ssh(:,:,Nbb) = ssh(:,:,Nbb) - zcoef * (     emp_b(:,:) - emp   (:,:)   & 
     254               &                                   -    rnf_b(:,:) + rnf   (:,:)   & 
     255               &                                   + fwfisf_b(:,:) - fwfisf(:,:)   ) * ssmask(:,:) 
    253256         ENDIF 
    254          sshn(:,:) = ssha(:,:)               ! now <-- after 
    255       ENDIF 
    256       ! 
    257       IF(ln_ctl)   CALL prt_ctl( tab2d_1=sshb, clinfo1=' sshb  - : ', mask1=tmask ) 
     257         isave = Nnn 
     258         Nnn   = Naa                   ! now    <-- after 
     259         Naa   = isave                 ! after  <-- previously now index 
     260      ENDIF 
     261      ! 
     262      IF(ln_ctl)   CALL prt_ctl( tab2d_1=ssh(:,:,Nbb), clinfo1=' sshb  - : ', mask1=tmask ) 
    258263      ! 
    259264      IF( ln_timing )   CALL timing_stop('ssh_swp') 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/wet_dry.F90

    r9939 r10009  
    117117 
    118118 
    119    SUBROUTINE wad_lmt( sshb1, sshemp, p2dt ) 
     119   SUBROUTINE wad_lmt( pssh, sshemp, p2dt ) 
    120120      !!---------------------------------------------------------------------- 
    121121      !!                  ***  ROUTINE wad_lmt  *** 
     
    127127      !! ** Action  : - calculate flux limiter and W/D flag 
    128128      !!---------------------------------------------------------------------- 
    129       REAL(wp), DIMENSION(:,:), INTENT(inout) ::   sshb1        !!gm DOCTOR names: should start with p ! 
     129      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   pssh      ! before sea-surface height 
    130130      REAL(wp), DIMENSION(:,:), INTENT(in   ) ::   sshemp 
    131131      REAL(wp)                , INTENT(in   ) ::   p2dt 
     
    178178               &         + MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji,  jj-1) , 0._wp )  
    179179            ! 
    180             zdep2 = ht_0(ji,jj) + sshb1(ji,jj) - rn_wdmin1 
     180            zdep2 = ht_0(ji,jj) + pssh(ji,jj) - rn_wdmin1 
    181181            IF( zdep2 <= 0._wp ) THEN     ! add more safty, but not necessary 
    182                sshb1(ji,jj) = rn_wdmin1 - ht_0(ji,jj) 
     182               pssh(ji,jj) = rn_wdmin1 - ht_0(ji,jj) 
    183183               IF(zflxu(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = 0._wp 
    184184               IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp 
     
    191191      ! 
    192192      !           ! HPG limiter from jholt 
    193       wdramp(:,:) = min((ht_0(:,:) + sshb1(:,:) - rn_wdmin1)/(rn_wdmin0 - rn_wdmin1),1.0_wp) 
     193      wdramp(:,:) = min((ht_0(:,:) + pssh(:,:) - rn_wdmin1)/(rn_wdmin0 - rn_wdmin1),1.0_wp) 
    194194      !jth assume don't need a lbc_lnk here 
    195195      DO jj = 1, jpjm1 
     
    221221               ! 
    222222               zdep1 = (zzflxp + zzflxn) * p2dt / ztmp 
    223                zdep2 = ht_0(ji,jj) + sshb1(ji,jj) - rn_wdmin1 - p2dt * sshemp(ji,jj) 
     223               zdep2 = ht_0(ji,jj) + pssh(ji,jj) - rn_wdmin1 - p2dt * sshemp(ji,jj) 
    224224               ! 
    225225               IF( zdep1 > zdep2 ) THEN 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/IOM/iom.F90

    r9939 r10009  
    408408 
    409409        i = 0 
    410         i = i + 1; fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
    411         i = i + 1; fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
    412         i = i + 1; fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
    413         i = i + 1; fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
    414         i = i + 1; fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
    415         i = i + 1; fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
    416         i = i + 1; fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
    417         i = i + 1; fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
    418         i = i + 1; fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
    419         i = i + 1; fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
    420         i = i + 1; fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
    421         i = i + 1; fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
    422         i = i + 1; fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
    423         i = i + 1; fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
    424         i = i + 1; fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
    425         i = i + 1; fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
    426         i = i + 1; fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
    427         i = i + 1; fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
    428         i = i + 1; fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
    429         i = i + 1; fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
    430         i = i + 1; fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
    431         i = i + 1; fields(i)%vname="avt_k";            fields(i)%grid="grid_N_3D" 
    432         i = i + 1; fields(i)%vname="avm_k";            fields(i)%grid="grid_N_3D" 
    433         i = i + 1; fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
    434         i = i + 1; fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
    435         i = i + 1; fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
    436         i = i + 1; fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
    437         i = i + 1; fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
    438         i = i + 1; fields(i)%vname="greenland_icesheet_mass" 
    439                                                fields(i)%grid="grid_scalar" 
    440         i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" 
    441                                                fields(i)%grid="grid_scalar" 
    442         i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" 
    443                                                fields(i)%grid="grid_scalar" 
    444         i = i + 1; fields(i)%vname="antarctica_icesheet_mass" 
    445                                                fields(i)%grid="grid_scalar" 
    446         i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" 
    447                                                fields(i)%grid="grid_scalar" 
    448         i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" 
    449                                                fields(i)%grid="grid_scalar" 
    450         i = i + 1; fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
    451         i = i + 1; fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
    452         i = i + 1; fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
    453         i = i + 1; fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
    454         i = i + 1; fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
    455         i = i + 1; fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
    456         i = i + 1; fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
    457         i = i + 1; fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
    458         i = i + 1; fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
    459         i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
    460         i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
    461         i = i + 1; fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
    462         i = i + 1; fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
    463         i = i + 1; fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
    464         i = i + 1; fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
    465         i = i + 1; fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
    466         i = i + 1; fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
    467         i = i + 1; fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
    468         i = i + 1; fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
    469         i = i + 1; fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
    470         i = i + 1; fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
    471         i = i + 1; fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
    472         i = i + 1; fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
    473         i = i + 1; fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
    474         i = i + 1; fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
    475         i = i + 1; fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
    476         i = i + 1; fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
    477         i = i + 1; fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
    478         i = i + 1; fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
    479         i = i + 1; fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
    480         i = i + 1; fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
    481         i = i + 1; fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
    482         i = i + 1; fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
    483         i = i + 1; fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
    484         i = i + 1; fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
    485         i = i + 1; fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
    486         i = i + 1; fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
    487         i = i + 1; fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
    488         i = i + 1; fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
    489         i = i + 1; fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
    490         i = i + 1; fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
    491         i = i + 1; fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
    492         i = i + 1; fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
    493         i = i + 1; fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
    494         i = i + 1; fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
    495         i = i + 1; fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
    496         i = i + 1; fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
    497         i = i + 1; fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
    498         i = i + 1; fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
    499         i = i + 1; fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
    500         i = i + 1; fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
    501         i = i + 1; fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
    502         i = i + 1; fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
    503         i = i + 1; fields(i)%vname="hmxl_n";         fields(i)%grid="grid_N_3D" 
    504         i = i + 1; fields(i)%vname="un_bf";          fields(i)%grid="grid_N" 
    505         i = i + 1; fields(i)%vname="vn_bf";          fields(i)%grid="grid_N" 
    506         i = i + 1; fields(i)%vname="hbl";            fields(i)%grid="grid_N" 
    507         i = i + 1; fields(i)%vname="hbli";           fields(i)%grid="grid_N" 
    508         i = i + 1; fields(i)%vname="wn";             fields(i)%grid="grid_N_3D" 
     410        i = i + 1; fields(i)%vname="rdt"                             ;   fields(i)%grid="grid_scalar" 
     411        i = i + 1; fields(i)%vname="un"                              ;   fields(i)%grid="grid_N_3D" 
     412        i = i + 1; fields(i)%vname="ub"                              ;   fields(i)%grid="grid_N_3D" 
     413        i = i + 1; fields(i)%vname="vn"                              ;   fields(i)%grid="grid_N_3D" 
     414        i = i + 1; fields(i)%vname="vb"                              ;   fields(i)%grid="grid_N_3D"   
     415        i = i + 1; fields(i)%vname="tn"                              ;   fields(i)%grid="grid_N_3D" 
     416        i = i + 1; fields(i)%vname="tb"                              ;   fields(i)%grid="grid_N_3D" 
     417        i = i + 1; fields(i)%vname="sn"                              ;   fields(i)%grid="grid_N_3D" 
     418        i = i + 1; fields(i)%vname="sb"                              ;   fields(i)%grid="grid_N_3D" 
     419        i = i + 1; fields(i)%vname='sshn'                            ;   fields(i)%grid="grid_N" 
     420        i = i + 1; fields(i)%vname='sshb'                            ;   fields(i)%grid="grid_N" 
     421        i = i + 1; fields(i)%vname="rhop"                            ;   fields(i)%grid="grid_N_3D" 
     422        i = i + 1; fields(i)%vname="kt"                              ;   fields(i)%grid="grid_scalar" 
     423        i = i + 1; fields(i)%vname="ndastp"                          ;   fields(i)%grid="grid_scalar" 
     424        i = i + 1; fields(i)%vname="adatrj"                          ;   fields(i)%grid="grid_scalar" 
     425        i = i + 1; fields(i)%vname="utau_b"                          ;   fields(i)%grid="grid_N" 
     426        i = i + 1; fields(i)%vname="vtau_b"                          ;   fields(i)%grid="grid_N" 
     427        i = i + 1; fields(i)%vname="qns_b"                           ;   fields(i)%grid="grid_N" 
     428        i = i + 1; fields(i)%vname="emp_b"                           ;   fields(i)%grid="grid_N" 
     429        i = i + 1; fields(i)%vname="sfx_b"                           ;   fields(i)%grid="grid_N" 
     430        i = i + 1; fields(i)%vname="en"                              ;   fields(i)%grid="grid_N_3D"  
     431        i = i + 1; fields(i)%vname="avt_k"                           ;   fields(i)%grid="grid_N_3D" 
     432        i = i + 1; fields(i)%vname="avm_k"                           ;   fields(i)%grid="grid_N_3D" 
     433        i = i + 1; fields(i)%vname="dissl"                           ;   fields(i)%grid="grid_N_3D" 
     434        i = i + 1; fields(i)%vname="sbc_hc_b"                        ;   fields(i)%grid="grid_N" 
     435        i = i + 1; fields(i)%vname="sbc_sc_b"                        ;   fields(i)%grid="grid_N" 
     436        i = i + 1; fields(i)%vname="qsr_hc_b"                        ;   fields(i)%grid="grid_N_3D" 
     437        i = i + 1; fields(i)%vname="fraqsr_1lev"                     ;   fields(i)%grid="grid_N" 
     438        i = i + 1; fields(i)%vname="greenland_icesheet_mass"         ;   fields(i)%grid="grid_scalar" 
     439        i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed"   ;   fields(i)%grid="grid_scalar" 
     440        i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc"     ;   fields(i)%grid="grid_scalar" 
     441        i = i + 1; fields(i)%vname="antarctica_icesheet_mass"        ;   fields(i)%grid="grid_scalar" 
     442        i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed"  ;   fields(i)%grid="grid_scalar" 
     443        i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc"    ;   fields(i)%grid="grid_scalar" 
     444        i = i + 1; fields(i)%vname="frc_v"                           ;   fields(i)%grid="grid_scalar" 
     445        i = i + 1; fields(i)%vname="frc_t"                           ;   fields(i)%grid="grid_scalar" 
     446        i = i + 1; fields(i)%vname="frc_s"                           ;   fields(i)%grid="grid_scalar" 
     447        i = i + 1; fields(i)%vname="frc_wn_t"                        ;   fields(i)%grid="grid_scalar" 
     448        i = i + 1; fields(i)%vname="frc_wn_s"                        ;   fields(i)%grid="grid_scalar" 
     449        i = i + 1; fields(i)%vname="ssh_ini"                         ;   fields(i)%grid="grid_N" 
     450        i = i + 1; fields(i)%vname="e3t_ini"                         ;   fields(i)%grid="grid_N_3D" 
     451        i = i + 1; fields(i)%vname="hc_loc_ini"                      ;   fields(i)%grid="grid_N_3D" 
     452        i = i + 1; fields(i)%vname="sc_loc_ini"                      ;   fields(i)%grid="grid_N_3D" 
     453        i = i + 1; fields(i)%vname="ssh_hc_loc_ini"                  ;   fields(i)%grid="grid_N" 
     454        i = i + 1; fields(i)%vname="ssh_sc_loc_ini"                  ;   fields(i)%grid="grid_N" 
     455        i = i + 1; fields(i)%vname="tilde_e3t_b"                     ;   fields(i)%grid="grid_N" 
     456        i = i + 1; fields(i)%vname="tilde_e3t_n"                     ;   fields(i)%grid="grid_N" 
     457        i = i + 1; fields(i)%vname="hdiv_lf"                         ;   fields(i)%grid="grid_N" 
     458        i = i + 1; fields(i)%vname="ub2_b"                           ;   fields(i)%grid="grid_N" 
     459        i = i + 1; fields(i)%vname="vb2_b"                           ;   fields(i)%grid="grid_N" 
     460        i = i + 1; fields(i)%vname="sshbb_e"                         ;   fields(i)%grid="grid_N" 
     461        i = i + 1; fields(i)%vname="ubb_e"                           ;   fields(i)%grid="grid_N" 
     462        i = i + 1; fields(i)%vname="vbb_e"                           ;   fields(i)%grid="grid_N" 
     463        i = i + 1; fields(i)%vname="sshb_e"                          ;   fields(i)%grid="grid_N" 
     464        i = i + 1; fields(i)%vname="ub_e"                            ;   fields(i)%grid="grid_N" 
     465        i = i + 1; fields(i)%vname="vb_e"                            ;   fields(i)%grid="grid_N" 
     466        i = i + 1; fields(i)%vname="fwf_isf_b"                       ;   fields(i)%grid="grid_N" 
     467        i = i + 1; fields(i)%vname="isf_sc_b"                        ;   fields(i)%grid="grid_N" 
     468        i = i + 1; fields(i)%vname="isf_hc_b"                        ;   fields(i)%grid="grid_N" 
     469        i = i + 1; fields(i)%vname="ssh_ibb"                         ;   fields(i)%grid="grid_N" 
     470        i = i + 1; fields(i)%vname="rnf_b"                           ;   fields(i)%grid="grid_N" 
     471        i = i + 1; fields(i)%vname="rnf_hc_b"                        ;   fields(i)%grid="grid_N" 
     472        i = i + 1; fields(i)%vname="rnf_sc_b"                        ;   fields(i)%grid="grid_N" 
     473        i = i + 1; fields(i)%vname="nn_fsbc"                         ;   fields(i)%grid="grid_scalar" 
     474        i = i + 1; fields(i)%vname="ssu_m"                           ;   fields(i)%grid="grid_N" 
     475        i = i + 1; fields(i)%vname="ssv_m"                           ;   fields(i)%grid="grid_N" 
     476        i = i + 1; fields(i)%vname="sst_m"                           ;   fields(i)%grid="grid_N" 
     477        i = i + 1; fields(i)%vname="sss_m"                           ;   fields(i)%grid="grid_N" 
     478        i = i + 1; fields(i)%vname="ssh_m"                           ;   fields(i)%grid="grid_N" 
     479        i = i + 1; fields(i)%vname="e3t_m"                           ;   fields(i)%grid="grid_N" 
     480        i = i + 1; fields(i)%vname="frq_m"                           ;   fields(i)%grid="grid_N" 
     481        i = i + 1; fields(i)%vname="avmb"                            ;   fields(i)%grid="grid_vector" 
     482        i = i + 1; fields(i)%vname="avtb"                            ;   fields(i)%grid="grid_vector" 
     483        i = i + 1; fields(i)%vname="ub2_i_b"                         ;   fields(i)%grid="grid_N" 
     484        i = i + 1; fields(i)%vname="vb2_i_b"                         ;   fields(i)%grid="grid_N" 
     485        i = i + 1; fields(i)%vname="ntime"                           ;   fields(i)%grid="grid_scalar" 
     486        i = i + 1; fields(i)%vname="Dsst"                            ;   fields(i)%grid="grid_scalar" 
     487        i = i + 1; fields(i)%vname="tmask"                           ;   fields(i)%grid="grid_N_3D" 
     488        i = i + 1; fields(i)%vname="umask"                           ;   fields(i)%grid="grid_N_3D" 
     489        i = i + 1; fields(i)%vname="vmask"                           ;   fields(i)%grid="grid_N_3D" 
     490        i = i + 1; fields(i)%vname="smask"                           ;   fields(i)%grid="grid_N_3D" 
     491        i = i + 1; fields(i)%vname="gdepw_n"                         ;   fields(i)%grid="grid_N_3D" 
     492        i = i + 1; fields(i)%vname="e3t_n"                           ;   fields(i)%grid="grid_N_3D" 
     493        i = i + 1; fields(i)%vname="e3u_n"                           ;   fields(i)%grid="grid_N_3D" 
     494        i = i + 1; fields(i)%vname="e3v_n"                           ;   fields(i)%grid="grid_N_3D" 
     495        i = i + 1; fields(i)%vname="surf_ini"                        ;   fields(i)%grid="grid_N" 
     496        i = i + 1; fields(i)%vname="e3t_b"                           ;   fields(i)%grid="grid_N_3D" 
     497        i = i + 1; fields(i)%vname="hmxl_n"                          ;   fields(i)%grid="grid_N_3D" 
     498        i = i + 1; fields(i)%vname="un_bf"                           ;   fields(i)%grid="grid_N" 
     499        i = i + 1; fields(i)%vname="vn_bf"                           ;   fields(i)%grid="grid_N" 
     500        i = i + 1; fields(i)%vname="hbl"                             ;   fields(i)%grid="grid_N" 
     501        i = i + 1; fields(i)%vname="hbli"                            ;   fields(i)%grid="grid_N" 
     502        i = i + 1; fields(i)%vname="wn"                              ;   fields(i)%grid="grid_N_3D" 
    509503 
    510504        IF( i-1 > max_rst_fields) THEN 
     
    523517      !!--------------------------------------------------------------------- 
    524518!sets enabled = .TRUE. for each field in restart file 
    525    CHARACTER(len=*) :: cdrst_file 
     519      CHARACTER(len=*) :: cdrst_file 
    526520#if defined key_iomput 
    527    TYPE(xios_field) :: field_hdl 
    528    TYPE(xios_file) :: file_hdl 
    529    TYPE(xios_filegroup) :: filegroup_hdl 
    530    INTEGER :: i 
    531    CHARACTER(lc)  ::   clpath 
     521      TYPE(xios_field) :: field_hdl 
     522      TYPE(xios_file) :: file_hdl 
     523      TYPE(xios_filegroup) :: filegroup_hdl 
     524      INTEGER :: i 
     525      CHARACTER(lc)  ::   clpath 
     526      !!--------------------------------------------------------------------- 
    532527 
    533528!set name of the restart file and enable available fields 
     
    567562#endif 
    568563   END SUBROUTINE iom_set_rstw_active 
     564 
    569565 
    570566   SUBROUTINE iom_set_rst_context( )  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/diaobs.F90

    r9939 r10009  
    498498      USE dom_oce, ONLY : gdept_n, gdept_1d   ! Ocean space and time domain variables 
    499499      USE phycst , ONLY : rday                ! Physical constants 
    500       USE oce    , ONLY : tsn, un, vn, sshn   ! Ocean dynamics and tracers variables 
     500      USE oce    , ONLY : tsn, un, vn, ssh    ! Ocean dynamics and tracers variables 
    501501      USE phycst , ONLY : rday                ! Physical constants 
    502502#if defined  key_si3 
     
    596596               zsurfvar(:,:) = tsn(:,:,1,jp_tem) 
    597597            CASE('sla') 
    598                zsurfvar(:,:) = sshn(:,:) 
     598               zsurfvar(:,:) = ssh(:,:,Nnn) 
    599599            CASE('sss') 
    600600               zsurfvar(:,:) = tsn(:,:,1,jp_sal) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/obs_read_altbias.F90

    r9598 r10009  
    2828      & e2t,   & 
    2929      & gphit 
    30    USE oce, ONLY : &           ! Model variables 
    31       & sshn 
    3230   USE obs_inter_h2d 
    3331   USE obs_utils               ! Various observation tools 
     
    3533 
    3634   IMPLICIT NONE 
    37  
    38    !! * Routine accessibility 
    3935   PRIVATE 
    4036 
    41    PUBLIC obs_rea_altbias     ! Read the altimeter bias 
     37   PUBLIC   obs_rea_altbias   ! Read the altimeter bias 
    4238 
    4339   !!---------------------------------------------------------------------- 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/obs_readmdt.F90

    r9598 r10009  
    2525      &                    tmask, tmask_i, e1e2t, gphit, glamt 
    2626   USE obs_const, ONLY :   obfillflt      ! Fillvalue 
    27    USE oce      , ONLY :   sshn           ! Model variables 
     27   USE oce      , ONLY :   ssh            ! Model variables 
    2828 
    2929   IMPLICIT NONE 
     
    216216          zarea = zarea + zdxdy 
    217217          zeta1 = zeta1 + mdt(ji,jj) * zdxdy 
    218           zeta2 = zeta2 + sshn (ji,jj) * zdxdy 
     218          zeta2 = zeta2 + ssh(ji,jj,Nnn) * zdxdy 
    219219        END DO       
    220220      END DO 
     
    241241      IF(lwp) THEN 
    242242         WRITE(numout,*) 
    243          WRITE(numout,*) ' obs_readmdt : rn_mdtcutoff     = ', rn_mdtcutoff 
     243         WRITE(numout,*) ' obs_readmdt : rn_mdtcutoff  = ', rn_mdtcutoff 
    244244         WRITE(numout,*) ' -----------   zcorr_mdt     = ', zcorr_mdt 
    245245         WRITE(numout,*) '               zcorr_bcketa  = ', zcorr_bcketa 
    246246         WRITE(numout,*) '               zcorr         = ', zcorr 
    247          WRITE(numout,*) '               nn_msshc        = ', nn_msshc 
     247         WRITE(numout,*) '               nn_msshc      = ', nn_msshc 
    248248      ENDIF 
    249249 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/obs_sstbias.F90

    r9023 r10009  
    2727      & gphit, & 
    2828      & glamt 
    29    USE oce, ONLY : &           ! Model variables 
    30       & sshn 
    3129   USE obs_inter_h2d 
    3230   USE obs_utils               ! Various observation tools 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbccpl.F90

    r9939 r10009  
    3232   USE cpl_oasis3     ! OASIS3 coupling 
    3333   USE geo2ocean      !  
    34    USE oce     , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 
     34   USE oce     , ONLY : tsn, un, vn, ssh, ub, vb, fraqsr_1lev 
    3535   USE ocealb         !  
    3636   USE eosbn2         !  
     
    24672467         IF( ln_apr_dyn ) THEN   
    24682468            IF( kt /= nit000 ) THEN   
    2469                ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
     2469               ztmp1(:,:) = ssh(:,:,Nbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
    24702470            ELSE   
    2471                ztmp1(:,:) = sshb(:,: 
     2471               ztmp1(:,:) = ssh(:,:,Nbb 
    24722472            ENDIF   
    24732473         ELSE   
    2474             ztmp1(:,:) = sshn(:,: 
     2474            ztmp1(:,:) = ssh(:,:,Nnn 
    24752475         ENDIF   
    24762476         CALL cpl_snd( jps_wlev  , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info )  
     
    24822482         !                          ! removed inverse barometer ssh when Patm 
    24832483         !                          forcing is used (for sea-ice dynamics) 
    2484          IF( ln_apr_dyn ) THEN   ;   ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    2485          ELSE                    ;   ztmp1(:,:) = sshn(:,:) 
     2484         IF( ln_apr_dyn ) THEN   ;   ztmp1(:,:) = ssh(:,:,Nbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     2485         ELSE                    ;   ztmp1(:,:) = ssh(:,:,Nnn) 
    24862486         ENDIF 
    24872487         CALL cpl_snd( jps_ssh   , isec, RESHAPE ( ztmp1            , (/jpi,jpj,1/) ), info ) 
    2488  
    24892488      ENDIF 
    24902489      !                                                        ! SSS 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbcfwb.F90

    r9939 r10009  
    127127            a_fwb_b = a_fwb                           ! mean sea level taking into account the ice+snow 
    128128                                                      ! sum over the global domain 
    129             a_fwb   = glob_sum( e1e2t(:,:) * ( sshn(:,:) + snwice_mass(:,:) * r1_rho0 ) ) 
     129            a_fwb   = glob_sum( e1e2t(:,:) * ( ssh(:,:,Nnn) + snwice_mass(:,:) * r1_rho0 ) ) 
    130130            a_fwb   = a_fwb * 1.e+3 / ( area * rday * 365. )     ! convert in Kg/m3/s = mm/s 
    131131!!gm        !                                                      !!bug 365d year  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbcice_cice.F90

    r10001 r10009  
    227227      IF( .NOT.ln_rstart ) THEN 
    228228         IF( ln_ice_embd ) THEN            ! embedded sea-ice: deplete the initial ssh below sea-ice area 
    229             sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rho0 
    230             sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rho0 
    231  
    232 !!gm This should be put elsewhere....   (same remark for limsbc) 
    233 !!gm especially here it is assumed zstar coordinate, but it can be ztilde.... 
    234             IF( .NOT.ln_linssh ) THEN 
     229            ssh(:,:,Nnn) = ssh(:,:,Nnn) - snwice_mass(:,:) * r1_rho0 
     230            ssh(:,:,Nbb) = ssh(:,:,Nbb) - snwice_mass(:,:) * r1_rho0 
     231            ! 
     232            IF( .NOT.ln_linssh ) THEN     ! modified the now and before vertical mesh and scale factors  
    235233               ! 
    236                DO jk = 1,jpkm1                     ! adjust initial vertical scale factors 
    237                   e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshn(:,:) * r1_ht_0(:,:) ) 
    238                   e3t_b(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshb(:,:) * r1_ht_0(:,:) ) 
    239                END DO 
    240                e3t_a(:,:,:) = e3t_b(:,:,:) 
    241                ! Reconstruction of all vertical scale factors at now and before time-steps 
    242                ! ============================================================================= 
    243                ! Horizontal scale factor interpolations 
    244                ! -------------------------------------- 
    245                CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 
    246                CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 
    247                CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
    248                CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
    249                CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 
    250                ! Vertical scale factor interpolations 
    251                ! ------------------------------------ 
    252                CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W'  ) 
    253                CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
    254                CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
    255                CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
    256                CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
    257                ! t- and w- points depth 
    258                ! ---------------------- 
    259                gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    260                gdepw_n(:,:,1) = 0.0_wp 
    261                gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 
    262                DO jk = 2, jpk 
    263                   gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 
    264                   gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 
    265                   gde3w_n(:,:,jk) = gdept_n(:,:,jk  ) - sshn   (:,:) 
    266                END DO 
     234               !                             !* BEFORE fields :  
     235               CALL ssh2e3_before               ! set:      hu , hv , r1_hu, r1_hv  
     236               !                                    !  e3t, e3w, e3u, e3uw, e3v, e3vw 
     237               ! 
     238               !                             !* NOW fields :  
     239               CALL ssh2e3_now                  ! set: ht , hu , hv , r1_hu, r1_hv 
     240               !                                !      e3t, e3w, e3u, e3uw, e3v, e3vw, e3f 
     241               !                                !      gdept_n, gdepw_n, gde3w_n 
    267242            ENDIF 
    268243         ENDIF 
     
    290265      ENDIF 
    291266 
    292       ztmp(:,:)=0.0 
     267      ztmp(:,:) = 0._wp 
    293268 
    294269! Aggregate ice concentration already set in cice_sbc_out (or cice_sbc_init on  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbcssm.F90

    r9939 r10009  
    7575         sss_m(:,:) = zts(:,:,jp_sal) 
    7676         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    77          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    78          ELSE                    ;   ssh_m(:,:) = sshn(:,:) 
     77         IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh(:,:,Nnn) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     78         ELSE                    ;   ssh_m(:,:) = ssh(:,:,Nnn) 
    7979         ENDIF 
    8080         ! 
     
    9898            sss_m(:,:) = zcoef * zts(:,:,jp_sal) 
    9999            !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    100             IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
    101             ELSE                    ;   ssh_m(:,:) = zcoef * sshn(:,:) 
     100            IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( ssh(:,:,Nnn) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
     101            ELSE                    ;   ssh_m(:,:) = zcoef *   ssh(:,:,Nnn) 
    102102            ENDIF 
    103103            ! 
     
    126126         sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 
    127127         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    128          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    129          ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
     128         IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + ssh(:,:,Nnn) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     129         ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + ssh(:,:,Nnn) 
    130130         ENDIF 
    131131         ! 
     
    247247         ENDIF 
    248248         sss_m(:,:) = tsn  (:,:,1,jp_sal) 
    249          ssh_m(:,:) = sshn (:,:) 
     249         ssh_m(:,:) = ssh  (:,:,Nnn) 
    250250         e3t_m(:,:) = e3t_n(:,:,1) 
    251251         frq_m(:,:) = 1._wp 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/trasbc.F90

    r9939 r10009  
    125125         DO ji = fs_2, fs_jpim1   ! vector opt. 
    126126            IF ( ll_wd ) THEN     ! If near WAD point limit the flux for now 
    127                IF ( sshn(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN 
     127               IF ( ssh(ji,jj,Nnn) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN 
    128128                  sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj)   ! non solar heat flux 
    129                ELSE IF ( sshn(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN 
     129               ELSE IF ( ssh(ji,jj,Nnn) + ht_0(ji,jj) >  rn_wdmin1 ) THEN 
    130130                  sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj) & 
    131                        &                * tanh ( 5._wp * ( ( sshn(ji,jj) + ht_0(ji,jj) - rn_wdmin1 ) * r_rn_wdmin1 ) ) 
     131                     &                  * tanh ( 5._wp * ( ( ssh(ji,jj,Nnn) + ht_0(ji,jj) - rn_wdmin1 ) * r_rn_wdmin1 ) ) 
    132132               ELSE 
    133133                  sbc_tsc(ji,jj,jp_tem) = 0._wp 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRD/trdpen.F90

    r9598 r10009  
    114114                                !IF( ln_linssh ) THEN                   ! cst volume : ssh term (otherwise include in e3t variation) 
    115115                                !   ALLOCATE( z2d(jpi,jpj) ) 
    116                                 !   z2d(:,:) = ( ssha(:,:) - sshb(:,:) )                 & 
     116                                !   z2d(:,:) = ( ssh(:,:,Naa) - ssh(:,:,Nbb) )          & 
    117117                                !      &     * (   dPE_dt(:,:,1) * tsn(:,:,1,jp_tem)    & 
    118118                                !      &         + dPE_ds(:,:,1) * tsn(:,:,1,jp_sal)  ) / ( e3t_n(:,:,1) * pdt ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/nemogcm.F90

    r10001 r10009  
    424424         ! 
    425425      ENDIF 
    426       !                                      ! Domain decomposition 
    427       CALL mpp_init                          ! MPP 
    428  
    429       ! Now we know the dimensions of the grid and numout has been set: we can allocate arrays 
    430       CALL nemo_alloc() 
     426       
     427      CALL mpp_init                          ! MPP domain decomposition 
     428 
     429      CALL dom_nam                           ! set the time (Nt) by reading namelist namrun and namdom 
     430 
     431      !                                      ! allocate arrays (here, as we know the dimensions of both  
     432      !                                      !                  the grid and number of time-level used, and 
     433      CALL nemo_alloc()                      !                  numout has been set: we can allocate arrays) 
    431434 
    432435      !                             !-------------------------------! 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/oce.F90

    r10001 r10009  
    3434   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub_b   ,  un_b  ,  ua_b  !: Barotropic velocities at u-point [m/s] 
    3535   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   vb_b   ,  vn_b  ,  va_b  !: Barotropic velocities at v-point [m/s] 
    36    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshb   ,  sshn  , ssha   !: sea surface height at t-point [m] 
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ssh                    !: sea surface height at t-point    [m] 
    3737 
    3838!!gm??   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ssh  , sshu   , sshv   !: sea surface height at t-, u- v-points [m] 
     
    9393         &      rhd  (jpi,jpj,jpk)      , rhop (jpi,jpj,jpk)                              , STAT=ierr(1) ) 
    9494         ! 
    95       ALLOCATE( sshb  (jpi,jpj)  , sshn   (jpi,jpj) , ssha(jpi,jpj)   ,     & 
    96          &      ub_b(jpi,jpj)     , un_b(jpi,jpj)   , ua_b(jpi,jpj)   ,     & 
     95      ALLOCATE( ub_b(jpi,jpj)     , un_b(jpi,jpj)   , ua_b(jpi,jpj)   ,     & 
    9796         &      vb_b(jpi,jpj)     , vn_b(jpi,jpj)   , va_b(jpi,jpj)   ,     & 
    9897         &      spgu  (jpi,jpj)   , spgv(jpi,jpj)                     ,     & 
     
    102101         &      grui(jpi,jpj)     , grvi(jpi,jpj)                     ,     & 
    103102         &      riceload(jpi,jpj)                                     , STAT=ierr(2) ) 
     103         ! 
     104          
     105          
     106      ALLOCATE( ssh(jpi,jpj,Nt) , STAT=ierr(5) ) 
     107 
     108 
    104109         ! 
    105110      ALLOCATE( fraqsr_1lev(jpi,jpj) , STAT=ierr(3) ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/par_oce.F90

    r10001 r10009  
    1313   PUBLIC 
    1414 
    15  
    16    !! 
    17    INTEGER, PUBLIC ::   Nnn, Np1, Nm1   ! =now, before, after 
    18  
    19    INTEGER, PUBLIC ::   Nb, Nn, Na      ! before, now, after  index 
    20  
    21  
    22  
    23    !!---------------------------------------------------------------------- 
    24    !!                   namcfg namelist parameters 
    25    !!---------------------------------------------------------------------- 
    26    LOGICAL       ::   ln_read_cfg      !: (=T) read the domain configuration file or (=F) not 
    27    CHARACTER(lc) ::      cn_domcfg        !: filename the configuration file to be read 
    28    LOGICAL       ::   ln_write_cfg     !: (=T) create the domain configuration file 
    29    CHARACTER(lc) ::      cn_domcfg_out    !: filename the configuration file to be read 
    30    ! 
    31    LOGICAL       ::   ln_use_jattr     !: input file read offset 
    32    !                                   !  Use file global attribute: open_ocean_jstart to determine start j-row  
    33    !                                   !  when reading input from those netcdf files that have the  
    34    !                                   !  attribute defined. This is designed to enable input files associated  
    35    !                                   !  with the extended grids used in the under ice shelf configurations to  
    36    !                                   !  be used without redundant rows when the ice shelves are not in use. 
    37    !  
    38  
    3915   !!--------------------------------------------------------------------- 
    4016   !! Domain Matrix size  
    4117   !!--------------------------------------------------------------------- 
    42    ! configuration name & resolution   (required only in ORCA family case) 
    43    CHARACTER(lc) ::   cn_cfg           !: name of the configuration 
    44    INTEGER       ::   nn_cfg           !: resolution of the configuration  
     18   ! time dimension and index 
     19   INTEGER, PUBLIC ::   Nt             !: number of time-level used 
     20   INTEGER, PUBLIC ::   Nbb, Nnn, Naa  !: before, now, after time-level indices 
    4521 
    4622   ! global domain size               !!! * total computational domain * 
     
    4824   INTEGER       ::   jpjglo           !: 2nd    -                  -    --> j-direction 
    4925   INTEGER       ::   jpkglo           !: 3nd    -                  -    --> k levels 
     26!!gm  to be used in futur (?): 
     27!!   INTEGER, PUBLIC ::   Niglo , Njglo , Nkglo !: global domain size 
    5028 
    5129   ! global domain size for AGRIF     !!! * total AGRIF computational domain * 
     
    6543   INTEGER, PUBLIC ::   jpimax! = ( jpiglo-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls !: maximum jpi 
    6644   INTEGER, PUBLIC ::   jpjmax! = ( jpjglo-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls !: maximum jpj 
     45!!gm  to be used in futur (?): 
     46!!   INTEGER, PUBLIC ::   Ni  , Nj   , Nk     !: local domain size 
    6747 
    6848   !!--------------------------------------------------------------------- 
     
    8565 
    8666   !!---------------------------------------------------------------------- 
     67   !!                   namcfg namelist parameters 
     68   !!---------------------------------------------------------------------- 
     69   LOGICAL       ::   ln_read_cfg      !: (=T) read the domain configuration file or (=F) not 
     70   CHARACTER(lc) ::      cn_domcfg        !: filename the configuration file to be read 
     71   LOGICAL       ::   ln_write_cfg     !: (=T) create the domain configuration file 
     72   CHARACTER(lc) ::      cn_domcfg_out    !: filename the configuration file to be read 
     73   LOGICAL       ::   ln_use_jattr     !: input file read offset 
     74   !                                   !  Use file global attribute: open_ocean_jstart to determine start j-row  
     75   !                                   !  when reading input from those netcdf files that have the  
     76   !                                   !  attribute defined. This is designed to enable input files associated  
     77   !                                   !  with the extended grids used in the under ice shelf configurations to  
     78   !                                   !  be used without redundant rows when the ice shelves are not in use. 
     79 
     80   ! configuration name & resolution   (required only in ORCA family case) 
     81   CHARACTER(lc) ::   cn_cfg           !: name of the configuration 
     82   INTEGER       ::   nn_cfg           !: resolution of the configuration  
     83 
     84   !!---------------------------------------------------------------------- 
    8785   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
    8886   !! $Id$  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/stpctl.F90

    r9808 r10009  
    102102      !                                   !==  test of extrema  ==! 
    103103      IF( ll_wd ) THEN 
    104          zmax(1) = MAXVAL(  ABS( sshn(:,:) + ssh_ref*tmask(:,:,1) )  )        ! ssh max  
     104         zmax(1) = MAXVAL(  ABS( ssh(:,:,Nnn) + ssh_ref*tmask(:,:,1) )  )        ! ssh max  
    105105      ELSE 
    106          zmax(1) = MAXVAL(  ABS( sshn(:,:) )  )                               ! ssh max 
     106         zmax(1) = MAXVAL(  ABS( ssh(:,:,Nnn) )  )                               ! ssh max 
    107107      ENDIF 
    108108      zmax(2) = MAXVAL(  ABS( un(:,:,:) )  )                                  ! velocity max (zonal only) 
     
    129129         &  ISNAN( zmax(1) + zmax(2) + zmax(3) )  ) THEN   ! NaN encounter in the tests 
    130130         IF( lk_mpp ) THEN 
    131             CALL mpp_maxloc( ABS(sshn)        , ssmask(:,:)  , zzz, iih , ijh        ) 
     131            CALL mpp_maxloc( ABS(ssh(:,:,Nnn)), ssmask(:,:)  , zzz, iih , ijh        ) 
    132132            CALL mpp_maxloc( ABS(un)          , umask (:,:,:), zzz, iiu , iju , iku  ) 
    133133            CALL mpp_minloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis1, ijs1, iks1 ) 
    134134            CALL mpp_maxloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis2, ijs2, iks2 ) 
    135135         ELSE 
    136             iloch  = MINLOC( ABS( sshn(:,:)   )                               ) 
    137             ilocu  = MAXLOC( ABS( un  (:,:,:) )                               ) 
     136            iloch  = MINLOC( ABS( ssh(:,:,Nnn) )                              ) 
     137            ilocu  = MAXLOC( ABS( un (:,:,:)   )                              ) 
    138138            ilocs1 = MINLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) 
    139139            ilocs2 = MAXLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OFF/dtadyn.F90

    r9939 r10009  
    142142         emp_b  (:,:)   = sf_dyn(jf_empb)%fnow(:,:,1) * tmask(:,:,1)    ! E-P 
    143143         zemp   (:,:)   = ( 0.5_wp * ( emp(:,:) + emp_b(:,:) ) + rnf(:,:) + fwbcorr ) * tmask(:,:,1) 
    144          CALL dta_dyn_ssh( kt, zhdivtr, sshb, zemp, ssha, e3t_a(:,:,:) )  !=  ssh, vertical scale factor & vertical transport 
     144         CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Nbb), zemp, ssh(:,:,Naa) )  !=  ssh, vertical scale factor & vertical transport 
     145!! 
     146!!gm BUG ?  ssh after computed but no swap so, not used in the restart.... 
     147!! 
    145148         DEALLOCATE( zemp , zhdivtr ) 
    146149         !                                           Write in the tracer restart file 
     
    148151         IF( lrst_trc ) THEN 
    149152            IF(lwp) WRITE(numout,*) 
    150             IF(lwp) WRITE(numout,*) 'dta_dyn_ssh : ssh field written in tracer restart file at it= ', kt,' date= ', ndastp 
    151             IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    152             CALL iom_rstput( kt, nitrst, numrtw, 'sshn', ssha ) 
    153             CALL iom_rstput( kt, nitrst, numrtw, 'sshb', sshn ) 
     153            IF(lwp) WRITE(numout,*) 'dta_dyn : ssh field written in tracer restart file at it= ', kt,' date= ', ndastp 
     154            IF(lwp) WRITE(numout,*) '~~~~~~~' 
     155            CALL iom_rstput( kt, nitrst, numrtw, 'sshn', ssh(:,:,Nnn) ) 
     156            CALL iom_rstput( kt, nitrst, numrtw, 'sshb', ssh(:,:,Nbb) ) 
    154157         ENDIF 
    155158      ENDIF 
     
    313316      ! 
    314317      IF( .NOT.ln_linssh ) THEN 
    315         IF( .NOT. sf_dyn(jf_uwd)%ln_clim .AND. ln_rsttr .AND.    &                     ! Restart: read in restart file 
    316            iom_varid( numrtr, 'sshn', ldstop = .FALSE. ) > 0 ) THEN 
    317            IF(lwp) WRITE(numout,*) ' sshn forcing fields read in the restart file for initialisation' 
    318            CALL iom_get( numrtr, jpdom_autoglo, 'sshn', sshn(:,:)   ) 
    319            CALL iom_get( numrtr, jpdom_autoglo, 'sshb', sshb(:,:)   ) 
    320         ELSE 
    321            IF(lwp) WRITE(numout,*) ' sshn forcing fields read in the restart file for initialisation' 
    322            CALL iom_open( 'restart', inum ) 
    323            CALL iom_get( inum, jpdom_autoglo, 'sshn', sshn(:,:)   ) 
    324            CALL iom_get( inum, jpdom_autoglo, 'sshb', sshb(:,:)   ) 
    325            CALL iom_close( inum )                                        ! close file 
    326         ENDIF 
    327         ! 
    328         DO jk = 1, jpkm1 
    329            e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshn(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 
    330         ENDDO 
    331         e3t_a(:,:,jpk) = e3t_0(:,:,jpk) 
    332  
    333         ! Horizontal scale factor interpolations 
    334         ! -------------------------------------- 
    335         CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
    336         CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
    337  
    338         ! Vertical scale factor interpolations 
    339         ! ------------------------------------ 
    340         CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n(:,:,:), 'W' ) 
    341    
    342         e3t_b(:,:,:)  = e3t_n(:,:,:) 
    343         e3u_b(:,:,:)  = e3u_n(:,:,:) 
    344         e3v_b(:,:,:)  = e3v_n(:,:,:) 
    345  
    346         ! t- and w- points depth 
    347         ! ---------------------- 
    348         gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    349         gdepw_n(:,:,1) = 0.0_wp 
    350  
    351         DO jk = 2, jpk 
    352            DO jj = 1,jpj 
    353               DO ji = 1,jpi 
    354                 !    zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk))   ! 0 everywhere 
    355                 !    tmask = wmask, ie everywhere expect at jk = mikt 
    356                                                                    ! 1 for jk = 
    357                                                                    ! mikt 
    358                  zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
    359                  gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 
    360                  gdept_n(ji,jj,jk) =      zcoef  * ( gdepw_n(ji,jj,jk  ) + 0.5 * e3w_n(ji,jj,jk))  & 
    361                      &                + (1-zcoef) * ( gdept_n(ji,jj,jk-1) + e3w_n(ji,jj,jk)) 
    362               END DO 
    363            END DO 
    364         END DO 
    365  
    366         gdept_b(:,:,:) = gdept_n(:,:,:) 
    367         gdepw_b(:,:,:) = gdepw_n(:,:,:) 
    368         ! 
     318         IF( .NOT. sf_dyn(jf_uwd)%ln_clim .AND. ln_rsttr .AND.    &                     ! Restart: read in restart file 
     319            iom_varid( numrtr, 'sshn', ldstop = .FALSE. ) > 0 ) THEN 
     320            IF(lwp) WRITE(numout,*) ' ssh forcing fields read in the restart file for initialisation' 
     321            CALL iom_get( numrtr, jpdom_autoglo, 'sshn', ssh(:,:,Nnn)   ) 
     322            CALL iom_get( numrtr, jpdom_autoglo, 'sshb', ssh(:,:,Nbb)   ) 
     323         ELSE 
     324            IF(lwp) WRITE(numout,*) ' ssh forcing fields read in the restart file for initialisation' 
     325            CALL iom_open( 'restart', inum ) 
     326            CALL iom_get( inum, jpdom_autoglo, 'sshn', ssh(:,:,Nnn)   ) 
     327            CALL iom_get( inum, jpdom_autoglo, 'sshb', ssh(:,:,Nbb)   ) 
     328            CALL iom_close( inum )                                        ! close file 
     329         ENDIF 
     330         ! 
     331         !                    !== Set of all other vertical mesh fields  ==!  (now and before)       
     332         ! 
     333         !                          !* BEFORE fields :  
     334         CALL ssh2e3_before               ! set:      hu , hv , r1_hu, r1_hv  
     335         !                                !      e3t, e3w, e3u, e3uw, e3v, e3vw        (from 1 to jpkm1) 
     336         ! 
     337         !                                ! set jpk level one to the e3._0 values 
     338         e3t_b(:,:,jpk) = e3t_0(:,:,jpk)  ;   e3u_b(:,:,jpk) =  e3w_0(:,:,jpk)  ;   e3v_b(:,:,jpk) =  e3v_0(:,:,jpk) 
     339         e3w_b(:,:,jpk) = e3w_0(:,:,jpk)  ;  e3uw_b(:,:,jpk) = e3uw_0(:,:,jpk)  ;  e3vw_b(:,:,jpk) = e3vw_0(:,:,jpk) 
     340         ! 
     341         !                          !* NOW fields :  
     342         CALL ssh2e3_now                  ! set: ht , hu , hv , r1_hu, r1_hv 
     343         !                                !      e3t, e3w, e3u, e3uw, e3v, e3vw, e3f   (from 1 to jpkm1) 
     344         !                                !      gdept_n, gdepw_n, gde3w_n 
     345!!gm issue?   gdept_n, gdepw_n, gde3w_n never defined at jpk 
     346         ! 
     347         !                                ! set one for all last level to the e3._0 value 
     348         e3t_n(:,:,jpk) = e3t_0(:,:,jpk)  ;   e3u_n(:,:,jpk) =  e3w_0(:,:,jpk)  ;   e3v_n(:,:,jpk) =  e3v_0(:,:,jpk) 
     349         e3w_n(:,:,jpk) = e3w_0(:,:,jpk)  ;  e3uw_n(:,:,jpk) = e3uw_0(:,:,jpk)  ;  e3vw_n(:,:,jpk) = e3vw_0(:,:,jpk) 
     350         e3f_n(:,:,jpk) = e3f_0(:,:,jpk) 
     351         ! 
     352         !                          !* AFTER fields : (last level for OPA, 3D required for AGRIF initialisation) 
     353         e3t_a(:,:,:) = e3t_n(:,:,:)   ;   e3u_a(:,:,:) = e3u_n(:,:,:)   ;   e3v_a(:,:,:) = e3v_n(:,:,:) 
     354         ! 
    369355      ENDIF 
    370356      ! 
     
    430416      INTEGER             :: ji, jj, jk 
    431417      REAL(wp)            :: zcoef 
     418      REAL(wp), DIMENSION(jpi,jpj) ::   zssht_h, zsshu_h, zsshv_h 
    432419      !!--------------------------------------------------------------------- 
    433420 
     
    438425      ENDIF 
    439426 
    440       sshb(:,:) = sshn(:,:) + rn_atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) )   ! before <-- now filtered 
    441       sshn(:,:) = ssha(:,:) 
    442  
    443       e3t_n(:,:,:) = e3t_a(:,:,:) 
     427      ssh(:,:,Nbb) = ssh(:,:,Nnn) + rn_atfp * ( ssh(:,:,Nbb) - 2 * ssh(:,:,Nnn) + ssh(:,:,Naa) )   ! before <-- now filtered 
     428      ssh(:,:,Nnn) = ssh(:,:,Naa) 
    444429 
    445430      ! Reconstruction of all vertical scale factors at now and before time steps 
    446431      ! ============================================================================= 
    447  
    448       ! Horizontal scale factor interpolations 
    449       ! -------------------------------------- 
    450       CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
    451       CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
    452  
    453       ! Vertical scale factor interpolations 
    454       ! ------------------------------------ 
    455       CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 
    456  
     432      ! 
     433      !                                   !==  now ssh  ==!  (u- and v-points) 
     434      DO jj = 2, jpjm1   ;   DO ji = 2, jpim1 
     435         zsshu_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji+1,jj,Nnn) ) * ssumask(ji,jj) 
     436         zsshv_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji,jj+1,Nnn) ) * ssvmask(ji,jj) 
     437      END DO             ;   END DO       
     438      CALL lbc_lnk_multi( zsshu_h(:,:), 'U', 1._wp , zsshv_h(:,:), 'V', 1._wp ) 
     439      ! 
     440      !                                   !==  after depths and its inverse  ==!  
     441         hu_n(:,:) = hu_0(:,:) + zsshu_h(:,:) 
     442         hv_n(:,:) = hv_0(:,:) + zsshv_h(:,:) 
     443      r1_hu_n(:,:) = ssumask(:,:) / ( hu_n(:,:) + 1._wp - ssumask(:,:) ) 
     444      r1_hv_n(:,:) = ssvmask(:,:) / ( hv_n(:,:) + 1._wp - ssvmask(:,:) ) 
     445      ! 
     446      !                                   !==  now scale factors  ==!  (e3t , e3u , e3v) 
     447      zssht_h(:,:) = ssh    (:,:,Nnn) * r1_ht_0(:,:)     ! t-point 
     448      zsshu_h(:,:) = zsshu_h(:,:)     * r1_hu_0(:,:)     ! u-point 
     449      zsshv_h(:,:) = zsshv_h(:,:)     * r1_hv_0(:,:)     ! v-point 
     450      DO jk = 1, jpkm1 
     451         e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 
     452         e3u_n(:,:,jk) = e3u_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * umask(:,:,jk) ) 
     453         e3v_n(:,:,jk) = e3v_0(:,:,jk) * ( 1._wp + zsshv_h(:,:) * vmask(:,:,jk) ) 
     454         e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) 
     455      END DO 
     456      ! 
    457457      e3t_b(:,:,:)  = e3t_n(:,:,:) 
    458458      e3u_b(:,:,:)  = e3u_n(:,:,:) 
     
    475475      END DO 
    476476      ! 
     477      zssht_h(:,:) = 1._wp + zssht_h(:,:)               ! t-point 
     478      ! 
     479      IF( ln_isfcav ) THEN    ! ISF cavities : ssh scaling not applied over the iceshelf thickness  
     480         DO jk = 1, jpkm1 
     481            gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 
     482            gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 
     483            gde3w_n(:,:,jk) =   gdept_n(:,:,jk) - ssh    (:,:,Nnn) 
     484         END DO 
     485      ELSE                    ! no ISF cavities  
     486         DO jk = 1, jpkm1 
     487            gdept_n(:,:,jk) = gdept_0(:,:,jk) * zssht_h(:,:) 
     488            gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * zssht_h(:,:) 
     489            gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh    (:,:,Nnn) 
     490         END DO 
     491      ENDIF 
     492      ! 
    477493      gdept_b(:,:,:) = gdept_n(:,:,:) 
    478494      gdepw_b(:,:,:) = gdepw_n(:,:,:) 
     
    481497    
    482498 
    483    SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb,  pemp, pssha, pe3ta ) 
     499   SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb,  pemp, pssha ) 
    484500      !!---------------------------------------------------------------------- 
    485501      !!                ***  ROUTINE dta_dyn_wzv  *** 
     
    502518      !! Reference  : Leclair, M., and G. Madec, 2009, Ocean Modelling. 
    503519      !!---------------------------------------------------------------------- 
    504       INTEGER,                                   INTENT(in )    :: kt        !  time-step 
    505       REAL(wp), DIMENSION(jpi,jpj,jpk)          , INTENT(in )   :: phdivtr   ! horizontal divergence transport 
    506       REAL(wp), DIMENSION(jpi,jpj)    , OPTIONAL, INTENT(in )   :: psshb     ! now ssh 
    507       REAL(wp), DIMENSION(jpi,jpj)    , OPTIONAL, INTENT(in )   :: pemp      ! evaporation minus precipitation 
     520      INTEGER,                                    INTENT(in  )    :: kt        !  time-step 
     521      REAL(wp), DIMENSION(jpi,jpj,jpk)          , INTENT(in   )   :: phdivtr   ! horizontal divergence transport 
     522      REAL(wp), DIMENSION(jpi,jpj)    , OPTIONAL, INTENT(in   )   :: psshb     ! now ssh 
     523      REAL(wp), DIMENSION(jpi,jpj)    , OPTIONAL, INTENT(in   )   :: pemp      ! evaporation minus precipitation 
    508524      REAL(wp), DIMENSION(jpi,jpj)    , OPTIONAL, INTENT(inout) :: pssha     ! after ssh 
    509       REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL, INTENT(out)   :: pe3ta     ! after vertical scale factor 
    510525      ! 
    511526      INTEGER                       :: jk 
     
    518533      END DO 
    519534      !                                                ! Sea surface  elevation time-stepping 
    520       pssha(:,:) = ( psshb(:,:) - rDt * ( r1_rho0 * pemp(:,:)  + zhdiv(:,:) ) ) * ssmask(:,:) 
    521       !                                                 !  
    522       !                                                 ! After acale factors at t-points ( z_star coordinate ) 
    523       DO jk = 1, jpkm1 
    524         pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 
    525       END DO 
     535      pssha(:,:) = ( psshb(:,:) - rDt * ( r1_rho0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 
    526536      ! 
    527537   END SUBROUTINE dta_dyn_ssh 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OFF/nemogcm.F90

    r9939 r10009  
    265265         ! 
    266266      ENDIF 
    267       !                                      ! Domain decomposition 
    268       CALL mpp_init                          ! MPP 
    269  
    270       ! Now we know the dimensions of the grid and numout has been set: we can allocate arrays 
    271       CALL nemo_alloc() 
     267      CALL mpp_init                          ! MPP domain decomposition 
     268 
     269      CALL dom_nam                           ! set the time (Nt) by reading namelist namrun and namdom 
     270 
     271      !                                      ! allocate arrays (here, as we know the dimensions of both  
     272      !                                      !                  the grid and number of time-level used, and 
     273      CALL nemo_alloc()                      !                  numout has been set: we can allocate arrays) 
    272274 
    273275      !                             !-------------------------------! 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/SAO/sao_read.F90

    r9598 r10009  
    99   USE par_kind, ONLY: lc 
    1010   USE netcdf 
    11    USE oce,     ONLY: tsn, sshn 
     11   USE oce,     ONLY: tsn, ssh 
    1212   USE dom_oce, ONLY: nlci, nlcj, nimpp, njmpp, tmask 
    1313   USE par_oce, ONLY: jpi, jpj, jpk 
     
    7777 
    7878      IF (TRIM(filename) == 'nofile') THEN 
    79          tsn (:,:,:,:) = fbrmdi 
    80          sshn(:,:)    = fbrmdi 
     79         tsn(:,:,:,:) = fbrmdi 
     80         ssh(:,:,Nnn) = fbrmdi 
    8181      ELSE 
    8282         WRITE(numout,*) "Opening :", TRIM(filename) 
     
    133133            WHERE(temp_sshn(:,:) == fill_val) temp_sshn(:,:) = fbrmdi 
    134134 
    135             ! Initialise tsn, sshn to fbrmdi 
     135            ! Initialise tsn, ssh to fbrmdi 
    136136            tsn(:,:,:,:) = fbrmdi 
    137             sshn(:,:) = fbrmdi 
     137            ssh(:,:,Nnn) = fbrmdi 
    138138 
    139139            ! Mask out missing data index 
    140140            tsn(1:nlci,1:nlcj,1:jpk,1) = temp_tn(:,:,:) * tmask(1:nlci,1:nlcj,1:jpk) 
    141141            tsn(1:nlci,1:nlcj,1:jpk,2) = temp_sn(:,:,:) * tmask(1:nlci,1:nlcj,1:jpk) 
    142             sshn(1:nlci,1:nlcj)        = temp_sshn(:,:) * tmask(1:nlci,1:nlcj,1) 
     142            ssh(1:nlci,1:nlcj,Nnn)     = temp_sshn(:,:) * tmask(1:nlci,1:nlcj,1) 
    143143 
    144             ! Remove halo from tmask, tsn, sshn to prevent double obs counting 
     144            ! Remove halo from tmask, tsn, ssh to prevent double obs counting 
    145145            IF (jpi > nlci) THEN 
    146146                tmask(nlci+1:,:,:) = 0 
    147147                tsn(nlci+1:,:,:,1) = 0 
    148148                tsn(nlci+1:,:,:,2) = 0 
    149                 sshn(nlci+1:,:) = 0 
     149                ssh(nlci+1:,:,Nnn) = 0 
    150150            END IF 
    151151            IF (jpj > nlcj) THEN 
     
    153153                tsn(:,nlcj+1:,:,1) = 0 
    154154                tsn(:,nlcj+1:,:,2) = 0 
    155                 sshn(:,nlcj+1:) = 0 
     155                ssh(:,nlcj+1:,Nnn) = 0 
    156156            END IF 
    157157 
     
    161161            ! Mark all as missing data 
    162162            tsn(:,:,:,:) = fbrmdi 
    163             sshn(:,:) = fbrmdi 
     163            ssh(:,:,Nnn) = fbrmdi 
    164164         ENDIF 
    165165         ! Close netcdf file 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/TOP/oce_trc.F90

    r9939 r10009  
    88   !!---------------------------------------------------------------------- 
    99   !                                            !* Domain size * 
    10    USE par_oce , ONLY :   jpi      =>   jpi        !: first  dimension of grid --> i  
    11    USE par_oce , ONLY :   jpj      =>   jpj        !: second dimension of grid --> j   
    12    USE par_oce , ONLY :   jpk      =>   jpk        !: number of levels   
    13    USE par_oce , ONLY :   jpim1    =>   jpim1      !: jpi - 1 
    14    USE par_oce , ONLY :   jpjm1    =>   jpjm1      !: jpj - 1  
    15    USE par_oce , ONLY :   jpkm1    =>   jpkm1      !: jpk - 1   
    16    USE par_oce , ONLY :   jpij     =>   jpij       !: jpi x jpj 
    17    USE par_oce , ONLY :   jp_tem   =>   jp_tem     !: indice for temperature 
    18    USE par_oce , ONLY :   jp_sal   =>   jp_sal     !: indice for salinity 
     10   USE par_oce, ONLY :   jpi      =>   jpi        !: first  dimension of grid --> i  
     11   USE par_oce, ONLY :   jpj      =>   jpj        !: second dimension of grid --> j   
     12   USE par_oce, ONLY :   jpk      =>   jpk        !: number of levels   
     13   USE par_oce, ONLY :   jpim1    =>   jpim1      !: jpi - 1 
     14   USE par_oce, ONLY :   jpjm1    =>   jpjm1      !: jpj - 1  
     15   USE par_oce, ONLY :   jpkm1    =>   jpkm1      !: jpk - 1   
     16   USE par_oce, ONLY :   jpij     =>   jpij       !: jpi x jpj 
     17   USE par_oce, ONLY :   jp_tem   =>   jp_tem     !: indice for temperature 
     18   USE par_oce, ONLY :   jp_sal   =>   jp_sal     !: indice for salinity 
     19 
     20   USE par_oce, ONLY :   Nt       =>   Nt         !: number of time-levels 
     21   USE par_oce, ONLY :   Nbb      =>   Nbb        !: index for before time-level 
     22   USE par_oce, ONLY :   Nnn      =>   Nnn        !: index for now      -    - 
     23   USE par_oce, ONLY :   Naa      =>   Naa        !: index for after    -    -   
    1924 
    2025   USE in_out_manager                           !* IO manager * 
     
    4247   USE oce , ONLY :   rhd     =>    rhd     !: in situ density anomalie rhd=(rho-rho0)/rho0 (no units) 
    4348   USE oce , ONLY :   hdivn   =>    hdivn   !: horizontal divergence (1/s) 
    44    USE oce , ONLY :   sshn    =>    sshn    !: sea surface height at t-point [m]    
    45    USE oce , ONLY :   sshb    =>    sshb    !: sea surface height at t-point [m]    
    46    USE oce , ONLY :   ssha    =>    ssha    !: sea surface height at t-point [m]    
     49   USE oce , ONLY :   ssh     =>    ssh     !: sea surface height at t-point [m]    
    4750   USE oce , ONLY :   rab_n   =>    rab_n   !: local thermal/haline expension ratio at T-points 
    4851 
     
    9497   USE zdfmxl , ONLY :   hmlpt       =>   hmlpt       !: mixed layer depth at t-points (m) 
    9598 
     99   !!====================================================================== 
    96100END MODULE oce_trc 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/TOP/trcsub.F90

    r9939 r10009  
    104104           IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    105105           ! 
    106            sshb_hold  (:,:) = sshn  (:,:) 
     106           sshb_hold  (:,:) = ssh   (:,:,Nnn) 
    107107           emp_b_hold (:,:) = emp_b (:,:) 
    108108           ! 
     
    136136         ENDIF  
    137137         ! 
    138          sshn_tm  (:,:)         = sshn_tm  (:,:)         + sshn  (:,:)  
     138         sshn_tm  (:,:)         = sshn_tm  (:,:)         + ssh   (:,:,Nnn)  
    139139         rnf_tm   (:,:)         = rnf_tm   (:,:)         + rnf   (:,:)  
    140140         h_rnf_tm (:,:)         = h_rnf_tm (:,:)         + h_rnf (:,:)  
     
    168168            ENDIF 
    169169         ENDIF  
    170          sshn_temp  (:,:)        = sshn  (:,:) 
    171          sshb_temp  (:,:)        = sshb  (:,:) 
    172          ssha_temp  (:,:)        = ssha  (:,:) 
     170         sshn_temp  (:,:)        = ssh   (:,:,Nnn) 
     171         sshb_temp  (:,:)        = ssh   (:,:,Nbb) 
     172         ssha_temp  (:,:)        = ssh   (:,:,Naa) 
    173173         rnf_temp   (:,:)        = rnf   (:,:) 
    174174         h_rnf_temp (:,:)        = h_rnf (:,:) 
     
    206206            ENDIF 
    207207         ENDIF  
    208          sshn_tm  (:,:)          = sshn_tm    (:,:)       + sshn  (:,:)  
    209          rnf_tm   (:,:)          = rnf_tm     (:,:)       + rnf   (:,:)  
    210          h_rnf_tm (:,:)          = h_rnf_tm   (:,:)       + h_rnf (:,:)  
     208         sshn_tm  (:,:)          = sshn_tm    (:,:)       + ssh   (:,:,Nnn)  
     209         rnf_tm   (:,:)          = rnf_tm     (:,:)       + rnf   (:,:) 
     210         h_rnf_tm (:,:)          = h_rnf_tm   (:,:)       + h_rnf (:,:) 
    211211         hmld_tm  (:,:)          = hmld_tm    (:,:)       + hmld  (:,:) 
    212212         fr_i_tm  (:,:)          = fr_i_tm    (:,:)       + fr_i  (:,:) 
     
    216216         wndm_tm  (:,:)          = wndm_tm    (:,:)       + wndm  (:,:) 
    217217         ! 
    218          sshn     (:,:)          = sshn_tm    (:,:) * r1_ndttrcp1  
    219          sshb     (:,:)          = sshb_hold  (:,:) 
     218         ssh      (:,:,Nnn)      = sshn_tm    (:,:) * r1_ndttrcp1  
     219         ssh      (:,:,Nbb)      = sshb_hold  (:,:) 
    220220         rnf      (:,:)          = rnf_tm     (:,:) * r1_ndttrcp1  
    221221         h_rnf    (:,:)          = h_rnf_tm   (:,:) * r1_ndttrcp1  
     
    324324         vslp_tm (:,:,:)     = vslp (:,:,:) 
    325325      ENDIF 
    326       sshn_tm  (:,:) = sshn  (:,:)  
     326      sshn_tm  (:,:) = ssh   (:,:,Nnn)  
    327327      rnf_tm   (:,:) = rnf   (:,:)  
    328328      h_rnf_tm (:,:) = h_rnf (:,:)  
     
    377377         vslp  (:,:,:)=  vslp_temp  (:,:,:) 
    378378      ENDIF 
    379       sshn  (:,:)    =  sshn_temp  (:,:) 
    380       sshb  (:,:)    =  sshb_temp  (:,:) 
    381       ssha  (:,:)    =  ssha_temp  (:,:) 
     379      ssh   (:,:,Nnn) =  sshn_temp  (:,:) 
     380      ssh   (:,:,Nbb) =  sshb_temp  (:,:) 
     381      ssh   (:,:,Naa) =  ssha_temp  (:,:) 
    382382      rnf   (:,:)     =  rnf_temp   (:,:) 
    383383      h_rnf (:,:)     =  h_rnf_temp (:,:) 
     
    417417      ENDIF 
    418418      ! 
    419       sshb_hold  (:,:) = sshn  (:,:) 
     419      sshb_hold  (:,:) = ssh   (:,:,Nnn) 
    420420      emp_b_hold (:,:) = emp   (:,:) 
    421       sshn_tm    (:,:) = sshn  (:,:)  
     421      sshn_tm    (:,:) = ssh   (:,:,Nnn)  
    422422      rnf_tm     (:,:) = rnf   (:,:)  
    423423      h_rnf_tm   (:,:) = h_rnf (:,:)  
     
    449449      !!                ***  ROUTINE trc_sub_ssh  *** 
    450450      !!                    
    451       !! ** Purpose :   compute the after ssh (ssha), the now vertical velocity 
     451      !! ** Purpose :   compute the after ssh, the now vertical velocity 
    452452      !!              and update the now vertical coordinate (ln_linssh=F). 
    453453      !! 
     
    497497      ! because emp_b field is initialized with the vlaues of emp field. Hence, 0.5 * ( emp + emp_b ) = emp 
    498498      z1_2rho0 = 0.5 * r1_rho0 
    499       ssha(:,:) = (  sshb(:,:) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * tmask(:,:,1) 
     499      ssh(:,:,Naa) = (  ssh(:,:,Nbb) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
    500500 
    501501      IF( .NOT.ln_dynspg_ts ) THEN 
     
    506506#endif 
    507507         IF( ln_bdy ) THEN 
    508             ssha(:,:) = ssha(:,:) * bdytmask(:,:) 
    509             CALL lbc_lnk( ssha, 'T', 1. )  
     508            ssh(:,:,Naa) = ssh(:,:,Naa) * bdytmask(:,:) 
     509            CALL lbc_lnk( ssh(:,:,Naa), 'T', 1. )  
    510510         ENDIF 
    511511      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.