From: Mark Abraham Date: Fri, 24 Jul 2015 14:40:41 +0000 (+0200) Subject: Merge branch release-5-1 X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=5750bfe806310856448a1e7baf46a7d648d1185e;hp=3dadfbb969e79953a942885fb931908a36fcaf08;p=alexxy%2Fgromacs.git Merge branch release-5-1 Conflicts: src/gromacs/commandline/shellcompletions.cpp Removed line no longer appropriate, now that zsh completion is supported. Master had changed the previous line, which git flags as a merge conflict. Change-Id: Id9d37615b2bd121b1206ca0e6e8eac62fcf38f01 --- diff --git a/docs/links.dat b/docs/links.dat index 01ee831ccc..0c34fad9bb 100644 --- a/docs/links.dat +++ b/docs/links.dat @@ -2,7 +2,6 @@ cpt dat dlg edi -edo edr ene eps diff --git a/docs/user-guide/cutoff-schemes.rst b/docs/user-guide/cutoff-schemes.rst index 5cdfdfd6c0..5c1bb6fb20 100644 --- a/docs/user-guide/cutoff-schemes.rst +++ b/docs/user-guide/cutoff-schemes.rst @@ -7,7 +7,7 @@ on modern CPUs and accelerators, and support nearly all of the algorithms used in |Gromacs|. Before version 4.6, |Gromacs| always used pair-lists based on groups of -particles. These groups of particles were orginally charge-groups, which were +particles. These groups of particles were originally charge-groups, which were necessary with plain cut-off electrostatics. With the use of PME (or reaction-field with a buffer), charge groups are no longer necessary (and are ignored in the Verlet scheme). In |Gromacs| 4.6 and later, the @@ -18,7 +18,7 @@ converted, and for the few cases where it may allow faster simulations with bio-molecular systems dominated by water. Without PME, the group cut-off scheme should generally be combined -with a buffered pair-list to help avoid artefacts. However, the +with a buffered pair-list to help avoid artifacts. However, the group-scheme kernels that can implement this are much slower than either the unbuffered group-scheme kernels, or the buffered Verlet-scheme kernels. Use of the Verlet scheme is strongly encouraged @@ -53,7 +53,7 @@ unbuffered cut-off scheme default not by default exact cut-off shift/switch always potential-shift interactions yes yes potential-switch interactions yes yes -force-switch interations yes yes +force-switch interactions yes yes switched potential yes yes switched forces yes yes non-periodic systems yes Z + walls @@ -86,7 +86,7 @@ the cut-off length each time step. This makes simulations much slower. The performance of the Verlet scheme with the new non-bonded kernels is independent of system composition and is intended to always run with a buffered pair-list. Typically, buffer size is 0 to 10% of -the cut-off, so you could win a bit of peformance by reducing or +the cut-off, so you could win a bit of performance by reducing or removing the buffer, but this might not be a good trade-off of simulation quality. diff --git a/docs/user-guide/environment-variables.rst b/docs/user-guide/environment-variables.rst index 419cbda50d..f84247a751 100644 --- a/docs/user-guide/environment-variables.rst +++ b/docs/user-guide/environment-variables.rst @@ -9,7 +9,7 @@ listed in the following sections. Most environment variables function by being set in your shell to any non-NULL value. Specific requirements are described below if other values need to be set. You should consult the documentation for your shell for instructions on -how to set environment variables in the current shell, or in config +how to set environment variables in the current shell, or in configuration files for future shells. Note that requirements for exporting environment variables to jobs run under batch control systems vary and you should consult your local documentation for details. diff --git a/docs/user-guide/file-formats.rst b/docs/user-guide/file-formats.rst index bdadf47238..e85910ab9a 100644 --- a/docs/user-guide/file-formats.rst +++ b/docs/user-guide/file-formats.rst @@ -83,8 +83,6 @@ Other files generic, preferred for input :ref:`edi` essential dynamics constraints input for :ref:`gmx mdrun` -:ref:`edo` - essential dynamics constraints output for :ref:`gmx mdrun` :ref:`eps` Encapsulated Postscript :ref:`log` @@ -177,20 +175,6 @@ to run Molecular Dynamics with Essential Dynamics constraints. output from the programs in the ESSDYN menu of the WHAT IF program. -.. _edo: - -edo ---- - -Files with the edo file extension are generated by :ref:`gmx mdrun` -if Molecular Dynamics is performed with Essential Dynamics -constraints. Depending on the parameters set in the :ref:`edi`: -file, edo files may contain projections of positions, -velocities and forces onto selected eigenvectors during the run as well -as RMSD values, or information about specific types of constraints. -Specific results can be extracted from the edo files with standard Unix -utilities like ``awk``. - .. _edr: edr @@ -210,7 +194,7 @@ The ene file extension stands for binary energy file. It holds the energies as generated during your :ref:`gmx mdrun`. The file can be transformed to a portable energy file (portable -accross hardware platforms), the :ref:`edr` file using the program +across hardware platforms), the :ref:`edr` file using the program :ref:`gmx eneconv`. See also :ref:`gmx energy`. @@ -334,7 +318,7 @@ were removed with ``-ignh``. itp --- -The itp file extension stands for include toplogy. These files are included in +The itp file extension stands for include topology. These files are included in topology files (with the :ref:`top` extension). .. _log: @@ -435,222 +419,48 @@ The ordering of the items is not important, but if you enter the same thing twice, the **last** is used (:ref:`gmx grompp` gives you a note when overriding values). Dashes and underscores on the left hand side are ignored. -The values of the options are reasonable values for a 1 nanosecond +The values of the options are values for a 1 nanosecond MD run of a protein in a box of water. +**Note:** The parameters chosen (*e.g.,* short-range cutoffs) depend on the +force field being used. + :: - title = Yo - cpp = /lib/cpp - include = -I../top - define = integrator = md dt = 0.002 nsteps = 500000 - nstxout = 5000 - nstvout = 5000 + nstlog = 5000 - nstenergy = 250 - nstxout-compressed = 250 - compressed-x-grps = Protein - energygrps = Protein SOL - nstlist = 10 - ns-type = grid - rlist = 0.8 - coulombtype = cut-off - rcoulomb = 1.4 - rvdw = 0.8 - tcoupl = Berendsen - tc-grps = Protein SOL - tau-t = 0.1 0.1 - ref-t = 300 300 - Pcoupl = Berendsen - tau-p = 1.0 - compressibility = 4.5e-5 - ref-p = 1.0 - gen-vel = yes - gen-temp = 300 - gen-seed = 173529 + nstenergy = 5000 + nstxout-compressed = 5000 + + continuation = yes constraints = all-bonds + constraint-algorithm = lincs -With this input :ref:`gmx grompp` will produce -an ``mdout.mdp`` with all the options and descriptions: + cutoff-scheme = Verlet -:: + coulombtype = PME + rcoulomb = 1.0 + + vdwtype = Cut-off + rvdw = 1.0 + DispCorr = EnerPres - ; VARIOUS PREPROCESSING OPTIONS = - title = Yo - cpp = /lib/cpp - include = -I../top - define = + tcoupl = V-rescale + tc-grps = Protein SOL + tau-t = 0.1 0.1 + ref-t = 300 300 - ; RUN CONTROL PARAMETERS = - integrator = md - ; start time and timestep in ps = - tinit = 0 - dt = 0.002 - nsteps = 500000 - ; number of steps for center of mass motion removal = - nstcomm = 1 - comm-grps = - - ; LANGEVIN DYNAMICS OPTIONS = - ; Temperature, friction coefficient (amu/ps) and random seed = - bd-temp = 300 - bd-fric = 0 - ld-seed = 1993 - - ; ENERGY MINIMIZATION OPTIONS = - ; Force tolerance and initial step-size = - emtol = 100 - emstep = 0.01 - ; Max number of iterations in relax-shells = - niter = 20 - ; Frequency of steepest descents steps when doing CG = - nstcgsteep = 1000 - - ; OUTPUT CONTROL OPTIONS = - ; Output frequency for coords (x), velocities (v) and forces (f) = - nstxout = 5000 - nstvout = 5000 - nstfout = 0 - ; Output frequency for energies to log file and energy file = - nstlog = 5000 - nstenergy = 250 - ; Output frequency and precision for xtc file = - nstxout-compressed = 250 - compressed-x-precision = 1000 - ; This selects the subset of atoms for the xtc file. You can = - ; select multiple groups. By default all atoms will be written. = - compressed-x-grps = Protein - ; Selection of energy groups = - energygrps = Protein SOL - - ; NEIGHBORSEARCHING PARAMETERS = - ; nblist update frequency = - nstlist = 10 - ; ns algorithm (simple or grid) = - ns-type = grid - ; Periodic boundary conditions: xyz or none = - pbc = xyz - ; nblist cut-off = - rlist = 0.8 - - ; OPTIONS FOR ELECTROSTATICS AND VDW = - ; Method for doing electrostatics = - coulombtype = cut-off - rcoulomb-switch = 0 - rcoulomb = 1.4 - ; Dielectric constant (DC) for cut-off or DC of reaction field = - epsilon-r = 1 - ; Method for doing Van der Waals = - vdw-type = Cut-off - ; cut-off lengths = - rvdw-switch = 0 - rvdw = 0.8 - ; Apply long range dispersion corrections for Energy and Pressure = - DispCorr = No - ; Spacing for the PME/PPPM FFT grid = - fourierspacing = 0.12 - ; FFT grid size, when a value is 0 fourierspacing will be used = - fourier-nx = 0 - fourier-ny = 0 - fourier-nz = 0 - ; EWALD/PME/PPPM parameters = - pme-order = 4 - ewald-rtol = 1e-05 - epsilon-surface = 0 - - ; OPTIONS FOR WEAK COUPLING ALGORITHMS = - ; Temperature coupling = - tcoupl = Berendsen - ; Groups to couple separately = - tc-grps = Protein SOL - ; Time constant (ps) and reference temperature (K) = - tau-t = 0.1 0.1 - ref-t = 300 300 - ; Pressure coupling = - Pcoupl = Berendsen - Pcoupltype = Isotropic - ; Time constant (ps), compressibility (1/bar) and reference P (bar) = - tau-p = 1.0 + pcoupl = Parrinello-Rahman + tau-p = 2.0 compressibility = 4.5e-5 ref-p = 1.0 - ; SIMULATED ANNEALING CONTROL = - annealing = no - ; Time at which temperature should be zero (ps) = - zero-temp-time = 0 - - ; GENERATE VELOCITIES FOR STARTUP RUN = - gen-vel = yes - gen-temp = 300 - gen-seed = 173529 - - ; OPTIONS FOR BONDS = - constraints = all-bonds - ; Type of constraint algorithm = - constraint-algorithm = Lincs - ; Do not constrain the start configuration = - unconstrained-start = no - ; Relative tolerance of shake = - shake-tol = 0.0001 - ; Highest order in the expansion of the constraint coupling matrix = - lincs-order = 4 - ; Lincs will write a warning to the stderr if in one step a bond = - ; rotates over more degrees than = - lincs-warnangle = 30 - ; Convert harmonic bonds to morse potentials = - morse = no - - ; NMR refinement stuff = - ; Distance restraints type: No, Simple or Ensemble = - disre = No - ; Force weighting of pairs in one distance restraint: Equal or Conservative = - disre-weighting = Equal - ; Use sqrt of the time averaged times the instantaneous violation = - disre-mixed = no - disre-fc = 1000 - disre-tau = 0 - ; Output frequency for pair distances to energy file = - nstdisreout = 100 - - ; Free energy control stuff = - free-energy = no - init-lambda = 0 - delta-lambda = 0 - sc-alpha = 0 - sc-sigma = 0.3 - - ; Non-equilibrium MD stuff = - acc-grps = - accelerate = - freezegrps = - freezedim = - cos-acceleration = 0 - energygrp-excl = - - ; Electric fields = - ; Format is number of terms (int) and for all terms an amplitude (real) = - ; and a phase angle (real) = - E-x = - E-xt = - E-y = - E-yt = - E-z = - E-zt = - - ; User defined thingies = - user1-grps = - user2-grps = - userint1 = 0 - userint2 = 0 - userint3 = 0 - userint4 = 0 - userreal1 = 0 - userreal2 = 0 - userreal3 = 0 - userreal4 = 0 +With this input :ref:`gmx grompp` will produce a commented file with the default name +``mdout.mdp``. That file will contain the above options, as well as all other +options not explicitly set, showing their default values. .. _mtx: @@ -718,16 +528,16 @@ structure files in the protein databank file format. The protein databank file format describes the positions of atoms in a molecular structure. Coordinates are read from the ATOM and HETATM records, until the file ends or an ENDMDL record is encountered. -GROMACS programs can read and write a simlation box in the +GROMACS programs can read and write a simulation box in the CRYST1 entry. The pdb format can also be used as a trajectory format: -several structures, seperated by ENDMDL, can be read from +several structures, separated by ENDMDL, can be read from or written to one file. Example +++++++ -An pdb file should look like this:: +A pdb file should look like this:: ATOM 1 H1 LYS 1 14.260 6.590 34.480 1.00 0.00 ATOM 2 H2 LYS 1 13.760 5.000 34.340 1.00 0.00 @@ -741,7 +551,7 @@ An pdb file should look like this:: rtp --- -The rtp file extension stands for residue toplogy. +The rtp file extension stands for residue topology. Such a file is needed by :ref:`gmx pdb2gmx` to make a GROMACS topology for a protein contained in a :ref:`pdb` file. The file contains the default interaction type for the 4 bonded @@ -767,10 +577,10 @@ It is possible to put more than one dihedral on a rotatable bond. :ref:`gmx pdb2gmx` sets the number exclusions to 3, which means that interactions between atoms connected by at most 3 bonds are excluded. Pair interactions are generated for all pairs of atoms which are -seperated by 3 bonds (except pairs of hydrogens). +separated by 3 bonds (except pairs of hydrogens). When more interactions need to be excluded, or some pair interactions should not be generated, an ``[exclusions]`` field can be added, followed by -pairs of atom names on seperate lines. All non-bonded and pair interactions +pairs of atom names on separate lines. All non-bonded and pair interactions between these atoms will be excluded. A sample is included below. diff --git a/docs/user-guide/mdrun-features.rst b/docs/user-guide/mdrun-features.rst index e8724511c9..36fb27c26b 100644 --- a/docs/user-guide/mdrun-features.rst +++ b/docs/user-guide/mdrun-features.rst @@ -18,10 +18,10 @@ subsets of the molecular system (see :ref:`gmx convert-tpr` and :ref:`gmx trjconv`). It is easier to do a correct "single-point" energy evaluation with this feature than a 0-step simulation. -Neighbour searching is normally performed for every frame in the +Neighbor searching is normally performed for every frame in the trajectory, since :ref:`gmx mdrun` can no longer assume anything about how the structures were generated. If :mdp:`nstlist` is zero, then only one -neighbour list will be constructed. Naturally, no update or constraint +neighbor list will be constructed. Naturally, no update or constraint algorithms are ever used. Running a simulation in reproducible mode @@ -129,7 +129,7 @@ Normally, the length of an MD simulation is best managed through the more control is useful. `mdrun -nsteps 100` overrides the [.mdp] file and executes 100 steps. `mdrun -maxh 2.5` will terminate the simulation shortly before 2.5 hours elapse, which can be useful when -running under cluster queues (as long as the queueing system does not +running under cluster queues (as long as the queuing system does not ever suspend the simulation). Running a membrane protein embedding simulation @@ -143,7 +143,7 @@ long time in a previous simulation. In theory that could be accomplished with a procedure similar to genbox, but since lipids are much larger than water molecules it will lead to a large vacuum layer between the protein and membrane if we remove all molecules where any atom is -overlapping. Instead, this module works by first artifically shrinking +overlapping. Instead, this module works by first artificially shrinking the protein in the xy-plane, then it removes lipids that overlap with a much smaller core, after which we gradually push the protein atoms back to their initial positions, while using normal dynamics for the @@ -152,7 +152,7 @@ rest of the system so lipids adapt to the protein. To use membrane embedding, start by building a lipid bilayer that is just-so-slightly larger in the xy-plane than what you expect to need in the end, and make sure you have enough water outside the membrane -to accomodate globular domains. Place the protein in the same coordinate +to accommodate globular domains. Place the protein in the same coordinate file (and topology) as your lipid bilayer, and make sure it is in the orientation and position you want right in the middle of the bilayer. diff --git a/docs/user-guide/mdrun-performance.rst b/docs/user-guide/mdrun-performance.rst index c632ab5da5..07ecf55604 100644 --- a/docs/user-guide/mdrun-performance.rst +++ b/docs/user-guide/mdrun-performance.rst @@ -4,7 +4,7 @@ The GROMACS build system and the :ref:`gmx mdrun` tool has a lot of built-in and configurable intelligence to detect your hardware and make pretty effective use of that hardware. For a lot of casual and serious use of :ref:`gmx mdrun`, the automatic machinery works well enough. But to get the -most from your hardware to maximise your scientific quality, read on! +most from your hardware to maximize your scientific quality, read on! Hardware background information ------------------------------- @@ -152,7 +152,7 @@ log file, stdout and stderr are used to print diagnostics that inform the user about the choices made and possible consequences. A number of command-line parameters are available to vary the default -behaviour. +behavior. ``-nt`` The total number of threads to use. The default, 0, will start as @@ -168,7 +168,7 @@ behaviour. ``-ntomp`` The total number of OpenMP threads per rank to start. The default, 0, will start one thread on each available core. - Alternatively, mdrun will honour the appropriate system + Alternatively, mdrun will honor the appropriate system environment variable (e.g. ``OMP_NUM_THREADS``) if set. ``-npme`` @@ -460,7 +460,7 @@ parallel hardware. comes for free with the non-bonded communication. Particles beyond the non-bonded cut-off are only communicated when they have missing bonded interactions; this means that the extra cost is - minor and nearly indepedent of the value of ``-rdd``. With dynamic + minor and nearly independent of the value of ``-rdd``. With dynamic load balancing, option ``-rdd`` also sets the lower limit for the domain decomposition cell sizes. By default ``-rdd`` is determined by :ref:`gmx mdrun` based on the initial coordinates. The chosen value will diff --git a/scripts/GMXRC.bash.cmakein b/scripts/GMXRC.bash.cmakein index eed26cafe7..18457a6377 100644 --- a/scripts/GMXRC.bash.cmakein +++ b/scripts/GMXRC.bash.cmakein @@ -74,6 +74,18 @@ unset old_IFS # and this shell supports extended globbing if test -n "${BASH_VERSION+set}" && (complete) > /dev/null 2>&1; then if (shopt -s extglob) > /dev/null 2>&1; then + shopt -s extglob + if [ -f $GMXBIN/gmx-completion.bash ]; then + source $GMXBIN/gmx-completion.bash + for cfile in $GMXBIN/gmx-completion-*.bash ; do + source $cfile + done + fi + fi +elif test -n "${ZSH_VERSION+set}" > /dev/null 2>&1 ; then + autoload bashcompinit + if (bashcompinit) > /dev/null 2>&1; then + bashcompinit if [ -f $GMXBIN/gmx-completion.bash ]; then source $GMXBIN/gmx-completion.bash for cfile in $GMXBIN/gmx-completion-*.bash ; do @@ -81,12 +93,4 @@ if test -n "${BASH_VERSION+set}" && (complete) > /dev/null 2>&1; then done fi fi -# read zsh completions if understand how to use them -# Currently disabled, since the completions don't work with the new -# gmx binary with subcommands. -# Contributions to get the functionality back are welcome. -#elif test -n "${ZSH_VERSION+set}" && compctl >& /dev/null; then -# if [ -f $GMXBIN/gmx-completion.zsh ]; then -# source $GMXBIN/gmx-completion.zsh; -# fi fi diff --git a/src/gromacs/commandline/shellcompletions.cpp b/src/gromacs/commandline/shellcompletions.cpp index a0ef63e4c6..520ff46909 100644 --- a/src/gromacs/commandline/shellcompletions.cpp +++ b/src/gromacs/commandline/shellcompletions.cpp @@ -218,7 +218,6 @@ TextOutputStream &ShellCompletionWriter::outputStream() void ShellCompletionWriter::startCompletions() { impl_->file_.reset(new TextWriter(impl_->binaryName_ + "-completion.bash")); - impl_->file_->writeLine("shopt -s extglob"); } void ShellCompletionWriter::writeModuleCompletions( diff --git a/src/gromacs/gmxpreprocess/grompp.cpp b/src/gromacs/gmxpreprocess/grompp.cpp index 8a6e43c666..d8a6737091 100644 --- a/src/gromacs/gmxpreprocess/grompp.cpp +++ b/src/gromacs/gmxpreprocess/grompp.cpp @@ -1480,7 +1480,9 @@ int gmx_grompp(int argc, char *argv[]) "with [TT]-cpi[tt]. If you wish to change the ensemble or things", "like output frequency, then supplying the checkpoint file to", "[THISMODULE] with [TT]-t[tt] along with a new [REF].mdp[ref] file", - "with [TT]-f[tt] is the recommended procedure.[PAR]", + "with [TT]-f[tt] is the recommended procedure. Actually preserving", + "the ensemble (if possible) still requires passing the checkpoint", + "file to [gmx-mdrun] [TT]-cpi[tt].[PAR]", "By default, all bonded interactions which have constant energy due to", "virtual site constructions will be removed. If this constant energy is", diff --git a/src/gromacs/mdlib/compute_io.c b/src/gromacs/mdlib/compute_io.c index 7835ef4112..825447dba8 100644 --- a/src/gromacs/mdlib/compute_io.c +++ b/src/gromacs/mdlib/compute_io.c @@ -132,7 +132,7 @@ double compute_io(t_inputrec *ir, int natoms, gmx_groups_t *groups, ndh_tot += 1; } /* as data blocks: 1 real per dH point */ - cio += div_nsteps(nsteps, ir->fepvals->nstdhdl)*(ndh+ndhdl)*sizeof(real); + cio += div_nsteps(nsteps, ir->fepvals->nstdhdl)*ndh_tot*sizeof(real); } else { diff --git a/src/gromacs/mdlib/perf_est.c b/src/gromacs/mdlib/perf_est.c index bdb8c28267..0951875dd3 100644 --- a/src/gromacs/mdlib/perf_est.c +++ b/src/gromacs/mdlib/perf_est.c @@ -178,6 +178,7 @@ static void pp_group_load(gmx_mtop_t *mtop, t_inputrec *ir, matrix box, nq = 0; nlj = 0; *bChargePerturbed = FALSE; + *bTypePerturbed = FALSE; for (mb = 0; mb < mtop->nmolblock; mb++) { molt = &mtop->moltype[mtop->molblock[mb].type]; @@ -292,6 +293,7 @@ static void pp_verlet_load(gmx_mtop_t *mtop, t_inputrec *ir, matrix box, nqlj = 0; nq = 0; *bChargePerturbed = FALSE; + *bTypePerturbed = FALSE; for (mb = 0; mb < mtop->nmolblock; mb++) { molt = &mtop->moltype[mtop->molblock[mb].type]; diff --git a/src/gromacs/options/filenameoptionmanager.cpp b/src/gromacs/options/filenameoptionmanager.cpp index 212c6a26a5..1a627cd85c 100644 --- a/src/gromacs/options/filenameoptionmanager.cpp +++ b/src/gromacs/options/filenameoptionmanager.cpp @@ -268,15 +268,14 @@ std::string FileNameOptionManager::completeFileName( std::string FileNameOptionManager::completeDefaultFileName( const std::string &prefix, const FileNameOptionInfo &option) { - if (option.isDirectoryOption() || impl_->bInputCheckingDisabled_) + if (option.isDirectoryOption()) { return std::string(); } const bool bInput = option.isInputFile() || option.isInputOutputFile(); const std::string realPrefix = !impl_->defaultFileName_.empty() ? impl_->defaultFileName_ : prefix; - const bool bAllowMissing = option.allowMissing(); - if (bInput) + if (bInput && !impl_->bInputCheckingDisabled_) { const std::string completedName = findExistingExtension(realPrefix, option, impl_->redirector_); @@ -284,7 +283,7 @@ std::string FileNameOptionManager::completeDefaultFileName( { return completedName; } - if (bAllowMissing) + if (option.allowMissing()) { return realPrefix + option.defaultExtension(); } diff --git a/src/gromacs/options/tests/filenameoptionmanager.cpp b/src/gromacs/options/tests/filenameoptionmanager.cpp index 30b6697e2f..6a21188185 100644 --- a/src/gromacs/options/tests/filenameoptionmanager.cpp +++ b/src/gromacs/options/tests/filenameoptionmanager.cpp @@ -358,4 +358,27 @@ TEST_F(FileNameOptionManagerTest, EXPECT_EQ("testfile.trr", value); } +TEST_F(FileNameOptionManagerTest, DefaultNameOptionWorksWithoutInputChecking) +{ + std::string value; + ASSERT_NO_THROW_GMX(manager_.disableInputOptionChecking(true)); + ASSERT_NO_THROW_GMX(options_.addOption( + FileNameOption("f").store(&value).required() + .filetype(gmx::eftIndex).inputFile() + .defaultBasename("default") + .allowMissing())); + ASSERT_NO_THROW_GMX(manager_.addDefaultFileNameOption(&options_, "deffnm")); + EXPECT_EQ("default.ndx", value); + + gmx::OptionsAssigner assigner(&options_); + EXPECT_NO_THROW_GMX(assigner.start()); + EXPECT_NO_THROW_GMX(assigner.startOption("deffnm")); + EXPECT_NO_THROW_GMX(assigner.appendValue("missing")); + EXPECT_NO_THROW_GMX(assigner.finishOption()); + EXPECT_NO_THROW_GMX(assigner.finish()); + EXPECT_NO_THROW_GMX(options_.finish()); + + EXPECT_EQ("missing.ndx", value); +} + } // namespace diff --git a/src/gromacs/trajectoryanalysis/modules/sasa.cpp b/src/gromacs/trajectoryanalysis/modules/sasa.cpp index 9649102069..edff30830f 100644 --- a/src/gromacs/trajectoryanalysis/modules/sasa.cpp +++ b/src/gromacs/trajectoryanalysis/modules/sasa.cpp @@ -655,7 +655,7 @@ Sasa::initAnalysis(const TrajectoryAnalysisSettings &settings, AnalysisDataPlotModulePointer plotm( new AnalysisDataPlotModule(settings.plotSettings())); plotm->setFileName(fnAtomArea_); - plotm->setTitle("Area per residue over the trajectory"); + plotm->setTitle("Area per atom over the trajectory"); plotm->setXLabel("Atom"); plotm->setXFormat(8, 0); plotm->setYLabel("Area (nm\\S2\\N)"); @@ -667,11 +667,18 @@ Sasa::initAnalysis(const TrajectoryAnalysisSettings &settings, } { AnalysisDataAverageModulePointer avem(new AnalysisDataAverageModule); + int prevResind = -1; + int row = 0; for (int i = 0; i < surfaceSel_.posCount(); ++i) { const int atomIndex = surfaceSel_.position(i).atomIndices()[0]; const int residueIndex = atoms.atom[atomIndex].resind; - avem->setXAxisValue(i, atoms.resinfo[residueIndex].nr); + if (residueIndex != prevResind) + { + avem->setXAxisValue(row, atoms.resinfo[residueIndex].nr); + prevResind = residueIndex; + ++row; + } } residueArea_.addModule(avem); if (!fnResidueArea_.empty()) @@ -679,7 +686,7 @@ Sasa::initAnalysis(const TrajectoryAnalysisSettings &settings, AnalysisDataPlotModulePointer plotm( new AnalysisDataPlotModule(settings.plotSettings())); plotm->setFileName(fnResidueArea_); - plotm->setTitle("Area per atom over the trajectory"); + plotm->setTitle("Area per residue over the trajectory"); plotm->setXLabel("Residue"); plotm->setXFormat(8, 0); plotm->setYLabel("Area (nm\\S2\\N)"); diff --git a/src/programs/mdrun/resource-division.cpp b/src/programs/mdrun/resource-division.cpp index 9042aee8a9..6f4e1587ef 100644 --- a/src/programs/mdrun/resource-division.cpp +++ b/src/programs/mdrun/resource-division.cpp @@ -576,11 +576,18 @@ void check_resource_division_efficiency(const gmx_hw_info_t *hwinfo, /* Check if we have more than 1 physical core, if detected, * or more than 1 hardware thread if physical cores were not detected. */ +#if !(defined GMX_OPENMP) && !(defined GMX_MPI) if ((hwinfo->ncore > 1) || (hwinfo->ncore == 0 && hwinfo->nthreads_hw_avail > 1)) { md_print_warn(cr, fplog, "NOTE: GROMACS was compiled without OpenMP and (thread-)MPI support, can only use a single CPU core\n"); } +#else + GMX_UNUSED_VALUE(hwinfo); + GMX_UNUSED_VALUE(cr); + GMX_UNUSED_VALUE(fplog); +#endif + #endif /* GMX_OPENMP && GMX_MPI */ }