2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team.
6 * Copyright (c) 2013,2014, by the GROMACS development team, led by
7 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8 * and including many others, as listed in the AUTHORS file in the
9 * top-level source directory and at http://www.gromacs.org.
11 * GROMACS is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation; either version 2.1
14 * of the License, or (at your option) any later version.
16 * GROMACS is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with GROMACS; if not, see
23 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 * If you want to redistribute modifications to GROMACS, please
27 * consider that scientific software is very special. Version
28 * control is crucial - bugs must be traceable. We will be happy to
29 * consider code for inclusion in the official distribution, but
30 * derived work must not be called official GROMACS. Details are found
31 * in the README & COPYING files - if they are missing, get the
32 * official version at http://www.gromacs.org.
34 * To help us fund GROMACS development, we humbly ask that you cite
35 * the research papers on the package. Check out http://www.gromacs.org.
43 #include "../sysstuff.h"
44 #include "../../swap/enums.h"
52 int n; /* Number of terms */
53 real *a; /* Coeffients (V / nm ) */
54 real *phi; /* Phase angles */
58 real E0; /* Field strength (V/nm) */
59 real omega; /* Frequency (1/ps) */
60 real t0; /* Centre of the Gaussian pulse (ps) */
61 real sigma; /* Width of the Gaussian pulse (FWHM) (ps) */
64 #define EGP_EXCL (1<<0)
65 #define EGP_TABLE (1<<1)
68 int ngtc; /* # T-Coupl groups */
69 int nhchainlength; /* # of nose-hoover chains per group */
70 int ngacc; /* # Accelerate groups */
71 int ngfrz; /* # Freeze groups */
72 int ngener; /* # Ener groups */
73 real *nrdf; /* Nr of degrees of freedom in a group */
74 real *ref_t; /* Coupling temperature per group */
75 int *annealing; /* No/simple/periodic SA for each group */
76 int *anneal_npoints; /* Number of annealing time points per grp */
77 real **anneal_time; /* For ea. group: Time points */
78 real **anneal_temp; /* For ea. grp: Temperature at these times */
79 /* Final temp after all intervals is ref_t */
80 real *tau_t; /* Tau coupling time */
81 rvec *acc; /* Acceleration per group */
82 ivec *nFreeze; /* Freeze the group in each direction ? */
83 int *egp_flags; /* Exclusions/tables of energy group pairs */
86 int ngQM; /* nr of QM groups */
87 int *QMmethod; /* Level of theory in the QM calculation */
88 int *QMbasis; /* Basisset in the QM calculation */
89 int *QMcharge; /* Total charge in the QM region */
90 int *QMmult; /* Spin multiplicicty in the QM region */
91 gmx_bool *bSH; /* surface hopping (diabatic hop only) */
92 int *CASorbitals; /* number of orbiatls in the active space */
93 int *CASelectrons; /* number of electrons in the active space */
94 real *SAon; /* at which gap (A.U.) the SA is switched on */
96 int *SAsteps; /* in how many steps SA goes from 1-1 to 0.5-0.5*/
102 epgrppbcNONE, epgrppbcREFAT, epgrppbcCOS
106 int nat; /* Number of atoms in the pull group */
107 atom_id *ind; /* The global atoms numbers */
108 int nat_loc; /* Number of local pull atoms */
109 int nalloc_loc; /* Allocation size for ind_loc and weight_loc */
110 atom_id *ind_loc; /* Local pull indices */
111 int nweight; /* The number of weights (0 or nat) */
112 real *weight; /* Weights (use all 1 when weight==NULL) */
113 real *weight_loc; /* Weights for the local indices */
114 int epgrppbc; /* The type of pbc for this pull group, see enum above */
115 atom_id pbcatom; /* The reference atom for pbc (global number) */
117 /* Variables not present in mdp, but used at run time */
118 real wscale; /* scaling factor for the weights: sum w m/sum w w m */
119 real invtm; /* inverse total mass of the group: 1/wscale sum w m */
120 dvec x; /* center of mass before update */
121 dvec xp; /* center of mass after update before constraining */
125 int group[2]; /* The pull groups, index in group in t_pull */
126 rvec origin; /* The origin for the absolute reference */
127 rvec vec; /* The pull vector, direction or position */
128 real init; /* Initial reference displacement */
129 real rate; /* Rate of motion (nm/ps) */
130 real k; /* force constant */
131 real kB; /* force constant for state B */
133 /* Variables not present in mdp, but used at run time */
134 dvec dr; /* The distance from the reference group */
135 double f_scal; /* Scalar force for directional pulling */
136 dvec f; /* force due to the pulling/constraining */
140 int eSimTempScale; /* simulated temperature scaling; linear or exponential */
141 real simtemp_low; /* the low temperature for simulated tempering */
142 real simtemp_high; /* the high temperature for simulated tempering */
143 real *temperatures; /* the range of temperatures used for simulated tempering */
147 int nstdhdl; /* The frequency for calculating dhdl */
148 double init_lambda; /* fractional value of lambda (usually will use
149 init_fep_state, this will only be for slow growth,
150 and for legacy free energy code. Only has a
151 valid value if positive) */
152 int init_fep_state; /* the initial number of the state */
153 double delta_lambda; /* change of lambda per time step (fraction of (0.1) */
154 gmx_bool bPrintEnergy; /* Whether to print the energy in the dhdl */
155 int n_lambda; /* The number of foreign lambda points */
156 double **all_lambda; /* The array of all lambda values */
157 int lambda_neighbors; /* The number of neighboring lambda states to
158 calculate the energy for in up and down directions
160 int lambda_start_n; /* The first lambda to calculate energies for */
161 int lambda_stop_n; /* The last lambda +1 to calculate energies for */
162 real sc_alpha; /* free energy soft-core parameter */
163 int sc_power; /* lambda power for soft-core interactions */
164 real sc_r_power; /* r power for soft-core interactions */
165 real sc_sigma; /* free energy soft-core sigma when c6 or c12=0 */
166 real sc_sigma_min; /* free energy soft-core sigma for ????? */
167 gmx_bool bScCoul; /* use softcore for the coulomb portion as well (default FALSE) */
168 gmx_bool separate_dvdl[efptNR]; /* whether to print the dvdl term associated with
169 this term; if it is not specified as separate,
170 it is lumped with the FEP term */
171 int separate_dhdl_file; /* whether to write a separate dhdl.xvg file
172 note: NOT a gmx_bool, but an enum */
173 int dhdl_derivatives; /* whether to calculate+write dhdl derivatives
174 note: NOT a gmx_bool, but an enum */
175 int dh_hist_size; /* The maximum table size for the dH histogram */
176 double dh_hist_spacing; /* The spacing for the dH histogram */
180 int nstexpanded; /* The frequency of expanded ensemble state changes */
181 int elamstats; /* which type of move updating do we use for lambda monte carlo (or no for none) */
182 int elmcmove; /* what move set will be we using for state space moves */
183 int elmceq; /* the method we use to decide of we have equilibrated the weights */
184 int equil_n_at_lam; /* the minumum number of samples at each lambda for deciding whether we have reached a minimum */
185 real equil_wl_delta; /* WL delta at which we stop equilibrating weights */
186 real equil_ratio; /* use the ratio of weights (ratio of minimum to maximum) to decide when to stop equilibrating */
187 int equil_steps; /* after equil_steps steps we stop equilibrating the weights */
188 int equil_samples; /* after equil_samples total samples (steps/nstfep), we stop equilibrating the weights */
189 int lmc_seed; /* random number seed for lambda mc switches */
190 gmx_bool minvar; /* whether to use minumum variance weighting */
191 int minvarmin; /* the number of samples needed before kicking into minvar routine */
192 real minvar_const; /* the offset for the variance in MinVar */
193 int c_range; /* range of cvalues used for BAR */
194 gmx_bool bSymmetrizedTMatrix; /* whether to print symmetrized matrices */
195 int nstTij; /* How frequently to print the transition matrices */
196 int lmc_repeats; /* number of repetitions in the MC lambda jumps */ /*MRS -- VERIFY THIS */
197 int lmc_forced_nstart; /* minimum number of samples for each state before free sampling */ /* MRS -- VERIFY THIS! */
198 int gibbsdeltalam; /* distance in lambda space for the gibbs interval */
199 real wl_scale; /* scaling factor for wang-landau */
200 real wl_ratio; /* ratio between largest and smallest number for freezing the weights */
201 real init_wl_delta; /* starting delta for wang-landau */
202 gmx_bool bWLoneovert; /* use one over t convergece for wang-landau when the delta get sufficiently small */
203 gmx_bool bInit_weights; /* did we initialize the weights? TODO: REMOVE FOR 5.0, no longer needed with new logic */
204 real mc_temp; /* To override the main temperature, or define it if it's not defined */
205 real *init_lambda_weights; /* user-specified initial weights to start with */
209 int ngroup; /* number of pull groups */
210 int ncoord; /* number of pull coordinates */
211 int eGeom; /* pull geometry */
212 ivec dim; /* used to select components for constraint */
213 real cyl_r1; /* radius of cylinder for dynamic COM */
214 real cyl_r0; /* radius of cylinder including switch length */
215 real constr_tol; /* absolute tolerance for constraints in (nm) */
216 gmx_bool bPrintRef; /* Print coordinates of the first group in each coord */
217 int nstxout; /* Output frequency for pull x */
218 int nstfout; /* Output frequency for pull f */
219 int ePBC; /* the boundary conditions */
220 int npbcdim; /* do pbc in dims 0 <= dim < npbcdim */
221 gmx_bool bRefAt; /* do we need reference atoms for a group COM ? */
222 int cosdim; /* dimension for cosine weighting, -1 if none */
223 gmx_bool bVirial; /* do we need to add the pull virial? */
224 t_pull_group *group; /* groups to pull/restrain/etc/ */
225 t_pull_coord *coord; /* the pull coordinates */
227 /* Variables not present in mdp, but used at run time */
228 t_pull_group *dyna; /* dynamic groups for use with local constraints */
229 rvec *rbuf; /* COM calculation buffer */
230 dvec *dbuf; /* COM calculation buffer */
231 double *dbuf_cyl; /* cylinder ref. groups COM calculation buffer */
233 FILE *out_x; /* output file for pull data */
234 FILE *out_f; /* output file for pull data */
238 /* Abstract types for enforced rotation only defined in pull_rotation.c */
239 typedef struct gmx_enfrot *gmx_enfrot_t;
240 typedef struct gmx_enfrotgrp *gmx_enfrotgrp_t;
243 int eType; /* Rotation type for this group */
244 int bMassW; /* Use mass-weighed positions? */
245 int nat; /* Number of atoms in the group */
246 atom_id *ind; /* The global atoms numbers */
247 rvec *x_ref; /* The reference positions */
248 rvec vec; /* The normalized rotation vector */
249 real rate; /* Rate of rotation (degree/ps) */
250 real k; /* Force constant (kJ/(mol nm^2) */
251 rvec pivot; /* Pivot point of rotation axis (nm) */
252 int eFittype; /* Type of fit to determine actual group angle */
253 int PotAngle_nstep; /* Number of angles around the reference angle
254 for which the rotation potential is also
255 evaluated (for fit type 'potential' only) */
256 real PotAngle_step; /* Distance between two angles in degrees (for
257 fit type 'potential' only) */
258 real slab_dist; /* Slab distance (nm) */
259 real min_gaussian; /* Minimum value the gaussian must have so that
260 the force is actually evaluated */
261 real eps; /* Additive constant for radial motion2 and
262 flexible2 potentials (nm^2) */
263 gmx_enfrotgrp_t enfrotgrp; /* Stores non-inputrec rotation data per group */
267 int ngrp; /* Number of rotation groups */
268 int nstrout; /* Output frequency for main rotation outfile */
269 int nstsout; /* Output frequency for per-slab data */
270 t_rotgrp *grp; /* Groups to rotate */
271 gmx_enfrot_t enfrot; /* Stores non-inputrec enforced rotation data */
274 /* Abstract type for IMD only defined in IMD.c */
275 typedef struct gmx_IMD *t_gmx_IMD;
278 int nat; /* Number of interactive atoms */
279 atom_id *ind; /* The global indices of the interactive atoms */
280 t_gmx_IMD setup; /* Stores non-inputrec IMD data */
283 /* Abstract types for position swapping only defined in swapcoords.c */
284 typedef struct swap *gmx_swapcoords_t;
287 int nstswap; /* Every how many steps a swap is attempted? */
288 int nat; /* Number of atoms in the ion group */
289 int nat_split[2]; /* Number of atoms in the split group */
290 int nat_sol; /* Number of atoms in the solvent group */
291 atom_id *ind; /* The global ion group atoms numbers */
292 atom_id *ind_split[2]; /* Split groups for compartment partitioning */
293 atom_id *ind_sol; /* The global solvent group atom numbers */
294 gmx_bool massw_split[2]; /* Use mass-weighted positions in split group? */
295 real cyl0r, cyl1r; /* Split cylinders defined by radius, upper and */
296 real cyl0u, cyl1u; /* ... lower extension. The split cylinders de- */
297 real cyl0l, cyl1l; /* ... fine the channels and are each anchored */
298 /* ... in the center of the split group */
299 int nanions[eCompNR]; /* Requested number of anions and */
300 int nAverage; /* Coupling constant (nr of swap attempt steps) */
301 real threshold; /* Ion counts may deviate from the requested
302 values by +-threshold before a swap is done */
303 int ncations[eCompNR]; /* ... cations for both compartments */
304 gmx_swapcoords_t si_priv; /* swap private data accessible in
310 int type; /* type of AdResS simulation */
311 gmx_bool bnew_wf; /* enable new AdResS weighting function */
312 gmx_bool bchempot_dx; /*true:interaction table format input is F=-dmu/dx false: dmu_dwp */
313 gmx_bool btf_full_box; /* true: appy therm force everywhere in the box according to table false: only in hybrid region */
314 real const_wf; /* value of weighting function for eAdressConst */
315 real ex_width; /* center of the explicit zone */
316 real hy_width; /* width of the hybrid zone */
317 int icor; /* type of interface correction */
318 int site; /* AdResS CG site location */
319 rvec refs; /* Coordinates for AdResS reference */
320 real ex_forcecap; /* in the hybrid zone, cap forces large then this to adress_ex_forcecap */
321 gmx_bool do_hybridpairs; /* If true pair interaction forces are also scaled in an adress way*/
323 int * tf_table_index; /* contains mapping of energy group index -> i-th adress tf table*/
330 int eI; /* Integration method */
331 gmx_int64_t nsteps; /* number of steps to be taken */
332 int simulation_part; /* Used in checkpointing to separate chunks */
333 gmx_int64_t init_step; /* start at a stepcount >0 (used w. convert-tpr) */
334 int nstcalcenergy; /* frequency of energy calc. and T/P coupl. upd. */
335 int cutoff_scheme; /* group or verlet cutoffs */
336 int ns_type; /* which ns method should we use? */
337 int nstlist; /* number of steps before pairlist is generated */
338 int ndelta; /* number of cells per rlong */
339 int nstcomm; /* number of steps after which center of mass */
340 /* motion is removed */
341 int comm_mode; /* Center of mass motion removal algorithm */
342 int nstcheckpoint; /* checkpointing frequency */
343 int nstlog; /* number of steps after which print to logfile */
344 int nstxout; /* number of steps after which X is output */
345 int nstvout; /* id. for V */
346 int nstfout; /* id. for F */
347 int nstenergy; /* number of steps after which energies printed */
348 int nstxout_compressed; /* id. for compressed trj (.xtc,.tng) */
349 double init_t; /* initial time (ps) */
350 double delta_t; /* time step (ps) */
351 real x_compression_precision; /* precision of x in compressed trajectory file */
352 real fourier_spacing; /* requested fourier_spacing, when nk? not set */
353 int nkx, nky, nkz; /* number of k vectors in each spatial dimension*/
354 /* for fourier methods for long range electrost.*/
355 int pme_order; /* interpolation order for PME */
356 real ewald_rtol; /* Real space tolerance for Ewald, determines */
357 /* the real/reciprocal space relative weight */
358 real ewald_rtol_lj; /* Real space tolerance for LJ-Ewald */
359 int ewald_geometry; /* normal/3d ewald, or pseudo-2d LR corrections */
360 real epsilon_surface; /* Epsilon for PME dipole correction */
361 gmx_bool bOptFFT; /* optimize the fft plan at start */
362 int ljpme_combination_rule; /* Type of combination rule in LJ-PME */
363 int ePBC; /* Type of periodic boundary conditions */
364 int bPeriodicMols; /* Periodic molecules */
365 gmx_bool bContinuation; /* Continuation run: starting state is correct */
366 int etc; /* temperature coupling */
367 int nsttcouple; /* interval in steps for temperature coupling */
368 gmx_bool bPrintNHChains; /* whether to print nose-hoover chains */
369 int epc; /* pressure coupling */
370 int epct; /* pressure coupling type */
371 int nstpcouple; /* interval in steps for pressure coupling */
372 real tau_p; /* pressure coupling time (ps) */
373 tensor ref_p; /* reference pressure (kJ/(mol nm^3)) */
374 tensor compress; /* compressability ((mol nm^3)/kJ) */
375 int refcoord_scaling; /* How to scale absolute reference coordinates */
376 rvec posres_com; /* The COM of the posres atoms */
377 rvec posres_comB; /* The B-state COM of the posres atoms */
378 int andersen_seed; /* Random seed for Andersen thermostat (obsolete) */
379 real verletbuf_tol; /* Per atom pair energy drift tolerance (kJ/mol/ps/atom) for list buffer */
380 real rlist; /* short range pairlist cut-off (nm) */
381 real rlistlong; /* long range pairlist cut-off (nm) */
382 int nstcalclr; /* Frequency of evaluating direct space long-range interactions */
383 real rtpi; /* Radius for test particle insertion */
384 int coulombtype; /* Type of electrostatics treatment */
385 int coulomb_modifier; /* Modify the Coulomb interaction */
386 real rcoulomb_switch; /* Coulomb switch range start (nm) */
387 real rcoulomb; /* Coulomb cutoff (nm) */
388 real epsilon_r; /* relative dielectric constant */
389 real epsilon_rf; /* relative dielectric constant of the RF */
390 int implicit_solvent; /* No (=explicit water), or GBSA solvent models */
391 int gb_algorithm; /* Algorithm to use for calculation Born radii */
392 int nstgbradii; /* Frequency of updating Generalized Born radii */
393 real rgbradii; /* Cutoff for GB radii calculation */
394 real gb_saltconc; /* Salt concentration (M) for GBSA models */
395 real gb_epsilon_solvent; /* dielectric coeff. of implicit solvent */
396 real gb_obc_alpha; /* 1st scaling factor for Bashford-Case GB */
397 real gb_obc_beta; /* 2nd scaling factor for Bashford-Case GB */
398 real gb_obc_gamma; /* 3rd scaling factor for Bashford-Case GB */
399 real gb_dielectric_offset; /* Dielectric offset for Still/HCT/OBC */
400 int sa_algorithm; /* Algorithm for SA part of GBSA */
401 real sa_surface_tension; /* Energy factor for SA part of GBSA */
402 int vdwtype; /* Type of Van der Waals treatment */
403 int vdw_modifier; /* Modify the VdW interaction */
404 real rvdw_switch; /* Van der Waals switch range start (nm) */
405 real rvdw; /* Van der Waals cutoff (nm) */
406 int eDispCorr; /* Perform Long range dispersion corrections */
407 real tabext; /* Extension of the table beyond the cut-off, *
408 * as well as the table length for 1-4 interac. */
409 real shake_tol; /* tolerance for shake */
410 int efep; /* free energy calculations */
411 t_lambda *fepvals; /* Data for the FEP state */
412 gmx_bool bSimTemp; /* Whether to do simulated tempering */
413 t_simtemp *simtempvals; /* Variables for simulated tempering */
414 gmx_bool bExpanded; /* Whether expanded ensembles are used */
415 t_expanded *expandedvals; /* Expanded ensemble parameters */
416 int eDisre; /* Type of distance restraining */
417 real dr_fc; /* force constant for ta_disre */
418 int eDisreWeighting; /* type of weighting of pairs in one restraints */
419 gmx_bool bDisreMixed; /* Use comb of time averaged and instan. viol's */
420 int nstdisreout; /* frequency of writing pair distances to enx */
421 real dr_tau; /* time constant for memory function in disres */
422 real orires_fc; /* force constant for orientational restraints */
423 real orires_tau; /* time constant for memory function in orires */
424 int nstorireout; /* frequency of writing tr(SD) to enx */
425 real dihre_fc; /* force constant for dihedral restraints (obsolete) */
426 real em_stepsize; /* The stepsize for updating */
427 real em_tol; /* The tolerance */
428 int niter; /* Number of iterations for convergence of */
429 /* steepest descent in relax_shells */
430 real fc_stepsize; /* Stepsize for directional minimization */
431 /* in relax_shells */
432 int nstcgsteep; /* number of steps after which a steepest */
433 /* descents step is done while doing cg */
434 int nbfgscorr; /* Number of corrections to the hessian to keep */
435 int eConstrAlg; /* Type of constraint algorithm */
436 int nProjOrder; /* Order of the LINCS Projection Algorithm */
437 real LincsWarnAngle; /* If bond rotates more than %g degrees, warn */
438 int nLincsIter; /* Number of iterations in the final Lincs step */
439 gmx_bool bShakeSOR; /* Use successive overrelaxation for shake */
440 real bd_fric; /* Friction coefficient for BD (amu/ps) */
441 gmx_int64_t ld_seed; /* Random seed for SD and BD */
442 int nwall; /* The number of walls */
443 int wall_type; /* The type of walls */
444 real wall_r_linpot; /* The potentail is linear for r<=wall_r_linpot */
445 int wall_atomtype[2]; /* The atom type for walls */
446 real wall_density[2]; /* Number density for walls */
447 real wall_ewald_zfac; /* Scaling factor for the box for Ewald */
448 int ePull; /* Type of pulling: no, umbrella or constraint */
449 t_pull *pull; /* The data for center of mass pulling */
450 gmx_bool bRot; /* Calculate enforced rotation potential(s)? */
451 t_rot *rot; /* The data for enforced rotation potentials */
452 int eSwapCoords; /* Do ion/water position exchanges (CompEL)? */
454 gmx_bool bIMD; /* Allow interactive MD sessions for this .tpr? */
455 t_IMD *imd; /* Interactive molecular dynamics */
456 real cos_accel; /* Acceleration for viscosity calculation */
457 tensor deform; /* Triclinic deformation velocities (nm/ps) */
458 int userint1; /* User determined parameters */
466 t_grpopts opts; /* Group options */
467 t_cosines ex[DIM]; /* Electric field stuff (spatial part) */
468 t_cosines et[DIM]; /* Electric field stuff (time part) */
469 gmx_bool bQMMM; /* QM/MM calculation */
470 int QMconstraints; /* constraints on QM bonds */
471 int QMMMscheme; /* Scheme: ONIOM or normal */
472 real scalefactor; /* factor for scaling the MM charges in QM calc.*/
473 /* parameter needed for AdResS simulation */
474 gmx_bool bAdress; /* Is AdResS enabled ? */
475 t_adress *adress; /* The data for adress simulations */
478 #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)
480 #define DYNAMIC_BOX(ir) ((ir).epc != epcNO || (ir).eI == eiTPI || DEFORM(ir))
482 #define PRESERVE_SHAPE(ir) ((ir).epc != epcNO && (ir).deform[XX][XX] == 0 && ((ir).epct == epctISOTROPIC || (ir).epct == epctSEMIISOTROPIC))
484 #define NEED_MUTOT(ir) (((ir).coulombtype == eelEWALD || EEL_PME((ir).coulombtype)) && ((ir).ewald_geometry == eewg3DC || (ir).epsilon_surface != 0))
486 #define IR_TWINRANGE(ir) ((ir).rlist > 0 && ((ir).rlistlong == 0 || (ir).rlistlong > (ir).rlist))
488 #define IR_ELEC_FIELD(ir) ((ir).ex[XX].n > 0 || (ir).ex[YY].n > 0 || (ir).ex[ZZ].n > 0)
490 #define IR_EXCL_FORCES(ir) (EEL_FULL((ir).coulombtype) || (EEL_RF((ir).coulombtype) && (ir).coulombtype != eelRF_NEC) || (ir).implicit_solvent != eisNO)
491 /* use pointer definitions of ir here, since that's what's usually used in the code */
492 #define IR_NPT_TROTTER(ir) ((((ir)->eI == eiVV) || ((ir)->eI == eiVVAK)) && (((ir)->epc == epcMTTK) && ((ir)->etc == etcNOSEHOOVER)))
494 #define IR_NVT_TROTTER(ir) ((((ir)->eI == eiVV) || ((ir)->eI == eiVVAK)) && ((!((ir)->epc == epcMTTK)) && ((ir)->etc == etcNOSEHOOVER)))
496 #define IR_NPH_TROTTER(ir) ((((ir)->eI == eiVV) || ((ir)->eI == eiVVAK)) && (((ir)->epc == epcMTTK) && (!(((ir)->etc == etcNOSEHOOVER)))))