#include "gromacs/pbcutil/ishift.h"
Structure and basic routines to handle periodic boundary conditions.
This file contains CPU
 Todo:
 CPU, GPU and SIMD routines essentially do the same operations on different datatypes. Currently this leads to code duplication, which has to be resolved. For details, see Issue #2863 https://gitlab.com/gromacs/gromacs//issues/2863
 Author
 Mark Abraham mark..nosp@m.j.ab.nosp@m.raham.nosp@m.@gma.nosp@m.il.co.nosp@m.m

Berk Hess hess@.nosp@m.kth..nosp@m.se

Artem Zhmurov zhmur.nosp@m.ov@g.nosp@m.mail..nosp@m.com
Computes the vector between two points taking PBC into account.
Computes the vector dr between points r2 and r1, taking into account the periodic boundary conditions, described in pbcAiuc object. Note that this routine always does the PBC arithmetic for all directions, multiplying the displacements by zeroes if the corresponding direction is not periodic. For triclinic boxes only distances up to half the smallest box diagonal element are guaranteed to be the shortest. This means that distances from 0.5/sqrt(2) times a box vector length (e.g. for a rhombic dodecahedron) can use a more distant periodic image.
 Todo:
 This routine operates on rvec types and uses PbcAiuc to define periodic box, but essentially does the same thing as SIMD and GPU version. These will have to be unified in future to avoid code duplication. See Issue #2863: https://gitlab.com/gromacs/gromacs//issues/2863
 Parameters

[in]  pbcAiuc  PBC object. 
[in]  r1  Coordinates of the first point. 
[in]  r2  Coordinates of the second point. 
[out]  dr  Resulting distance. 
static void setPbcAiuc 
( 
int 
numPbcDim, 


const matrix 
box, 


PbcAiuc * 
pbcAiuc 

) 
 

inlinestatic 
Set the PBC datastructure.
 Parameters

[in]  numPbcDim  Number of periodic dimensions: 0  no periodicity. 1  periodicity along Xaxis. 2  periodicity in XY plane. 3  periodicity along all dimensions. 
[in]  box  Matrix, describing the periodic cell. 
[out]  pbcAiuc  Pointer to PbcAiuc structure to be initialized. 