#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/smalloc.h"
-static void rand_rot(int natoms, rvec x[], rvec v[], vec4 xrot[], vec4 vrot[],
- gmx::DefaultRandomEngine * rng, const rvec max_rot)
+static void
+rand_rot(int natoms, rvec x[], rvec v[], vec4 xrot[], vec4 vrot[], gmx::DefaultRandomEngine* rng, const rvec max_rot)
{
- mat4 mt1, mt2, mr[DIM], mtemp1, mtemp2, mtemp3, mxtot, mvtot;
- rvec xcm;
- real phi;
- int i, m;
+ mat4 mt1, mt2, mr[DIM], mtemp1, mtemp2, mtemp3, mxtot, mvtot;
+ rvec xcm;
+ real phi;
+ int i, m;
gmx::UniformRealDistribution<real> dist(-1.0, 1.0);
clear_rvec(xcm);
{
for (m = 0; (m < DIM); m++)
{
- xcm[m] += x[i][m]/natoms; /* get center of mass of one molecule */
+ xcm[m] += x[i][m] / natoms; /* get center of mass of one molecule */
}
}
fprintf(stderr, "center of geometry: %f, %f, %f\n", xcm[0], xcm[1], xcm[2]);
gmx_mat4_init_translation(-xcm[XX], -xcm[YY], -xcm[ZZ], mt1);
for (m = 0; (m < DIM); m++)
{
- phi = M_PI*max_rot[m]*dist(*rng)/180;
+ phi = M_PI * max_rot[m] * dist(*rng) / 180;
gmx_mat4_init_rotation(m, phi, mr[m]);
}
gmx_mat4_init_translation(xcm[XX], xcm[YY], xcm[ZZ], mt2);
}
}
-int gmx_genconf(int argc, char *argv[])
+int gmx_genconf(int argc, char* argv[])
{
- const char *desc[] = {
+ const char* desc[] = {
"[THISMODULE] multiplies a given coordinate file by simply stacking them",
"on top of each other, like a small child playing with wooden blocks.",
"The program makes a grid of [IT]user-defined[it]",
"build the grid."
};
- const char *bugs[] = {
- "The program should allow for random displacement of lattice points."
- };
+ const char* bugs[] = { "The program should allow for random displacement of lattice points." };
int vol;
- rvec *x, *xx, *v; /* coordinates? */
+ rvec * x, *xx, *v; /* coordinates? */
real t;
- vec4 *xrot, *vrot;
+ vec4 * xrot, *vrot;
int ePBC;
matrix box, boxx; /* box length matrix */
rvec shift;
- int natoms; /* number of atoms in one molecule */
- int nres; /* number of molecules? */
+ int natoms; /* number of atoms in one molecule */
+ int nres; /* number of molecules? */
int i, j, k, l, m, ndx, nrdx, nx, ny, nz;
- t_trxstatus *status;
+ t_trxstatus* status;
bool bTRX;
- gmx_output_env_t *oenv;
+ gmx_output_env_t* oenv;
- t_filenm fnm[] = {
- { efSTX, "-f", "conf", ffREAD },
- { efSTO, "-o", "out", ffWRITE },
- { efTRX, "-trj", nullptr, ffOPTRD }
- };
+ t_filenm fnm[] = { { efSTX, "-f", "conf", ffREAD },
+ { efSTO, "-o", "out", ffWRITE },
+ { efTRX, "-trj", nullptr, ffOPTRD } };
#define NFILE asize(fnm)
- rvec nrbox = {1, 1, 1};
- int seed = 0; /* seed for random number generator */
- gmx_bool bRandom = FALSE; /* False: no random rotations */
- gmx_bool bRenum = TRUE; /* renumber residues */
- rvec dist = {0, 0, 0}; /* space added between molecules ? */
- rvec max_rot = {180, 180, 180}; /* maximum rotation */
- t_pargs pa[] = {
- { "-nbox", FALSE, etRVEC, {nrbox}, "Number of boxes" },
- { "-dist", FALSE, etRVEC, {dist}, "Distance between boxes" },
- { "-seed", FALSE, etINT, {&seed},
- "Random generator seed (0 means generate)" },
- { "-rot", FALSE, etBOOL, {&bRandom}, "Randomly rotate conformations" },
- { "-maxrot", FALSE, etRVEC, {max_rot}, "Maximum random rotation" },
- { "-renumber", FALSE, etBOOL, {&bRenum}, "Renumber residues" }
+ rvec nrbox = { 1, 1, 1 };
+ int seed = 0; /* seed for random number generator */
+ gmx_bool bRandom = FALSE; /* False: no random rotations */
+ gmx_bool bRenum = TRUE; /* renumber residues */
+ rvec dist = { 0, 0, 0 }; /* space added between molecules ? */
+ rvec max_rot = { 180, 180, 180 }; /* maximum rotation */
+ t_pargs pa[] = {
+ { "-nbox", FALSE, etRVEC, { nrbox }, "Number of boxes" },
+ { "-dist", FALSE, etRVEC, { dist }, "Distance between boxes" },
+ { "-seed", FALSE, etINT, { &seed }, "Random generator seed (0 means generate)" },
+ { "-rot", FALSE, etBOOL, { &bRandom }, "Randomly rotate conformations" },
+ { "-maxrot", FALSE, etRVEC, { max_rot }, "Maximum random rotation" },
+ { "-renumber", FALSE, etBOOL, { &bRenum }, "Renumber residues" }
};
- if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
- asize(desc), desc, asize(bugs), bugs, &oenv))
+ if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa, asize(desc), desc,
+ asize(bugs), bugs, &oenv))
{
return 0;
}
gmx_fatal(FARGS, "Number of boxes (-nbox) should be larger than zero");
}
- vol = nx*ny*nz; /* calculate volume in grid points (= nr. molecules) */
+ vol = nx * ny * nz; /* calculate volume in grid points (= nr. molecules) */
gmx_mtop_t mtop;
bool haveTop = false;
readConfAndTopology(opt2fn("-f", NFILE, fnm), &haveTop, &mtop, &ePBC, &x, &v, box);
- t_atoms atoms = gmx_mtop_global_atoms(&mtop);
- natoms = atoms.nr;
- nres = atoms.nres; /* nr of residues in one element? */
+ t_atoms atoms = gmx_mtop_global_atoms(&mtop);
+ natoms = atoms.nr;
+ nres = atoms.nres; /* nr of residues in one element? */
/* make space for all the atoms */
- add_t_atoms(&atoms, natoms*(vol-1), nres*(vol-1));
- srenew(x, natoms*vol); /* get space for coordinates of all atoms */
- srenew(v, natoms*vol); /* velocities. not really needed? */
- snew(xrot, natoms); /* get space for rotation matrix? */
+ add_t_atoms(&atoms, natoms * (vol - 1), nres * (vol - 1));
+ srenew(x, natoms * vol); /* get space for coordinates of all atoms */
+ srenew(v, natoms * vol); /* velocities. not really needed? */
+ snew(xrot, natoms); /* get space for rotation matrix? */
snew(vrot, natoms);
if (bTRX)
}
- for (k = 0; (k < nz); k++) /* loop over all gridpositions */
+ for (k = 0; (k < nz); k++) /* loop over all gridpositions */
{
- shift[ZZ] = k*(dist[ZZ]+box[ZZ][ZZ]);
+ shift[ZZ] = k * (dist[ZZ] + box[ZZ][ZZ]);
for (j = 0; (j < ny); j++)
{
- shift[YY] = j*(dist[YY]+box[YY][YY])+k*box[ZZ][YY];
+ shift[YY] = j * (dist[YY] + box[YY][YY]) + k * box[ZZ][YY];
for (i = 0; (i < nx); i++)
{
- shift[XX] = i*(dist[XX]+box[XX][XX])+j*box[YY][XX]+k*box[ZZ][XX];
+ shift[XX] = i * (dist[XX] + box[XX][XX]) + j * box[YY][XX] + k * box[ZZ][XX];
- ndx = (i*ny*nz+j*nz+k)*natoms;
- nrdx = (i*ny*nz+j*nz+k)*nres;
+ ndx = (i * ny * nz + j * nz + k) * natoms;
+ nrdx = (i * ny * nz + j * nz + k) * nres;
/* Random rotation on input coords */
if (bRandom)
{
if (bRandom)
{
- x[ndx+l][m] = xrot[l][m];
- v[ndx+l][m] = vrot[l][m];
+ x[ndx + l][m] = xrot[l][m];
+ v[ndx + l][m] = vrot[l][m];
}
else
{
- x[ndx+l][m] = xx[l][m];
- v[ndx+l][m] = v[l][m];
+ x[ndx + l][m] = xx[l][m];
+ v[ndx + l][m] = v[l][m];
}
}
if (ePBC == epbcSCREW && i % 2 == 1)
/* Rotate around x axis */
for (m = YY; m <= ZZ; m++)
{
- x[ndx+l][m] = box[YY][m] + box[ZZ][m] - x[ndx+l][m];
- v[ndx+l][m] = -v[ndx+l][m];
+ x[ndx + l][m] = box[YY][m] + box[ZZ][m] - x[ndx + l][m];
+ v[ndx + l][m] = -v[ndx + l][m];
}
}
for (m = 0; (m < DIM); m++)
{
- x[ndx+l][m] += shift[m];
+ x[ndx + l][m] += shift[m];
}
- atoms.atom[ndx+l].resind = nrdx + atoms.atom[l].resind;
- atoms.atomname[ndx+l] = atoms.atomname[l];
+ atoms.atom[ndx + l].resind = nrdx + atoms.atom[l].resind;
+ atoms.atomname[ndx + l] = atoms.atomname[l];
}
for (l = 0; (l < nres); l++)
{
- atoms.resinfo[nrdx+l] = atoms.resinfo[l];
+ atoms.resinfo[nrdx + l] = atoms.resinfo[l];
if (bRenum)
{
- atoms.resinfo[nrdx+l].nr += nrdx;
+ atoms.resinfo[nrdx + l].nr += nrdx;
}
}
if (bTRX)
{
- if (!read_next_x(oenv, status, &t, xx, boxx) &&
- ((i+1)*(j+1)*(k+1) < vol))
+ if (!read_next_x(oenv, status, &t, xx, boxx) && ((i + 1) * (j + 1) * (k + 1) < vol))
{
gmx_fatal(FARGS, "Not enough frames in trajectory");
}
{
for (i = 0; i < atoms.nres; i++)
{
- atoms.resinfo[i].nr = i+1;
+ atoms.resinfo[i].nr = i + 1;
}
}