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 15360 – NEMO

Changeset 15360


Ignore:
Timestamp:
2021-10-13T12:01:55+02:00 (3 years ago)
Author:
smasson
Message:

trunk: bugfix following [15354], see #2731

Location:
NEMO/trunk/src/OCE/BDY
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/BDY/bdydta.F90

    r13472 r15360  
    243243         ! If full velocities in boundary data, then split it into barotropic and baroclinic component 
    244244         IF( bf_alias(jp_bdyu3d)%ltotvel ) THEN     ! if we read 3D total velocity (can be true only if u3d was read) 
    245             ! 
    246245            igrd = 2                       ! zonal velocity 
    247246            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     
    258257               END DO 
    259258            END DO 
     259         ENDIF   ! ltotvel 
     260         IF( bf_alias(jp_bdyv3d)%ltotvel ) THEN     ! if we read 3D total velocity (can be true only if u3d was read) 
    260261            igrd = 3                       ! meridional velocity 
    261262            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
  • NEMO/trunk/src/OCE/BDY/bdydyn2d.F90

    r15354 r15360  
    5151      !! 
    5252      INTEGER               ::   ib_bdy, ir     ! BDY set index, rim index 
    53       INTEGER, DIMENSION(3) ::   idir3 
    54       INTEGER, DIMENSION(6) ::   idir6 
    5553      LOGICAL               ::   llrim0         ! indicate if rim 0 is treated 
    5654      LOGICAL, DIMENSION(8) ::   llsend2, llrecv2, llsend3, llrecv3  ! indicate how communications are to be carried out 
     
    9088            SELECT CASE( cn_dyn2d(ib_bdy) ) 
    9189            CASE('flather') 
    92                idir6 = (/ jpwe, jpea, jpsw, jpse, jpnw, jpne /) 
    93                llsend2(idir6) = llsend2(idir6) .OR. lsend_bdyint(ib_bdy,2,idir6,ir)   ! west/east, U points 
    94                idir3 = (/ jpwe, jpsw, jpnw /) 
    95                llsend2(idir3) = llsend2(idir3) .OR. lsend_bdyext(ib_bdy,2,idir3,ir)   ! nei might search point towards its east bdy 
    96                llrecv2(idir6) = llrecv2(idir6) .OR. lrecv_bdyint(ib_bdy,2,idir6,ir)   ! west/east, U points 
    97                idir3 = (/ jpea, jpse, jpne /) 
    98                llrecv2(idir3) = llrecv2(idir3) .OR. lrecv_bdyext(ib_bdy,2,idir3,ir)   ! might search point towards bdy on the east 
    99                idir6 = (/ jpso, jpno, jpsw, jpse, jpnw, jpne /) 
    100                llsend3(idir6) = llsend3(idir6) .OR. lsend_bdyint(ib_bdy,3,idir6,ir)   ! north/south, V points 
    101                idir3 = (/ jpso, jpsw, jpse /) 
    102                llsend3(idir3) = llsend3(idir3) .OR. lsend_bdyext(ib_bdy,3,idir3,ir)   ! nei might search point towards its north bdy 
    103                llrecv3(idir6) = llrecv3(idir6) .OR. lrecv_bdyint(ib_bdy,3,idir6,ir)   ! north/south, V points 
    104                idir3 = (/ jpno, jpnw, jpne /) 
    105                llrecv3(idir3) = llrecv3(idir3) .OR. lrecv_bdyext(ib_bdy,3,idir3,ir)   ! might search point towards bdy on the north 
     90               llsend2(:) = llsend2(:) .OR. lsend_bdyext(ib_bdy,2,:,ir) .OR. lsend_bdyint(ib_bdy,2,:,ir) 
     91               llrecv2(:) = llrecv2(:) .OR. lrecv_bdyext(ib_bdy,2,:,ir) .OR. lrecv_bdyint(ib_bdy,2,:,ir) 
     92               llsend3(:) = llsend3(:) .OR. lsend_bdyext(ib_bdy,3,:,ir) .OR. lsend_bdyint(ib_bdy,3,:,ir) 
     93               llrecv3(:) = llrecv3(:) .OR. lrecv_bdyext(ib_bdy,3,:,ir) .OR. lrecv_bdyint(ib_bdy,3,:,ir) 
    10694            CASE('orlanski', 'orlanski_npo') 
    10795               llsend2(:) = llsend2(:) .OR. lsend_bdyolr(ib_bdy,2,:,ir)   ! possibly every direction, U points 
  • NEMO/trunk/src/OCE/BDY/bdydyn3d.F90

    r15354 r15360  
    4646      ! 
    4747      INTEGER               ::   ib_bdy, ir     ! BDY set index, rim index 
    48       INTEGER, DIMENSION(6) ::   idir6 
    4948      LOGICAL               ::   llrim0         ! indicate if rim 0 is treated 
    5049      LOGICAL, DIMENSION(8) ::   llsend2, llrecv2, llsend3, llrecv3  ! indicate how communications are to be carried out 
     
    8887               llrecv3(:) = llrecv3(:) .OR. lrecv_bdyolr(ib_bdy,3,:,ir)   ! possibly every direction, V points 
    8988            CASE('zerograd') 
    90                idir6 = (/ jpso, jpno, jpsw, jpse, jpnw, jpne /) 
    91                llsend2(idir6) = llsend2(idir6) .OR. lsend_bdyint(ib_bdy,2,idir6,ir)   ! north/south, U points 
    92                llrecv2(idir6) = llrecv2(idir6) .OR. lrecv_bdyint(ib_bdy,2,idir6,ir)   ! north/south, U points 
    93                idir6 = (/ jpwe, jpea, jpsw, jpse, jpnw, jpne /) 
    94                llsend3(idir6) = llsend3(idir6) .OR. lsend_bdyint(ib_bdy,3,idir6,ir)   ! west/east, V points 
    95                llrecv3(idir6) = llrecv3(idir6) .OR. lrecv_bdyint(ib_bdy,3,idir6,ir)   ! west/east, V points 
     89               llsend2(:) = llsend2(:) .OR. lsend_bdyint(ib_bdy,2,:,ir) 
     90               llrecv2(:) = llrecv2(:) .OR. lrecv_bdyint(ib_bdy,2,:,ir) 
     91               llsend3(:) = llsend3(:) .OR. lsend_bdyint(ib_bdy,3,:,ir) 
     92               llrecv3(:) = llrecv3(:) .OR. lrecv_bdyint(ib_bdy,3,:,ir) 
    9693            CASE('neumann') 
    9794               llsend2(:) = llsend2(:) .OR. lsend_bdyint(ib_bdy,2,:,ir)   ! possibly every direction, U points 
  • NEMO/trunk/src/OCE/BDY/bdyice.F90

    r15354 r15360  
    331331      INTEGER               ::   jbdy, ir          ! BDY set index, rim index 
    332332      INTEGER               ::   ibeg, iend        ! length of rim to be treated (rim 0 or rim 1) 
    333       INTEGER, DIMENSION(3) ::   idir3 
    334333      REAL(wp)              ::   zmsk1, zmsk2, zflag 
    335334      LOGICAL, DIMENSION(8) :: llsend2, llrecv2, llsend3, llrecv3  ! indicate how communications are to be carried out 
     
    431430            DO jbdy = 1, nb_bdy 
    432431               IF( cn_ice(jbdy) == 'frs' .AND. nn_ice_dta(jbdy) /= 0 ) THEN 
    433                   llsend2(  :  ) = llsend2(  :  ) .OR. lsend_bdyint(jbdy,2,  :  ,ir)   ! possibly every direction, U points 
    434                   idir3 = (/ jpwe, jpsw, jpnw /) 
    435                   llsend2(idir3) = llsend2(idir3) .OR. lsend_bdyext(jbdy,2,idir3,ir)   ! nei might search point towards its ea bdy 
    436                   llrecv2(  :  ) = llrecv2(  :  ) .OR. lrecv_bdyint(jbdy,2,  :  ,ir)   ! possibly every direction, U points 
    437                   idir3 = (/ jpea, jpse, jpne /) 
    438                   llrecv2(idir3) = llrecv2(idir3) .OR. lrecv_bdyext(jbdy,2,idir3,ir)   ! might search point towards east bdy 
     432                  llsend2(:) = llsend2(:) .OR. lsend_bdyext(ib_bdy,2,:,ir) .OR. lsend_bdyint(ib_bdy,2,:,ir) 
     433                  llrecv2(:) = llrecv2(:) .OR. lrecv_bdyext(ib_bdy,2,:,ir) .OR. lrecv_bdyint(ib_bdy,2,:,ir) 
    439434               END IF 
    440435            END DO 
     
    447442            DO jbdy = 1, nb_bdy 
    448443               IF( cn_ice(jbdy) == 'frs' .AND. nn_ice_dta(jbdy) /= 0 ) THEN 
    449                   llsend3(  :  ) = llsend3(  :  ) .OR. lsend_bdyint(jbdy,3,  :  ,ir)   ! possibly every direction, V points 
    450                   idir3 = (/ jpso, jpsw, jpse /) 
    451                   llsend3(idir3) = llsend3(idir3) .OR. lsend_bdyext(jbdy,3,idir3,ir)   ! nei might search point towards its no bdy 
    452                   llrecv3(  :  ) = llrecv3(  :  ) .OR. lrecv_bdyint(jbdy,3,  :  ,ir)   ! possibly every direction, V points 
    453                   idir3 = (/ jpno, jpnw, jpne /) 
    454                   llrecv3(idir3) = llrecv3(idir3) .OR. lrecv_bdyext(jbdy,3,idir3,ir)   ! might search point towards north bdy 
     444                  llsend3(:) = llsend3(:) .OR. lsend_bdyext(ib_bdy,3,:,ir) .OR. lsend_bdyint(ib_bdy,3,:,ir) 
     445                  llrecv3(:) = llrecv3(:) .OR. lrecv_bdyext(ib_bdy,3,:,ir) .OR. lrecv_bdyint(ib_bdy,3,:,ir) 
    455446               END IF 
    456447            END DO 
  • NEMO/trunk/src/OCE/BDY/bdyini.F90

    r15354 r15360  
    593593                  ENDIF 
    594594               ENDIF 
    595                IF( ( ( ii >= Nis0 .AND. ii <= Nie0 ) .OR. nn_comm == 1 )  & 
    596                   &                                    .AND. ij >= Njs0 .AND. ij < Njs0 + nn_hls ) THEN   ! so inner side 
     595               IF( ii >= Nis0 .AND. ii <= Nie0         .AND. ij >= Njs0 .AND. ij < Njs0 + nn_hls ) THEN   ! so inner side 
    597596                  IF( mpiSnei(nn_hls,jpso) > -1 ) THEN   ;   lsend_bdyolr(ib_bdy,igrd,jpso,ir) = .TRUE.   ! send to so neighbourg 
    598597                  ELSE                                   ;   CALL ctl_stop( 'bdyini send olr so-side' ) 
    599598                  ENDIF 
    600599               ENDIF 
    601                IF( ( ( ii >= Nis0 .AND. ii <= Nie0 ) .OR. nn_comm == 1 ) & 
    602                   &                                    .AND. ij <= Nje0 .AND. ij > Nje0 - nn_hls ) THEN   ! no inner side 
     600               IF( ii  < Nis0                          .AND. ij >= Njs0 .AND. ij < Njs0 + nn_hls ) THEN   ! so side we-halo 
     601                  IF( nn_comm == 1 .AND. mpiSnei(nn_hls,jpso) > -1 )   lsend_bdyolr(ib_bdy,igrd,jpso,ir) = .TRUE. 
     602               ENDIF 
     603               IF( ii  > Nie0                          .AND. ij >= Njs0 .AND. ij < Njs0 + nn_hls ) THEN   ! so side ea-halo  
     604                  IF( nn_comm == 1 .AND. mpiSnei(nn_hls,jpso) > -1 )   lsend_bdyolr(ib_bdy,igrd,jpso,ir) = .TRUE. 
     605               ENDIF 
     606               IF( ii >= Nis0 .AND. ii <= Nie0         .AND. ij <= Nje0 .AND. ij > Nje0 - nn_hls ) THEN   ! no inner side 
    603607                  IF( mpiSnei(nn_hls,jpno) > -1 ) THEN   ;   lsend_bdyolr(ib_bdy,igrd,jpno,ir) = .TRUE.   ! send to no neighbourg 
    604608                  ELSE                                   ;   CALL ctl_stop( 'bdyini send olr no-side' ) 
    605609                  ENDIF 
     610               ENDIF 
     611               IF( ii  < Nis0                          .AND. ij <= Nje0 .AND. ij > Nje0 - nn_hls ) THEN   ! no side we-halo 
     612                  IF( nn_comm == 1 .AND. mpiSnei(nn_hls,jpno) > -1 )   lsend_bdyolr(ib_bdy,igrd,jpno,ir) = .TRUE. 
     613               ENDIF 
     614               IF( ii  > Nie0                          .AND. ij <= Nje0 .AND. ij > Nje0 - nn_hls ) THEN   ! no side ea-halo 
     615                  IF( nn_comm == 1 .AND. mpiSnei(nn_hls,jpno) > -1 )   lsend_bdyolr(ib_bdy,igrd,jpno,ir) = .TRUE. 
    606616               ENDIF 
    607617               IF( ii >= Nis0 .AND. ii < Nis0 + nn_hls .AND. ij >= Njs0 .AND. ij < Njs0 + nn_hls ) THEN   ! sw inner corner 
     
    675685         END DO   !   igrd 
    676686          
    677 !!$         ! Comment out for debug 
     687         ! Comment out for debug 
    678688!!$         DO ir = 0,1 
    679689!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'T', 1._wp, kfillmode = jpfillnothing,   & 
    680690!!$               &                              lsend = lsend_bdyolr(ib_bdy,1,:,ir), lrecv = lrecv_bdyolr(ib_bdy,1,:,ir) ) 
     691!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug olr T', ir ; CALL FLUSH(numout) 
    681692!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'U', 1._wp, kfillmode = jpfillnothing,   & 
    682693!!$               &                              lsend = lsend_bdyolr(ib_bdy,2,:,ir), lrecv = lrecv_bdyolr(ib_bdy,2,:,ir) ) 
     694!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug olr U', ir ; CALL FLUSH(numout) 
    683695!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'V', 1._wp, kfillmode = jpfillnothing,   & 
    684696!!$               &                              lsend = lsend_bdyolr(ib_bdy,3,:,ir), lrecv = lrecv_bdyolr(ib_bdy,3,:,ir) )     
     697!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug olr V', ir ; CALL FLUSH(numout) 
    685698!!$         END DO 
    686699          
     
    10151028         END DO   ! igrd 
    10161029 
    1017 !!$         ! Comment out for debug 
     1030         ! Comment out for debug 
    10181031!!$         DO ir = 0,1 
    10191032!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'T', 1._wp, kfillmode = jpfillnothing,   & 
    10201033!!$               &                              lsend = lsend_bdyint(ib_bdy,1,:,ir), lrecv = lrecv_bdyint(ib_bdy,1,:,ir) ) 
     1034!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug int T', ir ; CALL FLUSH(numout) 
    10211035!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'U', 1._wp, kfillmode = jpfillnothing,   & 
    10221036!!$               &                              lsend = lsend_bdyint(ib_bdy,2,:,ir), lrecv = lrecv_bdyint(ib_bdy,2,:,ir) ) 
     1037!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug int U', ir ; CALL FLUSH(numout) 
    10231038!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'V', 1._wp, kfillmode = jpfillnothing,   & 
    10241039!!$               &                              lsend = lsend_bdyint(ib_bdy,3,:,ir), lrecv = lrecv_bdyint(ib_bdy,3,:,ir) )     
     1040!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug int V', ir ; CALL FLUSH(numout) 
    10251041!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'T', 1._wp, kfillmode = jpfillnothing,   & 
    10261042!!$               &                              lsend = lsend_bdyext(ib_bdy,1,:,ir), lrecv = lrecv_bdyext(ib_bdy,1,:,ir) ) 
     1043!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug ext T', ir ; CALL FLUSH(numout) 
    10271044!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'U', 1._wp, kfillmode = jpfillnothing,   & 
    10281045!!$               &                              lsend = lsend_bdyext(ib_bdy,2,:,ir), lrecv = lrecv_bdyext(ib_bdy,2,:,ir) ) 
     1046!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug ext U', ir ; CALL FLUSH(numout) 
    10291047!!$            zzbdy(:,:) = narea ; CALL lbc_lnk('bdy debug', zzbdy, 'V', 1._wp, kfillmode = jpfillnothing,   & 
    10301048!!$               &                              lsend = lsend_bdyext(ib_bdy,3,:,ir), lrecv = lrecv_bdyext(ib_bdy,3,:,ir) )     
     1049!!$            IF(lwp) WRITE(numout,*) ' seb bdy debug ext V', ir ; CALL FLUSH(numout) 
    10311050!!$         END DO 
    10321051          
Note: See TracChangeset for help on using the changeset viewer.