Gromacs  2020.4
gmx::anonymous_namespace{grid.cpp} Namespace Reference

## Functions

void centerPeriodicValueAroundZero (double *x, double period)
Modify x so that it is periodic in [-period/2, +period/2). More...

int indexWithinPeriod (int x, int period)
If period>0, retrun x so that it is periodic in [0, period), else return x. More...

double getIntervalLengthPeriodic (double origin, double end, double period)
Get the length of the interval (origin, end). More...

double getDeviationPeriodic (double x, double x0, double period)
Get the deviation x - x0. More...

int multiDimGridIndexToLinear (const std::vector< GridAxis > &axis, const awh_ivec indexMulti)
Convert a multidimensional grid point index to a linear one. More...

bool stepInMultiDimArray (int numDim, const awh_ivec numPoints, awh_ivec indexDim)
Take a step in a multidimensional array. More...

void gridToSubgridIndex (const Grid &grid, const awh_ivec subgridOrigin, const awh_ivec subgridNpoints, int point, awh_ivec subgridIndex)
Transforms a grid point index to to the multidimensional index of a subgrid. More...

bool subgridToGridIndex (const Grid &grid, const awh_ivec subgridOrigin, const awh_ivec subgridIndex, int *gridIndex)
Transform a multidimensional subgrid index to a grid point index. More...

void setNeighborsOfGridPoint (int pointIndex, const Grid &grid, std::vector< int > *neighborIndexArray)
Find and set the neighbors of a grid point. More...

## Function Documentation

 void gmx::anonymous_namespace{grid.cpp}::centerPeriodicValueAroundZero ( double * x, double period )

Modify x so that it is periodic in [-period/2, +period/2).

x is modified by shifting its value by a +/- a period if needed. Thus, it is assumed that x is at most one period away from this interval. For period = 0, x is not modified.

Parameters
 [in,out] x Pointer to the value to modify. [in] period The period, or 0 if not periodic.
 double gmx::anonymous_namespace{grid.cpp}::getDeviationPeriodic ( double x, double x0, double period )

Get the deviation x - x0.

For period > 0, the deviation with minimum absolute value is returned, i.e. with a value in the interval [-period/2, +period/2). Also for period > 0, it is assumed that |x - x0| < period.

Parameters
 [in] x From value. [in] x0 To value. [in] period The period, or 0 if not periodic.
Returns
the deviation from x to x0.
 double gmx::anonymous_namespace{grid.cpp}::getIntervalLengthPeriodic ( double origin, double end, double period )

Get the length of the interval (origin, end).

This returns the distance obtained by connecting the origin point to the end point in the positive direction. Note that this is generally not the shortest distance. For period > 0, both origin and end are expected to take values in the same periodic interval, ie. |origin - end| < period.

Parameters
 [in] origin Start value of the interval. [in] end End value of the interval. [in] period The period, or 0 if not periodic.
Returns
the interval length from origin to end.
 void gmx::anonymous_namespace{grid.cpp}::gridToSubgridIndex ( const Grid & grid, const awh_ivec subgridOrigin, const awh_ivec subgridNpoints, int point, awh_ivec subgridIndex )

Transforms a grid point index to to the multidimensional index of a subgrid.

The subgrid is defined by the location of its origin and the number of points along each dimension. The index transformation thus consists of a projection of the linear index onto each dimension, followed by a translation of the origin. The subgrid may have parts that don't overlap with the grid. E.g. the origin vector can have negative components meaning the origin lies outside of the grid. However, the given point needs to be both a grid and subgrid point.

Periodic boundaries are taken care of by wrapping the subgrid around the grid. Thus, for periodic dimensions the number of subgrid points need to be less than the number of points in a period to prevent problems of wrapping around.

Parameters
 [in] grid The grid. [in] subgridOrigin Vector locating the subgrid origin relative to the grid origin. [in] subgridNpoints The number of subgrid points in each dimension. [in] point Grid point to get subgrid index for. [in,out] subgridIndex Subgrid multidimensional index.
 int gmx::anonymous_namespace{grid.cpp}::indexWithinPeriod ( int x, int period )

If period>0, retrun x so that it is periodic in [0, period), else return x.

Return x is shifted its value by a +/- a period, if needed. Thus, it is assumed that x is at most one period away from this interval. For this domain and period > 0 this is equivalent to x = x % period. For period = 0, x is not modified.

Parameters
 [in,out] x Pointer to the value to modify, should be >= 0. [in] period The period, or 0 if not periodic.
Returns
for period>0: index value witin [0, period), otherwise: `x`.
 int gmx::anonymous_namespace{grid.cpp}::multiDimGridIndexToLinear ( const std::vector< GridAxis > & axis, const awh_ivec indexMulti )

Convert a multidimensional grid point index to a linear one.

Parameters
 [in] axis The grid axes. [in] indexMulti Multidimensional grid point index to convert to a linear one.
Returns
the linear index.
 void gmx::anonymous_namespace{grid.cpp}::setNeighborsOfGridPoint ( int pointIndex, const Grid & grid, std::vector< int > * neighborIndexArray )

Find and set the neighbors of a grid point.

The search space for neighbors is a subgrid with size set by a scope cutoff. In general not all point within scope will be valid grid points.

Parameters
 [in] pointIndex Grid point index. [in] grid The grid. [in,out] neighborIndexArray Array to fill with neighbor indices.
 bool gmx::anonymous_namespace{grid.cpp}::stepInMultiDimArray ( int numDim, const awh_ivec numPoints, awh_ivec indexDim )

Take a step in a multidimensional array.

The multidimensional index gives the starting point to step from. Dimensions are stepped through in order of decreasing dimensional index such that the index is incremented in the highest dimension possible. If the starting point is the end of the array, a step cannot be taken and the index is not modified.

Parameters
 [in] numDim Number of dimensions of the array. [in] numPoints Vector with the number of points along each dimension. [in,out] indexDim Multidimensional index, each with values in [0, numPoints[d] - 1].
Returns
true if a step was taken, false if not.
 bool gmx::anonymous_namespace{grid.cpp}::subgridToGridIndex ( const Grid & grid, const awh_ivec subgridOrigin, const awh_ivec subgridIndex, int * gridIndex )

Transform a multidimensional subgrid index to a grid point index.

If the given subgrid point is not a grid point the transformation will not be successful and the grid point index will not be set. Periodic boundaries are taken care of by wrapping the subgrid around the grid.

Parameters
 [in] grid The grid. [in] subgridOrigin Vector locating the subgrid origin relative to the grid origin. [in] subgridIndex Subgrid multidimensional index to get grid point index for. [in,out] gridIndex Grid point index.
Returns
true if the transformation was successful.