[gmx-developers] cmap_setup_grid_index bug?
David van der Spoel
spoel at xray.bmc.uu.se
Fri Oct 24 13:50:57 CEST 2014
In listed-forces/bonded.cpp I found the following function (when
debugging a SEGV in cmap_dihs), note the comment was already there. It
seems that the grid_spacing is used in a strange way, with data from 1
until grid_spacing - 2, is that correct?
/*! \brief Mysterious undocumented function */
static int
cmap_setup_grid_index(int ip, int grid_spacing, int *ipm1, int *ipp1,
int *ipp2)
{
int im1, ip1, ip2;
if (ip < 0)
{
ip = ip + grid_spacing - 1;
}
else if (ip > grid_spacing)
{
ip = ip - grid_spacing - 1;
}
If that is correct, then code like
pos1 = iphi1*cmap_grid->grid_spacing+iphi2;
is suspect. The SEGV finally comes in this statement:
ty[0] = cmapd[pos1*4];
But topology/idef.h seems to tell me that the array should be indexed
from 0 to grid_spacing-1
typedef struct
{
real *cmap; /* Has length 4*grid_spacing*grid_spacing, */
/* there are 4 entries for each cmap type (V,dVdx,dVdy,d2dVdxdy) */
} gmx_cmapdata_t;
In summary, cmap_setup_grid_index seems very suspicious.
Any deeper insights anyone?
--
David van der Spoel, Ph.D., Professor of Biology
Dept. of Cell & Molec. Biol., Uppsala University.
Box 596, 75124 Uppsala, Sweden. Phone: +46184714205.
spoel at xray.bmc.uu.se http://folding.bmc.uu.se
More information about the gromacs.org_gmx-developers
mailing list