#define NFILE asize(fnm)
CopyRight(stderr,argv[0]);
- parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT | PCA_BE_NICE ,
+ parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT,
NFILE,fnm, asize(pa),pa, asize(desc),desc,
asize(bugs),bugs,&oenv
);
#define NFILE asize(fnm)
CopyRight(stdout,argv[0]);
- parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_BE_NICE ,NFILE,fnm,
+ parse_common_args(&argc,argv,PCA_CAN_TIME,NFILE,fnm,
asize(pa),pa,asize(desc),desc,asize(bugs),bugs);
top=read_top(ftp2fn(efTPX,NFILE,fnm));
int seed;
CopyRight(stdout,argv[0]);
- parse_common_args(&argc,argv,PCA_BE_NICE,NFILE,fnm,
+ parse_common_args(&argc,argv,0,NFILE,fnm,
NPA,pa,asize(desc),desc,0,NULL);
please_cite(stdout,"Timneanu2004a");
CopyRight(stderr,argv[0]);
- parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_BE_NICE ,NFILE,fnm,
+ parse_common_args(&argc,argv,PCA_CAN_TIME,NFILE,fnm,
asize(pa),pa,asize(desc),desc,0,NULL);
top = read_top(ftp2fn(efTPX,NFILE,fnm));
int eel=0,m=0;
CopyRight(stderr,argv[0]);
- parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE,fnm,NPA,pa,asize(desc),desc,0,NULL);
if (strcmp(opt[0],"cut") == 0)
#define NFILE asize(fnm)
CopyRight(stderr,argv[0]);
- parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_BE_NICE,
+ parse_common_args(&argc,argv,PCA_CAN_TIME,
NFILE,fnm,NPA,pa,asize(desc),desc,0,NULL,&oenv);
return "Print help information";
}
+ virtual void init(CommandLineModuleSettings *settings)
+ {
+ settings->setDefaultNiceLevel(0);
+ }
virtual int run(int argc, char *argv[]);
virtual void writeHelp(const CommandLineHelpContext &context) const;
--- /dev/null
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2014, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
+ *
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
+ */
+/*! \internal \file
+ * \brief
+ * Implements classes from cmdlinemodule.h.
+ *
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
+ * \ingroup module_commandline
+ */
+#include "gmxpre.h"
+
+#include "cmdlinemodule.h"
+
+#include "gromacs/commandline/cmdlinehelpcontext.h"
+
+namespace gmx
+{
+
+class CommandLineModuleSettings::Impl
+{
+ public:
+ Impl() : defaultNiceLevel_(19) {}
+
+ int defaultNiceLevel_;
+};
+
+CommandLineModuleSettings::CommandLineModuleSettings()
+ : impl_(new Impl)
+{
+}
+
+CommandLineModuleSettings::~CommandLineModuleSettings()
+{
+}
+
+int CommandLineModuleSettings::defaultNiceLevel() const
+{
+ return impl_->defaultNiceLevel_;
+}
+
+void CommandLineModuleSettings::setDefaultNiceLevel(int niceLevel)
+{
+ impl_->defaultNiceLevel_ = niceLevel;
+}
+
+//! \cond libapi
+void writeCommandLineHelpCMain(
+ const CommandLineHelpContext &context, const char *name,
+ int (*mainFunction)(int argc, char *argv[]))
+{
+ char *argv[2];
+ int argc = 1;
+ // TODO: The constness should not be cast away.
+ argv[0] = const_cast<char *>(name);
+ argv[1] = NULL;
+ GlobalCommandLineHelpContext global(context);
+ mainFunction(argc, argv);
+}
+//! \endcond
+
+} // namespace gmx
*/
/*! \file
* \brief
- * Declares gmx::CommandLineModuleInterface.
+ * Declares gmx::CommandLineModuleInterface and supporting classes.
*
* \author Teemu Murtola <teemu.murtola@gmail.com>
* \inpublicapi
#ifndef GMX_COMMANDLINE_CMDLINEMODULE_H
#define GMX_COMMANDLINE_CMDLINEMODULE_H
+#include "gromacs/utility/common.h"
+
namespace gmx
{
class CommandLineHelpContext;
+/*! \brief
+ * Settings to pass information between a module and the general runner.
+ *
+ * Methods in this class do not throw, except that construction may throw
+ * std::bad_alloc.
+ *
+ * \inpublicapi
+ * \ingroup module_commandline
+ */
+class CommandLineModuleSettings
+{
+ public:
+ CommandLineModuleSettings();
+ ~CommandLineModuleSettings();
+
+ //! Returns the default nice level for this module.
+ int defaultNiceLevel() const;
+
+ /*! \brief
+ * Sets the default nice level for this module.
+ *
+ * If not called, the module will be niced.
+ */
+ void setDefaultNiceLevel(int niceLevel);
+
+ private:
+ class Impl;
+
+ PrivateImplPointer<Impl> impl_;
+};
+
/*! \brief
* Module that can be run from command line using CommandLineModuleManager.
*
//! Returns a one-line description of the module.
virtual const char *shortDescription() const = 0;
+ /*! \brief
+ * Initializes the module and provides settings for the runner.
+ *
+ * This will be called before run(), and can be used to adjust
+ * initialization that the runner does.
+ */
+ virtual void init(CommandLineModuleSettings *settings) = 0;
/*! \brief
* Runs the module with the given arguments.
*
virtual void writeHelp(const CommandLineHelpContext &context) const = 0;
};
+//! \cond libapi
+/*! \libinternal \brief
+ * Helper to implement CommandLineModuleInterface::writeHelp() with a C-like
+ * main() function that calls parse_common_args().
+ *
+ * \param[in] context Context object for writing the help.
+ * \param[in] name Name of the module.
+ * \param[in] mainFunction C-like main() function that calls parse_common_args().
+ *
+ * \ingroup module_commandline
+ */
+void writeCommandLineHelpCMain(
+ const CommandLineHelpContext &context, const char *name,
+ int (*mainFunction)(int argc, char *argv[]));
+//! \endcond
+
} // namespace gmx
#endif
*/
bool finishOptions();
+ //! Adjust defaults based on module settings.
+ void adjustFromSettings(const CommandLineModuleSettings &settings);
+
//! Returns the internal Options object.
Options *options() { return &options_; }
//! Returns the settings for printing startup information.
return bQuiet_ && !bVersion_;
}
+ //! Returns the nice level.
+ int niceLevel() const { return niceLevel_; }
//! Returns the debug level.
int debugLevel() const { return debugLevel_; }
bool bQuiet_;
bool bVersion_;
bool bCopyright_;
+ int niceLevel_;
int debugLevel_;
GMX_DISALLOW_COPY_AND_ASSIGN(CommandLineCommonOptionsHolder);
#include <string>
#include <utility>
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
#include "gromacs/legacyheaders/copyrite.h"
#include "gromacs/commandline/cmdlinehelpcontext.h"
#include "gromacs/utility/gmxassert.h"
#include "gromacs/utility/stringutil.h"
-// For GMX_BINARY_SUFFIX
-#include "config.h"
-
namespace gmx
{
return shortDescription_;
}
+ virtual void init(CommandLineModuleSettings * /*settings*/)
+ {
+ }
virtual int run(int argc, char *argv[])
{
return mainFunction_(argc, argv);
}
virtual void writeHelp(const CommandLineHelpContext &context) const
{
- char *argv[2];
- int argc = 1;
- // TODO: The constness should not be cast away.
- argv[0] = const_cast<char *>(name_);
- argv[1] = NULL;
- GlobalCommandLineHelpContext global(context);
- mainFunction_(argc, argv);
+ writeCommandLineHelpCMain(context, name_, mainFunction_);
}
private:
const char *name_;
const char *shortDescription_;
CMainFunction mainFunction_;
-
};
//! \}
CommandLineCommonOptionsHolder::CommandLineCommonOptionsHolder()
: options_(NULL, NULL), bHelp_(false), bHidden_(false),
- bQuiet_(false), bVersion_(false), bCopyright_(true), debugLevel_(0)
+ bQuiet_(false), bVersion_(false), bCopyright_(true),
+ niceLevel_(19), debugLevel_(0)
{
binaryInfoSettings_.copyright(true);
}
.description("Print extended version information and quit"));
options_.addOption(BooleanOption("copyright").store(&bCopyright_)
.description("Print copyright information on startup"));
+ options_.addOption(IntegerOption("nice").store(&niceLevel_)
+ .description("Set the nicelevel (default depends on command)"));
options_.addOption(IntegerOption("debug").store(&debugLevel_)
.hidden().defaultValueIfSet(1)
.description("Write file with debug information, "
return !bVersion_;
}
+void CommandLineCommonOptionsHolder::adjustFromSettings(
+ const CommandLineModuleSettings &settings)
+{
+ if (!options_.isSet("nice"))
+ {
+ niceLevel_ = settings.defaultNiceLevel();
+ }
+}
+
/********************************************************************
* CommandLineModuleManager::Impl
*/
{
return 0;
}
- /* Open the debug file */
+
+ CommandLineModuleSettings settings;
+ module->init(&settings);
+ optionsHolder.adjustFromSettings(settings);
+
+ // Open the debug file.
if (optionsHolder.debugLevel() > 0)
{
std::string filename(impl_->programContext_.programName());
fprintf(stderr, "Will write debug log file: %s\n", filename.c_str());
gmx_init_debug(optionsHolder.debugLevel(), filename.c_str());
}
+#if defined(HAVE_UNISTD_H) && !defined(GMX_NO_NICE)
+ // Set the nice level unless disabled in the configuration.
+ if (optionsHolder.niceLevel() != 0)
+ {
+ static bool bNiceSet = false; // Only set it once.
+ if (!bNiceSet)
+ {
+ if (nice(optionsHolder.niceLevel()) == -1)
+ {
+ // Do nothing, but use the return value to avoid warnings.
+ }
+ bNiceSet = true;
+ }
+ }
+#endif
+
int rc = 0;
if (!(module == impl_->helpModule_ && !bMaster))
{
#include <algorithm>
#include <list>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "thread_mpi/threads.h"
-
#include "gromacs/commandline/cmdlinehelpcontext.h"
#include "gromacs/commandline/cmdlinehelpwriter.h"
#include "gromacs/commandline/cmdlineparser.h"
try
{
- int nicelevel = 0;
double tbegin = 0.0, tend = 0.0, tdelta = 0.0;
bool bView = false;
int xvgFormat = 0;
options.addManager(&fileOptManager);
options.setDescription(gmx::constArrayRefFromArray<const char *>(desc, ndesc));
- options.addOption(
- gmx::IntegerOption("nice").store(&nicelevel)
- .defaultValue(FF(PCA_BE_NICE) ? 19 : 0)
- .description("Set the nicelevel"));
-
if (FF(PCA_CAN_SET_DEFFNM))
{
fileOptManager.addDefaultFileNameOption(&options, "deffnm");
(time_unit_t)(timeUnitManager.timeUnit() + 1), bView,
(xvg_format_t)(xvgFormat + 1), 0);
- /* Set the nice level */
-#ifdef HAVE_UNISTD_H
-#ifndef GMX_NO_NICE
- /* The some system, e.g. the catamount kernel on cray xt3 do not have nice(2). */
- if (nicelevel != 0)
- {
- static gmx_bool nice_set = FALSE; /* only set it once */
- static tMPI_Thread_mutex_t init_mutex = TMPI_THREAD_MUTEX_INITIALIZER;
- tMPI_Thread_mutex_lock(&init_mutex);
- if (!nice_set)
- {
- if (nice(nicelevel) == -1)
- {
- /* Do nothing, but use the return value to avoid warnings. */
- }
- nice_set = TRUE;
- }
- tMPI_Thread_mutex_unlock(&init_mutex);
- }
-#endif
-#endif
-
timeUnitManager.scaleTimeOptions(&options);
/* Extract Time info from arguments */
#define PCA_CAN_SET_DEFFNM (1<<10)
/** Do not raise a fatal error when invalid options are encountered. */
#define PCA_NOEXIT_ON_ARGS (1<<11)
-/** Default to low priority. */
-#define PCA_BE_NICE (1<<13)
/** Is this node not reading: for parallel all nodes but the master */
#define PCA_NOT_READ_NODE (1<<16)
/** Don't do any special processing for ffREAD files */
virtual const char *name() const { return name_; }
virtual const char *shortDescription() const { return descr_; }
+ MOCK_METHOD1(init, void(gmx::CommandLineModuleSettings *settings));
MOCK_METHOD2(run, int(int argc, char *argv[]));
MOCK_CONST_METHOD1(writeHelp, void(const gmx::CommandLineHelpContext &context));
}
private:
+ //! Disable nice() calls for tests.
+ void disableNice(gmx::CommandLineModuleSettings *settings)
+ {
+ settings->setDefaultNiceLevel(0);
+ }
//! Checks the context passed to writeHelp().
void checkHelpContext(const gmx::CommandLineHelpContext &context) const;
using ::testing::_;
using ::testing::Invoke;
using ::testing::WithArg;
+ ON_CALL(*this, init(_))
+ .WillByDefault(WithArg<0>(Invoke(this, &MockModule::disableNice)));
ON_CALL(*this, writeHelp(_))
.WillByDefault(WithArg<0>(Invoke(this, &MockModule::checkHelpContext)));
}
using ::testing::_;
using ::testing::Args;
using ::testing::ElementsAreArray;
+ EXPECT_CALL(mod1, init(_));
EXPECT_CALL(mod1, run(_, _))
.With(Args<1, 0>(ElementsAreArray(args.argv() + 1, args.argc() - 1)));
int rc = 0;
using ::testing::_;
using ::testing::Args;
using ::testing::ElementsAreArray;
+ EXPECT_CALL(mod1, init(_));
EXPECT_CALL(mod1, run(_, _))
.With(Args<1, 0>(ElementsAreArray(args.argv(), args.argc())));
int rc = 0;
using ::testing::_;
using ::testing::Args;
using ::testing::ElementsAreArray;
+ EXPECT_CALL(mod1, init(_));
EXPECT_CALL(mod1, run(_, _))
.With(Args<1, 0>(ElementsAreArray(args.argv(), args.argc())));
int rc = 0;
using ::testing::_;
using ::testing::Args;
using ::testing::ElementsAreArray;
+ EXPECT_CALL(mod1, init(_));
EXPECT_CALL(mod1, run(_, _))
.With(Args<1, 0>(ElementsAreArray(args.argv() + 1, args.argc() - 1)));
int rc = 0;
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW | PCA_BE_NICE,
+ PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, npargs, ppa, asize(desc), desc, asize(bugs), bugs,
&oenv))
{
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, npargs, ppa, asize(desc), desc, asize(bugs), bugs,
&oenv))
{
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL,
&oenv))
{
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
real *msds;
- if (!parse_common_args(&argc, argv, PCA_BE_NICE | PCA_CAN_VIEW,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs,
&oenv))
{
npargs = asize(pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, npargs, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
"Number of points for smoothing" }
};
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, npargs, ppa, asize(desc), desc,
asize(bugs), bugs, &oenv))
{
rrange, krange, rincr, kincr, Rfrac;
int rkcount = 0, rblocksallocated = 0, kblocksallocated = 0;
- if (!parse_common_args(&argc, argv, PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_VIEW | PCA_TIME_UNIT | PCA_BE_NICE, NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
+ if (!parse_common_args(&argc, argv, PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_VIEW | PCA_TIME_UNIT,
+ NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
}
"Stop on errors in the file" }
};
- if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa),
+ if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa),
pa, asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END | PCA_BE_NICE,
+ PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END,
NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+ if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE, NFILE,
+ PCA_CAN_VIEW | PCA_CAN_TIME, NFILE,
fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE, NFILE, fnm, npargs,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT, NFILE, fnm, npargs,
ppa, asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
int nfspect, nfxpm, nfraw;
output_env_t oenv;
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
output_env_t oenv;
gmx_rmpbc_t gpbc = NULL;
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE, NFILE, fnm,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME, NFILE, fnm,
asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
output_env_t oenv;
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END | PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, 0,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, 0,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, 0,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
const char *sgfnm, *skfnm, *ndxfnm, *tpsfnm, *trxfnm;
output_env_t oenv;
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
gmx_rmpbc_t gpbc = NULL;
if (!parse_common_args(&argc, argv,
- PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs,
&oenv))
{
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW | PCA_BE_NICE,
+ PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, 0, NULL, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
{ efXVG, "-hq", "hq", ffOPTWR },
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW
- | PCA_BE_NICE, NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
+ NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL,
&oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pargs), pargs, asize(desc), desc, 0, NULL,
&oenv))
{
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
matrix box;
output_env_t oenv;
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
nthreads = gmx_omp_get_max_threads();
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
{ efXVG, "-sq", "sq", ffWRITE },
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
int npargs;
npargs = asize(pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW,
NFILE, fnm, npargs, pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
if (!parse_common_args(&argc, argv,
- PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW | PCA_BE_NICE,
+ PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_BE_NICE | PCA_TIME_UNIT, NFILE, fnm,
+ if (!parse_common_args(&argc, argv, PCA_TIME_UNIT, NFILE, fnm,
asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
if (!parse_common_args(&argc, argv,
PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_VIEW |
- PCA_TIME_UNIT | PCA_BE_NICE,
+ PCA_TIME_UNIT,
NFILE, fnm, NPA, pa, asize(desc), desc,
0, NULL, &oenv))
{
};
#define NFILE asize(fnm)
- if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
FILE *fp;
t_rgb rlo = {1, 1, 1}, rhi = {0, 0, 0};
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
npargs = asize(pa);
ppa = add_acf_pargs(&npargs, pa);
- if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
{
return 0;
opt.stepchange = 100;
opt.stepUpdateContrib = 100;
- if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+ if (!parse_common_args(&argc, argv, 0,
NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &opt.oenv))
{
return 0;
int i, nres;
char **resnm;
- if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+ if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
asize(desc), desc, 0, NULL, &oenv))
{
return 0;
"Avoid momory leaks during neighbor searching with option -ci. May be slow for large systems." },
};
- if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+ if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
"Keep velocities from input solute and solvent" },
};
- if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+ if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
virtual const char *name() const { return name_; }
virtual const char *shortDescription() const { return description_; };
+ virtual void init(CommandLineModuleSettings *settings);
virtual int run(int argc, char *argv[]);
virtual void writeHelp(const CommandLineHelpContext &context) const;
GMX_DISALLOW_COPY_AND_ASSIGN(RunnerCommandLineModule);
};
+void TrajectoryAnalysisCommandLineRunner::Impl::RunnerCommandLineModule::init(
+ CommandLineModuleSettings * /*settings*/)
+{
+}
+
int TrajectoryAnalysisCommandLineRunner::Impl::RunnerCommandLineModule::run(
int argc, char *argv[])
{
return NULL;
}
+ virtual void init(gmx::CommandLineModuleSettings * /*settings*/)
+ {
+ }
virtual int run(int /*argc*/, char * /*argv*/[])
{
printMessage();
}
const char *name_;
+};
+
+// TODO: Consider removing duplication with CMainCommandLineModule from
+// cmdlinemodulemanager.cpp.
+class NoNiceModule : public gmx::CommandLineModuleInterface
+{
+ public:
+ //! \copydoc gmx::CommandLineModuleManager::CMainFunction
+ typedef gmx::CommandLineModuleManager::CMainFunction CMainFunction;
+ /*! \brief
+ * Creates a wrapper module for the given main function.
+ *
+ * \param[in] name Name for the module.
+ * \param[in] shortDescription One-line description for the module.
+ * \param[in] mainFunction Main function to wrap.
+ *
+ * Does not throw.
+ */
+ NoNiceModule(const char *name, const char *shortDescription,
+ CMainFunction mainFunction)
+ : name_(name), shortDescription_(shortDescription),
+ mainFunction_(mainFunction)
+ {
+ }
+
+ virtual const char *name() const
+ {
+ return name_;
+ }
+ virtual const char *shortDescription() const
+ {
+ return shortDescription_;
+ }
+
+ virtual void init(gmx::CommandLineModuleSettings *settings)
+ {
+ settings->setDefaultNiceLevel(0);
+ }
+ virtual int run(int argc, char *argv[])
+ {
+ return mainFunction_(argc, argv);
+ }
+ virtual void writeHelp(const gmx::CommandLineHelpContext &context) const
+ {
+ writeCommandLineHelpCMain(context, name_, mainFunction_);
+ }
+
+ private:
+ const char *name_;
+ const char *shortDescription_;
+ CMainFunction mainFunction_;
};
/*! \brief
manager->addModuleCMain(name, shortDescription, mainFunction);
}
+/*! \brief
+ * Convenience function for creating and registering a module that defaults to
+ * -nice 0.
+ *
+ * \param[in] manager Module manager to which to register the module.
+ * \param[in] mainFunction Main function to wrap.
+ * \param[in] name Name for the new module.
+ * \param[in] shortDescription One-line description for the new module.
+ */
+void registerModuleNoNice(gmx::CommandLineModuleManager *manager,
+ gmx::CommandLineModuleManager::CMainFunction mainFunction,
+ const char *name, const char *shortDescription)
+{
+ gmx::CommandLineModulePointer module(
+ new NoNiceModule(name, shortDescription, mainFunction));
+ manager->addModule(move(module));
+}
+
/*! \brief
* Convenience function for registering a module for an obsolete tool.
*
registerModule(manager, &gmx_x2top, "x2top",
"Generate a primitive topology from coordinates");
- registerModule(manager, &gmx_mdrun, "mdrun",
- "Perform a simulation, do a normal mode analysis or an energy minimization");
+ registerModuleNoNice(manager, &gmx_mdrun, "mdrun",
+ "Perform a simulation, do a normal mode analysis or an energy minimization");
// Modules from gmx_ana.h.
registerModule(manager, &gmx_do_dssp, "do_dssp",
"Perform weighted histogram analysis after umbrella sampling");
registerModule(manager, &gmx_wheel, "wheel",
"Plot helical wheels");
- registerModule(manager, &gmx_view, "view",
- "View a trajectory on an X-Windows terminal");
+ registerModuleNoNice(manager, &gmx_view, "view",
+ "View a trajectory on an X-Windows terminal");
{
gmx::CommandLineModuleGroup group =