Merge branch release-4-6 into master
[alexxy/gromacs.git] / src / gromacs / mdlib / nbnxn_cuda / nbnxn_cuda_kernels.cuh
1 /* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustrup"; -*-
2  *
3  *
4  *                This source code is part of
5  *
6  *                 G   R   O   M   A   C   S
7  *
8  *          GROningen MAchine for Chemical Simulations
9  *
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.
14  *
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.
19  *
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.
26  *
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.
29  *
30  * For more info, check our website at http://www.gromacs.org
31  *
32  * And Hey:
33  * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
34  */
35
36 /*! \file
37  *  This header has the sole purpose of generating kernels for the supported
38  *  electrostatics types: cut-off, reaction-field, Ewald, and tabulated Ewald.
39  *
40  *  The Ewald kernels have twin-range cut-off versions with rcoul != rvdw which
41  *  require an extra distance check to enable  PP-PME load balancing
42  *  (otherwise, by default rcoul == rvdw).
43  *
44  *  NOTE: No include fence as it is meant to be included multiple times.
45  */
46
47 /* Analytical plain cut-off kernels */
48 #define EL_CUTOFF
49 #define NB_KERNEL_FUNC_NAME(x,...) x##_cutoff##__VA_ARGS__
50 #include "nbnxn_cuda_kernel_legacy.cuh"
51 #include "nbnxn_cuda_kernel.cuh"
52 #undef EL_CUTOFF
53 #undef NB_KERNEL_FUNC_NAME
54
55 /* Analytical reaction-field kernels */
56 #define EL_RF
57 #define NB_KERNEL_FUNC_NAME(x,...) x##_rf##__VA_ARGS__
58 #include "nbnxn_cuda_kernel_legacy.cuh"
59 #include "nbnxn_cuda_kernel.cuh"
60 #undef EL_RF
61 #undef NB_KERNEL_FUNC_NAME
62
63 /* Analytical Ewald interaction kernels
64  * NOTE: no legacy kernels with analytical Ewald.
65  */
66 #define EL_EWALD_ANA
67 #define NB_KERNEL_FUNC_NAME(x,...) x##_ewald##__VA_ARGS__
68 #include "nbnxn_cuda_kernel.cuh"
69 #undef EL_EWALD_ANA
70 #undef NB_KERNEL_FUNC_NAME
71
72 /* Analytical Ewald interaction kernels with twin-range cut-off
73  * NOTE: no legacy kernels with analytical Ewald.
74  */
75 #define EL_EWALD_ANA
76 #define VDW_CUTOFF_CHECK
77 #define NB_KERNEL_FUNC_NAME(x,...) x##_ewald_twin##__VA_ARGS__
78 #include "nbnxn_cuda_kernel.cuh"
79 #undef EL_EWALD_ANA
80 #undef VDW_CUTOFF_CHECK
81 #undef NB_KERNEL_FUNC_NAME
82
83 /* Tabulated Ewald interaction kernels */
84 #define EL_EWALD_TAB
85 #define NB_KERNEL_FUNC_NAME(x,...) x##_ewald_tab##__VA_ARGS__
86 #include "nbnxn_cuda_kernel_legacy.cuh"
87 #include "nbnxn_cuda_kernel.cuh"
88 #undef EL_EWALD_TAB
89 #undef NB_KERNEL_FUNC_NAME
90
91 /* Tabulated Ewald interaction kernels with twin-range cut-off */
92 #define EL_EWALD_TAB
93 #define VDW_CUTOFF_CHECK
94 #define NB_KERNEL_FUNC_NAME(x,...) x##_ewald_tab_twin##__VA_ARGS__
95 #include "nbnxn_cuda_kernel_legacy.cuh"
96 #include "nbnxn_cuda_kernel.cuh"
97 #undef EL_EWALD_TAB
98 #undef VDW_CUTOFF_CHECK
99 #undef NB_KERNEL_FUNC_NAME