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 12123 for NEMO/branches/2019/dev_AGRIF-01-05_merged/src/NST/agrif_top_sponge.F90 – NEMO

Ignore:
Timestamp:
2019-12-09T13:55:34+01:00 (4 years ago)
Author:
jchanut
Message:

Merge devs from #2199 and #2222 in trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_AGRIF-01-05_merged/src/NST/agrif_top_sponge.F90

    r10068 r12123  
    2020   USE agrif_oce 
    2121   USE agrif_oce_sponge 
     22   USE vremap 
    2223   ! 
    2324   USE in_out_manager 
     
    6667      ! 
    6768      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    68       REAL(wp) ::   zabe1, zabe2 
    69       REAL(wp), DIMENSION(i1:i2,j1:j2)             ::   ztu, ztv 
    70       REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2) ::   trbdiff 
     69      REAL(wp) ::   zabe1, zabe2, ztrelax 
     70      REAL(wp), DIMENSION(i1:i2,j1:j2)               ::   ztu, ztv 
     71      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,1:jptra) ::   trbdiff 
    7172      ! vertical interpolation: 
    72       REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tabres_child 
    73       REAL(wp), DIMENSION(k1:k2,n1:n2-1) :: tabin 
     73      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,1:jptra) ::tabres_child 
     74      REAL(wp), DIMENSION(k1:k2,1:jptra) :: tabin 
    7475      REAL(wp), DIMENSION(k1:k2) :: h_in 
    7576      REAL(wp), DIMENSION(1:jpk) :: h_out 
     
    9394            DO jj=j1,j2 
    9495               DO ji=i1,i2 
    95                   tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk)  
     96                  tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t_b(ji,jj,jk)  
    9697               END DO 
    9798            END DO 
     
    114115                  IF (tmask(ji,jj,jk) == 0) EXIT  
    115116                  N_out = N_out + 1 
    116                   h_out(jk) = e3t_n(ji,jj,jk) !Child grid scale factors. Could multiply by e1e2t here instead of division above 
     117                  h_out(jk) = e3t_b(ji,jj,jk) !Child grid scale factors. Could multiply by e1e2t here instead of division above 
    117118               ENDDO 
    118119               IF (N_in > 0) THEN 
    119                   h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
    120                   tabres(ji,jj,k2,:) = tabres(ji,jj,k2-1,:) !what is this line for????? 
    121                   DO jn=1,jptra 
    122                      call reconstructandremap(tabin(1:N_in,jn),h_in,tabres_child(ji,jj,1:N_out,jn),h_out,N_in,N_out) 
    123                   ENDDO 
     120                  CALL reconstructandremap(tabin(1:N_in,1:jptra),h_in,tabres_child(ji,jj,1:N_out,1:jptra),h_out,N_in,N_out,jptra) 
    124121               ENDIF 
    125122            ENDDO 
     
    139136         ENDDO 
    140137 
     138         !* set relaxation time scale 
     139         IF( neuler == 0 .AND. lk_agrif_fstep ) THEN   ;   ztrelax =   rn_trelax_tra  / (        rdt ) 
     140         ELSE                                          ;   ztrelax =   rn_trelax_tra  / (2._wp * rdt ) 
     141         ENDIF 
     142 
    141143         DO jn = 1, jptra 
    142144            DO jk = 1, jpkm1 
    143145               DO jj = j1,j2-1 
    144146                  DO ji = i1,i2-1 
    145                      zabe1 = fsaht_spu(ji,jj) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) 
    146                      zabe2 = fsaht_spv(ji,jj) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) 
     147                     zabe1 = rn_sponge_tra * fspu(ji,jj) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) 
     148                     zabe2 = rn_sponge_tra * fspv(ji,jj) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) 
    147149                     ztu(ji,jj) = zabe1 * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    148150                     ztv(ji,jj) = zabe2 * ( trbdiff(ji  ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
     
    155157                        tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + (  ztu(ji,jj) - ztu(ji-1,jj  )     & 
    156158                           &                                   + ztv(ji,jj) - ztv(ji  ,jj-1)  )  & 
    157                            &                                * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
     159                           &                                * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk)  & 
     160                           &                                - ztrelax * fspt(ji,jj) * trbdiff(ji,jj,jk,jn) 
    158161                     ENDIF 
    159162                  END DO 
Note: See TracChangeset for help on using the changeset viewer.