1 /* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustr
4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2012, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
33 * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
36 #ifndef _nbnxn_atomdata_h
37 #define _nsnxn_atomdata_h
46 /* Default nbnxn allocation routine, allocates 32 byte aligned,
47 * which works for plain C and aligned SSE and AVX loads/stores.
49 void nbnxn_alloc_aligned(void **ptr,size_t nbytes);
51 /* Free function for memory allocated with nbnxn_alloc_aligned */
52 void nbnxn_free_aligned(void *ptr);
54 /* Reallocation wrapper function for nbnxn data structures */
55 void nbnxn_realloc_void(void **ptr,
56 int nbytes_copy,int nbytes_new,
60 /* Reallocate the nbnxn_atomdata_t for a size of n atoms */
61 void nbnxn_atomdata_realloc(nbnxn_atomdata_t *nbat,int n);
63 /* Copy na rvec elements from x to xnb using nbatFormat, start dest a0,
64 * and fills up to na_round using cx,cy,cz.
66 void copy_rvec_to_nbat_real(const int *a,int na,int na_round,
67 rvec *x,int nbatFormat,real *xnb,int a0,
68 int cx,int cy,int cz);
70 /* Initialize the non-bonded atom data structure.
71 * The enum for nbatXFormat is in the file defining nbnxn_atomdata_t.
72 * Copy the ntypes*ntypes*2 sized nbfp non-bonded parameter list
73 * to the atom data structure.
75 void nbnxn_atomdata_init(FILE *fp,
76 nbnxn_atomdata_t *nbat,
78 int ntype,const real *nbfp,
84 /* Copy the atom data to the non-bonded atom data structure */
85 void nbnxn_atomdata_set(nbnxn_atomdata_t *nbat,
87 const nbnxn_search_t nbs,
88 const t_mdatoms *mdatoms,
91 /* Copy the shift vectors to nbat */
92 void nbnxn_atomdata_copy_shiftvec(gmx_bool dynamic_box,
94 nbnxn_atomdata_t *nbat);
97 * FillLocal tells if the local filler particle coordinates should be zeroed.
99 void nbnxn_atomdata_copy_x_to_nbat_x(const nbnxn_search_t nbs,
103 nbnxn_atomdata_t *nbat);
105 /* Add the forces stored in nbat to f, zeros the forces in nbat */
106 void nbnxn_atomdata_add_nbat_f_to_f(const nbnxn_search_t nbs,
108 const nbnxn_atomdata_t *nbat,
111 /* Add the fshift force stored in nbat to fshift */
112 void nbnxn_atomdata_add_nbat_fshift_to_fshift(const nbnxn_atomdata_t *nbat,