Also parts moved out of forcerec.h.
In order to make this work some parts of the forcerec structure
had to be made pointers, and the same for nblist structures.
Part of #1415.
Change-Id: Iaaadd76ccca001a11371b9a0ad1b75a727732f00
#include "gromacs/legacyheaders/types/forcerec.h"
#include "gromacs/legacyheaders/types/hw_info.h"
#include "gromacs/legacyheaders/types/ifunc.h"
-#include "gromacs/legacyheaders/types/ns.h"
#include "gromacs/listed-forces/manage-threading.h"
#include "gromacs/math/vec.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/inputrec.h"
#include "gromacs/mdtypes/md_enums.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/mdtypes/state.h"
#include "gromacs/pbcutil/ishift.h"
#include "gromacs/pbcutil/pbc.h"
}
else
{
- moved = fr->ns.grid->cell_index;
+ moved = fr->ns->grid->cell_index;
}
clear_and_mark_ind(dd->ncg_home, move,
sort = dd->comm->sort;
- a = fr->ns.grid->cell_index;
+ a = fr->ns->grid->cell_index;
- moved = NSGRID_SIGNAL_MOVED_FAC*fr->ns.grid->ncells;
+ moved = NSGRID_SIGNAL_MOVED_FAC*fr->ns->grid->ncells;
if (ncg_home_old >= 0)
{
/* Copy the sorted ns cell indices back to the ns grid struct */
for (i = 0; i < dd->ncg_home; i++)
{
- fr->ns.grid->cell_index[i] = cgsort[i].nsc;
+ fr->ns->grid->cell_index[i] = cgsort[i].nsc;
}
- fr->ns.grid->nr = dd->ncg_home;
+ fr->ns->grid->nr = dd->ncg_home;
}
}
switch (fr->cutoff_scheme)
{
case ecutsGROUP:
- copy_ivec(fr->ns.grid->n, ncells_old);
- grid_first(fplog, fr->ns.grid, dd, &ddbox,
+ copy_ivec(fr->ns->grid->n, ncells_old);
+ grid_first(fplog, fr->ns->grid, dd, &ddbox,
state_local->box, cell_ns_x0, cell_ns_x1,
fr->rlistlong, grid_density);
break;
nbnxn_get_ncells(fr->nbv->nbs, &ncells_new[XX], &ncells_new[YY]);
break;
case ecutsGROUP:
- fill_grid(&comm->zones, fr->ns.grid, dd->ncg_home,
+ fill_grid(&comm->zones, fr->ns->grid, dd->ncg_home,
0, dd->ncg_home, fr->cg_cm);
- copy_ivec(fr->ns.grid->n, ncells_new);
+ copy_ivec(fr->ns->grid->n, ncells_new);
break;
default:
gmx_incons("unimplemented");
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
struct t_forcerec;
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
void
gmx_nb_generic_kernel(t_nblist * nlist,
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
void
gmx_nb_generic_cg_kernel(t_nblist * nlist,
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/legacyheaders/types/forcerec.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/topology/block.h"
#include "gromacs/utility/real.h"
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm256_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm256_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm256_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
outeriter = 0;
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#ifdef __cplusplus
extern "C" {
type = mdatoms->typeA;
gbfactor = ((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
facel = fr->epsfac;
- GBtab = fr->gbtab.data;
- gbtabscale = fr->gbtab.scale;
+ GBtab = fr->gbtab->data;
+ gbtabscale = fr->gbtab->scale;
invsqrta = fr->invsqrta;
dvda = fr->dvda;
vpol = kernel_data->energygrp_polarization;
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#ifdef __cplusplus
extern "C" {
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = fr->gbtab.scale;
- gbtab = fr->gbtab.data;
+ gbtabscale = fr->gbtab->scale;
+ gbtab = fr->gbtab->data;
gbinvepsdiff = (1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent);
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = gmx_fjsp_set1_v2r8(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = gmx_fjsp_set1_v2r8((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_pd(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_pd(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_pd((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* Avoid stupid compiler warnings */
/* #if KERNEL_ELEC=='GeneralizedBorn' */
invsqrta = fr->invsqrta;
dvda = fr->dvda;
- gbtabscale = _mm_set1_ps(fr->gbtab.scale);
- gbtab = fr->gbtab.data;
+ gbtabscale = _mm_set1_ps(fr->gbtab->scale);
+ gbtab = fr->gbtab->data;
gbinvepsdiff = _mm_set1_ps((1.0/fr->epsilon_r) - (1.0/fr->gb_epsilon_solvent));
/* #endif */
#include "gromacs/gmxlib/nonbonded/nb_generic_cg.h"
#include "gromacs/gmxlib/nonbonded/nb_kernel.h"
#include "gromacs/legacyheaders/types/forcerec.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/listed-forces/bonded.h"
#include "gromacs/math/utilities.h"
#include "gromacs/math/vec.h"
#include "gromacs/mdtypes/md_enums.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/pbcutil/ishift.h"
#include "gromacs/pbcutil/mshift.h"
#include "gromacs/pbcutil/pbc.h"
/* cppcheck-suppress duplicateExpression */
assert(etiNR == 3);
- kernel_data.table_elec = &nblists->table_elec;
- kernel_data.table_vdw = &nblists->table_vdw;
- kernel_data.table_elec_vdw = &nblists->table_elec_vdw;
+ kernel_data.table_elec = nblists->table_elec;
+ kernel_data.table_vdw = nblists->table_vdw;
+ kernel_data.table_elec_vdw = nblists->table_elec_vdw;
for (range = 0; range < 2; range++)
{
#include "gromacs/gmxlib/nrnb.h"
#include "gromacs/legacyheaders/types/forcerec.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/topology/block.h"
#include "gromacs/utility/basedefinitions.h"
#include "gromacs/gmxpreprocess/vsite_parm.h"
#include "gromacs/imd/imd.h"
#include "gromacs/legacyheaders/types/ifunc.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vec.h"
#include "gromacs/mdlib/calc_verletbuf.h"
#include "gromacs/mdlib/compute_io.h"
#include "gromacs/mdlib/perf_est.h"
#include "gromacs/mdtypes/inputrec.h"
#include "gromacs/mdtypes/md_enums.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/mdtypes/state.h"
#include "gromacs/pbcutil/boxutilities.h"
#include "gromacs/pbcutil/pbc.h"
#include "gromacs/legacyheaders/types/genborn.h"
#include "gromacs/legacyheaders/types/hw_info.h"
#include "gromacs/legacyheaders/types/interaction_const.h"
-#include "gromacs/legacyheaders/types/nblist.h"
-#include "gromacs/legacyheaders/types/ns.h"
#include "gromacs/legacyheaders/types/qmmmrec.h"
#include "gromacs/math/vectypes.h"
#include "gromacs/mdtypes/inputrec.h"
#endif
/* Abstract type for PME that is defined only in the routine that use them. */
+struct gmx_ns_t;
struct gmx_pme_t;
struct nonbonded_verlet_t;
struct bonded_threading_t;
+struct t_forcetable;
struct t_nblist;
-
-/* The interactions contained in a (possibly merged) table
- * for computing electrostatic, VDW repulsion and/or VDW dispersion
- * contributions.
- */
-enum gmx_table_interaction
-{
- GMX_TABLE_INTERACTION_ELEC,
- GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
- GMX_TABLE_INTERACTION_VDWEXPREP_VDWDISP,
- GMX_TABLE_INTERACTION_VDWDISP,
- GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
- GMX_TABLE_INTERACTION_ELEC_VDWEXPREP_VDWDISP,
- GMX_TABLE_INTERACTION_ELEC_VDWDISP,
- GMX_TABLE_INTERACTION_NR
-};
-
-/* Different formats for table data. Cubic spline tables are typically stored
- * with the four Y,F,G,H intermediate values (check tables.c for format), which
- * makes it easy to load with a single 4-way SIMD instruction too.
- * Linear tables only need one value per table point, or two if both V and F
- * are calculated. However, with SIMD instructions this makes the loads unaligned,
- * and in that case we store the data as F, D=F(i+1)-F(i), V, and then a blank value,
- * which again makes it possible to load as a single instruction.
- */
-enum gmx_table_format
-{
- GMX_TABLE_FORMAT_CUBICSPLINE_YFGH,
- GMX_TABLE_FORMAT_LINEAR_VF,
- GMX_TABLE_FORMAT_LINEAR_V,
- GMX_TABLE_FORMAT_LINEAR_F,
- GMX_TABLE_FORMAT_LINEAR_FDV0,
- GMX_TABLE_FORMAT_NR
-};
-
-
-/* Structure describing the data in a single table */
-typedef struct
-{
- enum gmx_table_interaction interaction; /* Types of interactions stored in this table */
- enum gmx_table_format format; /* Interpolation type and data format */
-
- real r; /* range of the table */
- int n; /* n+1 is the number of table points */
- real scale; /* distance (nm) between two table points */
- real * data; /* the actual table data */
-
- /* Some information about the table layout. This can also be derived from the interpolation
- * type and the table interactions, but it is convenient to have here for sanity checks, and it makes it
- * much easier to access the tables in the nonbonded kernels when we can set the data from variables.
- * It is always true that stride = formatsize*ninteractions
- */
- int formatsize; /* Number of fp variables for each table point (1 for F, 2 for VF, 4 for YFGH, etc.) */
- int ninteractions; /* Number of interactions in table, 1 for coul-only, 3 for coul+rep+disp. */
- int stride; /* Distance to next table point (number of fp variables per table point in total) */
-} t_forcetable;
-
-typedef struct
-{
- t_forcetable table_elec;
- t_forcetable table_vdw;
- t_forcetable table_elec_vdw;
-
- /* The actual neighbor lists, short and long range, see enum above
- * for definition of neighborlist indices.
- */
- t_nblist nlist_sr[eNL_NR];
- t_nblist nlist_lr[eNL_NR];
-} t_nblists;
+struct t_nblists;
/* macros for the cginfo data in forcerec
*
real fudgeQQ;
/* Table stuff */
- gmx_bool bcoultab;
- gmx_bool bvdwtab;
+ gmx_bool bcoultab;
+ gmx_bool bvdwtab;
/* The normal tables are in the nblists struct(s) below */
- t_forcetable tab14; /* for 1-4 interactions only */
+ struct t_forcetable *tab14; /* for 1-4 interactions only */
/* PPPM & Shifting stuff */
int coulomb_modifier;
rvec *shift_vec;
/* The neighborlists including tables */
- int nnblists;
- int *gid2nblists;
- t_nblists *nblists;
+ int nnblists;
+ int *gid2nblists;
+ struct t_nblists *nblists;
- int cutoff_scheme; /* group- or Verlet-style cutoff */
- gmx_bool bNonbonded; /* true if nonbonded calculations are *not* turned off */
- struct nonbonded_verlet_t *nbv;
+ int cutoff_scheme; /* group- or Verlet-style cutoff */
+ gmx_bool bNonbonded; /* true if nonbonded calculations are *not* turned off */
+ struct nonbonded_verlet_t *nbv;
- /* The wall tables (if used) */
- int nwall;
- t_forcetable **wall_tab;
+ /* The wall tables (if used). A 2D array of pointers to tables. */
+ int nwall;
+ struct t_forcetable ***wall_tab;
/* The number of charge groups participating in do_force_lowlevel */
int ncg_force;
real fc_stepsize;
/* Generalized born implicit solvent */
- gmx_bool bGB;
+ gmx_bool bGB;
/* Generalized born stuff */
- real gb_epsilon_solvent;
+ real gb_epsilon_solvent;
/* Table data for GB */
- t_forcetable gbtab;
+ struct t_forcetable *gbtab;
/* VdW radius for each atomtype (dim is thus ntype) */
- real *atype_radius;
+ real *atype_radius;
/* Effective radius (derived from effective volume) for each type */
- real *atype_vol;
+ real *atype_vol;
/* Implicit solvent - surface tension for each atomtype */
- real *atype_surftens;
+ real *atype_surftens;
/* Implicit solvent - radius for GB calculation */
- real *atype_gb_radius;
+ real *atype_gb_radius;
/* Implicit solvent - overlap for HCT model */
- real *atype_S_hct;
+ real *atype_S_hct;
/* Generalized born interaction data */
- gmx_genborn_t *born;
+ gmx_genborn_t *born;
/* Table scale for GB */
real gbtabscale;
* (for use in the SA calculation) and the lr list will contain
* for each atom all atoms 1-4 or greater (for use in the GB calculation)
*/
- t_nblist gblist_sr;
- t_nblist gblist_lr;
- t_nblist gblist;
+ struct t_nblist *gblist_sr;
+ struct t_nblist *gblist_lr;
+ struct t_nblist *gblist;
/* Inverse square root of the Born radii for implicit solvent */
real *invsqrta;
gmx_bool n_tpi;
/* Neighbor searching stuff */
- gmx_ns_t ns;
+ struct gmx_ns_t *ns;
/* QMMM stuff */
gmx_bool bQMMM;
t_QMMMrec *qr;
/* QM-MM neighborlists */
- t_nblist QMMMlist;
+ struct t_nblist *QMMMlist;
/* Limit for printing large forces, negative is don't print */
real print_force;
+++ /dev/null
-/*
- * This file is part of the GROMACS molecular simulation package.
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2008, The GROMACS development team.
- * Copyright (c) 2010,2014,2015, by the GROMACS development team, led by
- * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
- * and including many others, as listed in the AUTHORS file in the
- * top-level source directory and at http://www.gromacs.org.
- *
- * GROMACS is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1
- * of the License, or (at your option) any later version.
- *
- * GROMACS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GROMACS; if not, see
- * http://www.gnu.org/licenses, or write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * If you want to redistribute modifications to GROMACS, please
- * consider that scientific software is very special. Version
- * control is crucial - bugs must be traceable. We will be happy to
- * consider code for inclusion in the official distribution, but
- * derived work must not be called official GROMACS. Details are found
- * in the README & COPYING files - if they are missing, get the
- * official version at http://www.gromacs.org.
- *
- * To help us fund GROMACS development, we humbly ask that you cite
- * the research papers on the package. Check out http://www.gromacs.org.
- */
-
-#ifndef GMX_LEGACYHEADERS_TYPES_NS_H
-#define GMX_LEGACYHEADERS_TYPES_NS_H
-
-#include "gromacs/legacyheaders/types/nblist.h"
-#include "gromacs/utility/basedefinitions.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct t_grid;
-
-enum {
- eNL_VDWQQ, eNL_VDW, eNL_QQ,
- eNL_VDWQQ_FREE, eNL_VDW_FREE, eNL_QQ_FREE,
- eNL_VDWQQ_WATER, eNL_QQ_WATER,
- eNL_VDWQQ_WATERWATER, eNL_QQ_WATERWATER,
- eNL_NR
-};
-
-#define MAX_CG 1024
-
-typedef struct {
- int ncg;
- int nj;
- int jcg[MAX_CG];
-} t_ns_buf;
-
-typedef struct gmx_ns_t {
- gmx_bool bCGlist;
- int *simple_aaj;
- struct t_grid*grid;
- t_excl *bexcl;
- gmx_bool *bHaveVdW;
- t_ns_buf **ns_buf;
- gmx_bool *bExcludeAlleg;
- int nra_alloc;
- int cg_alloc;
- int **nl_sr;
- int *nsr;
- int **nl_lr_ljc;
- int **nl_lr_one;
- int *nlr_ljc;
- int *nlr_one;
- /* the nblists should probably go in here */
- gmx_bool nblist_initialized; /* has the nblist been initialized? */
- int dump_nl; /* neighbour list dump level (from env. var. GMX_DUMP_NL)*/
-} gmx_ns_t;
-
-#ifdef __cplusplus
-}
-#endif
-#endif
#include "gromacs/legacyheaders/types/group.h"
#include "gromacs/math/vec.h"
#include "gromacs/mdtypes/md_enums.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/pbcutil/ishift.h"
#include "gromacs/pbcutil/mshift.h"
#include "gromacs/pbcutil/pbc.h"
the table layout, which should be made explicit in future
cleanup. */
GMX_ASSERT(etiNR == 3, "Pair-interaction code that uses GROMACS interaction tables supports exactly 3 tables");
- GMX_ASSERT(fr->tab14.interaction == GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
+ GMX_ASSERT(fr->tab14->interaction == GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
"Pair interaction kernels need a table with Coulomb, repulsion and dispersion entries");
bFreeEnergy = FALSE;
}
r2 = norm2(dx);
- if (r2 >= fr->tab14.r*fr->tab14.r)
+ if (r2 >= fr->tab14->r*fr->tab14->r)
{
/* This check isn't race free. But it doesn't matter because if a race occurs the only
* disadvantage is that the warning is printed twice */
if (warned_rlimit == FALSE)
{
- warning_rlimit(x, ai, aj, global_atom_index, sqrt(r2), fr->tab14.r);
+ warning_rlimit(x, ai, aj, global_atom_index, sqrt(r2), fr->tab14->r);
warned_rlimit = TRUE;
}
continue;
c12B = iparams[itype].lj14.c12B*12.0;
fscal = free_energy_evaluate_single(r2, fr->sc_r_power, fr->sc_alphacoul, fr->sc_alphavdw,
- fr->tab14.scale, fr->tab14.data, fr->tab14.stride,
+ fr->tab14->scale, fr->tab14->data, fr->tab14->stride,
qq, c6, c12, qqB, c6B, c12B,
LFC, LFV, DLF, lfac_coul, lfac_vdw, dlfac_coul, dlfac_vdw,
fr->sc_sigma6_def, fr->sc_sigma6_min, sigma2_def, sigma2_min, &velec, &vvdw, dvdl);
else
{
/* Evaluate tabulated interaction without free energy */
- fscal = evaluate_single(r2, fr->tab14.scale, fr->tab14.data, fr->tab14.stride, qq, c6, c12, &velec, &vvdw);
+ fscal = evaluate_single(r2, fr->tab14->scale, fr->tab14->data, fr->tab14->stride, qq, c6, c12, &velec, &vvdw);
}
energygrp_elec[gid] += velec;
int nsearch;
- if (!fr->ns.nblist_initialized)
+ if (!fr->ns->nblist_initialized)
{
init_neighbor_list(fp, fr, md->homenr);
}
count_nb(cr,nsb,&(top->blocks[ebCGS]),nns,fr->nlr,
&(top->idef),opts->ngener);
*/
- if (fr->ns.dump_nl > 0)
+ if (fr->ns->dump_nl > 0)
{
- dump_nblist(fp, cr, fr, fr->ns.dump_nl);
+ dump_nblist(fp, cr, fr, fr->ns->dump_nl);
}
}
if (bBornRadii)
{
- calc_gb_rad(cr, fr, ir, top, x, &(fr->gblist), born, md, nrnb);
+ calc_gb_rad(cr, fr, ir, top, x, fr->gblist, born, md, nrnb);
}
wallcycle_sub_stop(wcycle, ewcsNONBONDED);
* the table data to be aligned to 16-byte. The pointers could be freed
* but currently aren't.
*/
- nbl->table_elec.interaction = GMX_TABLE_INTERACTION_ELEC;
- nbl->table_elec.format = nbl->table_elec_vdw.format;
- nbl->table_elec.r = nbl->table_elec_vdw.r;
- nbl->table_elec.n = nbl->table_elec_vdw.n;
- nbl->table_elec.scale = nbl->table_elec_vdw.scale;
- nbl->table_elec.formatsize = nbl->table_elec_vdw.formatsize;
- nbl->table_elec.ninteractions = 1;
- nbl->table_elec.stride = nbl->table_elec.formatsize * nbl->table_elec.ninteractions;
- snew_aligned(nbl->table_elec.data, nbl->table_elec.stride*(nbl->table_elec.n+1), 32);
-
- nbl->table_vdw.interaction = GMX_TABLE_INTERACTION_VDWREP_VDWDISP;
- nbl->table_vdw.format = nbl->table_elec_vdw.format;
- nbl->table_vdw.r = nbl->table_elec_vdw.r;
- nbl->table_vdw.n = nbl->table_elec_vdw.n;
- nbl->table_vdw.scale = nbl->table_elec_vdw.scale;
- nbl->table_vdw.formatsize = nbl->table_elec_vdw.formatsize;
- nbl->table_vdw.ninteractions = 2;
- nbl->table_vdw.stride = nbl->table_vdw.formatsize * nbl->table_vdw.ninteractions;
- snew_aligned(nbl->table_vdw.data, nbl->table_vdw.stride*(nbl->table_vdw.n+1), 32);
-
- for (i = 0; i <= nbl->table_elec_vdw.n; i++)
+ snew(nbl->table_elec, 1);
+ nbl->table_elec->interaction = GMX_TABLE_INTERACTION_ELEC;
+ nbl->table_elec->format = nbl->table_elec_vdw->format;
+ nbl->table_elec->r = nbl->table_elec_vdw->r;
+ nbl->table_elec->n = nbl->table_elec_vdw->n;
+ nbl->table_elec->scale = nbl->table_elec_vdw->scale;
+ nbl->table_elec->formatsize = nbl->table_elec_vdw->formatsize;
+ nbl->table_elec->ninteractions = 1;
+ nbl->table_elec->stride = nbl->table_elec->formatsize * nbl->table_elec->ninteractions;
+ snew_aligned(nbl->table_elec->data, nbl->table_elec->stride*(nbl->table_elec->n+1), 32);
+
+ snew(nbl->table_vdw, 1);
+ nbl->table_vdw->interaction = GMX_TABLE_INTERACTION_VDWREP_VDWDISP;
+ nbl->table_vdw->format = nbl->table_elec_vdw->format;
+ nbl->table_vdw->r = nbl->table_elec_vdw->r;
+ nbl->table_vdw->n = nbl->table_elec_vdw->n;
+ nbl->table_vdw->scale = nbl->table_elec_vdw->scale;
+ nbl->table_vdw->formatsize = nbl->table_elec_vdw->formatsize;
+ nbl->table_vdw->ninteractions = 2;
+ nbl->table_vdw->stride = nbl->table_vdw->formatsize * nbl->table_vdw->ninteractions;
+ snew_aligned(nbl->table_vdw->data, nbl->table_vdw->stride*(nbl->table_vdw->n+1), 32);
+
+ for (i = 0; i <= nbl->table_elec_vdw->n; i++)
{
for (j = 0; j < 4; j++)
{
- nbl->table_elec.data[4*i+j] = nbl->table_elec_vdw.data[12*i+j];
+ nbl->table_elec->data[4*i+j] = nbl->table_elec_vdw->data[12*i+j];
}
for (j = 0; j < 8; j++)
{
- nbl->table_vdw.data[8*i+j] = nbl->table_elec_vdw.data[12*i+4+j];
+ nbl->table_vdw->data[8*i+j] = nbl->table_elec_vdw->data[12*i+4+j];
}
}
}
fr->timesteps = 0;
/* Initialize neighbor search */
- init_ns(fp, cr, &fr->ns, fr, mtop);
+ snew(fr->ns, 1);
+ init_ns(fp, cr, fr->ns, fr, mtop);
if (cr->duty & DUTY_PP)
{
pr_int(fp,fr->hcg);*/
for (i = 0; i < fr->nnblists; i++)
{
- pr_int(fp, fr->nblists[i].table_elec_vdw.n);
+ pr_int(fp, fr->nblists[i].table_elec_vdw->n);
}
pr_real(fp, fr->rcoulomb_switch);
pr_real(fp, fr->rcoulomb);
#include "gromacs/math/vec.h"
#include "gromacs/mdlib/genborn_allvsall.h"
#include "gromacs/mdtypes/md_enums.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/pbcutil/ishift.h"
#include "gromacs/pbcutil/mshift.h"
#include "gromacs/pbcutil/pbc.h"
/* snew(born->dasurf,natoms); */
/* Initialize the gb neighbourlist */
- init_gb_nblist(natoms, &(fr->gblist));
+ snew(fr->gblist, 1);
+ init_gb_nblist(natoms, fr->gblist);
/* Do the Vsites exclusions (if any) */
for (i = 0; i < natoms; i++)
/* Calculate the bonded GB-interactions using either table or analytical formula */
enerd->term[F_GBPOL] += gb_bonds_tab(x, f, fr->fshift, md->chargeA, &(fr->gbtabscale),
- fr->invsqrta, fr->dvda, fr->gbtab.data, idef, born->epsilon_r, born->gb_epsilon_solvent, fr->epsfac, pbc_null, graph);
+ fr->invsqrta, fr->dvda, fr->gbtab->data, idef, born->epsilon_r, born->gb_epsilon_solvent, fr->epsfac, pbc_null, graph);
/* Calculate self corrections to the GB energies - currently only A state used! (FIXME) */
enerd->term[F_GBPOL] += calc_gb_selfcorrections(cr, born->nr, md->chargeA, born, fr->dvda, fr->epsfac);
return;
}
- calc_gb_chainrule(fr->natoms_force, &(fr->gblist), fr->dadx, fr->dvda,
+ calc_gb_chainrule(fr->natoms_force, fr->gblist, fr->dadx, fr->dvda,
x, f, fr->fshift, fr->shift_vec, gb_algorithm, born);
if (!fr->bAllvsAll)
{
/* 9 flops for outer loop, 15 for inner */
- inc_nrnb(nrnb, eNR_BORN_CHAINRULE, fr->gblist.nri*9+fr->gblist.nrj*15);
+ inc_nrnb(nrnb, eNR_BORN_CHAINRULE, fr->gblist->nri*9+fr->gblist->nrj*15);
}
}
}
/* Zero out some counters */
- fr->gblist.nri = 0;
- fr->gblist.nrj = 0;
+ fr->gblist->nri = 0;
+ fr->gblist->nrj = 0;
- fr->gblist.jindex[0] = fr->gblist.nri;
+ fr->gblist->jindex[0] = fr->gblist->nri;
for (i = 0; i < fr->natoms_force; i++)
{
/* Only add those atoms that actually have neighbours */
if (born->use[i] != 0)
{
- fr->gblist.iinr[fr->gblist.nri] = i;
- fr->gblist.shift[fr->gblist.nri] = list->shift;
- fr->gblist.nri++;
+ fr->gblist->iinr[fr->gblist->nri] = i;
+ fr->gblist->shift[fr->gblist->nri] = list->shift;
+ fr->gblist->nri++;
for (k = 0; k < list->naj; k++)
{
/* Memory allocation for jjnr */
- if (fr->gblist.nrj >= fr->gblist.maxnrj)
+ if (fr->gblist->nrj >= fr->gblist->maxnrj)
{
- fr->gblist.maxnrj += over_alloc_large(fr->gblist.maxnrj);
+ fr->gblist->maxnrj += over_alloc_large(fr->gblist->maxnrj);
if (debug)
{
- fprintf(debug, "Increasing GB neighbourlist j size to %d\n", fr->gblist.maxnrj);
+ fprintf(debug, "Increasing GB neighbourlist j size to %d\n", fr->gblist->maxnrj);
}
- srenew(fr->gblist.jjnr, fr->gblist.maxnrj);
+ srenew(fr->gblist->jjnr, fr->gblist->maxnrj);
}
/* Put in list */
{
gmx_incons("i == list->aj[k]");
}
- fr->gblist.jjnr[fr->gblist.nrj++] = list->aj[k];
+ fr->gblist->jjnr[fr->gblist->nrj++] = list->aj[k];
}
- fr->gblist.jindex[fr->gblist.nri] = fr->gblist.nrj;
+ fr->gblist->jindex[fr->gblist->nri] = fr->gblist->nrj;
}
}
}
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#include "thread_mpi/atomic.h"
-#include "gromacs/legacyheaders/types/nblist.h"
#include "gromacs/math/vectypes.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/utility/basedefinitions.h"
#include "gromacs/utility/bitmask.h"
#include "gromacs/utility/real.h"
type = GMX_NBLIST_INTERACTION_STANDARD;
bElecAndVdwSwitchDiffers = ( (fr->rcoulomb_switch != fr->rvdw_switch) || (fr->rcoulomb != fr->rvdw));
- fr->ns.bCGlist = (getenv("GMX_NBLISTCG") != 0);
- if (!fr->ns.bCGlist)
+ fr->ns->bCGlist = (getenv("GMX_NBLISTCG") != 0);
+ if (!fr->ns->bCGlist)
{
igeometry_def = GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE;
}
/* QMMM MM list */
if (fr->bQMMM && fr->qr->QMMMscheme != eQMMMschemeoniom)
{
- init_nblist(log, &fr->QMMMlist, NULL,
+ if (NULL == fr->QMMMlist)
+ {
+ snew(fr->QMMMlist, 1);
+ }
+ init_nblist(log, fr->QMMMlist, NULL,
maxsr, maxlr, 0, 0, ielec, ielecmod, GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE, GMX_NBLIST_INTERACTION_STANDARD, bElecAndVdwSwitchDiffers);
}
fprintf(log, "\n");
}
- fr->ns.nblist_initialized = TRUE;
+ fr->ns->nblist_initialized = TRUE;
}
static void reset_nblist(t_nblist *nl)
if (fr->bQMMM)
{
/* only reset the short-range nblist */
- reset_nblist(&(fr->QMMMlist));
+ reset_nblist(fr->QMMMlist);
}
for (n = 0; n < fr->nnblists; n++)
if (bMakeQMMMnblist)
{
- close_nblist(&(fr->QMMMlist));
+ close_nblist(fr->QMMMlist);
}
for (n = 0; n < fr->nnblists; n++)
/* Get the i charge group info */
igid = GET_CGINFO_GID(fr->cginfo[icg]);
- coul = &fr->QMMMlist;
+ coul = fr->QMMMlist;
/* Loop over atoms in the ith charge group */
for (i = 0; i < nicg; i++)
gmx_bool bDomDec, bTriclinicX, bTriclinicY;
ivec ncpddc;
- ns = &fr->ns;
+ ns = fr->ns;
bDomDec = DOMAINDECOMP(cr);
dd = cr->dd;
gmx_domdec_zones_t *dd_zones;
put_in_list_t *put_in_list;
- ns = &fr->ns;
+ ns = fr->ns;
/* Set some local variables */
bGrid = fr->bGrid;
fill_grid(NULL, ns->grid, fr->hcg, fr->hcg-1, fr->hcg, fr->cg_cm);
}
- if (!fr->ns.bCGlist)
+ if (!fr->ns->bCGlist)
{
put_in_list = put_in_list_at;
}
#include "gromacs/mdlib/ns.h"
#include "gromacs/mdtypes/md_enums.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/pbcutil/ishift.h"
#include "gromacs/pbcutil/pbc.h"
#include "gromacs/topology/mtop_util.h"
t_QMMMrec
*qr;
t_nblist
- QMMMlist;
+ *QMMMlist;
rvec
dx, crd;
t_QMrec
* the shifts are used for computing virial of the QM/MM particles.
*/
qm = qr->qm[0]; /* in case of normal QMMM, there is only one group */
- snew(qm_i_particles, QMMMlist.nri);
- if (QMMMlist.nri)
+ snew(qm_i_particles, QMMMlist->nri);
+ if (QMMMlist->nri)
{
qm_i_particles[0].shift = XYZ2IS(0, 0, 0);
- for (i = 0; i < QMMMlist.nri; i++)
+ for (i = 0; i < QMMMlist->nri; i++)
{
- qm_i_particles[i].j = QMMMlist.iinr[i];
+ qm_i_particles[i].j = QMMMlist->iinr[i];
if (i)
{
- qm_i_particles[i].shift = pbc_dx_aiuc(&pbc, x[QMMMlist.iinr[0]],
- x[QMMMlist.iinr[i]], dx);
+ qm_i_particles[i].shift = pbc_dx_aiuc(&pbc, x[QMMMlist->iinr[0]],
+ x[QMMMlist->iinr[i]], dx);
}
/* However, since nri >= nrQMatoms, we do a quicksort, and throw
* the QM i-particle and store them.
*/
- crd[0] = IS2X(QMMMlist.shift[i]) + IS2X(qm_i_particles[i].shift);
- crd[1] = IS2Y(QMMMlist.shift[i]) + IS2Y(qm_i_particles[i].shift);
- crd[2] = IS2Z(QMMMlist.shift[i]) + IS2Z(qm_i_particles[i].shift);
+ crd[0] = IS2X(QMMMlist->shift[i]) + IS2X(qm_i_particles[i].shift);
+ crd[1] = IS2Y(QMMMlist->shift[i]) + IS2Y(qm_i_particles[i].shift);
+ crd[2] = IS2Z(QMMMlist->shift[i]) + IS2Z(qm_i_particles[i].shift);
is = static_cast<int>(XYZ2IS(crd[0], crd[1], crd[2]));
- for (j = QMMMlist.jindex[i];
- j < QMMMlist.jindex[i+1];
+ for (j = QMMMlist->jindex[i];
+ j < QMMMlist->jindex[i+1];
j++)
{
if (mm_nr >= mm_max)
srenew(mm_j_particles, mm_max);
}
- mm_j_particles[mm_nr].j = QMMMlist.jjnr[j];
+ mm_j_particles[mm_nr].j = QMMMlist->jjnr[j];
mm_j_particles[mm_nr].shift = is;
mm_nr++;
}
- qsort(qm_i_particles, QMMMlist.nri,
+ qsort(qm_i_particles, QMMMlist->nri,
(size_t)sizeof(qm_i_particles[0]),
struct_comp);
/* The mm_j_particles argument to qsort is not allowed to be NULL */
* here matches the one of QMindex already.
*/
j = 0;
- for (i = 0; i < QMMMlist.nri; i++)
+ for (i = 0; i < QMMMlist->nri; i++)
{
if (i == 0 || qm_i_particles[i].j != qm_i_particles[i-1].j)
{
/* TODO This code depends on the logic in tables.c that
constructs the table layout, which should be made
explicit in future cleanup. */
- GMX_ASSERT(fr->nblists[0].table_vdw.interaction == GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
+ GMX_ASSERT(fr->nblists[0].table_vdw->interaction == GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
"Dispersion-correction code needs a table with both repulsion and dispersion terms");
- scale = fr->nblists[0].table_vdw.scale;
- vdwtab = fr->nblists[0].table_vdw.data;
+ scale = fr->nblists[0].table_vdw->scale;
+ vdwtab = fr->nblists[0].table_vdw->data;
/* Round the cut-offs to exact table values for precision */
ri0 = static_cast<int>(floor(fr->rvdw_switch*scale));
#include "gromacs/mdtypes/inputrec.h"
#include "gromacs/mdtypes/md_enums.h"
#include "gromacs/mdtypes/mdatom.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/tables/forcetable.h"
#include "gromacs/topology/topology.h"
#include "gromacs/utility/cstringutil.h"
int negp_pp;
int *nm_ind;
char buf[STRLEN];
- t_forcetable *tab;
negp_pp = ir->opts.ngener - ir->nwall;
nm_ind = groups->grps[egcENER].nm_ind;
/* If the energy group pair is excluded, we don't need a table */
if (!(fr->egp_flags[egp*ir->opts.ngener+negp_pp+w] & EGP_EXCL))
{
- tab = &fr->wall_tab[w][egp];
+ fr->wall_tab[w][egp] = make_tables(fplog, fr, buf, 0,
+ GMX_MAKETABLES_FORCEUSER);
sprintf(buf, "%s", tabfn);
sprintf(buf + strlen(tabfn) - strlen(ftp2ext(efXVG)) - 1, "_%s_%s.%s",
*groups->grpname[nm_ind[egp]],
*groups->grpname[nm_ind[negp_pp+w]],
ftp2ext(efXVG));
- *tab = make_tables(fplog, fr, buf, 0, GMX_MAKETABLES_FORCEUSER);
+
/* Since wall have no charge, we can compress the table */
- for (int i = 0; i <= tab->n; i++)
+ for (int i = 0; i <= fr->wall_tab[w][egp]->n; i++)
{
for (int j = 0; j < 8; j++)
{
- tab->data[8*i+j] = tab->data[12*i+4+j];
+ fr->wall_tab[w][egp]->data[8*i+j] =
+ fr->wall_tab[w][egp]->data[12*i+4+j];
}
}
}
{
wall_error(i, x, r);
}
- tab = &(fr->wall_tab[w][gid[i]]);
+ tab = fr->wall_tab[w][gid[i]];
tabscale = tab->scale;
VFtab = tab->data;
#include "gromacs/mdlib/force.h"
#include "gromacs/mdlib/ns.h"
#include "gromacs/mdtypes/md_enums.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/futil.h"
#include "gromacs/utility/smalloc.h"
* To help us fund GROMACS development, we humbly ask that you cite
* the research papers on the package. Check out http://www.gromacs.org.
*/
-#ifndef _nblist_h
-#define _nblist_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+#ifndef GMX_MDTYPES_NBLIST_H
+#define GMX_MDTYPES_NBLIST_H
+#include "gromacs/utility/basedefinitions.h"
+#include "gromacs/utility/real.h"
typedef unsigned long t_excl;
+/* The interactions contained in a (possibly merged) table
+ * for computing electrostatic, VDW repulsion and/or VDW dispersion
+ * contributions.
+ */
+enum gmx_table_interaction
+{
+ GMX_TABLE_INTERACTION_ELEC,
+ GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
+ GMX_TABLE_INTERACTION_VDWEXPREP_VDWDISP,
+ GMX_TABLE_INTERACTION_VDWDISP,
+ GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
+ GMX_TABLE_INTERACTION_ELEC_VDWEXPREP_VDWDISP,
+ GMX_TABLE_INTERACTION_ELEC_VDWDISP,
+ GMX_TABLE_INTERACTION_NR
+};
+
+/* Different formats for table data. Cubic spline tables are typically stored
+ * with the four Y,F,G,H intermediate values (check tables.c for format), which
+ * makes it easy to load with a single 4-way SIMD instruction too.
+ * Linear tables only need one value per table point, or two if both V and F
+ * are calculated. However, with SIMD instructions this makes the loads unaligned,
+ * and in that case we store the data as F, D=F(i+1)-F(i), V, and then a blank value,
+ * which again makes it possible to load as a single instruction.
+ */
+enum gmx_table_format
+{
+ GMX_TABLE_FORMAT_CUBICSPLINE_YFGH,
+ GMX_TABLE_FORMAT_LINEAR_VF,
+ GMX_TABLE_FORMAT_LINEAR_V,
+ GMX_TABLE_FORMAT_LINEAR_F,
+ GMX_TABLE_FORMAT_LINEAR_FDV0,
+ GMX_TABLE_FORMAT_NR
+};
+
+enum {
+ eNL_VDWQQ, eNL_VDW, eNL_QQ,
+ eNL_VDWQQ_FREE, eNL_VDW_FREE, eNL_QQ_FREE,
+ eNL_VDWQQ_WATER, eNL_QQ_WATER,
+ eNL_VDWQQ_WATERWATER, eNL_QQ_WATERWATER,
+ eNL_NR
+};
+
+#define MAX_CG 1024
+
+typedef struct {
+ int ncg;
+ int nj;
+ int jcg[MAX_CG];
+} t_ns_buf;
+
+
/* The maximum charge group size because of minimum size of t_excl
* could be 32 bits.
*/
} t_nblist;
-
/* For atom I = nblist->iinr[N] (0 <= N < nblist->nri) there can be
* several neighborlists (N's), for different energy groups (gid) and
* different shifts (shift).
* Clear?
*/
-#ifdef __cplusplus
-}
-#endif
+/* Structure describing the data in a single table */
+typedef struct t_forcetable
+{
+ enum gmx_table_interaction interaction; /* Types of interactions stored in this table */
+ enum gmx_table_format format; /* Interpolation type and data format */
+
+ real r; /* range of the table */
+ int n; /* n+1 is the number of table points */
+ real scale; /* distance (nm) between two table points */
+ real * data; /* the actual table data */
+
+ /* Some information about the table layout. This can also be derived from the interpolation
+ * type and the table interactions, but it is convenient to have here for sanity checks, and it makes it
+ * much easier to access the tables in the nonbonded kernels when we can set the data from variables.
+ * It is always true that stride = formatsize*ninteractions
+ */
+ int formatsize; /* Number of fp variables for each table point (1 for F, 2 for VF, 4 for YFGH, etc.) */
+ int ninteractions; /* Number of interactions in table, 1 for coul-only, 3 for coul+rep+disp. */
+ int stride; /* Distance to next table point (number of fp variables per table point in total) */
+} t_forcetable;
+
+typedef struct t_nblists
+{
+ struct t_forcetable *table_elec;
+ struct t_forcetable *table_vdw;
+ struct t_forcetable *table_elec_vdw;
+
+ /* The actual neighbor lists, short and long range, see enum above
+ * for definition of neighborlist indices.
+ */
+ struct t_nblist nlist_sr[eNL_NR];
+ struct t_nblist nlist_lr[eNL_NR];
+} t_nblists;
+
+typedef struct gmx_ns_t {
+ gmx_bool bCGlist;
+ int *simple_aaj;
+ struct t_grid*grid;
+ t_excl *bexcl;
+ gmx_bool *bHaveVdW;
+ t_ns_buf **ns_buf;
+ gmx_bool *bExcludeAlleg;
+ int nra_alloc;
+ int cg_alloc;
+ int **nl_sr;
+ int *nsr;
+ int **nl_lr_ljc;
+ int **nl_lr_one;
+ int *nlr_ljc;
+ int *nlr_one;
+ /* the nblists should probably go in here */
+ gmx_bool nblist_initialized; /* has the nblist been initialized? */
+ int dump_nl; /* neighbour list dump level (from env. var. GMX_DUMP_NL)*/
+} gmx_ns_t;
-#endif
+#endif /* GMX_MDTYPES_NBLIST_H */
#include "gromacs/math/utilities.h"
#include "gromacs/math/vec.h"
#include "gromacs/mdtypes/md_enums.h"
+#include "gromacs/mdtypes/nblist.h"
#include "gromacs/utility/cstringutil.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/futil.h"
}
}
-t_forcetable make_tables(FILE *out,
- const t_forcerec *fr,
- const char *fn,
- real rtab, int flags)
+t_forcetable *make_tables(FILE *out,
+ const t_forcerec *fr,
+ const char *fn,
+ real rtab, int flags)
{
t_tabledata *td;
gmx_bool b14only, useUserTable;
int nx0, tabsel[etiNR];
real scalefactor;
- t_forcetable table;
+ t_forcetable *table;
+ snew(table, 1);
b14only = (flags & GMX_MAKETABLES_14ONLY);
if (flags & GMX_MAKETABLES_FORCEUSER)
set_table_type(tabsel, fr, b14only);
}
snew(td, etiNR);
- table.r = rtab;
- table.scale = 0;
- table.n = 0;
+ table->r = rtab;
+ table->scale = 0;
+ table->n = 0;
- table.interaction = GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP;
- table.format = GMX_TABLE_FORMAT_CUBICSPLINE_YFGH;
- table.formatsize = 4;
- table.ninteractions = etiNR;
- table.stride = table.formatsize*table.ninteractions;
+ table->interaction = GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP;
+ table->format = GMX_TABLE_FORMAT_CUBICSPLINE_YFGH;
+ table->formatsize = 4;
+ table->ninteractions = etiNR;
+ table->stride = table->formatsize*table->ninteractions;
/* Check whether we have to read or generate */
useUserTable = FALSE;
read_tables(out, fn, etiNR, 0, td);
if (rtab == 0 || (flags & GMX_MAKETABLES_14ONLY))
{
- table.n = td[0].nx;
+ table->n = td[0].nx;
}
else
{
gmx_fatal(FARGS, "Tables in file %s not long enough for cut-off:\n"
"\tshould be at least %f nm\n", fn, rtab);
}
- table.n = (int)(rtab*td[0].tabscale + 0.5);
+ table->n = (int)(rtab*td[0].tabscale + 0.5);
}
- table.scale = td[0].tabscale;
- nx0 = td[0].nx0;
+ table->scale = td[0].tabscale;
+ nx0 = td[0].nx0;
}
else
{
// No tables are read
#ifdef GMX_DOUBLE
- table.scale = 2000.0;
+ table->scale = 2000.0;
#else
- table.scale = 500.0;
+ table->scale = 500.0;
#endif
- table.n = static_cast<int>(rtab*table.scale);
- nx0 = 10;
+ table->n = static_cast<int>(rtab*table->scale);
+ nx0 = 10;
}
/* Each table type (e.g. coul,lj6,lj12) requires four
- * numbers per table.n+1 data points. For performance reasons we want
+ * numbers per table->n+1 data points. For performance reasons we want
* the table data to be aligned to a 32-byte boundary.
*/
- snew_aligned(table.data, table.stride*(table.n+1)*sizeof(real), 32);
+ snew_aligned(table->data, table->stride*(table->n+1)*sizeof(real), 32);
for (int k = 0; (k < etiNR); k++)
{
overwriting data that was read but should not be used) */
if (!ETAB_USER(tabsel[k]))
{
- real scale = table.scale;
+ real scale = table->scale;
if (fr->bBHAM && (fr->bham_b_max != 0) && tabsel[k] == etabEXPMIN)
{
scale /= fr->bham_b_max;
}
- init_table(table.n, nx0, scale, &(td[k]), !useUserTable);
+ init_table(table->n, nx0, scale, &(td[k]), !useUserTable);
fill_table(&(td[k]), tabsel[k], fr, b14only);
if (out)
scalefactor = 1.0;
}
- copy2table(table.n, k*table.formatsize, table.stride, td[k].x, td[k].v, td[k].f, scalefactor, table.data);
+ copy2table(table->n, k*table->formatsize, table->stride, td[k].x, td[k].v, td[k].f, scalefactor, table->data);
done_tabledata(&(td[k]));
}
return table;
}
-t_forcetable make_gb_table(const t_forcerec *fr)
+t_forcetable *make_gb_table(const t_forcerec *fr)
{
t_tabledata *td;
int nx0;
double r, r2, Vtab, Ftab, expterm;
- t_forcetable table;
+ t_forcetable *table;
/* Set the table dimensions for GB, not really necessary to
* use etiNR (since we only have one table, but ...)
*/
+ snew(table, 1);
snew(td, 1);
- table.interaction = GMX_TABLE_INTERACTION_ELEC;
- table.format = GMX_TABLE_FORMAT_CUBICSPLINE_YFGH;
- table.r = fr->gbtabr;
- table.scale = fr->gbtabscale;
- table.n = static_cast<int>(table.scale*table.r);
- table.formatsize = 4;
- table.ninteractions = 1;
- table.stride = table.formatsize*table.ninteractions;
- nx0 = 0;
+ table->interaction = GMX_TABLE_INTERACTION_ELEC;
+ table->format = GMX_TABLE_FORMAT_CUBICSPLINE_YFGH;
+ table->r = fr->gbtabr;
+ table->scale = fr->gbtabscale;
+ table->n = static_cast<int>(table->scale*table->r);
+ table->formatsize = 4;
+ table->ninteractions = 1;
+ table->stride = table->formatsize*table->ninteractions;
+ nx0 = 0;
/* Each table type (e.g. coul,lj6,lj12) requires four numbers per
* datapoint. For performance reasons we want the table data to be
* to do this :-)
*/
- snew_aligned(table.data, table.stride*table.n, 32);
+ snew_aligned(table->data, table->stride*table->n, 32);
- init_table(table.n, nx0, table.scale, &(td[0]), TRUE);
+ init_table(table->n, nx0, table->scale, &(td[0]), TRUE);
/* Local implementation so we don't have to use the etabGB
* enum above, which will cause problems later when
* be defined in fill_table and set_table_type
*/
- for (int i = nx0; i < table.n; i++)
+ for (int i = nx0; i < table->n; i++)
{
r = td->x[i];
r2 = r*r;
Ftab = (r-0.25*r*expterm)/((r2+expterm)*sqrt(r2+expterm));
/* Convert to single precision when we store to mem */
- td->x[i] = i/table.scale;
+ td->x[i] = i/table->scale;
td->v[i] = Vtab;
td->f[i] = Ftab;
}
- copy2table(table.n, 0, table.stride, td[0].x, td[0].v, td[0].f, 1.0, table.data);
+ copy2table(table->n, 0, table->stride, td[0].x, td[0].v, td[0].f, 1.0, table->data);
done_tabledata(&(td[0]));
sfree(td);
double v_lj_ewald_lr(double beta, double r);
/* Return the real space grid contribution for LJ-Ewald*/
-t_forcetable make_tables(FILE *fp,
- const t_forcerec *fr,
- const char *fn, real rtab, int flags);
+t_forcetable *make_tables(FILE *fp,
+ const t_forcerec *fr,
+ const char *fn, real rtab, int flags);
/* Return tables for inner loops. */
bondedtable_t make_bonded_table(FILE *fplog, char *fn, int angle);
*/
/* Return a table for GB calculations */
-t_forcetable make_gb_table(const t_forcerec *fr);
+t_forcetable *make_gb_table(const t_forcerec *fr);
#endif /* GMX_TABLES_FORCETABLE_H */