[RegCNET] Possible small bug in postproc.f
Moetasim Ashfaq
mashfaq at purdue.edu
Wed Jan 30 04:01:21 CET 2008
Hi O'Brien,
Thanks for reporting this problem. Other known issues are wrong averaging of
tmin/tmax and a minor bug in subats post-processing. I plan to send a fix to Bi
before March workshop, including your fix.
Moet
Quoting Travis O'Brien <tobrien at ucsc.edu>:
> Dear RegCM Users,
>
> I have come across an issue in postproc.f that can sporadically cause
> segmentation faults (and similar memory access errors): in the
> subroutine CALCVD(), which calculates the horizontal vorticity (named
> 'VOR' in the netcdf files) and divergence (DIV), the algorithm for
> computing these quantities attempts to access parts of memory outside of
> the bounds of the U and V input arrays (see below for a description).
>
> This is problematic because sometimes the subroutine can access the
> out-of-bound memory and get whatever value is stored there (which often
> seems to be 0, but I don't think that's guaranteed and may depend on the
> compiler). However, sometimes if a person is unlucky, the memory is
> outside of the bounds of the program, which can cause the operating
> system to kill the program without any warning or error message other
> than the cryptic "Segmentation Fault" error.
>
> I don't believe that this matters much on the data analysis side of the
> fence, because the DIV and VOR will only be affected by this at grid
> cells that are on the edge of the domain, and I think that these values
> shouldn't even be specified since these quantities are derivatives and
> so shouldn't have values at the domain edges. Does anyone have any
> thoughts on this?
>
> I propose to fix the issue by changing the do loops so that they
> terminate at nx1-1 and ny1-1, and then setting the edges of the arrays
> to be whatever the missing_value attribute is set to be in the netcdf
> files. My implementation of this fix is attached as a patch to the
> version of postproc.f that is supplied in the current version of RegCM.
>
> Cheers,
> Travis O'Brien
>
> Description of the issue--
> in postproc1.param, nx1 and ny1 are defined to be the same as nx and ny,
> which is the size of the U and V arrays in postproc.f:
> parameter (ny1=ny,nx1=nx)
>
> in postproc.f, there is a do loop that goes from 1 to nx1/ny1, which are
> the upper bounds of the U and V arrays. A piece of code tries to access
> i+1 and j+1, which are beyond the bounds of U and V when i=nx1 or j=ny1:
> subroutine CALCVD(....)
> .
> .
> real u(nx,ny,nz)
> .
> .
> do j=1,ny1
> do i=1,nx1
> .
> u2=u(i+1,j ,k)/dmap(i+1,j )
> .
> enddo
> enddo
>
> --
> Travis A. O'Brien
> Graduate Student Researcher
> Earth and Planetary Science Dept.
> UC Santa Cruz
>
> tobrien at ucsc.edu
> (831) 459-3504
>
>
More information about the RegCNET
mailing list