This file is indexed.

/usr/include/gromacs/legacyheaders/types/inputrec.h is in libgromacs-dev 5.1.2-1ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
/*
 * This file is part of the GROMACS molecular simulation package.
 *
 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
 * Copyright (c) 2001-2004, The GROMACS development team.
 * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
 * and including many others, as listed in the AUTHORS file in the
 * top-level source directory and at http://www.gromacs.org.
 *
 * GROMACS is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1
 * of the License, or (at your option) any later version.
 *
 * GROMACS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with GROMACS; if not, see
 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
 *
 * If you want to redistribute modifications to GROMACS, please
 * consider that scientific software is very special. Version
 * control is crucial - bugs must be traceable. We will be happy to
 * consider code for inclusion in the official distribution, but
 * derived work must not be called official GROMACS. Details are found
 * in the README & COPYING files - if they are missing, get the
 * official version at http://www.gromacs.org.
 *
 * To help us fund GROMACS development, we humbly ask that you cite
 * the research papers on the package. Check out http://www.gromacs.org.
 */
#ifndef _inputrec_h_
#define _inputrec_h_

#include <stdio.h>

#include "gromacs/legacyheaders/types/enums.h"
#include "gromacs/legacyheaders/types/simple.h"
#include "gromacs/swap/enums.h"

#ifdef __cplusplus
extern "C" {
#endif


typedef struct {
    int   n;    /* Number of terms				*/
    real *a;    /* Coeffients (V / nm )                     */
    real *phi;  /* Phase angles					*/
} t_cosines;

typedef struct {
    real E0;            /* Field strength (V/nm)                        */
    real omega;         /* Frequency (1/ps)                             */
    real t0;            /* Centre of the Gaussian pulse (ps)            */
    real sigma;         /* Width of the Gaussian pulse (FWHM) (ps)      */
} t_efield;

#define EGP_EXCL  (1<<0)
#define EGP_TABLE (1<<1)

typedef struct {
    int       ngtc;           /* # T-Coupl groups                        */
    int       nhchainlength;  /* # of nose-hoover chains per group       */
    int       ngacc;          /* # Accelerate groups                     */
    int       ngfrz;          /* # Freeze groups                         */
    int       ngener;         /* # Ener groups			    */
    real     *nrdf;           /* Nr of degrees of freedom in a group	    */
    real     *ref_t;          /* Coupling temperature	per group   */
    int      *annealing;      /* No/simple/periodic SA for each group    */
    int      *anneal_npoints; /* Number of annealing time points per grp */
    real    **anneal_time;    /* For ea. group: Time points              */
    real    **anneal_temp;    /* For ea. grp: Temperature at these times */
                              /* Final temp after all intervals is ref_t */
    real     *tau_t;          /* Tau coupling time              */
    rvec     *acc;            /* Acceleration per group		    */
    ivec     *nFreeze;        /* Freeze the group in each direction ?    */
    int      *egp_flags;      /* Exclusions/tables of energy group pairs */

    /* QMMM stuff */
    int          ngQM;         /* nr of QM groups                              */
    int         *QMmethod;     /* Level of theory in the QM calculation        */
    int         *QMbasis;      /* Basisset in the QM calculation               */
    int         *QMcharge;     /* Total charge in the QM region                */
    int         *QMmult;       /* Spin multiplicicty in the QM region          */
    gmx_bool    *bSH;          /* surface hopping (diabatic hop only)          */
    int         *CASorbitals;  /* number of orbiatls in the active space       */
    int         *CASelectrons; /* number of electrons in the active space      */
    real        *SAon;         /* at which gap (A.U.) the SA is switched on    */
    real        *SAoff;
    int         *SAsteps;      /* in how many steps SA goes from 1-1 to 0.5-0.5*/
    gmx_bool    *bOPT;
    gmx_bool    *bTS;
} t_grpopts;

typedef struct {
    int         nat;        /* Number of atoms in the pull group */
    atom_id    *ind;        /* The global atoms numbers */
    int         nweight;    /* The number of weights (0 or nat) */
    real       *weight;     /* Weights (use all 1 when weight==NULL) */
    atom_id     pbcatom;    /* The reference atom for pbc (global number) */
} t_pull_group;

typedef struct {
    int         group[4];   /* The pull groups, index in group in t_pull */
    int         eType;      /* The pull type: umbrella, constraint, ... */
    int         eGeom;      /* The pull geometry */
    ivec        dim;        /* Used to select components for constraint */
    rvec        origin;     /* The origin for the absolute reference */
    rvec        vec;        /* The pull vector, direction or position */
    gmx_bool    bStart;     /* Set init based on the initial structure */
    real        init;       /* Initial reference displacement */
    real        rate;       /* Rate of motion (nm/ps) */
    real        k;          /* force constant */
    real        kB;         /* force constant for state B */
} t_pull_coord;

typedef struct {
    int   eSimTempScale; /* simulated temperature scaling; linear or exponential */
    real  simtemp_low;   /* the low temperature for simulated tempering  */
    real  simtemp_high;  /* the high temperature for simulated tempering */
    real *temperatures;  /* the range of temperatures used for simulated tempering */
} t_simtemp;

typedef struct {
    int    nstdhdl;                 /* The frequency for calculating dhdl           */
    double init_lambda;             /* fractional value of lambda (usually will use
                                       init_fep_state, this will only be for slow growth,
                                       and for legacy free energy code. Only has a
                                       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) */
    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
                                       calculate the energy for in up and down directions
                                       (-1 for all) */
    int      lambda_start_n;        /* The first lambda to calculate energies for */
    int      lambda_stop_n;         /* The last lambda +1 to calculate energies for */
    real     sc_alpha;              /* free energy soft-core parameter                   */
    int      sc_power;              /* lambda power for soft-core interactions           */
    real     sc_r_power;            /* r power for soft-core interactions                */
    real     sc_sigma;              /* free energy soft-core sigma when c6 or c12=0      */
    real     sc_sigma_min;          /* free energy soft-core sigma for ?????             */
    gmx_bool bScCoul;               /* use softcore for the coulomb portion as well (default FALSE) */
    gmx_bool separate_dvdl[efptNR]; /* whether to print the dvdl term associated with
                                       this term; if it is not specified as separate,
                                       it is lumped with the FEP term */
    int    separate_dhdl_file;      /* whether to write a separate dhdl.xvg file
                                       note: NOT a gmx_bool, but an enum */
    int    dhdl_derivatives;        /* whether to calculate+write dhdl derivatives
                                       note: NOT a gmx_bool, but an enum */
    int    dh_hist_size;            /* The maximum table size for the dH histogram */
    double dh_hist_spacing;         /* The spacing for the dH histogram */
} t_lambda;

typedef struct {
    int      nstexpanded;         /* The frequency of expanded ensemble state changes */
    int      elamstats;           /* which type of move updating do we use for lambda monte carlo (or no for none) */
    int      elmcmove;            /* what move set will be we using for state space moves */
    int      elmceq;              /* the method we use to decide of we have equilibrated the weights */
    int      equil_n_at_lam;      /* the minumum number of samples at each lambda for deciding whether we have reached a minimum */
    real     equil_wl_delta;      /* WL delta at which we stop equilibrating weights */
    real     equil_ratio;         /* use the ratio of weights (ratio of minimum to maximum) to decide when to stop equilibrating */
    int      equil_steps;         /* after equil_steps steps we stop equilibrating the weights */
    int      equil_samples;       /* after equil_samples total samples (steps/nstfep), we stop equilibrating the weights */
    int      lmc_seed;            /* random number seed for lambda mc switches */
    gmx_bool minvar;              /* whether to use minumum variance weighting */
    int      minvarmin;           /* the number of samples needed before kicking into minvar routine */
    real     minvar_const;        /* the offset for the variance in MinVar */
    int      c_range;             /* range of cvalues used for BAR */
    gmx_bool bSymmetrizedTMatrix; /* whether to print symmetrized matrices */
    int      nstTij;              /* How frequently to print the transition matrices */
    int      lmc_repeats;         /* number of repetitions in the MC lambda jumps */  /*MRS -- VERIFY THIS */
    int      lmc_forced_nstart;   /* minimum number of samples for each state before free sampling */ /* MRS -- VERIFY THIS! */
    int      gibbsdeltalam;       /* distance in lambda space for the gibbs interval */
    real     wl_scale;            /* scaling factor for wang-landau */
    real     wl_ratio;            /* ratio between largest and smallest number for freezing the weights */
    real     init_wl_delta;       /* starting delta for wang-landau */
    gmx_bool bWLoneovert;         /* use one over t convergece for wang-landau when the delta get sufficiently small */
    gmx_bool bInit_weights;       /* did we initialize the weights? TODO: REMOVE FOR 5.0, no longer needed with new logic */
    real     mc_temp;             /* To override the main temperature, or define it if it's not defined */
    real    *init_lambda_weights; /* user-specified initial weights to start with  */
} t_expanded;

typedef struct {
    int            ngroup;         /* number of pull groups */
    int            ncoord;         /* number of pull coordinates */
    real           cylinder_r;     /* radius of cylinder for dynamic COM */
    real           constr_tol;     /* absolute tolerance for constraints in (nm) */
    gmx_bool       bPrintCOM1;     /* Print coordinates of COM 1 for each coord */
    gmx_bool       bPrintCOM2;     /* Print coordinates of COM 2 for each coord */
    gmx_bool       bPrintRefValue; /* Print the reference value for each coord */
    gmx_bool       bPrintComp;     /* Print cartesian components for each coord with geometry=distance */
    int            nstxout;        /* Output frequency for pull x */
    int            nstfout;        /* Output frequency for pull f */

    t_pull_group  *group;          /* groups to pull/restrain/etc/ */
    t_pull_coord  *coord;          /* the pull coordinates */
} pull_params_t;

/* Abstract type for COM pull caclulations only defined in the pull module */
struct pull_t;


/* Abstract types for enforced rotation only defined in pull_rotation.c       */
typedef struct gmx_enfrot *gmx_enfrot_t;
typedef struct gmx_enfrotgrp *gmx_enfrotgrp_t;

typedef struct {
    int         eType;             /* Rotation type for this group                  */
    int         bMassW;            /* Use mass-weighed positions?                   */
    int         nat;               /* Number of atoms in the group                  */
    atom_id    *ind;               /* The global atoms numbers                      */
    rvec       *x_ref;             /* The reference positions                       */
    rvec        vec;               /* The normalized rotation vector                */
    real        rate;              /* Rate of rotation (degree/ps)                  */
    real        k;                 /* Force constant (kJ/(mol nm^2)                 */
    rvec        pivot;             /* Pivot point of rotation axis (nm)             */
    int         eFittype;          /* Type of fit to determine actual group angle   */
    int         PotAngle_nstep;    /* Number of angles around the reference angle
                                      for which the rotation potential is also
                                      evaluated (for fit type 'potential' only)     */
    real            PotAngle_step; /* Distance between two angles in degrees (for
                                      fit type 'potential' only)                    */
    real            slab_dist;     /* Slab distance (nm)                            */
    real            min_gaussian;  /* Minimum value the gaussian must have so that
                                      the force is actually evaluated               */
    real            eps;           /* Additive constant for radial motion2 and
                                      flexible2 potentials (nm^2)                   */
    gmx_enfrotgrp_t enfrotgrp;     /* Stores non-inputrec rotation data per group   */
} t_rotgrp;

typedef struct {
    int          ngrp;       /* Number of rotation groups                     */
    int          nstrout;    /* Output frequency for main rotation outfile    */
    int          nstsout;    /* Output frequency for per-slab data            */
    t_rotgrp    *grp;        /* Groups to rotate                              */
    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 t_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         */
    gmx_bool bchempot_dx;    /*true:interaction table format input is F=-dmu/dx   false: dmu_dwp  */
    gmx_bool btf_full_box;   /* true: appy therm force everywhere in the box according to table false: only in hybrid region */
    real     const_wf;       /* value of weighting function for eAdressConst */
    real     ex_width;       /* center of the explicit zone                  */
    real     hy_width;       /* width of the hybrid zone                     */
    int      icor;           /* type of interface correction                 */
    int      site;           /* AdResS CG site location                      */
    rvec     refs;           /* Coordinates for AdResS reference             */
    real     ex_forcecap;    /* in the hybrid zone, cap forces large then this to adress_ex_forcecap */
    gmx_bool do_hybridpairs; /* If true pair interaction forces are also scaled in an adress way*/

    int    * tf_table_index; /* contains mapping of energy group index -> i-th adress tf table*/
    int      n_tf_grps;
    int     *group_explicit;
    int      n_energy_grps;
} t_adress;

typedef struct {
    int             eI;                      /* Integration method                 */
    gmx_int64_t     nsteps;                  /* number of steps to be taken			*/
    int             simulation_part;         /* Used in checkpointing to separate chunks */
    gmx_int64_t     init_step;               /* start at a stepcount >0 (used w. convert-tpr)    */
    int             nstcalcenergy;           /* frequency of energy calc. and T/P coupl. upd.	*/
    int             cutoff_scheme;           /* group or verlet cutoffs     */
    int             ns_type;                 /* which ns method should we use?               */
    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				*/
    int             comm_mode;               /* Center of mass motion removal algorithm      */
    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					*/
    int             nstfout;                 /* id. for F					*/
    int             nstenergy;               /* number of steps after which energies printed */
    int             nstxout_compressed;      /* id. for compressed trj (.xtc,.tng)           */
    double          init_t;                  /* initial time (ps)              */
    double          delta_t;                 /* time step (ps)				*/
    real            x_compression_precision; /* precision of x in compressed trajectory file */
    real            fourier_spacing;         /* requested fourier_spacing, when nk? not set  */
    int             nkx, nky, nkz;           /* number of k vectors in each spatial dimension*/
                                             /* for fourier methods for long range electrost.*/
    int             pme_order;               /* interpolation order for PME                  */
    real            ewald_rtol;              /* Real space tolerance for Ewald, determines   */
                                             /* the real/reciprocal space relative weight    */
    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            */
    int             ljpme_combination_rule;  /* Type of combination rule in LJ-PME          */
    int             ePBC;                    /* Type of periodic boundary conditions		*/
    int             bPeriodicMols;           /* Periodic molecules                           */
    gmx_bool        bContinuation;           /* Continuation run: starting state is correct	*/
    int             etc;                     /* temperature coupling               */
    int             nsttcouple;              /* interval in steps for temperature coupling   */
    gmx_bool        bPrintNHChains;          /* whether to print nose-hoover chains        */
    int             epc;                     /* pressure coupling                            */
    int             epct;                    /* pressure coupling type			*/
    int             nstpcouple;              /* interval in steps for pressure coupling      */
    real            tau_p;                   /* pressure coupling time (ps)			*/
    tensor          ref_p;                   /* reference pressure (kJ/(mol nm^3))		*/
    tensor          compress;                /* compressability ((mol nm^3)/kJ)        */
    int             refcoord_scaling;        /* How to scale absolute reference coordinates  */
    rvec            posres_com;              /* The COM of the posres atoms                  */
    rvec            posres_comB;             /* The B-state COM of the posres atoms          */
    int             andersen_seed;           /* Random seed for Andersen thermostat (obsolete) */
    real            verletbuf_tol;           /* Per atom pair energy drift tolerance (kJ/mol/ps/atom) for list buffer  */
    real            rlist;                   /* short range pairlist cut-off (nm)		*/
    real            rlistlong;               /* long range pairlist cut-off (nm)		*/
    int             nstcalclr;               /* Frequency of evaluating direct space long-range interactions */
    real            rtpi;                    /* Radius for test particle insertion           */
    int             coulombtype;             /* Type of electrostatics treatment             */
    int             coulomb_modifier;        /* Modify the Coulomb interaction              */
    real            rcoulomb_switch;         /* Coulomb switch range start (nm)		*/
    real            rcoulomb;                /* Coulomb cutoff (nm)		                */
    real            epsilon_r;               /* relative dielectric constant                 */
    real            epsilon_rf;              /* relative dielectric constant of the RF       */
    int             implicit_solvent;        /* No (=explicit water), or GBSA solvent models */
    int             gb_algorithm;            /* Algorithm to use for calculation Born radii  */
    int             nstgbradii;              /* Frequency of updating Generalized Born radii */
    real            rgbradii;                /* Cutoff for GB radii calculation              */
    real            gb_saltconc;             /* Salt concentration (M) for GBSA models       */
    real            gb_epsilon_solvent;      /* dielectric coeff. of implicit solvent     */
    real            gb_obc_alpha;            /* 1st scaling factor for Bashford-Case GB      */
    real            gb_obc_beta;             /* 2nd scaling factor for Bashford-Case GB      */
    real            gb_obc_gamma;            /* 3rd scaling factor for Bashford-Case GB      */
    real            gb_dielectric_offset;    /* Dielectric offset for Still/HCT/OBC     */
    int             sa_algorithm;            /* Algorithm for SA part of GBSA                */
    real            sa_surface_tension;      /* Energy factor for SA part of GBSA */
    int             vdwtype;                 /* Type of Van der Waals treatment              */
    int             vdw_modifier;            /* Modify the VdW interaction                   */
    real            rvdw_switch;             /* Van der Waals switch range start (nm)        */
    real            rvdw;                    /* Van der Waals cutoff (nm)	        */
    int             eDispCorr;               /* Perform Long range dispersion corrections    */
    real            tabext;                  /* Extension of the table beyond the cut-off,   *
                                              * as well as the table length for 1-4 interac. */
    real            shake_tol;               /* tolerance for shake				*/
    int             efep;                    /* free energy calculations                     */
    t_lambda       *fepvals;                 /* Data for the FEP state                       */
    gmx_bool        bSimTemp;                /* Whether to do simulated tempering            */
    t_simtemp      *simtempvals;             /* Variables for simulated tempering            */
    gmx_bool        bExpanded;               /* Whether expanded ensembles are used          */
    t_expanded     *expandedvals;            /* Expanded ensemble parameters              */
    int             eDisre;                  /* Type of distance restraining                 */
    real            dr_fc;                   /* force constant for ta_disre			*/
    int             eDisreWeighting;         /* type of weighting of pairs in one restraints	*/
    gmx_bool        bDisreMixed;             /* Use comb of time averaged and instan. viol's	*/
    int             nstdisreout;             /* frequency of writing pair distances to enx   */
    real            dr_tau;                  /* time constant for memory function in disres    */
    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            em_stepsize;             /* The stepsize for updating			*/
    real            em_tol;                  /* The tolerance				*/
    int             niter;                   /* Number of iterations for convergence of      */
                                             /* steepest descent in relax_shells             */
    real            fc_stepsize;             /* Stepsize for directional minimization        */
                                             /* in relax_shells                              */
    int             nstcgsteep;              /* number of steps after which a steepest       */
                                             /* descents step is done while doing cg         */
    int             nbfgscorr;               /* Number of corrections to the hessian to keep */
    int             eConstrAlg;              /* Type of constraint algorithm                 */
    int             nProjOrder;              /* Order of the LINCS Projection Algorithm      */
    real            LincsWarnAngle;          /* If bond rotates more than %g degrees, warn   */
    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)         */
    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 */
    int             wall_atomtype[2];        /* The atom type for walls                      */
    real            wall_density[2];         /* Number density for walls                     */
    real            wall_ewald_zfac;         /* Scaling factor for the box for Ewald         */
    gmx_bool        bPull;                   /* Do we do COM pulling?                        */
    pull_params_t  *pull;                    /* The data for center of mass pulling          */
    struct pull_t  *pull_work;               /* The COM pull force calculation data structure; TODO this pointer should live somewhere else */

    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                   */
    int             userint2;
    int             userint3;
    int             userint4;
    real            userreal1;
    real            userreal2;
    real            userreal3;
    real            userreal4;
    t_grpopts       opts;          /* Group options				*/
    t_cosines       ex[DIM];       /* Electric field stuff	(spatial part)		*/
    t_cosines       et[DIM];       /* Electric field stuff	(time part)		*/
    gmx_bool        bQMMM;         /* QM/MM calculation                            */
    int             QMconstraints; /* constraints on QM bonds                      */
    int             QMMMscheme;    /* Scheme: ONIOM or normal                      */
    real            scalefactor;   /* factor for scaling the MM charges in QM calc.*/
                                   /* parameter needed for AdResS simulation       */
    gmx_bool        bAdress;       /* Is AdResS enabled ? */
    t_adress       *adress;        /* The data for adress simulations */
} t_inputrec;

#define DEFORM(ir) ((ir).deform[XX][XX] != 0 || (ir).deform[YY][YY] != 0 || (ir).deform[ZZ][ZZ] != 0 || (ir).deform[YY][XX] != 0 || (ir).deform[ZZ][XX] != 0 || (ir).deform[ZZ][YY] != 0)

#define DYNAMIC_BOX(ir) ((ir).epc != epcNO || (ir).eI == eiTPI || DEFORM(ir))

#define PRESERVE_SHAPE(ir) ((ir).epc != epcNO && (ir).deform[XX][XX] == 0 && ((ir).epct == epctISOTROPIC || (ir).epct == epctSEMIISOTROPIC))

#define NEED_MUTOT(ir) (((ir).coulombtype == eelEWALD || EEL_PME((ir).coulombtype)) && ((ir).ewald_geometry == eewg3DC || (ir).epsilon_surface != 0))

#define IR_TWINRANGE(ir) ((ir).rlist > 0 && ((ir).rlistlong == 0 || (ir).rlistlong > (ir).rlist))

#define IR_ELEC_FIELD(ir) ((ir).ex[XX].n > 0 || (ir).ex[YY].n > 0 || (ir).ex[ZZ].n > 0)

#define IR_EXCL_FORCES(ir) (EEL_FULL((ir).coulombtype) || (EEL_RF((ir).coulombtype) && (ir).coulombtype != eelRF_NEC) || (ir).implicit_solvent != eisNO)
/* use pointer definitions of ir here, since that's what's usually used in the code */
#define IR_NPT_TROTTER(ir) ((((ir)->eI == eiVV) || ((ir)->eI == eiVVAK)) && (((ir)->epc == epcMTTK) && ((ir)->etc == etcNOSEHOOVER)))

#define IR_NVT_TROTTER(ir) ((((ir)->eI == eiVV) || ((ir)->eI == eiVVAK)) && ((!((ir)->epc == epcMTTK)) && ((ir)->etc == etcNOSEHOOVER)))

#define IR_NPH_TROTTER(ir) ((((ir)->eI == eiVV) || ((ir)->eI == eiVVAK)) && (((ir)->epc == epcMTTK) && (!(((ir)->etc == etcNOSEHOOVER)))))

#ifdef __cplusplus
}
#endif


#endif