} t_rot;
+/* 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 */
gmx_bool bnew_wf; /* enable new AdResS weighting function */
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;
real cos_accel; /* Acceleration for viscosity calculation */
tensor deform; /* Triclinic deformation velocities (nm/ps) */
int userint1; /* User determined parameters */