Gromacs
2020.4
|
#include "gmxpre.h"
#include "centerofmass.h"
#include <cmath>
#include "gromacs/math/vec.h"
#include "gromacs/pbcutil/pbc.h"
#include "gromacs/topology/block.h"
#include "gromacs/topology/mtop_lookup.h"
#include "gromacs/topology/topology.h"
#include "gromacs/utility/gmxassert.h"
Implements functions in centerofmass.h.
Functions | |
void | gmx_calc_cog (const gmx_mtop_t *, rvec x[], int nrefat, const int index[], rvec xout) |
Calculate a single center of geometry. More... | |
void | gmx_calc_com (const gmx_mtop_t *top, rvec x[], int nrefat, const int index[], rvec xout) |
Calculate a single center of mass. More... | |
void | gmx_calc_cog_f (const gmx_mtop_t *top, rvec f[], int nrefat, const int index[], rvec fout) |
Calculate force on a single center of geometry. More... | |
void | gmx_calc_com_f (const gmx_mtop_t *, rvec f[], int nrefat, const int index[], rvec fout) |
Calculate force on a single center of mass. More... | |
void | gmx_calc_comg (const gmx_mtop_t *top, rvec x[], int nrefat, const int index[], bool bMass, rvec xout) |
Calculate a single center of mass/geometry. More... | |
void | gmx_calc_comg_f (const gmx_mtop_t *top, rvec f[], int nrefat, const int index[], bool bMass, rvec fout) |
Calculate force on a single center of mass/geometry. More... | |
void | gmx_calc_cog_pbc (const gmx_mtop_t *top, rvec x[], const t_pbc *pbc, int nrefat, const int index[], rvec xout) |
Calculate a single center of geometry iteratively, taking PBC into account. More... | |
void | gmx_calc_com_pbc (const gmx_mtop_t *top, rvec x[], const t_pbc *pbc, int nrefat, const int index[], rvec xout) |
Calculate a single center of mass iteratively, taking PBC into account. More... | |
void | gmx_calc_comg_pbc (const gmx_mtop_t *top, rvec x[], const t_pbc *pbc, int nrefat, const int index[], bool bMass, rvec xout) |
Calculate a single center of mass/geometry iteratively with PBC. More... | |
void | gmx_calc_cog_block (const gmx_mtop_t *, rvec x[], const t_block *block, const int index[], rvec xout[]) |
Calculate centers of geometry for a blocked index. More... | |
void | gmx_calc_com_block (const gmx_mtop_t *top, rvec x[], const t_block *block, const int index[], rvec xout[]) |
Calculate centers of mass for a blocked index. More... | |
void | gmx_calc_cog_f_block (const gmx_mtop_t *top, rvec f[], const t_block *block, const int index[], rvec fout[]) |
Calculate forces on centers of geometry for a blocked index. More... | |
void | gmx_calc_com_f_block (const gmx_mtop_t *, rvec f[], const t_block *block, const int index[], rvec fout[]) |
Calculate forces on centers of mass for a blocked index. More... | |
void | gmx_calc_comg_block (const gmx_mtop_t *top, rvec x[], const t_block *block, const int index[], bool bMass, rvec xout[]) |
Calculate centers of mass/geometry for a blocked index. More... | |
void | gmx_calc_comg_f_block (const gmx_mtop_t *top, rvec f[], const t_block *block, const int index[], bool bMass, rvec fout[]) |
Calculate forces on centers of mass/geometry for a blocked index. More... | |
void | gmx_calc_comg_blocka (const gmx_mtop_t *top, rvec x[], const t_blocka *block, bool bMass, rvec xout[]) |
Calculate centers of mass/geometry for a set of blocks;. More... | |
void | gmx_calc_comg_f_blocka (const gmx_mtop_t *top, rvec f[], const t_blocka *block, bool bMass, rvec fout[]) |
Calculate forces on centers of mass/geometry for a set of blocks;. More... | |
void gmx_calc_cog | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
int | nrefat, | ||
const int | index[], | ||
rvec | xout | ||
) |
Calculate a single center of geometry.
[in] | top | Topology structure (unused, can be NULL). |
[in] | x | Position vectors of all atoms. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[out] | xout | COG position for the indexed atoms. |
void gmx_calc_cog_block | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_block * | block, | ||
const int | index[], | ||
rvec | xout[] | ||
) |
Calculate centers of geometry for a blocked index.
[in] | top | Topology structure (unused, can be NULL). |
[in] | x | Position vectors of all atoms. |
[in] | block | t_block structure that divides index into blocks. |
[in] | index | Indices of atoms. |
[out] | xout | block->nr COG positions. |
void gmx_calc_cog_f | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
int | nrefat, | ||
const int | index[], | ||
rvec | fout | ||
) |
Calculate force on a single center of geometry.
[in] | top | Topology structure with masses. |
[in] | f | Forces on all atoms. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[out] | fout | Force on the COG position for the indexed atoms. |
void gmx_calc_cog_f_block | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
const t_block * | block, | ||
const int | index[], | ||
rvec | fout[] | ||
) |
Calculate forces on centers of geometry for a blocked index.
[in] | top | Topology structure with masses. |
[in] | f | Forces on all atoms. |
[in] | block | t_block structure that divides index into blocks. |
[in] | index | Indices of atoms. |
[out] | fout | block->nr Forces on COG positions. |
void gmx_calc_cog_pbc | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_pbc * | pbc, | ||
int | nrefat, | ||
const int | index[], | ||
rvec | xout | ||
) |
Calculate a single center of geometry iteratively, taking PBC into account.
[in] | top | Topology structure (unused, can be NULL). |
[in] | x | Position vectors of all atoms. |
[in] | pbc | Periodic boundary conditions structure. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[out] | xout | COG position for the indexed atoms. |
Works exactly as gmx_calc_com_pbc(), but calculates the center of geometry.
void gmx_calc_com | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
int | nrefat, | ||
const int | index[], | ||
rvec | xout | ||
) |
Calculate a single center of mass.
[in] | top | Topology structure with masses. |
[in] | x | Position vectors of all atoms. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[out] | xout | COM position for the indexed atoms. |
Works exactly as gmx_calc_cog() with the exception that a center of mass are calculated, and hence a topology with masses is required.
void gmx_calc_com_block | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_block * | block, | ||
const int | index[], | ||
rvec | xout[] | ||
) |
Calculate centers of mass for a blocked index.
[in] | top | Topology structure with masses. |
[in] | x | Position vectors of all atoms. |
[in] | block | t_block structure that divides index into blocks. |
[in] | index | Indices of atoms. |
[out] | xout | block->nr COM positions. |
Works exactly as gmx_calc_cog_block() with the exception that centers of mass are calculated, and hence a topology with masses is required.
void gmx_calc_com_f | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
int | nrefat, | ||
const int | index[], | ||
rvec | fout | ||
) |
Calculate force on a single center of mass.
[in] | top | Topology structure (unused, can be NULL). |
[in] | f | Forces on all atoms. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[out] | fout | Force on the COM position for the indexed atoms. |
void gmx_calc_com_f_block | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
const t_block * | block, | ||
const int | index[], | ||
rvec | fout[] | ||
) |
Calculate forces on centers of mass for a blocked index.
[in] | top | Topology structure (unused, can be NULL). |
[in] | f | Forces on all atoms. |
[in] | block | t_block structure that divides index into blocks. |
[in] | index | Indices of atoms. |
[out] | fout | block->nr Forces on COM positions. |
void gmx_calc_com_pbc | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_pbc * | pbc, | ||
int | nrefat, | ||
const int | index[], | ||
rvec | xout | ||
) |
Calculate a single center of mass iteratively, taking PBC into account.
[in] | top | Topology structure with masses. |
[in] | x | Position vectors of all atoms. |
[in] | pbc | Periodic boundary conditions structure. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[out] | xout | COM position for the indexed atoms. |
Works as gmx_calc_com(), but takes into account periodic boundary conditions: If any atom is more than half the box from the COM, it is wrapped around and a new COM is calculated. This is repeated until no atoms violate the condition.
Modified from src/tools/gmx_sorient.c in Gromacs distribution.
void gmx_calc_comg | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
int | nrefat, | ||
const int | index[], | ||
bool | bMass, | ||
rvec | xout | ||
) |
Calculate a single center of mass/geometry.
[in] | top | Topology structure with masses (can be NULL if bMASS==false ). |
[in] | x | Position vectors of all atoms. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[in] | bMass | If true, mass weighting is used. |
[out] | xout | COM/COG position for the indexed atoms. |
Calls either gmx_calc_com() or gmx_calc_cog() depending on the value of bMass
. Other parameters are passed unmodified to these functions.
void gmx_calc_comg_block | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_block * | block, | ||
const int | index[], | ||
bool | bMass, | ||
rvec | xout[] | ||
) |
Calculate centers of mass/geometry for a blocked index.
[in] | top | Topology structure with masses (can be NULL if bMASS==false ). |
[in] | x | Position vectors of all atoms. |
[in] | block | t_block structure that divides index into blocks. |
[in] | index | Indices of atoms. |
[in] | bMass | If true, mass weighting is used. |
[out] | xout | block->nr COM/COG positions. |
Calls either gmx_calc_com_block() or gmx_calc_cog_block() depending on the value of bMass
. Other parameters are passed unmodified to these functions.
void gmx_calc_comg_blocka | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_blocka * | block, | ||
bool | bMass, | ||
rvec | xout[] | ||
) |
Calculate centers of mass/geometry for a set of blocks;.
[in] | top | Topology structure with masses (can be NULL if bMASS==false ). |
[in] | x | Position vectors of all atoms. |
[in] | block | Blocks for calculation. |
[in] | bMass | If true, mass weighting is used. |
[out] | xout | block->nr COM/COG positions. |
Calls gmx_calc_comg_block(), converting the t_blocka
structure into a t_block
and an index. Other parameters are passed unmodified.
t_blocka
can be safely typecast into t_block
such that the index fields can still be referenced. With the present Gromacs defitions of these types, this is the case, but if the layout of these structures is changed, this may lead to strange crashes. void gmx_calc_comg_f | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
int | nrefat, | ||
const int | index[], | ||
bool | bMass, | ||
rvec | fout | ||
) |
Calculate force on a single center of mass/geometry.
[in] | top | Topology structure with masses (can be NULL if bMASS==true ). |
[in] | f | Forces on all atoms. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[in] | bMass | If true, force on COM is calculated. |
[out] | fout | Force on the COM/COG position for the indexed atoms. |
Calls either gmx_calc_cog_f() or gmx_calc_com_f() depending on the value of bMass
. Other parameters are passed unmodified to these functions.
void gmx_calc_comg_f_block | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
const t_block * | block, | ||
const int | index[], | ||
bool | bMass, | ||
rvec | fout[] | ||
) |
Calculate forces on centers of mass/geometry for a blocked index.
[in] | top | Topology structure with masses (can be NULL if bMASS==false ). |
[in] | f | Forces on all atoms. |
[in] | block | t_block structure that divides index into blocks. |
[in] | index | Indices of atoms. |
[in] | bMass | If true, force on COM is calculated. |
[out] | fout | block->nr forces on the COM/COG positions. |
Calls either gmx_calc_com_f_block() or gmx_calc_cog_f_block() depending on the value of bMass
. Other parameters are passed unmodified to these functions.
void gmx_calc_comg_f_blocka | ( | const gmx_mtop_t * | top, |
rvec | f[], | ||
const t_blocka * | block, | ||
bool | bMass, | ||
rvec | fout[] | ||
) |
Calculate forces on centers of mass/geometry for a set of blocks;.
[in] | top | Topology structure with masses (can be NULL if bMASS==true ). |
[in] | f | Forces on all atoms. |
[in] | block | Blocks for calculation. |
[in] | bMass | If true, force on COM is calculated. |
[out] | fout | block->nr forces on the COM/COG positions. |
Calls gmx_calc_comg_f_block(), converting the t_blocka
structure into a t_block
and an index. Other parameters are passed unmodified.
t_blocka
can be safely typecast into t_block
such that the index fields can still be referenced. With the present Gromacs defitions of these types, this is the case, but if the layout of these structures is changed, this may lead to strange crashes. void gmx_calc_comg_pbc | ( | const gmx_mtop_t * | top, |
rvec | x[], | ||
const t_pbc * | pbc, | ||
int | nrefat, | ||
const int | index[], | ||
bool | bMass, | ||
rvec | xout | ||
) |
Calculate a single center of mass/geometry iteratively with PBC.
[in] | top | Topology structure with masses (can be NULL if bMASS==false ). |
[in] | x | Position vectors of all atoms. |
[in] | pbc | Periodic boundary conditions structure. |
[in] | nrefat | Number of atoms in the index. |
[in] | index | Indices of atoms. |
[in] | bMass | If true, mass weighting is used. |
[out] | xout | COM/COG position for the indexed atoms. |
Calls either gmx_calc_com() or gmx_calc_cog() depending on the value of bMass
. Other parameters are passed unmodified to these functions.