Merge remote-tracking branch 'gerrit/release-4-6'
[alexxy/gromacs.git] / src / gromacs / selection / nbsearch.h
1 /*
2  *
3  *                This source code is part of
4  *
5  *                 G   R   O   M   A   C   S
6  *
7  *          GROningen MAchine for Chemical Simulations
8  *
9  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
10  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
11  * Copyright (c) 2001-2009, The GROMACS development team,
12  * check out http://www.gromacs.org for more information.
13
14  * This program is free software; you can redistribute it and/or
15  * modify it under the terms of the GNU General Public License
16  * as published by the Free Software Foundation; either version 2
17  * of the License, or (at your option) any later version.
18  *
19  * If you want to redistribute modifications, please consider that
20  * scientific software is very special. Version control is crucial -
21  * bugs must be traceable. We will be happy to consider code for
22  * inclusion in the official distribution, but derived work must not
23  * be called official GROMACS. Details are found in the README & COPYING
24  * files - if they are missing, get the official version at www.gromacs.org.
25  *
26  * To help us fund GROMACS development, we humbly ask that you cite
27  * the papers on the package - you can find them in the top README file.
28  *
29  * For more info, check our website at http://www.gromacs.org
30  */
31 /*! \file
32  * \brief API for neighborhood searching.
33  *
34  * The API is documented in more detail on a separate page:
35  * \ref nbsearch
36  *
37  * The functions within this file can be used independently of the other parts
38  * of the library.
39  * The library also uses the functions internally.
40  *
41  * \author Teemu Murtola <teemu.murtola@cbr.su.se>
42  * \ingroup module_selection
43  */
44 #ifndef GMX_SELECTION_NBSEARCH_H
45 #define GMX_SELECTION_NBSEARCH_H
46
47 #include "../legacyheaders/typedefs.h"
48
49 #include "indexutil.h"
50
51 struct gmx_ana_pos_t;
52
53 /** Data structure for neighborhood searches. */
54 typedef struct gmx_ana_nbsearch_t gmx_ana_nbsearch_t;
55
56 /** Create a new neighborhood search data structure. */
57 gmx_ana_nbsearch_t *
58 gmx_ana_nbsearch_create(real cutoff, int maxn);
59 /** Free memory allocated for neighborhood search. */
60 void
61 gmx_ana_nbsearch_free(gmx_ana_nbsearch_t *d);
62
63 /** Initializes neighborhood search for a new frame. */
64 void
65 gmx_ana_nbsearch_init(gmx_ana_nbsearch_t *d, t_pbc *pbc, int n, const rvec x[]);
66 /** Initializes neighborhood search for a frame using \c gmx_ana_pos_t.  */
67 void
68 gmx_ana_nbsearch_pos_init(gmx_ana_nbsearch_t *d, t_pbc *pbc,
69                           const struct gmx_ana_pos_t *p);
70 /** Sets the exclusions for the next neighborhood search. */
71 void
72 gmx_ana_nbsearch_set_excl(gmx_ana_nbsearch_t *d, int nexcl, int excl[]);
73 /** Check whether a point is within a neighborhood. */
74 bool
75 gmx_ana_nbsearch_is_within(gmx_ana_nbsearch_t *d, const rvec x);
76 /** Check whether a position is within a neighborhood. */
77 bool
78 gmx_ana_nbsearch_pos_is_within(gmx_ana_nbsearch_t *d,
79                                const struct gmx_ana_pos_t *p, int i);
80 /** Calculates the minimun distance from the reference points. */
81 real
82 gmx_ana_nbsearch_mindist(gmx_ana_nbsearch_t *d, const rvec x);
83 /** Calculates the minimun distance from the reference points. */
84 real
85 gmx_ana_nbsearch_pos_mindist(gmx_ana_nbsearch_t *d,
86                              const struct gmx_ana_pos_t *p, int i);
87 /** Finds the first reference position within the cutoff. */
88 bool
89 gmx_ana_nbsearch_first_within(gmx_ana_nbsearch_t *d, const rvec x, int *jp);
90 /** Finds the first reference position within the cutoff. */
91 bool
92 gmx_ana_nbsearch_pos_first_within(gmx_ana_nbsearch_t *d,
93                                   const struct gmx_ana_pos_t *p, int i, int *jp);
94 /** Finds the next reference position within the cutoff. */
95 bool
96 gmx_ana_nbsearch_next_within(gmx_ana_nbsearch_t *d, int *jp);
97
98 #endif