void pr_inputrec(FILE *fp,int indent,const char *title,t_inputrec *ir, gmx_bool bMDPformat) { const char *infbuf="inf"; int i; if (available(fp,ir,indent,title)) { if (!bMDPformat) indent=pr_title(fp,indent,title); PS("integrator",EI(ir->eI)); PSTEP("nsteps",ir->nsteps); PSTEP("init-step",ir->init_step); PS("ns-type",ENS(ir->ns_type)); PI("nstlist",ir->nstlist); PI("ndelta",ir->ndelta); PI("nstcomm",ir->nstcomm); PS("comm-mode",ECOM(ir->comm_mode)); PI("nstlog",ir->nstlog); PI("nstxout",ir->nstxout); PI("nstvout",ir->nstvout); PI("nstfout",ir->nstfout); PI("nstcalcenergy",ir->nstcalcenergy); PI("nstenergy",ir->nstenergy); PI("nstxtcout",ir->nstxtcout); PR("init-t",ir->init_t); PR("delta-t",ir->delta_t); PR("xtcprec",ir->xtcprec); PI("nkx",ir->nkx); PI("nky",ir->nky); PI("nkz",ir->nkz); PI("pme-order",ir->pme_order); PR("ewald-rtol",ir->ewald_rtol); PR("ewald-geometry",ir->ewald_geometry); PR("epsilon-surface",ir->epsilon_surface); PS("optimize-fft",BOOL(ir->bOptFFT)); PS("ePBC",EPBC(ir->ePBC)); PS("bPeriodicMols",BOOL(ir->bPeriodicMols)); PS("bContinuation",BOOL(ir->bContinuation)); PS("bShakeSOR",BOOL(ir->bShakeSOR)); PS("etc",ETCOUPLTYPE(ir->etc)); PI("nsttcouple",ir->nsttcouple); PS("epc",EPCOUPLTYPE(ir->epc)); PS("epctype",EPCOUPLTYPETYPE(ir->epct)); PI("nstpcouple",ir->nstpcouple); PR("tau-p",ir->tau_p); pr_matrix(fp,indent,"ref-p",ir->ref_p,bMDPformat); pr_matrix(fp,indent,"compress",ir->compress,bMDPformat); PS("refcoord-scaling",EREFSCALINGTYPE(ir->refcoord_scaling)); if (bMDPformat) fprintf(fp,"posres-com = %g %g %g\n",ir->posres_com[XX], ir->posres_com[YY],ir->posres_com[ZZ]); else pr_rvec(fp,indent,"posres-com",ir->posres_com,DIM,TRUE); if (bMDPformat) fprintf(fp,"posres-comB = %g %g %g\n",ir->posres_comB[XX], ir->posres_comB[YY],ir->posres_comB[ZZ]); else pr_rvec(fp,indent,"posres-comB",ir->posres_comB,DIM,TRUE); PI("andersen-seed",ir->andersen_seed); PR("rlist",ir->rlist); PR("rlistlong",ir->rlistlong); PR("rtpi",ir->rtpi); PS("coulombtype",EELTYPE(ir->coulombtype)); PR("rcoulomb-switch",ir->rcoulomb_switch); PR("rcoulomb",ir->rcoulomb); PS("vdwtype",EVDWTYPE(ir->vdwtype)); PR("rvdw-switch",ir->rvdw_switch); PR("rvdw",ir->rvdw); if (ir->epsilon_r != 0) PR("epsilon-r",ir->epsilon_r); else PS("epsilon-r",infbuf); if (ir->epsilon_rf != 0) PR("epsilon-rf",ir->epsilon_rf); else PS("epsilon-rf",infbuf); PR("tabext",ir->tabext); PS("implicit-solvent",EIMPLICITSOL(ir->implicit_solvent)); PS("gb-algorithm",EGBALGORITHM(ir->gb_algorithm)); PR("gb-epsilon-solvent",ir->gb_epsilon_solvent); PI("nstgbradii",ir->nstgbradii); PR("rgbradii",ir->rgbradii); PR("gb-saltconc",ir->gb_saltconc); PR("gb-obc-alpha",ir->gb_obc_alpha); PR("gb-obc-beta",ir->gb_obc_beta); PR("gb-obc-gamma",ir->gb_obc_gamma); PR("gb-dielectric-offset",ir->gb_dielectric_offset); PS("sa-algorithm",ESAALGORITHM(ir->gb_algorithm)); PR("sa-surface-tension",ir->sa_surface_tension); PS("DispCorr",EDISPCORR(ir->eDispCorr)); PS("free-energy",EFEPTYPE(ir->efep)); PR("init-lambda",ir->init_lambda); PR("delta-lambda",ir->delta_lambda); if (!bMDPformat) { PI("n-foreign-lambda",ir->n_flambda); } if (ir->n_flambda > 0) { pr_indent(fp,indent); fprintf(fp,"foreign-lambda%s",bMDPformat ? " = " : ":"); for(i=0; i<ir->n_flambda; i++) { fprintf(fp," %10g",ir->flambda[i]); } fprintf(fp,"\n"); } PR("sc-alpha",ir->sc_alpha); PI("sc-power",ir->sc_power); PR("sc-sigma",ir->sc_sigma); PR("sc-sigma-min",ir->sc_sigma_min); PI("nstdhdl", ir->nstdhdl); PS("separate-dhdl-file", SEPDHDLFILETYPE(ir->separate_dhdl_file)); PS("dhdl-derivatives", DHDLDERIVATIVESTYPE(ir->dhdl_derivatives)); PI("dh-hist-size", ir->dh_hist_size); PD("dh-hist-spacing", ir->dh_hist_spacing); PI("nwall",ir->nwall); PS("wall-type",EWALLTYPE(ir->wall_type)); PI("wall-atomtype[0]",ir->wall_atomtype[0]); PI("wall-atomtype[1]",ir->wall_atomtype[1]); PR("wall-density[0]",ir->wall_density[0]); PR("wall-density[1]",ir->wall_density[1]); PR("wall-ewald-zfac",ir->wall_ewald_zfac); PS("pull",EPULLTYPE(ir->ePull)); if (ir->ePull != epullNO) pr_pull(fp,indent,ir->pull); PS("rotation",BOOL(ir->bRot)); if (ir->bRot) pr_rot(fp,indent,ir->rot); PS("disre",EDISRETYPE(ir->eDisre)); PS("disre-weighting",EDISREWEIGHTING(ir->eDisreWeighting)); PS("disre-mixed",BOOL(ir->bDisreMixed)); PR("dr-fc",ir->dr_fc); PR("dr-tau",ir->dr_tau); PR("nstdisreout",ir->nstdisreout); PR("orires-fc",ir->orires_fc); PR("orires-tau",ir->orires_tau); PR("nstorireout",ir->nstorireout); PR("dihre-fc",ir->dihre_fc); PR("em-stepsize",ir->em_stepsize); PR("em-tol",ir->em_tol); PI("niter",ir->niter); PR("fc-stepsize",ir->fc_stepsize); PI("nstcgsteep",ir->nstcgsteep); PI("nbfgscorr",ir->nbfgscorr); PS("ConstAlg",ECONSTRTYPE(ir->eConstrAlg)); PR("shake-tol",ir->shake_tol); PI("lincs-order",ir->nProjOrder); PR("lincs-warnangle",ir->LincsWarnAngle); PI("lincs-iter",ir->nLincsIter); PR("bd-fric",ir->bd_fric); PI("ld-seed",ir->ld_seed); PR("cos-accel",ir->cos_accel); pr_matrix(fp,indent,"deform",ir->deform,bMDPformat); PS("adress",BOOL(ir->bAdress)); if (ir->bAdress){ PS("adress_type",EADRESSTYPE(ir->adress->type)); PR("adress_const_wf",ir->adress->const_wf); PR("adress_ex_width",ir->adress->ex_width); PR("adress_hy_width",ir->adress->hy_width); PS("adress_interface_correction",EADRESSICTYPE(ir->adress->icor)); PS("adress_site",EADRESSSITETYPE(ir->adress->site)); PR("adress_ex_force_cap",ir->adress->ex_forcecap); PS("adress_do_hybridpairs", BOOL(ir->adress->do_hybridpairs)); pr_rvec(fp,indent,"adress_reference_coords",ir->adress->refs,DIM,TRUE); } PI("userint1",ir->userint1); PI("userint2",ir->userint2); PI("userint3",ir->userint3); PI("userint4",ir->userint4); PR("userreal1",ir->userreal1); PR("userreal2",ir->userreal2); PR("userreal3",ir->userreal3); PR("userreal4",ir->userreal4); pr_grp_opts(fp,indent,"grpopts",&(ir->opts),bMDPformat); pr_cosine(fp,indent,"efield-x",&(ir->ex[XX]),bMDPformat); pr_cosine(fp,indent,"efield-xt",&(ir->et[XX]),bMDPformat); pr_cosine(fp,indent,"efield-y",&(ir->ex[YY]),bMDPformat); pr_cosine(fp,indent,"efield-yt",&(ir->et[YY]),bMDPformat); pr_cosine(fp,indent,"efield-z",&(ir->ex[ZZ]),bMDPformat); pr_cosine(fp,indent,"efield-zt",&(ir->et[ZZ]),bMDPformat); PS("bQMMM",BOOL(ir->bQMMM)); PI("QMconstraints",ir->QMconstraints); PI("QMMMscheme",ir->QMMMscheme); PR("scalefactor",ir->scalefactor); pr_qm_opts(fp,indent,"qm-opts",&(ir->opts)); } }
void init_pull(FILE *fplog, t_inputrec *ir, int nfile, const t_filenm fnm[], gmx_mtop_t *mtop, t_commrec *cr, const output_env_t oenv, real lambda, gmx_bool bOutFile, unsigned long Flags) { t_pull *pull; t_pull_group *pgrp; int c, g, start = 0, end = 0, m; pull = ir->pull; pull->ePBC = ir->ePBC; switch (pull->ePBC) { case epbcNONE: pull->npbcdim = 0; break; case epbcXY: pull->npbcdim = 2; break; default: pull->npbcdim = 3; break; } if (fplog) { gmx_bool bAbs, bCos; bAbs = FALSE; for (c = 0; c < pull->ncoord; c++) { if (pull->group[pull->coord[c].group[0]].nat == 0 || pull->group[pull->coord[c].group[1]].nat == 0) { bAbs = TRUE; } } fprintf(fplog, "\nWill apply %s COM pulling in geometry '%s'\n", EPULLTYPE(ir->ePull), EPULLGEOM(pull->eGeom)); fprintf(fplog, "with %d pull coordinate%s and %d group%s\n", pull->ncoord, pull->ncoord == 1 ? "" : "s", pull->ngroup, pull->ngroup == 1 ? "" : "s"); if (bAbs) { fprintf(fplog, "with an absolute reference\n"); } bCos = FALSE; for (g = 0; g < pull->ngroup; g++) { if (pull->group[g].nat > 1 && pull->group[g].pbcatom < 0) { /* We are using cosine weighting */ fprintf(fplog, "Cosine weighting is used for group %d\n", g); bCos = TRUE; } } if (bCos) { please_cite(fplog, "Engin2010"); } } /* We always add the virial contribution, * except for geometry = direction_periodic where this is impossible. */ pull->bVirial = (pull->eGeom != epullgDIRPBC); if (getenv("GMX_NO_PULLVIR") != NULL) { if (fplog) { fprintf(fplog, "Found env. var., will not add the virial contribution of the COM pull forces\n"); } pull->bVirial = FALSE; } if (cr && PARTDECOMP(cr)) { pd_at_range(cr, &start, &end); } pull->rbuf = NULL; pull->dbuf = NULL; pull->dbuf_cyl = NULL; pull->bRefAt = FALSE; pull->cosdim = -1; for (g = 0; g < pull->ngroup; g++) { pgrp = &pull->group[g]; pgrp->epgrppbc = epgrppbcNONE; if (pgrp->nat > 0) { /* Determine if we need to take PBC into account for calculating * the COM's of the pull groups. */ for (m = 0; m < pull->npbcdim; m++) { if (pull->dim[m] && pgrp->nat > 1) { if (pgrp->pbcatom >= 0) { pgrp->epgrppbc = epgrppbcREFAT; pull->bRefAt = TRUE; } else { if (pgrp->weight) { gmx_fatal(FARGS, "Pull groups can not have relative weights and cosine weighting at same time"); } pgrp->epgrppbc = epgrppbcCOS; if (pull->cosdim >= 0 && pull->cosdim != m) { gmx_fatal(FARGS, "Can only use cosine weighting with pulling in one dimension (use mdp option pull_dim)"); } pull->cosdim = m; } } } /* Set the indices */ init_pull_group_index(fplog, cr, start, end, g, pgrp, pull->dim, mtop, ir, lambda); if (PULL_CYL(pull) && pgrp->invtm == 0) { gmx_fatal(FARGS, "Can not have frozen atoms in a cylinder pull group"); } } else { /* Absolute reference, set the inverse mass to zero */ pgrp->invtm = 0; pgrp->wscale = 1; } } /* if we use dynamic reference groups, do some initialising for them */ if (PULL_CYL(pull)) { if (ir->ePull == epullCONSTRAINT && pull->ncoord > 1) { /* We can't easily update the single reference group with multiple * constraints. This would require recalculating COMs. */ gmx_fatal(FARGS, "Constraint COM pulling supports only one coordinate with geometry=cylinder, you can use umbrella pulling with multiple coordinates"); } for (c = 0; c < pull->ncoord; c++) { if (pull->group[pull->coord[c].group[0]].nat == 0) { gmx_fatal(FARGS, "Dynamic reference groups are not supported when using absolute reference!\n"); } } snew(pull->dyna, pull->ncoord); } /* Only do I/O when we are doing dynamics and if we are the MASTER */ pull->out_x = NULL; pull->out_f = NULL; if (bOutFile) { if (pull->nstxout > 0) { pull->out_x = open_pull_out(opt2fn("-px", nfile, fnm), pull, oenv, TRUE, Flags); } if (pull->nstfout > 0) { pull->out_f = open_pull_out(opt2fn("-pf", nfile, fnm), pull, oenv, FALSE, Flags); } } }
/*! \brief * Read parameters of an AWH bias dimension. * * \param[in,out] ninp_p Number of read input file entries. * \param[in,out] inp_p Input file entries. * \param[in] prefix Prefix for dimension parameters. * \param[in,out] dimParams AWH dimensional parameters. * \param[in] pull_params Pull parameters. * \param[in,out] wi Struct for bookeeping warnings. * \param[in] bComment True if comments should be printed. */ static void readDimParams(int *ninp_p, t_inpfile **inp_p, const char *prefix, AwhDimParams *dimParams, const pull_params_t *pull_params, warninp_t wi, bool bComment) { char warningmsg[STRLEN]; int ninp = *ninp_p; t_inpfile *inp = *inp_p; if (bComment) { CTYPE("The provider of the reaction coordinate, currently only pull is supported"); } char opt[STRLEN]; sprintf(opt, "%s-coord-provider", prefix); EETYPE(opt, dimParams->eCoordProvider, eawhcoordprovider_names); if (bComment) { CTYPE("The coordinate index for this dimension"); } sprintf(opt, "%s-coord-index", prefix); int coordIndexInput; ITYPE(opt, coordIndexInput, 1); if (coordIndexInput < 1) { gmx_fatal(FARGS, "Failed to read a valid coordinate index for %s. " "Note that the pull coordinate indexing starts at 1.", opt); } /* The pull coordinate indices start at 1 in the input file, at 0 internally */ dimParams->coordIndex = coordIndexInput - 1; /* The pull settings need to be consistent with the AWH settings */ if (!(pull_params->coord[dimParams->coordIndex].eType == epullEXTERNAL) ) { gmx_fatal(FARGS, "AWH biasing can only be applied to pull type %s", EPULLTYPE(epullEXTERNAL)); } if (dimParams->coordIndex >= pull_params->ncoord) { gmx_fatal(FARGS, "The given AWH coordinate index (%d) is larger than the number of pull coordinates (%d)", coordIndexInput, pull_params->ncoord); } if (pull_params->coord[dimParams->coordIndex].rate != 0) { sprintf(warningmsg, "Setting pull-coord%d-rate (%g) is incompatible with AWH biasing this coordinate", coordIndexInput, pull_params->coord[dimParams->coordIndex].rate); warning_error(wi, warningmsg); } /* Grid params for each axis */ int eGeom = pull_params->coord[dimParams->coordIndex].eGeom; if (bComment) { CTYPE("Start and end values for each coordinate dimension"); } sprintf(opt, "%s-start", prefix); RTYPE(opt, dimParams->origin, 0.); sprintf(opt, "%s-end", prefix); RTYPE(opt, dimParams->end, 0.); if (gmx_within_tol(dimParams->end - dimParams->origin, 0, GMX_REAL_EPS)) { sprintf(warningmsg, "The given interval length given by %s-start (%g) and %s-end (%g) is zero. " "This will result in only one point along this axis in the coordinate value grid.", prefix, dimParams->origin, prefix, dimParams->end); warning(wi, warningmsg); } /* Check that the requested interval is in allowed range */ if (eGeom == epullgDIST) { if (dimParams->origin < 0 || dimParams->end < 0) { gmx_fatal(FARGS, "%s-start (%g) or %s-end (%g) set to a negative value. With pull geometry distance coordinate values are non-negative. " "Perhaps you want to use geometry %s instead?", prefix, dimParams->origin, prefix, dimParams->end, EPULLGEOM(epullgDIR)); } } else if (eGeom == epullgANGLE || eGeom == epullgANGLEAXIS) { if (dimParams->origin < 0 || dimParams->end > 180) { gmx_fatal(FARGS, "%s-start (%g) and %s-end (%g) are outside of the allowed range 0 to 180 deg for pull geometries %s and %s ", prefix, dimParams->origin, prefix, dimParams->end, EPULLGEOM(epullgANGLE), EPULLGEOM(epullgANGLEAXIS)); } } else if (eGeom == epullgDIHEDRAL) { if (dimParams->origin < -180 || dimParams->end > 180) { gmx_fatal(FARGS, "%s-start (%g) and %s-end (%g) are outside of the allowed range -180 to 180 deg for pull geometry %s. ", prefix, dimParams->origin, prefix, dimParams->end, EPULLGEOM(epullgDIHEDRAL)); } } if (bComment) { CTYPE("The force constant for this coordinate (kJ/mol/nm^2 or kJ/mol/rad^2)"); } sprintf(opt, "%s-force-constant", prefix); RTYPE(opt, dimParams->forceConstant, 0); if (dimParams->forceConstant <= 0) { warning_error(wi, "The force AWH bias force constant should be > 0"); } if (bComment) { CTYPE("Estimated diffusion constant (nm^2/ps or rad^2/ps)"); } sprintf(opt, "%s-diffusion", prefix); RTYPE(opt, dimParams->diffusion, 0); if (dimParams->diffusion <= 0) { const double diffusion_default = 1e-5; sprintf(warningmsg, "%s not explicitly set by user." " You can choose to use a default value (%g nm^2/ps or rad^2/ps) but this may very well be non-optimal for your system!", opt, diffusion_default); warning(wi, warningmsg); dimParams->diffusion = diffusion_default; } if (bComment) { CTYPE("Diameter that needs to be sampled around a point before it is considered covered."); } sprintf(opt, "%s-cover-diameter", prefix); RTYPE(opt, dimParams->coverDiameter, 0); if (dimParams->coverDiameter < 0) { gmx_fatal(FARGS, "%s (%g) cannot be negative.", opt, dimParams->coverDiameter); } *ninp_p = ninp; *inp_p = inp; }
void pr_inputrec(FILE *fp,int indent,const char *title,t_inputrec *ir, bool bMDPformat) { char *infbuf="inf"; if (available(fp,ir,indent,title)) { if (!bMDPformat) indent=pr_title(fp,indent,title); PS("integrator",EI(ir->eI)); PI("nsteps",ir->nsteps); PI("init_step",ir->init_step); PS("ns_type",ENS(ir->ns_type)); PI("nstlist",ir->nstlist); PI("ndelta",ir->ndelta); PI("nstcomm",ir->nstcomm); PS("comm_mode",ECOM(ir->comm_mode)); PI("nstlog",ir->nstlog); PI("nstxout",ir->nstxout); PI("nstvout",ir->nstvout); PI("nstfout",ir->nstfout); PI("nstenergy",ir->nstenergy); PI("nstxtcout",ir->nstxtcout); PR("init_t",ir->init_t); PR("delta_t",ir->delta_t); PR("xtcprec",ir->xtcprec); PI("nkx",ir->nkx); PI("nky",ir->nky); PI("nkz",ir->nkz); PI("pme_order",ir->pme_order); PR("ewald_rtol",ir->ewald_rtol); PR("ewald_geometry",ir->ewald_geometry); PR("epsilon_surface",ir->epsilon_surface); PS("optimize_fft",BOOL(ir->bOptFFT)); PS("ePBC",EPBC(ir->ePBC)); PS("bPeriodicMols",BOOL(ir->bPeriodicMols)); PS("bContinuation",BOOL(ir->bContinuation)); PS("bShakeSOR",BOOL(ir->bShakeSOR)); PS("etc",ETCOUPLTYPE(ir->etc)); PS("epc",EPCOUPLTYPE(ir->epc)); PS("epctype",EPCOUPLTYPETYPE(ir->epct)); PR("tau_p",ir->tau_p); pr_matrix(fp,indent,"ref_p",ir->ref_p,bMDPformat); pr_matrix(fp,indent,"compress",ir->compress,bMDPformat); PS("refcoord_scaling",EREFSCALINGTYPE(ir->refcoord_scaling)); if (bMDPformat) fprintf(fp,"posres_com = %g %g %g\n",ir->posres_com[XX], ir->posres_com[YY],ir->posres_com[ZZ]); else pr_rvec(fp,indent,"posres_com",ir->posres_com,DIM,TRUE); if (bMDPformat) fprintf(fp,"posres_comB = %g %g %g\n",ir->posres_comB[XX], ir->posres_comB[YY],ir->posres_comB[ZZ]); else pr_rvec(fp,indent,"posres_comB",ir->posres_comB,DIM,TRUE); PI("andersen_seed",ir->andersen_seed); PR("rlist",ir->rlist); PR("rtpi",ir->rtpi); PS("coulombtype",EELTYPE(ir->coulombtype)); PR("rcoulomb_switch",ir->rcoulomb_switch); PR("rcoulomb",ir->rcoulomb); PS("vdwtype",EVDWTYPE(ir->vdwtype)); PR("rvdw_switch",ir->rvdw_switch); PR("rvdw",ir->rvdw); if (ir->epsilon_r != 0) PR("epsilon_r",ir->epsilon_r); else PS("epsilon_r",infbuf); if (ir->epsilon_rf != 0) PR("epsilon_rf",ir->epsilon_rf); else PS("epsilon_rf",infbuf); PR("tabext",ir->tabext); PS("implicit_solvent",EIMPLICITSOL(ir->implicit_solvent)); PS("gb_algorithm",EGBALGORITHM(ir->gb_algorithm)); PR("gb_epsilon_solvent",ir->gb_epsilon_solvent); PI("nstgbradii",ir->nstgbradii); PR("rgbradii",ir->rgbradii); PR("gb_saltconc",ir->gb_saltconc); PR("gb_obc_alpha",ir->gb_obc_alpha); PR("gb_obc_beta",ir->gb_obc_beta); PR("gb_obc_gamma",ir->gb_obc_gamma); PR("sa_surface_tension",ir->sa_surface_tension); PS("DispCorr",EDISPCORR(ir->eDispCorr)); PS("free_energy",EFEPTYPE(ir->efep)); PR("init_lambda",ir->init_lambda); PR("sc_alpha",ir->sc_alpha); PI("sc_power",ir->sc_power); PR("sc_sigma",ir->sc_sigma); PR("delta_lambda",ir->delta_lambda); PI("nwall",ir->nwall); PS("wall_type",EWALLTYPE(ir->wall_type)); PI("wall_atomtype[0]",ir->wall_atomtype[0]); PI("wall_atomtype[1]",ir->wall_atomtype[1]); PR("wall_density[0]",ir->wall_density[0]); PR("wall_density[1]",ir->wall_density[1]); PR("wall_ewald_zfac",ir->wall_ewald_zfac); PS("pull",EPULLTYPE(ir->ePull)); if (ir->ePull != epullNO) pr_pull(fp,indent,ir->pull); PS("disre",EDISRETYPE(ir->eDisre)); PS("disre_weighting",EDISREWEIGHTING(ir->eDisreWeighting)); PS("disre_mixed",BOOL(ir->bDisreMixed)); PR("dr_fc",ir->dr_fc); PR("dr_tau",ir->dr_tau); PR("nstdisreout",ir->nstdisreout); PR("orires_fc",ir->orires_fc); PR("orires_tau",ir->orires_tau); PR("nstorireout",ir->nstorireout); PR("dihre-fc",ir->dihre_fc); PR("em_stepsize",ir->em_stepsize); PR("em_tol",ir->em_tol); PI("niter",ir->niter); PR("fc_stepsize",ir->fc_stepsize); PI("nstcgsteep",ir->nstcgsteep); PI("nbfgscorr",ir->nbfgscorr); PS("ConstAlg",ECONSTRTYPE(ir->eConstrAlg)); PR("shake_tol",ir->shake_tol); PI("lincs_order",ir->nProjOrder); PR("lincs_warnangle",ir->LincsWarnAngle); PI("lincs_iter",ir->nLincsIter); PR("bd_fric",ir->bd_fric); PI("ld_seed",ir->ld_seed); PR("cos_accel",ir->cos_accel); pr_matrix(fp,indent,"deform",ir->deform,bMDPformat); PI("userint1",ir->userint1); PI("userint2",ir->userint2); PI("userint3",ir->userint3); PI("userint4",ir->userint4); PR("userreal1",ir->userreal1); PR("userreal2",ir->userreal2); PR("userreal3",ir->userreal3); PR("userreal4",ir->userreal4); pr_grp_opts(fp,indent,"grpopts",&(ir->opts),bMDPformat); pr_cosine(fp,indent,"efield-x",&(ir->ex[XX]),bMDPformat); pr_cosine(fp,indent,"efield-xt",&(ir->et[XX]),bMDPformat); pr_cosine(fp,indent,"efield-y",&(ir->ex[YY]),bMDPformat); pr_cosine(fp,indent,"efield-yt",&(ir->et[YY]),bMDPformat); pr_cosine(fp,indent,"efield-z",&(ir->ex[ZZ]),bMDPformat); pr_cosine(fp,indent,"efield-zt",&(ir->et[ZZ]),bMDPformat); PS("bQMMM",BOOL(ir->bQMMM)); PI("QMconstraints",ir->QMconstraints); PI("QMMMscheme",ir->QMMMscheme); PR("scalefactor",ir->scalefactor); pr_qm_opts(fp,indent,"qm_opts",&(ir->opts)); } }