#ifndef _inputrec_h_
#define _inputrec_h_
+#include <stdio.h>
-#include "simple.h"
-#include "enums.h"
-#include "../sysstuff.h"
+#include "gromacs/legacyheaders/types/enums.h"
+#include "gromacs/legacyheaders/types/simple.h"
+#include "gromacs/swap/enums.h"
#ifdef __cplusplus
extern "C" {
valid value if positive) */
int init_fep_state; /* the initial number of the state */
double delta_lambda; /* change of lambda per time step (fraction of (0.1) */
- gmx_bool bPrintEnergy; /* Whether to print the energy in the dhdl */
+ int edHdLPrintEnergy; /* print no, total or potential energies in dhdl */
int n_lambda; /* The number of foreign lambda points */
double **all_lambda; /* The array of all lambda values */
int lambda_neighbors; /* The number of neighboring lambda states to
t_pull_coord *coord; /* the pull coordinates */
/* Variables not present in mdp, but used at run time */
- t_pull_group *dyna; /* dynamic groups for use with local constraints */
- rvec *rbuf; /* COM calculation buffer */
- dvec *dbuf; /* COM calculation buffer */
- double *dbuf_cyl; /* cylinder ref. groups COM calculation buffer */
+ t_pull_group *dyna; /* dynamic groups for use with local constraints */
+ gmx_bool bSetPBCatoms; /* Do we need to set x_pbc for the groups? */
- FILE *out_x; /* output file for pull data */
- FILE *out_f; /* output file for pull data */
+ rvec *rbuf; /* COM calculation buffer */
+ dvec *dbuf; /* COM calculation buffer */
+ double *dbuf_cyl; /* cylinder ref. groups COM calculation buffer */
+
+ FILE *out_x; /* output file for pull data */
+ FILE *out_f; /* output file for pull data */
} t_pull;
gmx_enfrot_t enfrot; /* Stores non-inputrec enforced rotation data */
} t_rot;
+/* Abstract type for IMD only defined in IMD.c */
+typedef struct gmx_IMD *t_gmx_IMD;
+
+typedef struct {
+ int nat; /* Number of interactive atoms */
+ atom_id *ind; /* The global indices of the interactive atoms */
+ t_gmx_IMD setup; /* Stores non-inputrec IMD data */
+} t_IMD;
+
+/* Abstract types for position swapping only defined in swapcoords.c */
+typedef struct swap *gmx_swapcoords_t;
+
+typedef struct {
+ int nstswap; /* Every how many steps a swap is attempted? */
+ int nat; /* Number of atoms in the ion group */
+ int nat_split[2]; /* Number of atoms in the split group */
+ int nat_sol; /* Number of atoms in the solvent group */
+ atom_id *ind; /* The global ion group atoms numbers */
+ atom_id *ind_split[2]; /* Split groups for compartment partitioning */
+ atom_id *ind_sol; /* The global solvent group atom numbers */
+ gmx_bool massw_split[2]; /* Use mass-weighted positions in split group? */
+ real cyl0r, cyl1r; /* Split cylinders defined by radius, upper and */
+ real cyl0u, cyl1u; /* ... lower extension. The split cylinders de- */
+ real cyl0l, cyl1l; /* ... fine the channels and are each anchored */
+ /* ... in the center of the split group */
+ int nanions[eCompNR]; /* Requested number of anions and */
+ int nAverage; /* Coupling constant (nr of swap attempt steps) */
+ real threshold; /* Ion counts may deviate from the requested
+ values by +-threshold before a swap is done */
+ int ncations[eCompNR]; /* ... cations for both compartments */
+ gmx_swapcoords_t si_priv; /* swap private data accessible in
+ * swapcoords.c */
+} t_swapcoords;
+
typedef struct {
int type; /* type of AdResS simulation */
int nstlist; /* number of steps before pairlist is generated */
int ndelta; /* number of cells per rlong */
int nstcomm; /* number of steps after which center of mass */
- /* motion is removed */
+ /* motion is removed */
int comm_mode; /* Center of mass motion removal algorithm */
- int nstcheckpoint; /* checkpointing frequency */
int nstlog; /* number of steps after which print to logfile */
int nstxout; /* number of steps after which X is output */
int nstvout; /* id. for V */
real ewald_rtol_lj; /* Real space tolerance for LJ-Ewald */
int ewald_geometry; /* normal/3d ewald, or pseudo-2d LR corrections */
real epsilon_surface; /* Epsilon for PME dipole correction */
- gmx_bool bOptFFT; /* optimize the fft plan at start */
int ljpme_combination_rule; /* Type of combination rule in LJ-PME */
int ePBC; /* Type of periodic boundary conditions */
int bPeriodicMols; /* Periodic molecules */
real orires_fc; /* force constant for orientational restraints */
real orires_tau; /* time constant for memory function in orires */
int nstorireout; /* frequency of writing tr(SD) to enx */
- real dihre_fc; /* force constant for dihedral restraints (obsolete) */
real em_stepsize; /* The stepsize for updating */
real em_tol; /* The tolerance */
int niter; /* Number of iterations for convergence of */
int nLincsIter; /* Number of iterations in the final Lincs step */
gmx_bool bShakeSOR; /* Use successive overrelaxation for shake */
real bd_fric; /* Friction coefficient for BD (amu/ps) */
- int ld_seed; /* Random seed for SD and BD */
+ gmx_int64_t ld_seed; /* Random seed for SD and BD */
int nwall; /* The number of walls */
int wall_type; /* The type of walls */
real wall_r_linpot; /* The potentail is linear for r<=wall_r_linpot */
t_pull *pull; /* The data for center of mass pulling */
gmx_bool bRot; /* Calculate enforced rotation potential(s)? */
t_rot *rot; /* The data for enforced rotation potentials */
+ int eSwapCoords; /* Do ion/water position exchanges (CompEL)? */
+ t_swapcoords *swap;
+ gmx_bool bIMD; /* Allow interactive MD sessions for this .tpr? */
+ t_IMD *imd; /* Interactive molecular dynamics */
real cos_accel; /* Acceleration for viscosity calculation */
tensor deform; /* Triclinic deformation velocities (nm/ps) */
int userint1; /* User determined parameters */