Opened 16 years ago
Closed 16 years ago
#350 closed bug (Fixed)
set_data: subscript out of range
| Reported by: | kate | Owned by: | arango |
|---|---|---|---|
| Priority: | major | Milestone: | Release ROMS/TOMS 3.3 |
| Component: | Nonlinear | Version: | 3.3 |
| Keywords: | Cc: |
Description
This code:
726 IF (SOUTH_WEST_TEST) THEN 727 # ifdef WEST_FSOBC 728 DO j=JLB,JUB 729 cff=Dcrit(ng)-GRID(ng)%h(0,j) 730 IF (BOUNDARY(ng)%zeta_west(j).le.cff) THEN 731 BOUNDARY(ng)%zeta_west(j)=cff 732 END IF 733 END DO 734 # endif
becomes:
292 IF (.true.) THEN
293 DO j=JLB,JUB
294 cff=Dcrit(ng)-GRID(ng)%h(0,j)
295 IF (BOUNDARY(ng)%zeta_west(j).le.cff) THEN
296 BOUNDARY(ng)%zeta_west(j)=cff
297 END IF
298 END DO
running in parallel, I get:
0: Subscript out of range for array grid%h (set_data.f90: 294)
subscript=0, lower bound=159, upper bound=242, dimension=2
0: Subscript out of range for array grid%h (set_data.f90: 294)
subscript=83, lower bound=0, upper bound=82, dimension=2
0: Subscript out of range for array grid%h (set_data.f90: 294)
subscript=0, lower bound=559, upper bound=642, dimension=2
and so on.
Note:
See TracTickets
for help on using tickets.

Yes, great catch! This is a nasty parallel bug. We nee to have instead:
# ifdef WEST_FSOBC bry_update=.FALSE. IF (WESTERN_EDGE) THEN DO j=JstrR,JendR cff=Dcrit(ng)-GRID(ng)%h(0,j) IF (BOUNDARY(ng)%zeta_west(j).le.cff) THEN BOUNDARY(ng)%zeta_west(j)=cff END IF END DO bry_update=.TRUE. END IF # ifdef DISTRIBUTE CALL mp_boundary (ng, iNLM, JstrR, JendR, JLB, JUB, 1, 1, & & bry_update, & & BOUNDARY(ng)%zeta_west) # endif # endif # ifdef EAST_FSOBC bry_update=.FALSE. IF (EASTERN_EDGE) THEN DO j=JstrR,JendR cff=Dcrit(ng)-GRID(ng)%h(Lm(ng)+1,j) IF (BOUNDARY(ng)%zeta_east(j).le.cff) THEN BOUNDARY(ng)%zeta_east(j)=cff END IF END DO bry_update=.TRUE. END IF # ifdef DISTRIBUTE CALL mp_boundary (ng, iNLM, JstrR, JendR, JLB, JUB, 1, 1, & & bry_update, & & BOUNDARY(ng)%zeta_east) # endif # endif # ifdef SOUTH_FSOBC bry_update=.FALSE. IF (SOUTHERN_EDGE) THEN DO i=IstrR,IendR cff=Dcrit(ng)-GRID(ng)%h(i,0) IF (BOUNDARY(ng)%zeta_south(i).le.cff) THEN BOUNDARY(ng)%zeta_south(i)=cff END IF END DO bry_update=.TRUE. END IF # ifdef DISTRIBUTE CALL mp_boundary (ng, iNLM, IstrR, IendR, ILB, IUB, 1, 1, & & bry_update, & & BOUNDARY(ng)%zeta_south) # endif # endif # ifdef NORTH_FSOBC bry_update=.FALSE. IF (NORTHERN_EDGE) THEN DO i=IstrR,IendR cff=Dcrit(ng)-GRID(ng)%h(i,Mm(ng)+1) IF (BOUNDARY(ng)%zeta_north(i).le.cff) THEN BOUNDARY(ng)%zeta_north(i)=cff END IF END DO bry_update=.TRUE. END IF # ifdef DISTRIBUTE CALL mp_boundary (ng, iNLM, IstrR, IendR, ILB, IUB, 1, 1, & & bry_update, & & BOUNDARY(ng)%zeta_north) # endif # endif # endif