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 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg_ts.F90 – NEMO

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.