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 11802 for NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/NST/agrif_oce_interp.F90 – NEMO

Ignore:
Timestamp:
2019-10-25T17:15:20+02:00 (5 years ago)
Author:
jchanut
Message:

#2222, 1) add linear interpolation in vremap module.
2) Switch remapping of viscosity from polynomial to linear.
3) Move to truly volume weighted averages for parent to child update.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/NST/agrif_oce_interp.F90

    r11769 r11802  
    719719               tsa(ji,jj,:,:) = 0._wp 
    720720               N_in = mbkt_parent(ji,jj) 
     721               IF ( tmask(ji,jj,1) == 0._wp) N_in = 0 
    721722               zhtot = 0._wp 
    722723               DO jk=1,N_in !k2 = jpk of parent grid 
     
    833834               N_in = mbku_parent(ji,jj) 
    834835               zhtot = 0._wp 
     836               IF ( umask(ji,jj,1) == 0._wp) N_in = 0 
    835837               DO jk=1,N_in 
    836838                  IF (jk==N_in) THEN 
     
    928930               va(ji,jj,:) = 0._wp 
    929931               N_in = mbkv_parent(ji,jj) 
     932               IF ( vmask(ji,jj,1) == 0._wp) N_in = 0 
    930933               zhtot = 0._wp 
    931934               DO jk=1,N_in 
     
    12761279      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,m1:m2), INTENT(inout) ::   ptab 
    12771280      LOGICAL                                    , INTENT(in   ) ::   before 
    1278       REAL(wp), DIMENSION(k1:k2) :: tabin, h_in 
    1279       REAL(wp), DIMENSION(1:jpk) :: h_out 
    1280       INTEGER  :: N_in, N_out, ji, jj, jk 
     1281      ! 
     1282      INTEGER  :: ji, jj, jk 
     1283      INTEGER  :: N_in, N_out 
     1284      REAL(wp), DIMENSION(k1:k2) :: tabin, z_in 
     1285      REAL(wp), DIMENSION(1:jpk) :: z_out 
    12811286      !!----------------------------------------------------------------------   
    12821287      !       
     
    12891294           END DO 
    12901295        END DO 
    1291 #ifdef key_vertical          
     1296 
     1297# if defined key_vertical 
     1298        ! Interpolate thicknesses 
     1299        ! Warning: these are masked, hence extrapolated prior interpolation. 
    12921300        DO jk=k1,k2 
    12931301           DO jj=j1,j2 
    12941302              DO ji=i1,i2 
    1295                  ptab(ji,jj,jk,2) = wmask(ji,jj,jk) * e3w_n(ji,jj,jk)  
     1303                  ptab(ji,jj,jk,2) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) 
    12961304              END DO 
    12971305           END DO 
    12981306        END DO 
    1299 #endif 
     1307 
     1308        ! Extrapolate thicknesses in partial bottom cells: 
     1309        ! Set them to Agrif_SpecialValue (0.). Correct bottom thicknesses are retrieved later on 
     1310        IF (ln_zps) THEN 
     1311           DO jj=j1,j2 
     1312              DO ji=i1,i2 
     1313                  jk = mbkt(ji,jj) 
     1314                  ptab(ji,jj,jk,2) = 0._wp 
     1315              END DO 
     1316           END DO            
     1317        END IF 
     1318      
     1319        ! Save ssh at last level: 
     1320        IF (.NOT.ln_linssh) THEN 
     1321           ptab(i1:i2,j1:j2,k2,2) = sshn(i1:i2,j1:j2)*tmask(i1:i2,j1:j2,1)  
     1322        ELSE 
     1323           ptab(i1:i2,j1:j2,k2,2) = 0._wp 
     1324        END IF       
     1325# endif 
    13001326      ELSE  
    13011327#ifdef key_vertical          
    1302          avm_k(i1:i2,j1:j2,1:jpk) = 0. 
    1303          DO jj=j1,j2 
    1304             DO ji=i1,i2 
    1305                N_in = 0 
    1306                DO jk=k1,k2 !k2 = jpk of parent grid 
    1307                   IF (ptab(ji,jj,jk,2) == 0) EXIT 
    1308                   N_in = N_in + 1 
    1309                   tabin(jk) = ptab(ji,jj,jk,1) 
    1310                   h_in(N_in) = ptab(ji,jj,jk,2) 
     1328         IF (ln_linssh) ptab(i1:i2,j1:j2,k2,2) = 0._wp  
     1329         avm_k(i1:i2,j1:j2,k1:k2) = 0._wp 
     1330             
     1331         DO jj = j1, j2 
     1332            DO ji =i1, i2 
     1333               N_in = mbkt_parent(ji,jj) 
     1334               IF ( tmask(ji,jj,1) == 0._wp) N_in = 0 
     1335               z_in(N_in+1) = ht0_parent(ji,jj) + ptab(ji,jj,k2,2) 
     1336               DO jk = N_in, 1, -1  ! Parent vertical grid                
     1337                     z_in(jk) = z_in(jk+1) - ptab(ji,jj,jk,2) 
     1338                    tabin(jk) = ptab(ji,jj,jk,1) 
    13111339               END DO 
    13121340               N_out = 0 
    1313                DO jk=1,jpk ! jpk of child grid 
    1314                   IF (wmask(ji,jj,jk) == 0) EXIT  
     1341          z_out(1) = 0._wp  
     1342               DO jk = 2, jpk       ! Child vertical grid 
     1343                  IF (tmask(ji,jj,jk) == 0._wp) EXIT  
    13151344                  N_out = N_out + 1 
    1316                   h_out(jk) = e3t_n(ji,jj,jk) 
     1345                  z_out(jk) = z_out(jk-1) + e3t_n(ji,jj,jk-1) 
    13171346               ENDDO 
    1318                IF (N_in > 0) THEN 
    1319                   CALL reconstructandremap(tabin(1:N_in),h_in,avm_k(ji,jj,1:N_out),h_out,N_in,N_out,1) 
     1347               IF (N_in*N_out > 0) THEN 
     1348                  CALL remap_linear(tabin(1:N_in),z_in(1:N_in),avm_k(ji,jj,1:N_out),z_out(1:N_out),N_in,N_out,1) 
    13201349               ENDIF 
    13211350            ENDDO 
Note: See TracChangeset for help on using the changeset viewer.