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 12229 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/NST/agrif_top_sponge.F90 – NEMO

Ignore:
Timestamp:
2019-12-12T17:41:04+01:00 (4 years ago)
Author:
acc
Message:

2019/dev_r11943_MERGE_2019: Merge in dev_AGRIF-01-05_merged. Fully SETTE tested

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/NST/agrif_top_sponge.F90

    r11949 r12229  
    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 
     
    8384               DO jj=j1,j2 
    8485                  DO ji=i1,i2 
    85                      tabres(ji,jj,jk,jn) = tr(ji,jj,jk,jn,Kbb) 
     86                     tabres(ji,jj,jk,jn) = tr(ji,jj,jk,jn,Kbb_a) 
    8687                  END DO 
    8788               END DO 
     
    9394            DO jj=j1,j2 
    9495               DO ji=i1,i2 
    95                   tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm)  
     96                  tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kbb_a)  
    9697               END DO 
    9798            END DO 
     
    108109                  N_in = N_in + 1 
    109110                  tabin(jk,:) = tabres(ji,jj,jk,n1:n2-1) 
    110                   h_in(N_in)  = tabres(ji,jj,jk,n2) 
     111                  h_in(N_in) = tabres(ji,jj,jk,n2) 
    111112               END DO 
    112113               N_out = 0 
    113114               DO jk=1,jpk ! jpk of child grid 
    114115                  IF (tmask(ji,jj,jk) == 0) EXIT  
    115                   N_out     = N_out + 1 
    116                   h_out(jk) = e3t(ji,jj,jk,Kmm) !Child grid scale factors. Could multiply by e1e2t here instead of division above 
     116                  N_out = N_out + 1 
     117                  h_out(jk) = e3t(ji,jj,jk,Kbb_a) !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 
     
    131128               DO jk=1,jpkm1 
    132129# if defined key_vertical 
    133                   trbdiff(ji,jj,jk,1:jptra) = tr(ji,jj,jk,1:jptra,Kbb) - tabres_child(ji,jj,jk,1:jptra) 
     130                  trbdiff(ji,jj,jk,1:jptra) = tr(ji,jj,jk,1:jptra,Kbb_a) - tabres_child(ji,jj,jk,1:jptra) 
    134131# else 
    135                   trbdiff(ji,jj,jk,1:jptra) = tr(ji,jj,jk,1:jptra,Kbb) -      tabres(ji,jj,jk,1:jptra) 
     132                  trbdiff(ji,jj,jk,1:jptra) = tr(ji,jj,jk,1:jptra,Kbb_a) - tabres(ji,jj,jk,1:jptra) 
    136133# endif 
    137134               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(ji,jj,jk,Kmm) * umask(ji,jj,jk) 
    146                      zabe2 = fsaht_spv(ji,jj) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) * vmask(ji,jj,jk) 
     147                     zabe1 = rn_sponge_tra * fspu(ji,jj) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm_a) * umask(ji,jj,jk) 
     148                     zabe2 = rn_sponge_tra * fspv(ji,jj) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * 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) ) 
     
    153155                  DO ji = i1+1,i2-1 
    154156                     IF( .NOT. tabspongedone_trn(ji,jj) ) THEN  
    155                         tr(ji,jj,jk,jn,Krhs) = tr(ji,jj,jk,jn,Krhs) + (  ztu(ji,jj) - ztu(ji-1,jj  )       & 
    156                            &                                           + ztv(ji,jj) - ztv(ji  ,jj-1)  )    & 
    157                            &                                          * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     157                        tr(ji,jj,jk,jn,Krhs_a) = tr(ji,jj,jk,jn,Krhs_a) + (  ztu(ji,jj) - ztu(ji-1,jj  )     & 
     158                           &                                   + ztv(ji,jj) - ztv(ji  ,jj-1)  )  & 
     159                           &                                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a)  & 
     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.