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 14218 for NEMO/trunk/src – NEMO

Changeset 14218 for NEMO/trunk/src


Ignore:
Timestamp:
2020-12-18T17:44:52+01:00 (3 years ago)
Author:
jchanut
Message:

#2222, Fixes uninitialized arrays with vertical remap

Location:
NEMO/trunk/src/NST
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/NST/agrif_oce_interp.F90

    r14170 r14218  
    863863                  ! Build vertical grids: 
    864864                  N_in = mbkt_parent(ji,jj) 
    865                   ! Input grid (account for partial cells if any): 
    866                   DO jk=1,N_in 
    867                      z_in(jk) = ptab(ji,jj,jk,n2) - ptab(ji,jj,k2,n2) 
    868                      tabin(jk,1:jpts) = ptab(ji,jj,jk,1:jpts) 
    869                   END DO 
     865                  N_out = mbkt(ji,jj) 
     866                  IF (N_in*N_out > 0) THEN 
     867                     ! Input grid (account for partial cells if any): 
     868                     DO jk=1,N_in 
     869                        z_in(jk) = ptab(ji,jj,jk,n2) - ptab(ji,jj,k2,n2) 
     870                        tabin(jk,1:jpts) = ptab(ji,jj,jk,1:jpts) 
     871                     END DO 
    870872                   
    871                   ! Intermediate grid: 
    872                   IF ( l_vremap ) THEN 
    873                      DO jk = 1, N_in 
    874                         h_in_i(jk) = e3t0_parent(ji,jj,jk) * &  
    875                           &       (1._wp + ptab(ji,jj,k2,n2)/(ht0_parent(ji,jj)*ssmask(ji,jj) + 1._wp - ssmask(ji,jj))) 
     873                     ! Intermediate grid: 
     874                     IF ( l_vremap ) THEN 
     875                        DO jk = 1, N_in 
     876                           h_in_i(jk) = e3t0_parent(ji,jj,jk) * &  
     877                             &       (1._wp + ptab(ji,jj,k2,n2)/(ht0_parent(ji,jj)*ssmask(ji,jj) + 1._wp - ssmask(ji,jj))) 
     878                        END DO 
     879                        z_in_i(1) = 0.5_wp * h_in_i(1) 
     880                        DO jk=2,N_in 
     881                           z_in_i(jk) = z_in_i(jk-1) + 0.5_wp * ( h_in_i(jk) + h_in_i(jk-1) ) 
     882                        END DO 
     883                        z_in_i(1:N_in) = z_in_i(1:N_in)  - ptab(ji,jj,k2,n2) 
     884                     ENDIF                               
     885 
     886                     ! Output (Child) grid: 
     887                     DO jk=1,N_out 
     888                        h_out(jk) = e3t(ji,jj,jk,Krhs_a) 
    876889                     END DO 
    877                      z_in_i(1) = 0.5_wp * h_in_i(1) 
    878                      DO jk=2,N_in 
    879                         z_in_i(jk) = z_in_i(jk-1) + 0.5_wp * ( h_in_i(jk) + h_in_i(jk-1) ) 
     890                     z_out(1) = 0.5_wp * h_out(1) 
     891                     DO jk=2,N_out 
     892                        z_out(jk) = z_out(jk-1) + 0.5_wp * ( h_out(jk)+h_out(jk-1) ) 
    880893                     END DO 
    881                      z_in_i(1:N_in) = z_in_i(1:N_in)  - ptab(ji,jj,k2,n2) 
    882                   ENDIF                               
    883  
    884                   ! Output (Child) grid: 
    885                   N_out = mbkt(ji,jj) 
    886                   DO jk=1,N_out 
    887                      h_out(jk) = e3t(ji,jj,jk,Krhs_a) 
    888                   END DO 
    889                   z_out(1) = 0.5_wp * h_out(1) 
    890                   DO jk=2,N_out 
    891                      z_out(jk) = z_out(jk-1) + 0.5_wp * ( h_out(jk)+h_out(jk-1) ) 
    892                   END DO 
    893                   IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Krhs_a) 
    894  
    895                   IF (N_in*N_out > 0) THEN 
     894                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Krhs_a) 
     895 
    896896                     IF( l_ini_child ) THEN 
    897897                        CALL remap_linear(tabin(1:N_in,1:jpts),z_in(1:N_in),ts(ji,jj,1:N_out,1:jpts,Krhs_a),              & 
     
    10401040                  uu(ji,jj,:,Krhs_a) = 0._wp 
    10411041                  N_in = mbku_parent(ji,jj) 
    1042                   zhtot = 0._wp 
    1043                   DO jk=1,N_in 
    1044                      !IF (jk==N_in) THEN 
    1045                      !   h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
    1046                      !ELSE 
    1047                      !   h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
    1048                      !ENDIF 
    1049                      IF ( l_vremap ) THEN 
    1050                         h_in(jk) = e3u0_parent(ji,jj,jk)  
    1051                      ELSE 
    1052                         IF (jk==N_in) THEN 
    1053                            h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1042                  N_out = mbku(ji,jj) 
     1043                  IF (N_in*N_out > 0) THEN 
     1044                     zhtot = 0._wp 
     1045                     DO jk=1,N_in 
     1046                        !IF (jk==N_in) THEN 
     1047                        !   h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1048                        !ELSE 
     1049                        !   h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
     1050                        !ENDIF 
     1051                        IF ( l_vremap ) THEN 
     1052                           h_in(jk) = e3u0_parent(ji,jj,jk)  
    10541053                        ELSE 
    1055                            h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
     1054                           IF (jk==N_in) THEN 
     1055                              h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1056                           ELSE 
     1057                              h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
     1058                           ENDIF 
    10561059                        ENDIF 
    1057                      ENDIF 
    1058                      zhtot = zhtot + h_in(jk) 
    1059                      IF( h_in(jk) .GT. 0. ) THEN 
    1060                      tabin(jk) = ptab(ji,jj,jk,1)/(e2u(ji,jj)*zrhoy*h_in(jk)) 
    1061                      ELSE 
    1062                      tabin(jk) = 0. 
    1063                      ENDIF 
    1064                  END DO 
    1065                  z_in(1) = 0.5_wp * h_in(1) - zhtot + hu0_parent(ji,jj)  
    1066                  DO jk=2,N_in 
    1067                     z_in(jk) = z_in(jk-1) + 0.5_wp * (h_in(jk)+h_in(jk-1)) 
    1068                  END DO 
     1060                        zhtot = zhtot + h_in(jk) 
     1061                        IF( h_in(jk) .GT. 0. ) THEN 
     1062                           tabin(jk) = ptab(ji,jj,jk,1)/(e2u(ji,jj)*zrhoy*h_in(jk)) 
     1063                        ELSE 
     1064                           tabin(jk) = 0. 
     1065                        ENDIF 
     1066                    END DO 
     1067                    z_in(1) = 0.5_wp * h_in(1) - zhtot + hu0_parent(ji,jj)  
     1068                    DO jk=2,N_in 
     1069                       z_in(jk) = z_in(jk-1) + 0.5_wp * (h_in(jk)+h_in(jk-1)) 
     1070                    END DO 
    10691071                      
    1070                  N_out = 0 
    1071                  DO jk=1,jpk 
    1072                     IF (umask(ji,jj,jk) == 0) EXIT 
    1073                     N_out = N_out + 1 
    1074                     h_out(N_out) = e3u(ji,jj,jk,Krhs_a) 
    1075                  END DO 
    1076  
    1077                  z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hu_0(ji,jj) 
    1078                  DO jk=2,N_out 
    1079                     z_out(jk) = z_out(jk-1) + 0.5_wp * (h_out(jk-1) + h_out(jk))  
    1080                  END DO   
    1081  
    1082                  IF (N_in*N_out > 0) THEN 
    1083                      IF( l_ini_child ) THEN 
    1084                         CALL remap_linear       (tabin(1:N_in),z_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),z_out(1:N_out),N_in,N_out,1) 
    1085                      ELSE 
    1086                         CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),h_out(1:N_out),N_in,N_out,1) 
    1087                      ENDIF    
     1072                    DO jk=1, N_out 
     1073                       h_out(jk) = e3u(ji,jj,jk,Krhs_a) 
     1074                    END DO 
     1075 
     1076                    z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hu_0(ji,jj) 
     1077                    DO jk=2,N_out 
     1078                       z_out(jk) = z_out(jk-1) + 0.5_wp * (h_out(jk-1) + h_out(jk))  
     1079                    END DO   
     1080 
     1081                    IF( l_ini_child ) THEN 
     1082                       CALL remap_linear       (tabin(1:N_in),z_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),z_out(1:N_out),N_in,N_out,1) 
     1083                    ELSE 
     1084                       CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),h_out(1:N_out),N_in,N_out,1) 
     1085                    ENDIF    
    10881086                 ENDIF 
    10891087               END DO 
     
    11711169                  vv(ji,jj,:,Krhs_a) = 0._wp 
    11721170                  N_in = mbkv_parent(ji,jj) 
    1173                   zhtot = 0._wp 
    1174                   DO jk=1,N_in 
    1175                      !IF (jk==N_in) THEN 
    1176                      !   h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
    1177                      !ELSE 
    1178                      !   h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
    1179                      !ENDIF 
    1180                      IF (l_vremap) THEN 
    1181                         h_in(jk) = e3v0_parent(ji,jj,jk) 
    1182                      ELSE 
    1183                         IF (jk==N_in) THEN 
    1184                            h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1171                  N_out = mbkv(ji,jj) 
     1172 
     1173                  IF (N_in*N_out > 0) THEN 
     1174                     zhtot = 0._wp 
     1175                     DO jk=1,N_in 
     1176                        !IF (jk==N_in) THEN 
     1177                        !   h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1178                        !ELSE 
     1179                        !   h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
     1180                        !ENDIF 
     1181                        IF (l_vremap) THEN 
     1182                           h_in(jk) = e3v0_parent(ji,jj,jk) 
    11851183                        ELSE 
    1186                            h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
     1184                           IF (jk==N_in) THEN 
     1185                              h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1186                           ELSE 
     1187                              h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
     1188                           ENDIF 
    11871189                        ENDIF 
    1188                      ENDIF 
    1189                      zhtot = zhtot + h_in(jk) 
    1190                      IF( h_in(jk) .GT. 0. ) THEN 
    1191                        tabin(jk) = ptab(ji,jj,jk,1)/(e1v(ji,jj)*zrhox*h_in(jk)) 
    1192                      ELSE 
    1193                        tabin(jk)  = 0. 
    1194                      ENDIF  
    1195                   END DO 
    1196  
    1197                   z_in(1) = 0.5_wp * h_in(1) - zhtot + hv0_parent(ji,jj) 
    1198                   DO jk=2,N_in 
    1199                      z_in(jk) = z_in(jk-1) + 0.5_wp * (h_in(jk-1)+h_in(jk)) 
    1200                   END DO 
    1201  
    1202                   N_out = 0 
    1203                   DO jk=1,jpk 
    1204                      IF (vmask(ji,jj,jk) == 0) EXIT 
    1205                      N_out = N_out + 1 
    1206                      h_out(N_out) = e3v(ji,jj,jk,Krhs_a) 
    1207                   END DO 
    1208  
    1209                   z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hv_0(ji,jj) 
    1210                   DO jk=2,N_out 
    1211                      z_out(jk) = z_out(jk-1) + 0.5_wp * (h_out(jk-1)+h_out(jk)) 
    1212                   END DO 
     1190                        zhtot = zhtot + h_in(jk) 
     1191                        IF( h_in(jk) .GT. 0. ) THEN 
     1192                          tabin(jk) = ptab(ji,jj,jk,1)/(e1v(ji,jj)*zrhox*h_in(jk)) 
     1193                        ELSE 
     1194                          tabin(jk)  = 0. 
     1195                        ENDIF  
     1196                     END DO 
     1197 
     1198                     z_in(1) = 0.5_wp * h_in(1) - zhtot + hv0_parent(ji,jj) 
     1199                     DO jk=2,N_in 
     1200                        z_in(jk) = z_in(jk-1) + 0.5_wp * (h_in(jk-1)+h_in(jk)) 
     1201                     END DO 
     1202 
     1203                     DO jk=1,N_out 
     1204                        h_out(jk) = e3v(ji,jj,jk,Krhs_a) 
     1205                     END DO 
     1206 
     1207                     z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hv_0(ji,jj) 
     1208                     DO jk=2,N_out 
     1209                        z_out(jk) = z_out(jk-1) + 0.5_wp * (h_out(jk-1)+h_out(jk)) 
     1210                     END DO 
    12131211  
    1214                   IF (N_in*N_out > 0) THEN 
    12151212                     IF( l_ini_child ) THEN 
    12161213                        CALL remap_linear       (tabin(1:N_in),z_in(1:N_in),vv(ji,jj,1:N_out,Krhs_a),z_out(1:N_out),N_in,N_out,1) 
     
    15601557                     &                 ptab(ji,jj,jk), tmask(ji,jj,jk) * e3t_0(ji,jj,jk), & 
    15611558                     &                 mig0(ji), mjg0(jj), jk 
    1562                 !     kindic_agr = kindic_agr + 1 
     1559                     kindic_agr = kindic_agr + 1 
    15631560                  ENDIF 
    15641561               END DO 
     
    17031700 
    17041701         IF( l_vremap ) THEN 
    1705             ! Interpolate thicknesses 
     1702            ! Interpolate interfaces  
    17061703            ! Warning: these are masked, hence extrapolated prior interpolation. 
    17071704            DO jk=k1,k2 
    17081705               DO jj=j1,j2 
    17091706                  DO ji=i1,i2 
    1710                       ptab(ji,jj,jk,2) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 
     1707                      ptab(ji,jj,jk,2) = tmask(ji,jj,jk) * gdepw(ji,jj,jk,Kmm_a) 
    17111708                  END DO 
    17121709               END DO 
    17131710            END DO 
    1714  
    1715             ! Extrapolate thicknesses in partial bottom cells: 
    1716             ! Set them to Agrif_SpecialValue (0.). Correct bottom thicknesses are retrieved later on 
    1717             IF (ln_zps) THEN 
    1718                DO jj=j1,j2 
    1719                   DO ji=i1,i2 
    1720                       jk = mbkt(ji,jj) 
    1721                       ptab(ji,jj,jk,2) = 0._wp 
    1722                   END DO 
    1723                END DO            
    1724             END IF 
    17251711         
    17261712           ! Save ssh at last level: 
     
    17361722         IF( l_vremap ) THEN 
    17371723            IF (ln_linssh) ptab(i1:i2,j1:j2,k2,2) = 0._wp  
    1738             avm_k(i1:i2,j1:j2,k1:k2) = 0._wp 
     1724            avm_k(i1:i2,j1:j2,1:jpkm1) = 0._wp 
    17391725                
    17401726            DO jj = j1, j2 
    17411727               DO ji =i1, i2 
    17421728                  N_in = mbkt_parent(ji,jj) 
    1743                   IF ( tmask(ji,jj,1) == 0._wp) N_in = 0 
    1744                   z_in(N_in+1) = ht0_parent(ji,jj) + ptab(ji,jj,k2,2) 
    1745                   DO jk = N_in, 1, -1  ! Parent vertical grid                
    1746                         z_in(jk) = z_in(jk+1) - ptab(ji,jj,jk,2) 
    1747                        tabin(jk) = ptab(ji,jj,jk,1) 
    1748                   END DO 
    1749                   N_out = mbkt(ji,jj)  
    1750                   DO jk = 1, N_out        ! Child vertical grid 
    1751                      z_out(jk) = gdepw(ji,jj,jk,Kmm_a) 
    1752                   END DO 
     1729                  N_out = mbkt(ji,jj) 
    17531730                  IF (N_in*N_out > 0) THEN 
     1731                     DO jk = 1, N_in  ! Parent vertical grid                
     1732                        z_in(jk)  = ptab(ji,jj,jk,2) - ptab(ji,jj,k2,2) 
     1733                        tabin(jk) = ptab(ji,jj,jk,1) 
     1734                     END DO 
     1735                     DO jk = 1, N_out        ! Child vertical grid 
     1736                        z_out(jk) = gdepw(ji,jj,jk,Kmm_a) - ssh(ji,jj,Kmm_a) 
     1737                     END DO 
     1738                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Kmm_a) 
     1739 
    17541740                     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) 
    17551741                  ENDIF 
     
    17571743            END DO 
    17581744         ELSE 
    1759             avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2,1) 
     1745            avm_k(i1:i2,j1:j2,1:jpkm1) = ptab (i1:i2,j1:j2,1:jpkm1,1) 
    17601746         ENDIF 
    17611747      ENDIF 
  • NEMO/trunk/src/NST/agrif_oce_sponge.F90

    r14170 r14218  
    658658                  tabres_child(ji,jj,:) = 0._wp 
    659659                  N_in = mbku_parent(ji,jj) 
    660                   zhtot = 0._wp 
    661                   DO jk=1,N_in 
    662                      !IF (jk==N_in) THEN 
    663                      !   h_in(jk) = hu0_parent(ji,jj) + tabres(ji,jj,k2,m2) - zhtot 
    664                      !ELSE 
    665                      !   h_in(jk) = tabres(ji,jj,jk,m2) 
    666                      !ENDIF 
    667                      h_in(jk) = e3u0_parent(ji,jj,jk) 
    668                      zhtot = zhtot + h_in(jk) 
    669                      tabin(jk) = tabres(ji,jj,jk,m1) 
    670                   END DO 
    671                   !          
    672                   N_out = 0 
    673                   DO jk=1,jpk 
    674                      IF (umask(ji,jj,jk) == 0) EXIT 
    675                      N_out = N_out + 1 
    676                      h_out(N_out) = e3u(ji,jj,jk,Kbb_a) 
    677                   END DO 
    678  
    679                   ! Account for small differences in free-surface 
    680                   IF ( sum(h_out(1:N_out)) > sum(h_in(1:N_in) )) THEN 
    681                      h_out(1) = h_out(1) - ( sum(h_out(1:N_out))-sum(h_in(1:N_in)) ) 
    682                   ELSE 
    683                      h_in(1)   = h_in(1)   - (sum(h_in(1:N_in))-sum(h_out(1:N_out)) ) 
    684                   ENDIF 
     660                  N_out = mbku(ji,jj) 
     661                  IF (N_in * N_out > 0) THEN 
     662                     zhtot = 0._wp 
     663                     DO jk=1,N_in 
     664                        !IF (jk==N_in) THEN 
     665                        !   h_in(jk) = hu0_parent(ji,jj) + tabres(ji,jj,k2,m2) - zhtot 
     666                        !ELSE 
     667                        !   h_in(jk) = tabres(ji,jj,jk,m2) 
     668                        !ENDIF 
     669                        h_in(jk) = e3u0_parent(ji,jj,jk) 
     670                        zhtot = zhtot + h_in(jk) 
     671                        tabin(jk) = tabres(ji,jj,jk,m1) 
     672                     END DO 
     673                     !          
     674                     DO jk=1,N_out 
     675                        h_out(jk) = e3u(ji,jj,jk,Kbb_a) 
     676                     END DO 
     677 
     678                     ! Account for small differences in free-surface 
     679                     IF ( sum(h_out(1:N_out)) > sum(h_in(1:N_in) )) THEN 
     680                        h_out(1) = h_out(1) - ( sum(h_out(1:N_out))-sum(h_in(1:N_in)) ) 
     681                     ELSE 
     682                        h_in(1)   = h_in(1)   - (sum(h_in(1:N_in))-sum(h_out(1:N_out)) ) 
     683                     ENDIF 
    685684                   
    686                   IF (N_in * N_out > 0) THEN 
    687685                     CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out,1) 
    688686                  ENDIF  
     
    843841                  tabres_child(ji,jj,:) = 0._wp 
    844842                  N_in = mbkv_parent(ji,jj) 
    845                   zhtot = 0._wp 
    846                   DO jk=1,N_in 
    847                      !IF (jk==N_in) THEN 
    848                      !   h_in(jk) = hv0_parent(ji,jj) + tabres(ji,jj,k2,m2) - zhtot 
    849                      !ELSE 
    850                      !   h_in(jk) = tabres(ji,jj,jk,m2) 
    851                      !ENDIF 
    852                      h_in(jk) = e3v0_parent(ji,jj,jk) 
    853                      zhtot = zhtot + h_in(jk) 
    854                      tabin(jk) = tabres(ji,jj,jk,m1) 
    855                   END DO 
    856                   !           
    857                   N_out = 0 
    858                   DO jk=1,jpk 
    859                      IF (vmask(ji,jj,jk) == 0) EXIT 
    860                      N_out = N_out + 1 
    861                      h_out(N_out) = e3v(ji,jj,jk,Kbb_a) 
    862                   END DO 
    863  
    864                   ! Account for small differences in free-surface 
    865                   IF ( sum(h_out(1:N_out)) > sum(h_in(1:N_in) )) THEN 
    866                      h_out(1) = h_out(1) - ( sum(h_out(1:N_out))-sum(h_in(1:N_in)) ) 
    867                   ELSE 
    868                      h_in(1)   = h_in(1) - (  sum(h_in(1:N_in))-sum(h_out(1:N_out)) ) 
    869                   ENDIF 
     843                  N_out = mbkv(ji,jj) 
     844                  IF (N_in * N_out > 0) THEN 
     845                     zhtot = 0._wp 
     846                     DO jk=1,N_in 
     847                        !IF (jk==N_in) THEN 
     848                        !   h_in(jk) = hv0_parent(ji,jj) + tabres(ji,jj,k2,m2) - zhtot 
     849                        !ELSE 
     850                        !   h_in(jk) = tabres(ji,jj,jk,m2) 
     851                        !ENDIF 
     852                        h_in(jk) = e3v0_parent(ji,jj,jk) 
     853                        zhtot = zhtot + h_in(jk) 
     854                        tabin(jk) = tabres(ji,jj,jk,m1) 
     855                     END DO 
     856                     !           
     857                     DO jk=1,N_out 
     858                        h_out(jk) = e3v(ji,jj,jk,Kbb_a) 
     859                     END DO 
     860 
     861                     ! Account for small differences in free-surface 
     862                     IF ( sum(h_out(1:N_out)) > sum(h_in(1:N_in) )) THEN 
     863                        h_out(1) = h_out(1) - ( sum(h_out(1:N_out))-sum(h_in(1:N_in)) ) 
     864                     ELSE 
     865                        h_in(1)   = h_in(1) - (  sum(h_in(1:N_in))-sum(h_out(1:N_out)) ) 
     866                     ENDIF 
    870867          
    871                   IF (N_in * N_out > 0) THEN 
    872868                     CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out,1) 
     869 
    873870                  ENDIF 
    874871               END DO 
  • NEMO/trunk/src/NST/agrif_top_interp.F90

    r14148 r14218  
    120120                  ! Build vertical grids: 
    121121                  N_in = mbkt_parent(ji,jj) 
    122                   ! Input grid (account for partial cells if any): 
    123                   DO jk=1,N_in 
    124                      z_in(jk) = ptab(ji,jj,jk,n2) - ptab(ji,jj,k2,n2) 
    125                      tabin(jk,1:jptra) = ptab(ji,jj,jk,1:jptra) 
    126                   END DO 
     122                  N_out = mbkt(ji,jj) 
     123                  IF (N_in*N_out > 0) THEN 
     124                     ! Input grid (account for partial cells if any): 
     125                     DO jk=1,N_in 
     126                        z_in(jk) = ptab(ji,jj,jk,n2) - ptab(ji,jj,k2,n2) 
     127                        tabin(jk,1:jptra) = ptab(ji,jj,jk,1:jptra) 
     128                     END DO 
    127129                   
    128                   ! Intermediate grid: 
    129                   IF ( l_vremap ) THEN 
    130                      DO jk = 1, N_in 
    131                         h_in_i(jk) = e3t0_parent(ji,jj,jk) * &  
    132                           &       (1._wp + ptab(ji,jj,k2,n2)/(ht0_parent(ji,jj)*ssmask(ji,jj) + 1._wp - ssmask(ji,jj))) 
    133                      END DO 
    134                      z_in_i(1) = 0.5_wp * h_in_i(1) 
    135                      DO jk=2,N_in 
    136                         z_in_i(jk) = z_in_i(jk-1) + 0.5_wp * ( h_in_i(jk) + h_in_i(jk-1) ) 
    137                      END DO 
    138                      z_in_i(1:N_in) = z_in_i(1:N_in)  - ptab(ji,jj,k2,n2) 
    139                   ENDIF 
    140  
    141                   ! Output (Child) grid: 
    142                   N_out = mbkt(ji,jj) 
    143                   DO jk=1,N_out 
    144                      h_out(jk) = e3t(ji,jj,jk,Krhs_a) 
    145                   END DO 
    146                   z_out(1) = 0.5_wp * h_out(1) 
    147                   DO jk=2,N_out 
    148                      z_out(jk) = z_out(jk-1) + 0.5_wp * ( h_out(jk)+h_out(jk-1) ) 
    149                   END DO 
    150                   IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Krhs_a)                
    151  
    152                   IF (N_in*N_out > 0) THEN 
     130                     ! Intermediate grid: 
     131                     IF ( l_vremap ) THEN 
     132                        DO jk = 1, N_in 
     133                           h_in_i(jk) = e3t0_parent(ji,jj,jk) * &  
     134                             &       (1._wp + ptab(ji,jj,k2,n2)/(ht0_parent(ji,jj)*ssmask(ji,jj) + 1._wp - ssmask(ji,jj))) 
     135                        END DO 
     136                        z_in_i(1) = 0.5_wp * h_in_i(1) 
     137                        DO jk=2,N_in 
     138                           z_in_i(jk) = z_in_i(jk-1) + 0.5_wp * ( h_in_i(jk) + h_in_i(jk-1) ) 
     139                        END DO 
     140                        z_in_i(1:N_in) = z_in_i(1:N_in)  - ptab(ji,jj,k2,n2) 
     141                     ENDIF 
     142 
     143                     ! Output (Child) grid: 
     144                     DO jk=1,N_out 
     145                        h_out(jk) = e3t(ji,jj,jk,Krhs_a) 
     146                     END DO 
     147                     z_out(1) = 0.5_wp * h_out(1) 
     148                     DO jk=2,N_out 
     149                        z_out(jk) = z_out(jk-1) + 0.5_wp * ( h_out(jk)+h_out(jk-1) ) 
     150                     END DO 
     151                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Krhs_a)                
     152 
    153153                     IF( l_ini_child ) THEN 
    154154                        CALL remap_linear(tabin(1:N_in,1:jptra),z_in(1:N_in),tr(ji,jj,1:N_out,1:jptra,Krhs_a),          & 
  • NEMO/trunk/src/NST/agrif_user.F90

    r14170 r14218  
    272272                   
    273273            CALL Agrif_check_bat( kindic_agr )            
    274  
    275             CALL mpp_sum( 'agrif_InitValues_Domain', kindic_agr ) 
    276             IF( kindic_agr /= 0 ) THEN 
    277                CALL ctl_stop('==> Child Bathymetry is NOT correct near boundaries.') 
    278             ELSE 
    279                IF(lwp) WRITE(numout,*) '==> Child Bathymetry is ok near boundaries.' 
    280                IF(lwp) WRITE(numout,*) ' ' 
    281             ENDIF   
    282274         ENDIF 
     275         ! 
     276         CALL mpp_sum( 'agrif_InitValues_Domain', kindic_agr ) 
     277         IF( kindic_agr /= 0 ) THEN 
     278            CALL ctl_stop('==> Child Bathymetry is NOT correct near boundaries.') 
     279         ELSE 
     280            IF(lwp) WRITE(numout,*) '==> Child Bathymetry is ok near boundaries.' 
     281            IF(lwp) WRITE(numout,*) ' ' 
     282         ENDIF   
    283283      ENDIF 
    284284      ! 
     
    532532      CALL Agrif_Set_bc(   ub2b_cor_id, (/-imaxrho*nn_shift_bar,ind1/) ) 
    533533      CALL Agrif_Set_bc(   vb2b_cor_id, (/-imaxrho*nn_shift_bar,ind1/) ) 
    534       IF( ln_zdftke.OR.ln_zdfgls ) CALL Agrif_Set_bc( avm_id, (/0,ind1/) ) 
     534      IF( ln_zdftke.OR.ln_zdfgls ) CALL Agrif_Set_bc( avm_id, (/0,ind1-1/) ) 
    535535!!$      CALL Agrif_Set_bc(glamt_id, (/0,ind1-1/) )   
    536536!!$      CALL Agrif_Set_bc(gphit_id, (/0,ind1-1/) )   
Note: See TracChangeset for help on using the changeset viewer.