Gromacs
2024.4
|
#include <cstdio>
#include <memory>
#include "gromacs/math/vectypes.h"
Declares functions to enforce rotational motion upon a group of particles.
Classes | |
class | gmx::ArrayRef< typename > |
STL-like interface to a C array of T (or part of a std container of T). More... | |
Functions | |
std::unique_ptr < gmx::EnforcedRotation > | init_rot (FILE *fplog, t_inputrec *ir, int nfile, const t_filenm fnm[], const t_commrec *cr, gmx::LocalAtomSetManager *atomSets, const t_state *globalState, const gmx_mtop_t &mtop, const gmx_output_env_t *oenv, const gmx::MdrunOptions &mdrunOptions, gmx::StartingBehavior startingBehavior) |
Initializes the enforced rotation groups. More... | |
void | do_rotation (const t_commrec *cr, gmx_enfrot *er, const matrix box, gmx::ArrayRef< const gmx::RVec > coords, real t, int64_t step, bool bNS) |
Calculates the enforced rotation potential(s). More... | |
real | add_rot_forces (gmx_enfrot *er, gmx::ArrayRef< gmx::RVec > force, const t_commrec *cr, int64_t step, real t) |
Add the enforced rotation forces to the official force array. More... | |
real add_rot_forces | ( | gmx_enfrot * | er, |
gmx::ArrayRef< gmx::RVec > | force, | ||
const t_commrec * | cr, | ||
int64_t | step, | ||
real | t | ||
) |
Add the enforced rotation forces to the official force array.
Adds the forces from enforced rotation potential to the local forces and sums up the contributions to the rotation potential from all the nodes. Since this needs communication, this routine should be called after the short range forces have been evaluated (in order not to spoil cycle counts). This routine also outputs data to the rotation output files (e.g. the potential, the angle of the group(s), and torques).
er | Pointer to the enforced rotation working data. |
force | The local forces to which the rotational forces have to be added. |
cr | Pointer to MPI communication data. |
step | The time step, used for output. |
t | Time, used for output. |
void do_rotation | ( | const t_commrec * | cr, |
gmx_enfrot * | er, | ||
const matrix | box, | ||
gmx::ArrayRef< const gmx::RVec > | coords, | ||
real | t, | ||
int64_t | step, | ||
bool | bNS | ||
) |
Calculates the enforced rotation potential(s).
This is the main enforced rotation module which is called during every time step. Here the rotation potential as well as the resulting forces are calculated.
cr | Pointer to MPI communication data. |
er | Pointer to the enforced rotation working data. |
box | Simulation box, needed to make group whole. |
coords | The positions of all the local particles. |
t | Time. |
step | The time step. |
bNS | After domain decomposition / neighbor searching several local arrays have to be updated (masses, shifts) |
std::unique_ptr<gmx::EnforcedRotation> init_rot | ( | FILE * | fplog, |
t_inputrec * | ir, | ||
int | nfile, | ||
const t_filenm | fnm[], | ||
const t_commrec * | cr, | ||
gmx::LocalAtomSetManager * | atomSets, | ||
const t_state * | globalState, | ||
const gmx_mtop_t & | mtop, | ||
const gmx_output_env_t * | oenv, | ||
const gmx::MdrunOptions & | mdrunOptions, | ||
gmx::StartingBehavior | startingBehavior | ||
) |
Initializes the enforced rotation groups.
This routine does the memory allocation for various helper arrays, opens the output files etc.
fplog | General output file, normally md.log. |
ir | Struct containing MD input parameters, among those also the enforced rotation parameters. |
nfile | Number of entries in the fnm structure. |
fnm | The filenames struct containing also the names of the rotation output files. |
atomSets | Tracks indices of atoms subject to enforced rotation for each DD rank. |
cr | Pointer to MPI communication data. |
globalState | The global state, only used on the main rank. |
mtop | Molecular topology. |
oenv | Needed to open the rotation output xvgr file. |
mdrunOptions | Options for mdrun. |
startingBehavior | Describes whether this is a restart appending to output files |