Gromacs
2019-beta3
|
#include <vector>
#include "gromacs/math/vectypes.h"
#include "gromacs/utility/arrayref.h"
#include "gromacs/utility/basedefinitions.h"
#include "gromacs/utility/real.h"
This file declares functions for mdrun to call to manage the details of its domain decomposition.
Classes | |
struct | NumPmeDomains |
Struct for passing around the number of PME domains. More... | |
struct | DomdecOptions |
Structure containing all (command line) options for the domain decomposition. More... | |
Enumerations | |
enum | DdRankOrder { DdRankOrder::select, DdRankOrder::interleave, DdRankOrder::pp_pme, DdRankOrder::cartesian, DdRankOrder::nr } |
The options for the domain decomposition MPI task ordering. More... | |
enum | DlbOption { DlbOption::select, DlbOption::turnOnWhenUseful, DlbOption::no, DlbOption::yes, DlbOption::nr } |
The options for the dynamic load balancing. More... | |
enum | { ddCyclStep, ddCyclPPduringPME, ddCyclF, ddCyclWaitGPU, ddCyclPME, ddCyclNr } |
Cycle counter indices used internally in the domain decomposition. | |
Functions | |
int | ddglatnr (const gmx_domdec_t *dd, int i) |
Returns the global topology atom number belonging to local atom index i. More... | |
t_block * | dd_charge_groups_global (struct gmx_domdec_t *dd) |
Return a block struct for the charge groups of the whole system. | |
void | dd_store_state (struct gmx_domdec_t *dd, t_state *state) |
Store the global cg indices of the home cgs in state,. More... | |
struct gmx_domdec_zones_t * | domdec_zones (struct gmx_domdec_t *dd) |
Returns a pointer to the gmx_domdec_zones_t struct. | |
void | dd_get_ns_ranges (const gmx_domdec_t *dd, int icg, int *jcg0, int *jcg1, ivec shift0, ivec shift1) |
Sets the j-charge-group range for i-charge-group icg . | |
int | dd_numHomeAtoms (const gmx_domdec_t &dd) |
Returns the number of home atoms. | |
int | dd_natoms_mdatoms (const gmx_domdec_t *dd) |
Returns the atom range in the local state for atoms that need to be present in mdatoms. | |
int | dd_natoms_vsite (const gmx_domdec_t *dd) |
Returns the atom range in the local state for atoms involved in virtual sites. | |
void | dd_get_constraint_range (const gmx_domdec_t *dd, int *at_start, int *at_end) |
Sets the atom range for atom in the local state for atoms received in constraints communication. | |
NumPmeDomains | getNumPmeDomains (const gmx_domdec_t *dd) |
Returns the number of PME domains, can be called with dd=NULL. | |
std::vector< int > | get_pme_ddranks (const t_commrec *cr, int pmenodeid) |
Returns the set of DD ranks that communicate with pme node cr->nodeid. | |
int | dd_pme_maxshift_x (const gmx_domdec_t *dd) |
Returns the maximum shift for coordinate communication in PME, dim x. | |
int | dd_pme_maxshift_y (const gmx_domdec_t *dd) |
Returns the maximum shift for coordinate communication in PME, dim y. | |
gmx_domdec_t * | init_domain_decomposition (const gmx::MDLogger &mdlog, t_commrec *cr, const DomdecOptions &options, const MdrunOptions &mdrunOptions, const gmx_mtop_t *mtop, const t_inputrec *ir, const matrix box, gmx::ArrayRef< const gmx::RVec > xGlobal, gmx::LocalAtomSetManager *atomSets) |
Initialized the domain decomposition, chooses the DD grid and PME ranks, return the DD struct. | |
void | dd_init_bondeds (FILE *fplog, gmx_domdec_t *dd, const gmx_mtop_t *mtop, const gmx_vsite_t *vsite, const t_inputrec *ir, gmx_bool bBCheck, cginfo_mb_t *cginfo_mb) |
Initialize data structures for bonded interactions. | |
gmx_bool | dd_bonded_molpbc (const gmx_domdec_t *dd, int ePBC) |
Returns if we need to do pbc for calculating bonded interactions. | |
gmx_bool | change_dd_cutoff (t_commrec *cr, const t_state &state, real cutoffRequested) |
Change the DD non-bonded communication cut-off. More... | |
void | dd_setup_dlb_resource_sharing (t_commrec *cr, int gpu_id) |
Set up communication for averaging GPU wait times over domains. More... | |
void | dd_cycles_add (const gmx_domdec_t *dd, float cycles, int ddCycl) |
Add the wallcycle count to the DD counter. | |
void | dd_move_x (struct gmx_domdec_t *dd, matrix box, gmx::ArrayRef< gmx::RVec > x, gmx_wallcycle *wcycle) |
Communicate the coordinates to the neighboring cells and do pbc. | |
void | dd_move_f (struct gmx_domdec_t *dd, gmx::ArrayRef< gmx::RVec > f, rvec *fshift, gmx_wallcycle *wcycle) |
Sum the forces over the neighboring cells. More... | |
void | dd_atom_spread_real (struct gmx_domdec_t *dd, real v[]) |
Communicate a real for each atom to the neighboring cells. | |
void | dd_atom_sum_real (struct gmx_domdec_t *dd, real v[]) |
Sum the contributions to a real for each atom over the neighboring cells. | |
void | reset_dd_statistics_counters (struct gmx_domdec_t *dd) |
Reset all the statistics and counters for total run counting. | |
void | dd_move_f_vsites (struct gmx_domdec_t *dd, rvec *f, rvec *fshift) |
Communicates the virtual site forces, reduces the shift forces when fshift != NULL. | |
void | dd_clear_f_vsites (struct gmx_domdec_t *dd, rvec *f) |
Clears the forces for virtual sites. | |
void | dd_move_x_constraints (struct gmx_domdec_t *dd, matrix box, rvec *x0, rvec *x1, gmx_bool bX1IsCoord) |
Move x0 and also x1 if x1!=NULL. bX1IsCoord tells if to do PBC on x1. | |
void | dd_move_x_vsites (struct gmx_domdec_t *dd, const matrix box, rvec *x) |
Communicates the coordinates involved in virtual sites. | |
gmx::ArrayRef< const int > | dd_constraints_nlocalatoms (const gmx_domdec_t *dd) |
Returns the local atom count array for all constraints. More... | |
void | dd_print_missing_interactions (const gmx::MDLogger &mdlog, t_commrec *cr, int local_count, const gmx_mtop_t *top_global, const gmx_localtop_t *top_local, const t_state *state_local) |
Print error output when interactions are missing. | |
void | dd_make_reverse_top (FILE *fplog, gmx_domdec_t *dd, const gmx_mtop_t *mtop, const gmx_vsite_t *vsite, const t_inputrec *ir, gmx_bool bBCheck) |
Generate and store the reverse topology. | |
void | dd_make_local_cgs (struct gmx_domdec_t *dd, t_block *lcgs) |
Store the local charge group index in lcgs . | |
void | dd_make_local_top (struct gmx_domdec_t *dd, struct gmx_domdec_zones_t *zones, int npbcdim, matrix box, rvec cellsize_min, const ivec npulse, t_forcerec *fr, rvec *cgcm_or_x, gmx_vsite_t *vsite, const gmx_mtop_t *top, gmx_localtop_t *ltop) |
Generate the local topology and virtual site data. | |
void | dd_sort_local_top (gmx_domdec_t *dd, const t_mdatoms *mdatoms, gmx_localtop_t *ltop) |
Sort ltop->ilist when we are doing free energy. | |
gmx_localtop_t * | dd_init_local_top (const gmx_mtop_t *top_global) |
Construct local topology. | |
void | dd_init_local_state (struct gmx_domdec_t *dd, const t_state *state_global, t_state *local_state) |
Construct local state. | |
t_blocka * | make_charge_group_links (const gmx_mtop_t *mtop, gmx_domdec_t *dd, cginfo_mb_t *cginfo_mb) |
Generate a list of links between charge groups that are linked by bonded interactions. | |
void | dd_bonded_cg_distance (const gmx::MDLogger &mdlog, const gmx_mtop_t *mtop, const t_inputrec *ir, const rvec *x, const matrix box, gmx_bool bBCheck, real *r_2b, real *r_mb) |
Calculate the maximum distance involved in 2-body and multi-body bonded interactions. | |
real | comm_box_frac (const ivec dd_nc, real cutoff, const gmx_ddbox_t *ddbox) |
Returns the volume fraction of the system that is communicated. | |
real | dd_choose_grid (const gmx::MDLogger &mdlog, t_commrec *cr, gmx_domdec_t *dd, const t_inputrec *ir, const gmx_mtop_t *mtop, const matrix box, const gmx_ddbox_t *ddbox, int nPmeRanks, gmx_bool bDynLoadBal, real dlb_scale, real cellsize_limit, real cutoff_dd, gmx_bool bInterCGBondeds) |
Determines the optimal DD cell setup dd->nc and possibly npmenodes for the system. More... | |
|
strong |
The options for the domain decomposition MPI task ordering.
|
strong |
Change the DD non-bonded communication cut-off.
This could fail when trying to increase the cut-off, then FALSE will be returned and the cut-off is not modified.
[in] | cr | Communication recrod |
[in] | state | State, used for computing the dimensions of the system |
[in] | cutoffRequested | The requested atom to atom cut-off distance, usually the pair-list cutoff distance |
real dd_choose_grid | ( | const gmx::MDLogger & | mdlog, |
t_commrec * | cr, | ||
gmx_domdec_t * | dd, | ||
const t_inputrec * | ir, | ||
const gmx_mtop_t * | mtop, | ||
const matrix | box, | ||
const gmx_ddbox_t * | ddbox, | ||
int | nPmeRanks, | ||
gmx_bool | bDynLoadBal, | ||
real | dlb_scale, | ||
real | cellsize_limit, | ||
real | cutoff_dd, | ||
gmx_bool | bInterCGBondeds | ||
) |
Determines the optimal DD cell setup dd->nc and possibly npmenodes for the system.
On the master node returns the actual cellsize limit used.
gmx::ArrayRef<const int> dd_constraints_nlocalatoms | ( | const gmx_domdec_t * | dd | ) |
Returns the local atom count array for all constraints.
The local atom count for a constraint, possible values 2/1/0, is needed to avoid not/double-counting contributions linked to the Lagrange multiplier, such as the virial and free-energy derivatives.
dd
= nullptr, an empty reference is returned. void dd_move_f | ( | struct gmx_domdec_t * | dd, |
gmx::ArrayRef< gmx::RVec > | f, | ||
rvec * | fshift, | ||
gmx_wallcycle * | wcycle | ||
) |
Sum the forces over the neighboring cells.
When fshift!=NULL the shift forces are updated to obtain the correct virial from the single sum including f.
void dd_setup_dlb_resource_sharing | ( | t_commrec * | cr, |
int | gpu_id | ||
) |
Set up communication for averaging GPU wait times over domains.
When domains (PP MPI ranks) share a GPU, the individual GPU wait times are meaningless, as it depends on the order in which tasks on the same GPU finish. Therefore there wait times need to be averaged over the ranks sharing the same GPU. This function sets up the communication for that.
void dd_store_state | ( | struct gmx_domdec_t * | dd, |
t_state * | state | ||
) |
Store the global cg indices of the home cgs in state,.
This means it can be reset, even after a new DD partitioning.
int ddglatnr | ( | const gmx_domdec_t * | dd, |
int | i | ||
) |
Returns the global topology atom number belonging to local atom index i.
This function is intended for writing ASCII output and returns atom numbers starting at 1. When dd=NULL returns i+1.