From 6d6547c1df7725f596e437745b6940db85a7263e Mon Sep 17 00:00:00 2001 From: Rossen Apostolov Date: Thu, 5 Jun 2014 13:40:24 +0200 Subject: [PATCH] Removed unused parameters and cleanup of inputrec. Removed optimize_fft, dihre_fc, nstcheckpoint. Fixes #820, related to #552. Change-Id: I8d1c3700834e5575972165410b3b29cbb56cba53 --- manual/forcefield.tex | 33 +- share/html/online/mdp.html | 1 - src/contrib/pmetest.c | 476 --------------------- src/gromacs/fileio/tpxio.c | 31 +- src/gromacs/gmxlib/txtdump.c | 3 - src/gromacs/gmxpreprocess/readir.c | 5 +- src/gromacs/legacyheaders/types/inputrec.h | 5 +- src/gromacs/tools/compare.c | 3 - 8 files changed, 27 insertions(+), 530 deletions(-) delete mode 100644 src/contrib/pmetest.c diff --git a/manual/forcefield.tex b/manual/forcefield.tex index 9ffa55cc04..205bc9c11d 100644 --- a/manual/forcefield.tex +++ b/manual/forcefield.tex @@ -2495,31 +2495,14 @@ by selecting the electrostatics type: coulombtype = P3M-AD \end{verbatim} -\subsection{Optimizing Fourier transforms} -To get the best possible performance you should try to avoid large -prime numbers for grid dimensions. -The FFT code used in {\gromacs} is -optimized for grid sizes of the form $2^a 3^b 5^c 7^d 11^e 13^f$, -where $e+f$ is $0$ or $1$ and the other exponents arbitrary. (See -further the documentation of the FFT algorithms at -\href{http://www.fftw.org}{www.fftw.org}. - -It is also possible to optimize the transforms for the current problem -by performing some calculations at the start of the run. This is not -done by default since it takes a couple of minutes, but for large -runs it will save time. Turn it on by specifying - -\begin{verbatim} -optimize-fft = yes -\end{verbatim} -in your {\tt .mdp} file. - -When running in parallel, the grid must be communicated several times, -thus hurting scaling performance. With PME you can improve this -by increasing grid spacing while simultaneously increasing the -interpolation to {\eg} sixth order. -Since the interpolation is entirely local, doing so will -improve the scaling in most cases. +\subsection{Optimizing Fourier transforms and PME calculations} +It is recommended to optimize the parameters for calculation of +electrostatic interaction such as PME grid dimensions and cut-off radii. +This is particularly relevant to do before launching long production runs. + +{\gromacs} includes a special tool, {\tt g_tune_pme}, which automates the +process of selecting the optimal size of the grid and number of PME-only +notes. % % Temporarily removed since I am not sure about the state of the testlr diff --git a/share/html/online/mdp.html b/share/html/online/mdp.html index ebbec487ae..d55efb5372 100644 --- a/share/html/online/mdp.html +++ b/share/html/online/mdp.html @@ -111,7 +111,6 @@ ns-type = grid pbc = xyz ; nblist cut-off = rlist = 0.8 -domain-decomposition = no ; OPTIONS FOR ELECTROSTATICS AND VDW = ; Method for doing electrostatics = diff --git a/src/contrib/pmetest.c b/src/contrib/pmetest.c deleted file mode 100644 index 3f03bb7d06..0000000000 --- a/src/contrib/pmetest.c +++ /dev/null @@ -1,476 +0,0 @@ -/* - * - * This source code is part of - * - * G R O M A C S - * - * GROningen MAchine for Chemical Simulations - * - * VERSION 3.3.99_development_20071104 - * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others. - * Copyright (c) 1991-2000, University of Groningen, The Netherlands. - * Copyright (c) 2001-2006, The GROMACS development team, - * check out http://www.gromacs.org for more information. - - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * If you want to redistribute modifications, 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 www.gromacs.org. - * - * To help us fund GROMACS development, we humbly ask that you cite - * the papers on the package - you can find them in the top README file. - * - * For more info, check our website at http://www.gromacs.org - * - * And Hey: - * Groningen Machine for Chemical Simulation - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "typedefs.h" -#include "macros.h" -#include "gromacs/utility/smalloc.h" -#include "copyrite.h" -#include "main.h" -#include "nrnb.h" -#include "txtdump.h" -#include "gromacs/fileio/tpxio.h" -#include "gromacs/commandline/pargs.h" -#include "gromacs/fileio/futil.h" -#include "gmx_fatal.h" -#include "vec.h" -#include "mdatoms.h" -#include "coulomb.h" -#include "nsb.h" -#include "rmpbc.h" -#include "pme.h" -#include "force.h" -#include "xvgr.h" -#include "pbc.h" - -#include "gromacs/utility/gmxmpi.h" - -#include "block_tx.h" - -rvec *xptr=NULL; - -static int comp_xptr(const void *a,const void *b) -{ - int va,vb; - real dx; - - va = *(int *)a; - vb = *(int *)b; - - if ((dx = (xptr[va][XX] - xptr[vb][XX])) < 0) - return -1; - else if (dx > 0) - return 1; - else - return 0; -} - -static void do_my_pme(FILE *fp,real tm,gmx_bool bVerbose,t_inputrec *ir, - rvec x[],rvec xbuf[],rvec f[], - real charge[],real qbuf[],real qqbuf[], - matrix box,gmx_bool bSort, - t_commrec *cr,t_nsborder *nsb,t_nrnb *nrnb, - t_block *excl,real qtot, - t_forcerec *fr,int index[],FILE *fp_xvg, - int ngroups,unsigned short cENER[]) -{ - real ener,vcorr,q,xx,dvdl=0,vdip,vcharge; - tensor vir,vir_corr,vir_tot; - rvec mu_tot[2]; - int i,m,ii,ig,jg; - real **epme,*qptr; - - /* Initiate local variables */ - fr->f_el_recip = f; - clear_mat(vir); - clear_mat(vir_corr); - - if (ngroups > 1) { - fprintf(fp,"There are %d energy groups\n",ngroups); - snew(epme,ngroups); - for(i=0; (inatoms,x);*/ - /* Here sorting of X (and q) is done. - * Alternatively, one could just put the atoms in one of the - * cr->nnodes slabs. That is much cheaper than sorting. - */ - for(i=0; (inatoms); i++) - index[i] = i; - if (bSort) { - xptr = x; - qsort(index,nsb->natoms,sizeof(index[0]),comp_xptr); - xptr = NULL; /* To trap unintentional use of the ptr */ - } - /* After sorting we only need the part that is to be computed on - * this processor. We also compute the mu_tot here (system dipole) - */ - clear_rvec(mu_tot[0]); - for(i=START(nsb); (inatoms,TRUE); - pr_rvecs(debug,0,"xbuf",xbuf,nsb->natoms); - pr_rvecs(debug,0,"box",box,DIM); - } - for(ig=0; (ig 1) { - for(i=START(nsb); (iewaldcoeff,FALSE,0,&dvdl,FALSE); - vcorr = ewald_LRcorrection(fp,nsb,cr,fr,qptr,qptr,excl,xbuf,box,mu_tot, - ir->ewald_geometry,ir->epsilon_surface, - 0,&dvdl,&vdip,&vcharge); - gmx_sum(1,&ener,cr); - gmx_sum(1,&vcorr,cr); - if (ngroups > 1) - epme[ig][jg] = ener+vcorr; - } - } - if (ngroups > 1) { - if (fp_xvg) - fprintf(fp_xvg,"%10.3f",tm); - for(ig=0; (ig 1) - gmx_fatal(FARGS,"GROMACS compiled without MPI support - can't do parallel runs"); -#endif - - /* Open log files on all processors */ - open_log(ftp2fn(efLOG,NFILE,fnm),cr); - snew(ir,1); - - if (MASTER(cr)) { - /* Read tpr file etc. */ - read_tpxheader(ftp2fn(efTPX,NFILE,fnm),&tpx,FALSE,NULL,NULL); - snew(x,tpx.natoms); - read_tpx(ftp2fn(efTPX,NFILE,fnm),&step,&t,&lambda,ir, - box,&natoms,x,NULL,NULL,&top); - /* Charges */ - qtot = 0; - snew(charge,natoms); - for(i=0; (inkx = grid[XX]; - ir->nky = grid[YY]; - ir->nkz = grid[ZZ]; - } - /* Check command line parameters for consistency */ - if ((ir->nkx <= 0) || (ir->nky <= 0) || (ir->nkz <= 0)) - gmx_fatal(FARGS,"PME grid = %d %d %d",ir->nkx,ir->nky,ir->nkz); - if (opt2parg_bSet("-rc",asize(pa),pa)) - ir->rcoulomb = rc; - if (ir->rcoulomb <= 0) - gmx_fatal(FARGS,"rcoulomb should be > 0 (not %f)",ir->rcoulomb); - if (opt2parg_bSet("-order",asize(pa),pa)) - ir->pme_order = pme_order; - if (ir->pme_order <= 0) - gmx_fatal(FARGS,"pme_order should be > 0 (not %d)",ir->pme_order); - if (opt2parg_bSet("-tol",asize(pa),pa)) - ir->ewald_rtol = dtol; - if (ir->ewald_rtol <= 0) - gmx_fatal(FARGS,"ewald_tol should be > 0 (not %f)",ir->ewald_rtol); - } - else { - init_top(&top); - } - - /* Add parallellization code here */ - snew(nsb,1); - if (MASTER(cr)) { - ncg = top.blocks[ebCGS].multinr[0]; - for(i=0; (innodes-1); i++) - top.blocks[ebCGS].multinr[i] = min(ncg,(ncg*(i+1))/cr->nnodes); - for( ; (iopts.ngtc = ir->opts.ngacc = ir->opts.ngfrz = ir->opts.ngener = 0; -#ifdef GMX_MPI - /* Distribute the data over processors */ - MPI_Bcast(&natoms,1,MPI_INT,root,MPI_COMM_WORLD); - MPI_Bcast(ir,sizeof(*ir),MPI_BYTE,root,MPI_COMM_WORLD); - MPI_Bcast(&qtot,1,GMX_MPI_REAL,root,MPI_COMM_WORLD); -#endif - - /* Call some dedicated communication routines, master sends n-1 times */ - if (MASTER(cr)) { - for(i=1; (innodes); i++) { - mv_block(i,&(top.blocks[ebCGS])); - mv_block(i,&(top.atoms.excl)); - } - } - else { - ld_block(root,&(top.blocks[ebCGS])); - ld_block(root,&(top.atoms.excl)); - } - if (!MASTER(cr)) { - snew(charge,natoms); - snew(x,natoms); - } -#ifdef GMX_MPI - MPI_Bcast(charge,natoms,GMX_MPI_REAL,root,MPI_COMM_WORLD); -#endif - } - ewaldcoeff = calc_ewaldcoeff(ir->rcoulomb,ir->ewald_rtol); - - - if (bVerbose) - pr_inputrec(stdlog,0,"Inputrec",ir); - - /* Allocate memory for temp arrays etc. */ - snew(xbuf,natoms); - snew(f,natoms); - snew(qbuf,natoms); - snew(qqbuf,natoms); - snew(index,natoms); - - /* Initialize the PME code */ - init_pme(stdlog,cr,ir->nkx,ir->nky,ir->nkz,ir->pme_order, - natoms,FALSE,bOptFFT,ewald_geometry); - - /* MFlops accounting */ - init_nrnb(&nrnb); - - /* Initialize the work division */ - calc_nsb(stdlog,&(top.blocks[ebCGS]),cr->nnodes,nsb,0); - nsb->nodeid = cr->nodeid; - print_nsb(stdlog,"pmetest",nsb); - - /* Initiate forcerec */ - mdatoms = atoms2md(stdlog,&top.atoms,ir->opts.nFreeze,ir->eI, - ir->delta_t,0,ir->opts.tau_t,FALSE,FALSE); - snew(fr,1); - init_forcerec(stdlog,fr,ir,&top,cr,mdatoms,nsb,box,FALSE,NULL,NULL,FALSE); - - /* First do PME based on coordinates in tpr file, send them to - * other processors if needed. - */ - if (MASTER(cr)) - fprintf(stdlog,"-----\n" - "Results based on tpr file %s\n",ftp2fn(efTPX,NFILE,fnm)); -#ifdef GMX_MPI - if (PAR(cr)) { - MPI_Bcast(x[0],natoms*DIM,GMX_MPI_REAL,root,MPI_COMM_WORLD); - MPI_Bcast(box[0],DIM*DIM,GMX_MPI_REAL,root,MPI_COMM_WORLD); - MPI_Bcast(&t,1,GMX_MPI_REAL,root,MPI_COMM_WORLD); - } -#endif - do_my_pme(stdlog,0,bVerbose,ir,x,xbuf,f,charge,qbuf,qqbuf,box,bSort, - cr,nsb,&nrnb,&(top.atoms.excl),qtot,fr,index,NULL, - bGroups ? ir->opts.ngener : 1,mdatoms->cENER); - - /* If we have a trajectry file, we will read the frames in it and compute - * the PME energy. - */ - if (ftp2bSet(efTRX,NFILE,fnm)) { - fprintf(stdlog,"-----\n" - "Results based on trx file %s\n",ftp2fn(efTRX,NFILE,fnm)); - if (MASTER(cr)) { - sfree(x); - natoms = read_first_x(&status,ftp2fn(efTRX,NFILE,fnm),&t,&x,box); - if (natoms != top.atoms.nr) - gmx_fatal(FARGS,"natoms in trx = %d, in tpr = %d",natoms,top.atoms.nr); - fp = xvgropen(ftp2fn(efXVG,NFILE,fnm),"PME Energy","Time (ps)","E (kJ/mol)"); - } - else - fp = NULL; - do { - /* Send coordinates, box and time to the other nodes */ -#ifdef GMX_MPI - if (PAR(cr)) { - MPI_Bcast(x[0],natoms*DIM,GMX_MPI_REAL,root,MPI_COMM_WORLD); - MPI_Bcast(box[0],DIM*DIM,GMX_MPI_REAL,root,MPI_COMM_WORLD); - MPI_Bcast(&t,1,GMX_MPI_REAL,root,MPI_COMM_WORLD); - } -#endif - rm_pbc(&top.idef,nsb->natoms,box,x,x); - /* Call the PME wrapper function */ - do_my_pme(stdlog,t,bVerbose,ir,x,xbuf,f,charge,qbuf,qqbuf,box,bSort,cr, - nsb,&nrnb,&(top.atoms.excl),qtot,fr,index,fp, - bGroups ? ir->opts.ngener : 1,mdatoms->cENER); - /* Only the master processor reads more data */ - if (MASTER(cr)) - bCont = read_next_x(status,&t,natoms,x,box); - /* Check whether we need to continue */ -#ifdef GMX_MPI - if (PAR(cr)) - MPI_Bcast(&bCont,1,MPI_INT,root,MPI_COMM_WORLD); -#endif - - } while (bCont); - - /* Finish I/O, close files */ - if (MASTER(cr)) { - close_trx(status); - gmx_ffclose(fp); - } - } - - if (bVerbose) { - /* Do some final I/O about performance, might be useful in debugging */ - fprintf(stdlog,"-----\n"); - print_nrnb(stdlog,&nrnb); - } - - /* Finish the parallel stuff */ - if (gmx_parallel_env_initialized()) - gmx_finalize(cr); - - /* Thank the audience, as usual */ - if (MASTER(cr)) - gmx_thanx(stderr); - - return 0; -} - diff --git a/src/gromacs/fileio/tpxio.c b/src/gromacs/fileio/tpxio.c index 0fdb93aad2..c5ee1e2e71 100644 --- a/src/gromacs/fileio/tpxio.c +++ b/src/gromacs/fileio/tpxio.c @@ -88,7 +88,8 @@ enum tpxv { tpxv_ComputationalElectrophysiology = 96, /**< support for ion/water position swaps (computational electrophysiology) */ tpxv_Use64BitRandomSeed, /**< change ld_seed from int to gmx_int64_t */ tpxv_RestrictedBendingAndCombinedAngleTorsionPotentials, /**< potentials for supporting coarse-grained force fields */ - tpxv_InteractiveMolecularDynamics /**< interactive molecular dynamics (IMD) */ + tpxv_InteractiveMolecularDynamics, /**< interactive molecular dynamics (IMD) */ + tpxv_RemoveObsoleteParameters1 /**< remove optimize_fft, dihre_fc, nstcheckpoint */ }; /*! \brief Version number of the file format written to run input @@ -102,7 +103,7 @@ enum tpxv { * * When developing a feature branch that needs to change the run input * file format, change tpx_tag instead. */ -static const int tpx_version = tpxv_InteractiveMolecularDynamics; +static const int tpx_version = tpxv_RemoveObsoleteParameters1; /* This number should only be increased when you edit the TOPOLOGY section @@ -815,7 +816,7 @@ static void do_inputrec(t_fileio *fio, t_inputrec *ir, gmx_bool bRead, int i, j, k, *tmp, idum = 0; real rdum, bd_temp; rvec vdum; - gmx_bool bSimAnn; + gmx_bool bSimAnn, bdum = 0; real zerotemptime, finish_t, init_temp, finish_temp; if (file_version != tpx_version) @@ -846,6 +847,7 @@ static void do_inputrec(t_fileio *fio, t_inputrec *ir, gmx_bool bRead, gmx_fio_do_int(fio, idum); ir->nsteps = idum; } + if (file_version > 25) { if (file_version >= 62) @@ -950,13 +952,10 @@ static void do_inputrec(t_fileio *fio, t_inputrec *ir, gmx_bool bRead, } ir->nstcomm = abs(ir->nstcomm); - if (file_version > 25) + /* ignore nstcheckpoint */ + if (file_version > 25 && file_version < tpxv_RemoveObsoleteParameters1) { - gmx_fio_do_int(fio, ir->nstcheckpoint); - } - else - { - ir->nstcheckpoint = 0; + gmx_fio_do_int(fio, idum); } gmx_fio_do_int(fio, ir->nstcgsteep); @@ -1181,7 +1180,11 @@ static void do_inputrec(t_fileio *fio, t_inputrec *ir, gmx_bool bRead, gmx_fio_do_real(fio, ir->epsilon_surface); } - gmx_fio_do_gmx_bool(fio, ir->bOptFFT); + /* ignore bOptFFT */ + if (file_version < tpxv_RemoveObsoleteParameters1) + { + gmx_fio_do_gmx_bool(fio, bdum); + } if (file_version >= 93) { @@ -1385,19 +1388,17 @@ static void do_inputrec(t_fileio *fio, t_inputrec *ir, gmx_bool bRead, ir->orires_tau = 0; ir->nstorireout = 0; } + + /* ignore dihre_fc */ if (file_version >= 26 && file_version < 79) { - gmx_fio_do_real(fio, ir->dihre_fc); + gmx_fio_do_real(fio, rdum); if (file_version < 56) { gmx_fio_do_real(fio, rdum); gmx_fio_do_int(fio, idum); } } - else - { - ir->dihre_fc = 0; - } gmx_fio_do_real(fio, ir->em_stepsize); gmx_fio_do_real(fio, ir->em_tol); diff --git a/src/gromacs/gmxlib/txtdump.c b/src/gromacs/gmxlib/txtdump.c index ff9966f70a..47876e9591 100644 --- a/src/gromacs/gmxlib/txtdump.c +++ b/src/gromacs/gmxlib/txtdump.c @@ -895,7 +895,6 @@ void pr_inputrec(FILE *fp, int indent, const char *title, t_inputrec *ir, PR("ewald-rtol-lj", ir->ewald_rtol_lj); PR("ewald-geometry", ir->ewald_geometry); PR("epsilon-surface", ir->epsilon_surface); - PS("optimize-fft", EBOOL(ir->bOptFFT)); PS("lj-pme-comb-rule", ELJPMECOMBNAMES(ir->ljpme_combination_rule)); PS("ePBC", EPBC(ir->ePBC)); PS("bPeriodicMols", EBOOL(ir->bPeriodicMols)); @@ -1023,8 +1022,6 @@ void pr_inputrec(FILE *fp, int indent, const char *title, t_inputrec *ir, 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); diff --git a/src/gromacs/gmxpreprocess/readir.c b/src/gromacs/gmxpreprocess/readir.c index b2d19cd75d..a2f84972f2 100644 --- a/src/gromacs/gmxpreprocess/readir.c +++ b/src/gromacs/gmxpreprocess/readir.c @@ -1773,7 +1773,7 @@ void get_ir(const char *mdparin, const char *mdparout, warning_note(wi, warn_buf); } - /* remove the following deprecated commands */ + /* ignore the following deprecated commands */ REM_TYPE("title"); REM_TYPE("cpp"); REM_TYPE("domain-decomposition"); @@ -1783,6 +1783,7 @@ void get_ir(const char *mdparin, const char *mdparout, REM_TYPE("dihre-tau"); REM_TYPE("nstdihreout"); REM_TYPE("nstcheckpoint"); + REM_TYPE("optimize-fft"); /* replace the following commands with the clearer new versions*/ REPL_TYPE("unconstrained-start", "continuation"); @@ -1843,7 +1844,6 @@ void get_ir(const char *mdparin, const char *mdparout, ITYPE ("nstxout", ir->nstxout, 0); ITYPE ("nstvout", ir->nstvout, 0); ITYPE ("nstfout", ir->nstfout, 0); - ir->nstcheckpoint = 1000; CTYPE ("Output frequency for energies to log file and energy file"); ITYPE ("nstlog", ir->nstlog, 1000); ITYPE ("nstcalcenergy", ir->nstcalcenergy, 100); @@ -1916,7 +1916,6 @@ void get_ir(const char *mdparin, const char *mdparout, EETYPE("lj-pme-comb-rule", ir->ljpme_combination_rule, eljpme_names); EETYPE("ewald-geometry", ir->ewald_geometry, eewg_names); RTYPE ("epsilon-surface", ir->epsilon_surface, 0.0); - EETYPE("optimize-fft", ir->bOptFFT, yesno_names); CCTYPE("IMPLICIT SOLVENT ALGORITHM"); EETYPE("implicit-solvent", ir->implicit_solvent, eis_names); diff --git a/src/gromacs/legacyheaders/types/inputrec.h b/src/gromacs/legacyheaders/types/inputrec.h index 3f463dcd53..6c79097739 100644 --- a/src/gromacs/legacyheaders/types/inputrec.h +++ b/src/gromacs/legacyheaders/types/inputrec.h @@ -337,9 +337,8 @@ typedef struct { 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 */ @@ -358,7 +357,6 @@ typedef struct { 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 */ @@ -422,7 +420,6 @@ typedef struct { 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 */ diff --git a/src/gromacs/tools/compare.c b/src/gromacs/tools/compare.c index 24ad49bab7..1f3a2348a9 100644 --- a/src/gromacs/tools/compare.c +++ b/src/gromacs/tools/compare.c @@ -756,7 +756,6 @@ static void cmp_inputrec(FILE *fp, t_inputrec *ir1, t_inputrec *ir2, real ftol, cmp_int(fp, "inputrec->ndelta", -1, ir1->ndelta, ir2->ndelta); cmp_int(fp, "inputrec->nstcomm", -1, ir1->nstcomm, ir2->nstcomm); cmp_int(fp, "inputrec->comm_mode", -1, ir1->comm_mode, ir2->comm_mode); - cmp_int(fp, "inputrec->nstcheckpoint", -1, ir1->nstcheckpoint, ir2->nstcheckpoint); cmp_int(fp, "inputrec->nstlog", -1, ir1->nstlog, ir2->nstlog); cmp_int(fp, "inputrec->nstxout", -1, ir1->nstxout, ir2->nstxout); cmp_int(fp, "inputrec->nstvout", -1, ir1->nstvout, ir2->nstvout); @@ -775,7 +774,6 @@ static void cmp_inputrec(FILE *fp, t_inputrec *ir1, t_inputrec *ir2, real ftol, cmp_real(fp, "inputrec->ewald_rtol", -1, ir1->ewald_rtol, ir2->ewald_rtol, ftol, abstol); cmp_int(fp, "inputrec->ewald_geometry", -1, ir1->ewald_geometry, ir2->ewald_geometry); cmp_real(fp, "inputrec->epsilon_surface", -1, ir1->epsilon_surface, ir2->epsilon_surface, ftol, abstol); - cmp_int(fp, "inputrec->bOptFFT", -1, ir1->bOptFFT, ir2->bOptFFT); cmp_int(fp, "inputrec->bContinuation", -1, ir1->bContinuation, ir2->bContinuation); cmp_int(fp, "inputrec->bShakeSOR", -1, ir1->bShakeSOR, ir2->bShakeSOR); cmp_int(fp, "inputrec->etc", -1, ir1->etc, ir2->etc); @@ -857,7 +855,6 @@ static void cmp_inputrec(FILE *fp, t_inputrec *ir1, t_inputrec *ir2, real ftol, cmp_real(fp, "inputrec->orires_fc", -1, ir1->orires_fc, ir2->orires_fc, ftol, abstol); cmp_real(fp, "inputrec->orires_tau", -1, ir1->orires_tau, ir2->orires_tau, ftol, abstol); cmp_int(fp, "inputrec->nstorireout", -1, ir1->nstorireout, ir2->nstorireout); - cmp_real(fp, "inputrec->dihre_fc", -1, ir1->dihre_fc, ir2->dihre_fc, ftol, abstol); cmp_real(fp, "inputrec->em_stepsize", -1, ir1->em_stepsize, ir2->em_stepsize, ftol, abstol); cmp_real(fp, "inputrec->em_tol", -1, ir1->em_tol, ir2->em_tol, ftol, abstol); cmp_int(fp, "inputrec->niter", -1, ir1->niter, ir2->niter); -- 2.22.0