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 13987 for NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/NST – NEMO

Ignore:
Timestamp:
2020-12-02T13:22:58+01:00 (4 years ago)
Author:
cetlod
Message:

Merging dev_r13333_TOP-05_Ethe_Agrif into dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep

Location:
NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/NST
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/NST/agrif_top_sponge.F90

    r12489 r13987  
    6767      ! 
    6868      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    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 
     69      INTEGER  ::   iku, ikv 
     70      REAL(wp) ::   ztra, zabe1, zabe2, zbtr 
     71      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk)  ::   ztu, ztv 
     72      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2) ::   trbdiff 
    7273      ! vertical interpolation: 
    73       REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,1:jptra) ::tabres_child 
     74      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tabres_child 
    7475      REAL(wp), DIMENSION(k1:k2,1:jptra) :: tabin 
    7576      REAL(wp), DIMENSION(k1:k2) :: h_in 
    7677      REAL(wp), DIMENSION(1:jpk) :: h_out 
    7778      INTEGER :: N_in, N_out 
    78       REAL(wp) :: h_diff 
    7979      !!---------------------------------------------------------------------- 
    8080      ! 
     
    9494            DO jj=j1,j2 
    9595               DO ji=i1,i2 
    96                   tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kbb_a)  
     96                  tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kbb_a) 
    9797               END DO 
    9898            END DO 
     
    128128               DO jk=1,jpkm1 
    129129# if defined key_vertical 
    130                   trbdiff(ji,jj,jk,1:jptra) = tr(ji,jj,jk,1:jptra,Kbb_a) - 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) ) * tmask(ji,jj,jk) 
    131131# else 
    132                   trbdiff(ji,jj,jk,1:jptra) = tr(ji,jj,jk,1:jptra,Kbb_a) - 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)) * tmask(ji,jj,jk) 
    133133# endif 
    134134               ENDDO 
     
    136136         ENDDO 
    137137 
    138          !* set relaxation time scale 
    139          IF( l_1st_euler .AND. lk_agrif_fstep ) THEN   ;   ztrelax =   rn_trelax_tra  / (        rn_Dt ) 
    140          ELSE                                          ;   ztrelax =   rn_trelax_tra  / (2._wp * rn_Dt ) 
    141          ENDIF 
    142  
    143138         DO jn = 1, jptra 
    144139            DO jk = 1, jpkm1 
    145                DO jj = j1,j2-1 
     140               ztu(i1:i2,j1:j2,jk) = 0._wp 
     141               DO jj = j1,j2 
    146142                  DO ji = i1,i2-1 
    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) 
    149                      ztu(ji,jj) = zabe1 * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    150                      ztv(ji,jj) = zabe2 * ( trbdiff(ji  ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
     143                     zabe1 = rn_sponge_tra * r1_Dt * fspu(ji,jj) * umask(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm_a) 
     144                     ztu(ji,jj,jk) = zabe1 * ( trbdiff(ji+1,jj,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
     145                  END DO 
     146               END DO 
     147               ztv(i1:i2,j1:j2,jk) = 0._wp 
     148               DO ji = i1,i2 
     149                  DO jj = j1,j2-1 
     150                     zabe2 = rn_sponge_tra * r1_Dt * fspv(ji,jj) * vmask(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a) 
     151                     ztv(ji,jj,jk) = zabe2 * ( trbdiff(ji,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    151152                  END DO 
    152153               END DO 
    153154               ! 
     155               IF( ln_zps ) THEN      ! set gradient at partial step level 
     156                  DO jj = j1,j2 
     157                     DO ji = i1,i2 
     158                        ! last level 
     159                        iku = mbku(ji,jj) 
     160                        ikv = mbkv(ji,jj) 
     161                        IF( iku == jk )   ztu(ji,jj,jk) = 0._wp 
     162                        IF( ikv == jk )   ztv(ji,jj,jk) = 0._wp 
     163                     END DO 
     164                  END DO 
     165               ENDIF 
     166            END DO 
     167            ! 
     168            DO jk = 1, jpkm1 
    154169               DO jj = j1+1,j2-1 
    155170                  DO ji = i1+1,i2-1 
    156                      IF( .NOT. tabspongedone_trn(ji,jj) ) THEN  
    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) 
     171                     IF( .NOT. tabspongedone_trn(ji,jj) ) THEN 
     172                        zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a) 
     173                                                ! horizontal diffusive trends 
     174                        ztra = zbtr * (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk) + ztv(ji,jj,jk) - ztv(ji,jj-1,jk)  ) & 
     175                             &  - rn_trelax_tra * r1_Dt * fspt(ji,jj) * trbdiff(ji,jj,jk,jn) 
     176                        ! add it to the general tracer trends 
     177                        tr(ji,jj,jk,jn,Krhs_a) = tr(ji,jj,jk,jn,Krhs_a) + ztra 
    161178                     ENDIF 
    162179                  END DO 
    163180               END DO 
    164181            END DO 
    165             ! 
    166182         END DO 
    167183         ! 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/NST/agrif_user.F90

    r13961 r13987  
    367367         CALL Agrif_Bc_variable( unb_interp_id,calledweight=1.,procname=interpunb ) 
    368368         CALL Agrif_Bc_variable( vnb_interp_id,calledweight=1.,procname=interpvnb ) 
    369          CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b) 
    370          CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b) 
     369         CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b)   ! must be called before unb_id to define ubdy 
     370         CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b)   ! must be called before vnb_id to define vbdy 
    371371         use_sign_north = .FALSE. 
    372372         ubdy(:,:) = 0._wp 
     
    726726      CALL Agrif_Bc_variable(trn_sponge_id,calledweight=1.,procname=interptrn_sponge) 
    727727      ! reset tsa to zero 
    728       tra(:,:,:,:) = 0._wp 
     728      tr(:,:,:,:,Krhs_a) = 0._wp 
    729729 
    730730      ! 3. Some controls 
Note: See TracChangeset for help on using the changeset viewer.