From 58b7e641852a904489a6f26c61422bb7fe4511f8 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Thu, 3 Dec 2009 13:32:12 +0100
Subject: [PATCH] Use argList::addOption, argList::addBoolOption (almost)
 everywhere

- ensure that the standard options (eg, from timeSelector) also have
  some usage information
---
 .../basic/potentialFoam/potentialFoam.C       |  4 +--
 .../uncoupledKinematicParcelFoam.C            |  2 +-
 applications/test/List/ListTest.C             | 10 +++---
 applications/test/PackedList/PackedListTest.C |  6 ++--
 .../fvSolutionCombine/fvSolutionCombine.C     |  5 +--
 applications/test/mvBak/mvBakTest.C           |  5 +--
 .../test/readCHEMKINIII/readCHEMKINIII.C      |  2 +-
 applications/test/tokenizeTest/tokenizeTest.C |  4 +--
 .../advanced/collapseEdges/collapseEdges.C    |  2 +-
 .../combinePatchFaces/combinePatchFaces.C     |  6 ++--
 .../mesh/advanced/modifyMesh/modifyMesh.C     |  2 +-
 .../advanced/refineHexMesh/refineHexMesh.C    |  2 +-
 .../refineWallLayer/refineWallLayer.C         | 11 ++++---
 .../refinementLevel/refinementLevel.C         |  2 +-
 .../mesh/advanced/removeFaces/removeFaces.C   |  4 +--
 .../mesh/advanced/splitCells/splitCells.C     |  8 ++---
 .../mesh/conversion/ansysToFoam/ansysToFoam.L |  2 +-
 .../mesh/conversion/cfx4ToFoam/cfx4ToFoam.C   |  2 +-
 .../fluent3DMeshToFoam/fluent3DMeshToFoam.L   |  8 ++---
 .../fluentMeshToFoam/fluentMeshToFoam.L       |  6 ++--
 .../foamToStarMesh/foamToStarMesh.C           |  8 ++---
 .../conversion/gambitToFoam/gambitToFoam.L    |  2 +-
 .../mesh/conversion/gmshToFoam/gmshToFoam.C   |  2 +-
 .../ideasUnvToFoam/ideasUnvToFoam.C           |  2 +-
 .../mesh/conversion/kivaToFoam/kivaToFoam.C   |  6 ++--
 .../mesh/conversion/mshToFoam/mshToFoam.C     |  2 +-
 .../conversion/plot3dToFoam/plot3dToFoam.C    |  8 ++---
 .../conversion/polyDualMesh/polyDualMeshApp.C |  8 ++---
 .../mesh/conversion/sammToFoam/sammToFoam.C   |  2 +-
 .../mesh/conversion/star4ToFoam/star4ToFoam.C |  6 ++--
 .../mesh/conversion/starToFoam/starToFoam.C   |  2 +-
 .../conversion/tetgenToFoam/tetgenToFoam.C    |  2 +-
 .../conversion/writeMeshObj/writeMeshObj.C    | 14 ++++----
 .../mesh/generation/blockMesh/blockMeshApp.C  |  4 +--
 .../extrude2DMesh/doExtrude2DMesh.C           |  2 +-
 .../generation/snappyHexMesh/snappyHexMesh.C  |  2 +-
 .../mesh/manipulation/attachMesh/attachMesh.C |  2 +-
 .../mesh/manipulation/autoPatch/autoPatch.C   |  2 +-
 .../mesh/manipulation/checkMesh/checkMesh.C   |  6 ++--
 .../createBaffles/createBaffles.C             |  6 ++--
 .../manipulation/createPatch/createPatch.C    |  2 +-
 .../manipulation/insideCells/insideCells.C    |  7 ++--
 .../mesh/manipulation/mergeMeshes/setRoots.H  |  4 +--
 .../mergeOrSplitBaffles/mergeOrSplitBaffles.C |  6 ++--
 .../mesh/manipulation/refineMesh/refineMesh.C | 25 +++++++--------
 .../manipulation/renumberMesh/renumberMesh.C  |  8 ++---
 .../mesh/manipulation/setSet/setSet.C         |  4 +--
 .../manipulation/setsToZones/setsToZones.C    |  2 +-
 .../singleCellMesh/singleCellMesh.C           |  3 +-
 .../mesh/manipulation/splitMesh/splitMesh.C   | 10 +++---
 .../splitMeshRegions/splitMeshRegions.C       | 18 +++++------
 .../mesh/manipulation/stitchMesh/stitchMesh.C | 23 ++++++-------
 .../mesh/manipulation/subsetMesh/subsetMesh.C |  4 +--
 .../transformPoints/transformPoints.C         | 12 +++----
 .../foamDebugSwitches/foamDebugSwitches.C     |  6 ++--
 .../miscellaneous/foamInfoExec/foamInfoExec.C |  8 ++---
 .../decomposePar/decomposePar.C               | 12 +++----
 .../reconstructPar/reconstructPar.C           |  4 +--
 .../reconstructParMesh/reconstructParMesh.C   |  4 +--
 .../redistributeMeshPar/redistributeMeshPar.C |  2 +-
 .../foamToEnsight/foamToEnsight.C             |  7 ++--
 .../foamToEnsightParts/foamToEnsightParts.C   |  6 ++--
 .../foamToFieldview9/foamToFieldview9.C       |  2 +-
 .../foamToTecplot360/foamToTecplot360.C       | 16 +++++-----
 .../dataConversion/foamToVTK/foamToVTK.C      | 28 ++++++++--------
 .../postProcessing/foamCalc/Make/files        |  2 +-
 .../foamCalc/{foamCalc.C => foamCalcApp.C}    | 17 +++++++---
 .../foamListTimes/foamListTimes.C             |  2 +-
 .../postProcessing/wall/yPlusRAS/yPlusRAS.C   |  2 +-
 .../applyBoundaryLayer/applyBoundaryLayer.C   |  6 ++--
 .../applyWallFunctionBoundaryConditions.C     |  2 +-
 .../changeDictionary/changeDictionary.C       |  4 +--
 .../foamUpgradeFvSolution.C                   |  2 +-
 .../preProcessing/mapFields/setRoots.H        |  8 ++---
 .../utilities/surface/surfaceAdd/surfaceAdd.C |  6 ++--
 .../surface/surfaceCheck/surfaceCheck.C       |  6 ++--
 .../surface/surfaceConvert/surfaceConvert.C   |  7 ++--
 .../surfaceFeatureExtract.C                   | 12 +++----
 .../surface/surfaceFind/surfaceFind.C         |  6 ++--
 .../surfaceMeshConvert/surfaceMeshConvert.C   | 14 ++++----
 .../surfaceMeshConvertTesting.C               | 17 ++++++----
 .../surfaceMeshExport/surfaceMeshExport.C     | 16 ++++++----
 .../surfaceMeshImport/surfaceMeshImport.C     | 16 ++++++----
 .../surfaceMeshTriangulate.C                  |  4 +--
 .../surface/surfaceOrient/surfaceOrient.C     |  2 +-
 .../surfaceRedistributePar.C                  |  4 +--
 .../surfaceSplitNonManifolds.C                |  2 +-
 .../surface/surfaceToPatch/surfaceToPatch.C   |  4 +--
 .../surfaceTransformPoints.C                  | 10 +++---
 src/OpenFOAM/db/Time/timeSelector.C           | 32 ++++++++++++++++---
 src/OpenFOAM/include/addRegionOption.H        |  8 ++++-
 src/OpenFOAM/include/addTimeOptions.H         | 29 ++++++++++++++---
 src/postProcessing/postCalc/postCalc.C        | 12 +++++--
 93 files changed, 369 insertions(+), 287 deletions(-)
 rename applications/utilities/postProcessing/foamCalc/{foamCalc.C => foamCalcApp.C} (90%)

diff --git a/applications/solvers/basic/potentialFoam/potentialFoam.C b/applications/solvers/basic/potentialFoam/potentialFoam.C
index 49188fcf008..a9c5d672119 100644
--- a/applications/solvers/basic/potentialFoam/potentialFoam.C
+++ b/applications/solvers/basic/potentialFoam/potentialFoam.C
@@ -38,11 +38,9 @@ Description
 
 int main(int argc, char *argv[])
 {
-
-    argList::validOptions.insert("writep", "");
+    argList::addBoolOption("writep", "write the final pressure field");
 
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 #   include "createMesh.H"
 #   include "createFields.H"
diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
index 625a3064667..ee0088c3974 100644
--- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
+++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
@@ -42,7 +42,7 @@ Description
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("cloudName", "cloud name");
+    argList::addOption("cloudName", "cloud name");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/test/List/ListTest.C b/applications/test/List/ListTest.C
index 0fee9a9e3b5..b9f69fd0436 100644
--- a/applications/test/List/ListTest.C
+++ b/applications/test/List/ListTest.C
@@ -47,11 +47,11 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("reList", "reList");
-    argList::validOptions.insert("wordList", "wordList");
-    argList::validOptions.insert("stringList", "stringList");
-    argList::validOptions.insert("float", "xx");
-    argList::validOptions.insert("flag", "");
+    argList::addOption("reList", "reList");
+    argList::addOption("wordList", "wordList");
+    argList::addOption("stringList", "stringList");
+    argList::addOption("float", "xx");
+    argList::addBoolOption("flag");
 
 #   include "setRootCase.H"
 
diff --git a/applications/test/PackedList/PackedListTest.C b/applications/test/PackedList/PackedListTest.C
index 9bf29923fe0..1e0ca6f385d 100644
--- a/applications/test/PackedList/PackedListTest.C
+++ b/applications/test/PackedList/PackedListTest.C
@@ -82,9 +82,9 @@ int main(int argc, char *argv[])
     argList::noParallel();
     argList::validArgs.insert("file .. fileN");
 
-    argList::validOptions.insert("mask", "");
-    argList::validOptions.insert("count", "");
-    argList::validOptions.insert("info", "");
+    argList::addBoolOption("mask");
+    argList::addBoolOption("count");
+    argList::addBoolOption("info");
 
     argList args(argc, argv, false, true);
 
diff --git a/applications/test/fvSolutionCombine/fvSolutionCombine.C b/applications/test/fvSolutionCombine/fvSolutionCombine.C
index 1d9f1017c09..e409d5db4ba 100644
--- a/applications/test/fvSolutionCombine/fvSolutionCombine.C
+++ b/applications/test/fvSolutionCombine/fvSolutionCombine.C
@@ -98,8 +98,9 @@ bool checkDictionaryContent(const dictionary& dict1, const dictionary& dict2)
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("rewrite", "");
-    argList::validOptions.insert("show", "");
+    argList::addBoolOption("rewrite");
+    argList::addBoolOption("show");
+
     argList args(argc, argv);
 
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/test/mvBak/mvBakTest.C b/applications/test/mvBak/mvBakTest.C
index 6580ed421c5..5cc25161dd5 100644
--- a/applications/test/mvBak/mvBakTest.C
+++ b/applications/test/mvBak/mvBakTest.C
@@ -39,8 +39,9 @@ int main(int argc, char *argv[])
     argList::noBanner();
     argList::noParallel();
     argList::validArgs.insert("file .. fileN");
-    argList::validOptions.erase("case");
-    argList::validOptions.insert("ext", "bak");
+
+    argList::removeOption("case");
+    argList::addOption("ext", "bak");
 
     argList args(argc, argv, false, true);
 
diff --git a/applications/test/readCHEMKINIII/readCHEMKINIII.C b/applications/test/readCHEMKINIII/readCHEMKINIII.C
index 10514de3fe1..5449297127f 100644
--- a/applications/test/readCHEMKINIII/readCHEMKINIII.C
+++ b/applications/test/readCHEMKINIII/readCHEMKINIII.C
@@ -38,7 +38,7 @@ int main(int argc, char *argv[])
 {
     argList::validArgs.clear();
     argList::validArgs.append("CHEMKINIIIFile");
-    argList::validOptions.insert("thermo", "fileName");
+    argList::addOption("thermo", "fileName");
     argList args(argc, argv);
 
     fileName thermoFileName = fileName::null;
diff --git a/applications/test/tokenizeTest/tokenizeTest.C b/applications/test/tokenizeTest/tokenizeTest.C
index decafd7fc42..cd80997f61d 100644
--- a/applications/test/tokenizeTest/tokenizeTest.C
+++ b/applications/test/tokenizeTest/tokenizeTest.C
@@ -44,8 +44,8 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.insert("string .. stringN");
-    argList::validOptions.insert("file", "name");
-    argList::validOptions.insert("repeat", "count");
+    argList::addOption("file", "name");
+    argList::addOption("repeat", "count");
 
     argList args(argc, argv, false, true);
 
diff --git a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
index bc0a575207d..3f1f29b2984 100644
--- a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
+++ b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
@@ -454,7 +454,7 @@ label simplifyFaces
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
     argList::validArgs.append("edge length [m]");
     argList::validArgs.append("merge angle (degrees)");
 
diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
index b0d0ab313b5..fa055e2758f 100644
--- a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
+++ b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
@@ -429,9 +429,9 @@ label mergeEdges(const scalar minCos, polyMesh& mesh)
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("feature angle [0..180]");
-    argList::validOptions.insert("concaveAngle", "[0..180]");
-    argList::validOptions.insert("snapMesh", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("concaveAngle", "[0..180]");
+    argList::addBoolOption("snapMesh");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C
index efe2b761ed4..b46a421eb37 100644
--- a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C
+++ b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C
@@ -328,7 +328,7 @@ label findCell(const primitiveMesh& mesh, const point& nearPoint)
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C b/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C
index 2b3d9ecc452..6175bd4e168 100644
--- a/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C
+++ b/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C
@@ -52,7 +52,7 @@ using namespace Foam;
 // Main program:
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
     argList::validArgs.append("cellSet");
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C
index 7e42676f3a4..731eac7855b 100644
--- a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C
+++ b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C
@@ -47,11 +47,12 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
-    Foam::argList::validArgs.append("patchName");
-    Foam::argList::validArgs.append("edgeWeight");
-    Foam::argList::validOptions.insert("useSet", "cellSet");
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::noParallel();
+    argList::validArgs.append("patchName");
+    argList::validArgs.append("edgeWeight");
+
+    argList::addOption("useSet", "cellSet");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C b/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C
index d3b1e14c63e..38842e7394a 100644
--- a/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C
+++ b/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C
@@ -97,7 +97,7 @@ bool limitRefinementLevel
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("readLevel", "");
+    argList::addBoolOption("readLevel");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/removeFaces/removeFaces.C b/applications/utilities/mesh/advanced/removeFaces/removeFaces.C
index c3fcc727d20..a7d13ba2c3d 100644
--- a/applications/utilities/mesh/advanced/removeFaces/removeFaces.C
+++ b/applications/utilities/mesh/advanced/removeFaces/removeFaces.C
@@ -48,8 +48,8 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::validOptions.insert("overwrite", "");
-    Foam::argList::validArgs.append("faceSet");
+    argList::addBoolOption("overwrite");
+    argList::validArgs.append("faceSet");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/splitCells/splitCells.C b/applications/utilities/mesh/advanced/splitCells/splitCells.C
index b2851345b87..1e1548f517e 100644
--- a/applications/utilities/mesh/advanced/splitCells/splitCells.C
+++ b/applications/utilities/mesh/advanced/splitCells/splitCells.C
@@ -525,10 +525,10 @@ void collectCuts
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("set", "cellSet name");
-    argList::validOptions.insert("geometry", "");
-    argList::validOptions.insert("tol", "edge snap tolerance");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("set", "cellSet name");
+    argList::addBoolOption("geometry");
+    argList::addOption("tol", "edge snap tolerance");
+    argList::addBoolOption("overwrite");
     argList::validArgs.append("edge angle [0..360]");
 
 #   include "setRootCase.H"
diff --git a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
index bcdf44f265f..d07eeb7b696 100644
--- a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
+++ b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
@@ -238,7 +238,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("ANSYS input file");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
index 7684db4c32f..e7a5a5ba564 100644
--- a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
+++ b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("CFX geom file");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
index 58523bc1647..4cb7406fecb 100644
--- a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
@@ -762,10 +762,10 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("Fluent mesh file");
-    argList::validOptions.insert("scale", "scale factor");
-    argList::validOptions.insert("ignoreCellGroups", "cell group names");
-    argList::validOptions.insert("ignoreFaceGroups", "face group names");
-    argList::validOptions.insert("cubit", "");
+    argList::addOption("scale", "scale factor");
+    argList::addOption("ignoreCellGroups", "cell group names");
+    argList::addOption("ignoreFaceGroups", "face group names");
+    argList::addBoolOption("cubit");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
index 3460a213e87..63ac7641767 100644
--- a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
@@ -867,9 +867,9 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("Fluent mesh file");
-    argList::validOptions.insert("scale", "scale factor");
-    argList::validOptions.insert("writeSets", "");
-    argList::validOptions.insert("writeZones", "");
+    argList::addOption("scale", "scale factor");
+    argList::addBoolOption("writeSets");
+    argList::addBoolOption("writeZones");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
index b36ec777694..7b021d355ca 100644
--- a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
+++ b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
@@ -76,10 +76,10 @@ int main(int argc, char *argv[])
     argList::noParallel();
     timeSelector::addOptions();
 
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("noBnd", "");
-    argList::validOptions.insert("tri", "");
-    argList::validOptions.insert("surface", "");
+    argList::addOption("scale", "scale");
+    argList::addBoolOption("noBnd");
+    argList::addBoolOption("tri");
+    argList::addBoolOption("surface");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
index bc88b46c1e0..47353f8e42f 100644
--- a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
+++ b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
@@ -639,7 +639,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("GAMBIT file");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
index 16977b92c67..45d144e8ab7 100644
--- a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
+++ b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
@@ -717,7 +717,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append(".msh file");
-    argList::validOptions.insert("keepOrientation", "");
+    argList::addBoolOption("keepOrientation");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C b/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C
index f289e8bb389..ba7ee39c808 100644
--- a/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C
+++ b/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C
@@ -579,7 +579,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append(".unv file");
-    argList::validOptions.insert("dump", "");
+    argList::addBoolOption("dump");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
index 551741974bf..dbd32851bfb 100644
--- a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
+++ b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
@@ -60,9 +60,9 @@ enum kivaVersions
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("file", "fileName");
-    argList::validOptions.insert("version", "[kiva3|kiva3v]");
-    argList::validOptions.insert("zHeadMin", "scalar");
+    argList::addOption("file", "fileName");
+    argList::addOption("version", "[kiva3|kiva3v]");
+    argList::addOption("zHeadMin", "scalar");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C b/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C
index 1d00c493938..1beea38d029 100644
--- a/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C
+++ b/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C
@@ -57,7 +57,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append(".msh file");
-    argList::validOptions.insert("hex", "");
+    argList::addBoolOption("hex");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
index b1ea5df43fb..8ad25caea68 100644
--- a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
+++ b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
@@ -58,10 +58,10 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("PLOT3D geom file");
-    argList::validOptions.insert("scale", "scale factor");
-    argList::validOptions.insert("noBlank", "");
-    argList::validOptions.insert("singleBlock", "");
-    argList::validOptions.insert("2D", "thickness");
+    argList::addOption("scale", "scale factor");
+    argList::addBoolOption("noBlank");
+    argList::addBoolOption("singleBlock");
+    argList::addOption("2D", "thickness");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
index a1bb6a74315..df229e4bf04 100644
--- a/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
+++ b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
@@ -357,10 +357,10 @@ int main(int argc, char *argv[])
     timeSelector::addOptions(true, false);
 
     argList::validArgs.append("feature angle[0-180]");
-    argList::validOptions.insert("splitAllFaces", "");
-    argList::validOptions.insert("concaveMultiCells", "");
-    argList::validOptions.insert("doNotPreserveFaceZones", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("splitAllFaces");
+    argList::addBoolOption("concaveMultiCells");
+    argList::addBoolOption("doNotPreserveFaceZones");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C b/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C
index 012382560d5..d4bfaa47e23 100644
--- a/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C
+++ b/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C
@@ -41,7 +41,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("SAMM mesh file prefix");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
index 390f2bd4ebd..0cc4c4efd29 100644
--- a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
+++ b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
@@ -62,9 +62,9 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("pro-STAR prefix");
-    argList::validOptions.insert("ascii", "");
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("solids", "");
+    argList::addBoolOption("ascii");
+    argList::addOption("scale", "scale");
+    argList::addBoolOption("solids");
 
     argList args(argc, argv);
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/utilities/mesh/conversion/starToFoam/starToFoam.C b/applications/utilities/mesh/conversion/starToFoam/starToFoam.C
index 24da39c9a17..90547da3afd 100644
--- a/applications/utilities/mesh/conversion/starToFoam/starToFoam.C
+++ b/applications/utilities/mesh/conversion/starToFoam/starToFoam.C
@@ -41,7 +41,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("STAR mesh file prefix");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C b/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C
index eaf44fed137..f830cfc1853 100644
--- a/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C
+++ b/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C
@@ -98,7 +98,7 @@ label findFace(const primitiveMesh& mesh, const face& f)
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("file prefix");
-    argList::validOptions.insert("noFaceFile", "");
+    argList::addBoolOption("noFaceFile");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
index c00be771118..47fc9c922f3 100644
--- a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
+++ b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
@@ -378,13 +378,13 @@ void writePointCells
 int main(int argc, char *argv[])
 {
     timeSelector::addOptions();
-    argList::validOptions.insert("patchFaces", "");
-    argList::validOptions.insert("patchEdges", "");
-    argList::validOptions.insert("cell", "cellI");
-    argList::validOptions.insert("face", "faceI");
-    argList::validOptions.insert("point", "pointI");
-    argList::validOptions.insert("cellSet", "setName");
-    argList::validOptions.insert("faceSet", "setName");
+    argList::addBoolOption("patchFaces");
+    argList::addBoolOption("patchEdges");
+    argList::addOption("cell", "cellI");
+    argList::addOption("face", "faceI");
+    argList::addOption("point", "pointI");
+    argList::addOption("cellSet", "setName");
+    argList::addOption("faceSet", "setName");
 #   include "addRegionOption.H"
 
 #   include "setRootCase.H"
diff --git a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
index 717f36b5378..6e92fae989c 100644
--- a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
+++ b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
@@ -72,8 +72,8 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("blockTopology", "");
-    argList::validOptions.insert("dict", "dictionary");
+    argList::addBoolOption("blockTopology");
+    argList::addOption("dict", "dictionary");
 #   include "addRegionOption.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C b/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C
index c71f91079c8..74104f14c36 100644
--- a/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C
+++ b/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C
@@ -58,7 +58,7 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("thickness");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
index 8fc3aaf3a49..727d21c0615 100644
--- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
+++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
@@ -115,7 +115,7 @@ void writeMesh
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
diff --git a/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C b/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C
index 341fc4eab67..35247413e1f 100644
--- a/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C
+++ b/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C
@@ -42,7 +42,7 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C b/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C
index a753d03c54b..abad7113926 100644
--- a/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C
+++ b/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C
@@ -71,7 +71,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("feature angle[0-180]");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
index 0ce3a9d8e64..f83461b25d2 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
+++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
@@ -49,9 +49,9 @@ int main(int argc, char *argv[])
 {
     timeSelector::addOptions();
 #   include "addRegionOption.H"
-    argList::validOptions.insert("noTopology", "");
-    argList::validOptions.insert("allGeometry", "");
-    argList::validOptions.insert("allTopology", "");
+    argList::addBoolOption("noTopology");
+    argList::addBoolOption("allGeometry");
+    argList::addBoolOption("allTopology");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
index 64403919f39..dc947862224 100644
--- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
+++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
@@ -128,9 +128,9 @@ int main(int argc, char *argv[])
 #   include "addRegionOption.H"
     argList::validArgs.append("faceZone");
     argList::validArgs.append("patch");
-    argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)");
-    argList::validOptions.insert("internalFacesOnly", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("additionalPatches", "(patch2 .. patchN)");
+    argList::addBoolOption("internalFacesOnly");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
index 6374722e461..d59f7317b94 100644
--- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C
+++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
@@ -517,7 +517,7 @@ void syncPoints
 int main(int argc, char *argv[])
 {
 #   include "addRegionOption.H"
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/insideCells/insideCells.C b/applications/utilities/mesh/manipulation/insideCells/insideCells.C
index 22f99465632..194b9a4c556 100644
--- a/applications/utilities/mesh/manipulation/insideCells/insideCells.C
+++ b/applications/utilities/mesh/manipulation/insideCells/insideCells.C
@@ -43,16 +43,15 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
-    Foam::argList::validArgs.append("surface file");
-    Foam::argList::validArgs.append("destination cellSet");
+    argList::noParallel();
+    argList::validArgs.append("surface file");
+    argList::validArgs.append("destination cellSet");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
 #   include "createPolyMesh.H"
 
     fileName surfName(args.additionalArgs()[0]);
-
     fileName setName(args.additionalArgs()[1]);
 
 
diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H b/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H
index cfbf59cf64a..2f421ba957a 100644
--- a/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H
+++ b/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H
@@ -2,11 +2,11 @@
 
     argList::validArgs.append("master root");
     argList::validArgs.append("master case");
-    argList::validOptions.insert("masterRegion", "name");
+    argList::addOption("masterRegion", "name");
 
     argList::validArgs.append("root to add");
     argList::validArgs.append("case to add");
-    argList::validOptions.insert("addRegion", "name");
+    argList::addOption("addRegion", "name");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C
index b1c064a6ee5..5053c95071c 100644
--- a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C
+++ b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C
@@ -223,9 +223,9 @@ labelList findBaffles(const polyMesh& mesh, const labelList& boundaryFaces)
 int main(int argc, char *argv[])
 {
 #   include "addRegionOption.H"
-    argList::validOptions.insert("split", "");
-    argList::validOptions.insert("overwrite", "");
-    argList::validOptions.insert("detectOnly", "");
+    argList::addBoolOption("split");
+    argList::addBoolOption("overwrite");
+    argList::addBoolOption("detectOnly");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
diff --git a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
index bbe5775b519..a33afdf711b 100644
--- a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
+++ b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
@@ -291,8 +291,8 @@ label twoDNess(const polyMesh& mesh)
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::validOptions.insert("dict", "");
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("dict");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
@@ -320,18 +320,17 @@ int main(int argc, char *argv[])
     {
         Info<< "Refining according to refineMeshDict" << nl << endl;
 
-        refineDict =
-            IOdictionary
+        refineDict = IOdictionary
+        (
+            IOobject
             (
-                IOobject
-                (
-                    "refineMeshDict",
-                    runTime.system(),
-                    mesh,
-                    IOobject::MUST_READ,
-                    IOobject::NO_WRITE
-                )
-            );
+                "refineMeshDict",
+                runTime.system(),
+                mesh,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            )
+        );
 
         word setName(refineDict.lookup("set"));
 
diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
index bdc60d724b4..56d63f74c90 100644
--- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
+++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
@@ -364,10 +364,10 @@ autoPtr<mapPolyMesh> reorderMesh
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("blockOrder", "");
-    argList::validOptions.insert("orderPoints", "");
-    argList::validOptions.insert("writeMaps", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("blockOrder");
+    argList::addBoolOption("orderPoints");
+    argList::addBoolOption("writeMaps");
+    argList::addBoolOption("overwrite");
 
 #   include "addTimeOptions.H"
 
diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C
index b704c71a5de..7833b4ec24d 100644
--- a/applications/utilities/mesh/manipulation/setSet/setSet.C
+++ b/applications/utilities/mesh/manipulation/setSet/setSet.C
@@ -843,8 +843,8 @@ int main(int argc, char *argv[])
 #   include "addRegionOption.H"
 #   include "addTimeOptions.H"
 
-    argList::validOptions.insert("noVTK", "");
-    argList::validOptions.insert("batch", "file");
+    argList::addBoolOption("noVTK");
+    argList::addOption("batch", "file");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
index 30aba0f5ab8..c384eba03d5 100644
--- a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
+++ b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
@@ -58,7 +58,7 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("noFlipMap", "");
+    argList::addBoolOption("noFlipMap");
 
 #   include "addRegionOption.H"
 #   include "addTimeOptions.H"
diff --git a/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C b/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C
index fe1e2850b97..927d8ca8549 100644
--- a/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C
+++ b/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C
@@ -66,7 +66,8 @@ void interpolateFields
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
+
 #   include "addTimeOptions.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
index d1455a55c56..0d8fe6490d8 100644
--- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
+++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
@@ -110,12 +110,12 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
+    argList::noParallel();
 
-    Foam::argList::validArgs.append("faceSet");
-    Foam::argList::validArgs.append("masterPatch");
-    Foam::argList::validArgs.append("slavePatch");
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::validArgs.append("faceSet");
+    argList::validArgs.append("masterPatch");
+    argList::validArgs.append("slavePatch");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
index b61d997399f..3b9903328ce 100644
--- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
+++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
@@ -1232,15 +1232,15 @@ label findCorrespondingRegion
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("cellZones", "");
-    argList::validOptions.insert("cellZonesOnly", "");
-    argList::validOptions.insert("blockedFaces", "faceSet");
-    argList::validOptions.insert("makeCellZones", "");
-    argList::validOptions.insert("largestOnly", "");
-    argList::validOptions.insert("insidePoint", "point");
-    argList::validOptions.insert("overwrite", "");
-    argList::validOptions.insert("detectOnly", "");
-    argList::validOptions.insert("sloppyCellZones", "");
+    argList::addBoolOption("cellZones");
+    argList::addBoolOption("cellZonesOnly");
+    argList::addOption("blockedFaces", "faceSet");
+    argList::addBoolOption("makeCellZones");
+    argList::addBoolOption("largestOnly");
+    argList::addOption("insidePoint", "point");
+    argList::addBoolOption("overwrite");
+    argList::addBoolOption("detectOnly");
+    argList::addBoolOption("sloppyCellZones");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
index 9d164f35538..a6b9e2cb3e4 100644
--- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
+++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
@@ -95,17 +95,16 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
+    argList::noParallel();
 
-    Foam::argList::validArgs.append("masterPatch");
-    Foam::argList::validArgs.append("slavePatch");
+    argList::validArgs.append("masterPatch");
+    argList::validArgs.append("slavePatch");
 
-    Foam::argList::validOptions.insert("partial", "");
-    Foam::argList::validOptions.insert("perfect", "");
+    argList::addBoolOption("partial");
+    argList::addBoolOption("perfect");
+    argList::addBoolOption("overwrite");
 
-    Foam::argList::validOptions.insert("overwrite", "");
-
-    Foam::argList::validOptions.insert("toleranceDict", "file with tolerances");
+    argList::addOption("toleranceDict", "file with tolerances");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
@@ -174,8 +173,10 @@ int main(int argc, char *argv[])
     dictionary slidingTolerances;
     if (args.options().found("toleranceDict"))
     {
-        IOdictionary toleranceFile(
-            IOobject(
+        IOdictionary toleranceFile
+        (
+            IOobject
+            (
                 args.options()["toleranceDict"],
                 runTime.constant(),
                 mesh,
@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
     // Make list of masterPatch faces
     labelList isf(masterPatch.size());
 
-    forAll (isf, i)
+    forAll(isf, i)
     {
         isf[i] = masterPatch.start() + i;
     }
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
index 303df1cbae0..fac26e6815c 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
+++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
@@ -152,8 +152,8 @@ void subsetPointFields
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("set");
-    argList::validOptions.insert("patch", "patch name");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("patch", "patch name");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
index f9b6354dd4e..9fdc9681c63 100644
--- a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
+++ b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
@@ -142,12 +142,12 @@ void rotateFields(const Time& runTime, const tensor& T)
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("translate", "vector");
-    argList::validOptions.insert("rotate", "(vector vector)");
-    argList::validOptions.insert("rollPitchYaw", "(roll pitch yaw)");
-    argList::validOptions.insert("yawPitchRoll", "(yaw pitch roll)");
-    argList::validOptions.insert("rotateFields", "");
-    argList::validOptions.insert("scale", "vector");
+    argList::addOption("translate", "vector");
+    argList::addOption("rotate", "(vector vector)");
+    argList::addOption("rollPitchYaw", "(roll pitch yaw)");
+    argList::addOption("yawPitchRoll", "(yaw pitch roll)");
+    argList::addBoolOption("rotateFields");
+    argList::addOption("scale", "vector");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
index d4eb9c3b63a..f71043c0342 100644
--- a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
+++ b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
@@ -41,10 +41,10 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("new", "");
-    argList::validOptions.insert("old", "");
+    argList::addBoolOption("new");
+    argList::addBoolOption("old");
 
-    Foam::argList args(argc, argv);
+    argList args(argc, argv);
 
     wordList currDebug(debug::debugSwitches().toc());
     wordList currInfo(debug::infoSwitches().toc());
diff --git a/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C b/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
index b55e5b97013..6f78a733b87 100644
--- a/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
+++ b/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
@@ -40,10 +40,10 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("times", "");
-    argList::validOptions.insert("dictionary", "dictionary name");
-    argList::validOptions.insert("keywords", "");
-    argList::validOptions.insert("entry", "entry name");
+    argList::addBoolOption("times");
+    argList::addOption("dictionary", "dictionary name");
+    argList::addBoolOption("keywords");
+    argList::addOption("entry", "entry name");
 
 #   include "setRootCase.H"
 
diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index f8a8ca01d57..34a30d63f65 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -87,12 +87,12 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
 #   include "addRegionOption.H"
-    argList::validOptions.insert("cellDist", "");
-    argList::validOptions.insert("copyUniform", "");
-    argList::validOptions.insert("fields", "");
-    argList::validOptions.insert("filterPatches", "");
-    argList::validOptions.insert("force", "");
-    argList::validOptions.insert("ifRequired", "");
+    argList::addBoolOption("cellDist");
+    argList::addBoolOption("copyUniform");
+    argList::addBoolOption("fields");
+    argList::addBoolOption("filterPatches");
+    argList::addBoolOption("force");
+    argList::addBoolOption("ifRequired");
 
 #   include "setRootCase.H"
 
diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
index fd354a47807..8def808e458 100644
--- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
+++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
@@ -50,8 +50,8 @@ int main(int argc, char *argv[])
     timeSelector::addOptions(true, true);
     argList::noParallel();
 #   include "addRegionOption.H"
-    argList::validOptions.insert("fields", "\"(list of fields)\"");
-    argList::validOptions.insert("noLagrangian", "");
+    argList::addOption("fields", "\"(list of fields)\"");
+    argList::addBoolOption("noLagrangian");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
index d98d171e6b6..04810a4e0c5 100644
--- a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
+++ b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
@@ -281,8 +281,8 @@ autoPtr<mapPolyMesh> mergeSharedPoints
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("mergeTol", "relative merge distance");
-    argList::validOptions.insert("fullMatch", "");
+    argList::addOption("mergeTol", "relative merge distance");
+    argList::addBoolOption("fullMatch");
 
 #   include "addTimeOptions.H"
 #   include "addRegionOption.H"
diff --git a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
index 20398a16d3e..dbcb9e16430 100644
--- a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
+++ b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
@@ -506,7 +506,7 @@ void compareFields
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("mergeTol", "relative merge distance");
+    argList::addOption("mergeTol", "relative merge distance");
 #   include "setRootCase.H"
 
     // Create processor directory if non-existing
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
index d0a59b5116f..977972e4cac 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
@@ -93,9 +93,10 @@ bool inFileNameList
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("ascii", "" );
-    argList::validOptions.insert("patches", "patchList");
-    argList::validOptions.insert("noPatches", "");
+    argList::addBoolOption("ascii");
+    argList::addBoolOption("noPatches");
+
+    argList::addOption("patches", "patchList");
 
 #   include "addTimeOptions.H"
 #   include "setRootCase.H"
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
index e4f2ee2f257..6797f69978e 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
@@ -79,9 +79,9 @@ int main(int argc, char *argv[])
     // afterwards anyhow
     timeSelector::addOptions(true, false);
     argList::noParallel();
-    argList::validOptions.insert("ascii", "");
-    argList::validOptions.insert("index",  "start");
-    argList::validOptions.insert("noMesh", "");
+    argList::addBoolOption("ascii");
+    argList::addOption("index",  "start");
+    argList::addBoolOption("noMesh");
 
     // the volume field types that we handle
     wordHashSet volFieldTypes;
diff --git a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C
index 8f69fe0b2f6..1e3b781a7e3 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C
@@ -177,7 +177,7 @@ static void writeFaceData
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("noWall", "");
+    argList::addBoolOption("noWall");
     timeSelector::addOptions(true, false);
 
 #   include "setRootCase.H"
diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
index 8ed17ebffb1..14e0468c0b7 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
@@ -168,18 +168,18 @@ int main(int argc, char *argv[])
 
 #   include "addRegionOption.H"
 
-    argList::validOptions.insert("fields", "fields");
-    argList::validOptions.insert("cellSet", "cellSet name");
-    argList::validOptions.insert("faceSet", "faceSet name");
-    argList::validOptions.insert("nearCellValue","");
-    argList::validOptions.insert("noInternal","");
-    argList::validOptions.insert("noPointValues","");
-    argList::validOptions.insert
+    argList::addOption("fields", "fields");
+    argList::addOption("cellSet", "cellSet name");
+    argList::addOption("faceSet", "faceSet name");
+    argList::addBoolOption("nearCellValue");
+    argList::addBoolOption("noInternal");
+    argList::addBoolOption("noPointValues");
+    argList::addOption
     (
         "excludePatches",
         "patches (wildcards) to exclude"
     );
-    argList::validOptions.insert("noFaceZones","");
+    argList::addBoolOption("noFaceZones");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
index 5743bda34bf..9a82419e201 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
@@ -241,20 +241,20 @@ int main(int argc, char *argv[])
 
 #   include "addRegionOption.H"
 
-    argList::validOptions.insert("fields", "fields");
-    argList::validOptions.insert("cellSet", "cellSet name");
-    argList::validOptions.insert("faceSet", "faceSet name");
-    argList::validOptions.insert("pointSet", "pointSet name");
-    argList::validOptions.insert("ascii","");
-    argList::validOptions.insert("surfaceFields","");
-    argList::validOptions.insert("nearCellValue","");
-    argList::validOptions.insert("noInternal","");
-    argList::validOptions.insert("noPointValues","");
-    argList::validOptions.insert("allPatches","");
-    argList::validOptions.insert("excludePatches","patches to exclude");
-    argList::validOptions.insert("noFaceZones","");
-    argList::validOptions.insert("noLinks","");
-    argList::validOptions.insert("useTimeName","");
+    argList::addOption("fields", "fields");
+    argList::addOption("cellSet", "cellSet name");
+    argList::addOption("faceSet", "faceSet name");
+    argList::addOption("pointSet", "pointSet name");
+    argList::addBoolOption("ascii");
+    argList::addBoolOption("surfaceFields");
+    argList::addBoolOption("nearCellValue");
+    argList::addBoolOption("noInternal");
+    argList::addBoolOption("noPointValues");
+    argList::addBoolOption("allPatches");
+    argList::addOption("excludePatches","patches to exclude");
+    argList::addBoolOption("noFaceZones");
+    argList::addBoolOption("noLinks");
+    argList::addBoolOption("useTimeName");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/postProcessing/foamCalc/Make/files b/applications/utilities/postProcessing/foamCalc/Make/files
index a2d961e8513..1d17b8db164 100644
--- a/applications/utilities/postProcessing/foamCalc/Make/files
+++ b/applications/utilities/postProcessing/foamCalc/Make/files
@@ -1,3 +1,3 @@
-foamCalc.C
+foamCalcApp.C
 
 EXE = $(FOAM_APPBIN)/foamCalc
diff --git a/applications/utilities/postProcessing/foamCalc/foamCalc.C b/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
similarity index 90%
rename from applications/utilities/postProcessing/foamCalc/foamCalc.C
rename to applications/utilities/postProcessing/foamCalc/foamCalcApp.C
index c673ed24552..29a5e7e4460 100644
--- a/applications/utilities/postProcessing/foamCalc/foamCalc.C
+++ b/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
@@ -26,8 +26,9 @@ Application
     foamCalc
 
 Description
-    Generic wrapper for calculating a quantity at each time. Split into four
-    phases:
+    Generic wrapper for calculating a quantity at each time.
+
+    Split into four phases:
         1. Intialise
         2. Pre-time calculation loop
         3. Calculation loop
@@ -43,8 +44,16 @@ Description
 int main(int argc, char *argv[])
 {
     Foam::timeSelector::addOptions();
-    Foam::argList::validOptions.insert("noWrite", "");
-    Foam::argList::validOptions.insert("dict", "dictionary name");
+    Foam::argList::addBoolOption
+    (
+        "noWrite",
+        "suppress writing results"
+    );
+    Foam::argList::addOption
+    (
+        "dict",
+        "dictionary name"
+    );
 
     if (argc < 2)
     {
diff --git a/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C b/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
index 0a10a5744fa..4e72f388744 100644
--- a/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
+++ b/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
     timeSelector::addOptions();  // -constant enabled
     argList::noBanner();
     argList::noParallel();
-    argList::validOptions.insert("processor", "");
+    argList::addBoolOption("processor");
 
 #   include "setRootCase.H"
 
diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C
index a71e0fb1d25..718daf7c267 100644
--- a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C
+++ b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C
@@ -186,7 +186,7 @@ int main(int argc, char *argv[])
 
     #include "addRegionOption.H"
 
-    argList::validOptions.insert("compressible","");
+    argList::addBoolOption("compressible");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
index 52d79cec815..361bce909c0 100644
--- a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
+++ b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
@@ -50,9 +50,9 @@ static const scalar kappa(0.41);
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("ybl", "scalar");
-    argList::validOptions.insert("Cbl", "scalar");
-    argList::validOptions.insert("writenut", "");
+    argList::addOption("ybl", "scalar");
+    argList::addOption("Cbl", "scalar");
+    argList::addBoolOption("writenut");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C
index b2f53d5e0d4..1357362daab 100644
--- a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C
+++ b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C
@@ -334,7 +334,7 @@ void updateIncompressibleCase(const fvMesh& mesh)
 int main(int argc, char *argv[])
 {
     #include "addTimeOptions.H"
-    argList::validOptions.insert("compressible", "");
+    argList::addBoolOption("compressible");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index 8d60a6c88e9..efb24b7d408 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -245,8 +245,8 @@ bool merge
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("instance", "instance");
-    argList::validOptions.insert("literalRE", "");
+    argList::addOption("instance", "instance");
+    argList::addBoolOption("literalRE");
     #include "addRegionOption.H"
 
     #include "setRootCase.H"
diff --git a/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C b/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C
index 9c96a9a4c22..e964cf70f78 100644
--- a/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C
+++ b/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C
@@ -50,7 +50,7 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("test", "");
+    argList::addBoolOption("test");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/preProcessing/mapFields/setRoots.H b/applications/utilities/preProcessing/mapFields/setRoots.H
index 6aceba234f4..3758fbee6a2 100644
--- a/applications/utilities/preProcessing/mapFields/setRoots.H
+++ b/applications/utilities/preProcessing/mapFields/setRoots.H
@@ -2,10 +2,10 @@
     argList::validArgs.clear();
     argList::validArgs.append("source dir");
 
-    argList::validOptions.insert("sourceTime", "scalar");
-    argList::validOptions.insert("parallelSource", "");
-    argList::validOptions.insert("parallelTarget", "");
-    argList::validOptions.insert("consistent", "");
+    argList::addOption("sourceTime", "scalar");
+    argList::addBoolOption("parallelSource");
+    argList::addBoolOption("parallelTarget");
+    argList::addBoolOption("consistent");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/surface/surfaceAdd/surfaceAdd.C b/applications/utilities/surface/surfaceAdd/surfaceAdd.C
index e8f1d3b7038..305c9d48c2f 100644
--- a/applications/utilities/surface/surfaceAdd/surfaceAdd.C
+++ b/applications/utilities/surface/surfaceAdd/surfaceAdd.C
@@ -51,8 +51,10 @@ int main(int argc, char *argv[])
     argList::validArgs.append("Foam surface file");
     argList::validArgs.append("Foam surface file");
     argList::validArgs.append("Foam output file");
-    argList::validOptions.insert("points", "pointsFile");
-    argList::validOptions.insert("mergeRegions", "");
+
+    argList::addOption("points", "pointsFile");
+    argList::addBoolOption("mergeRegions");
+
     argList args(argc, argv);
 
     fileName inFileName1(args.additionalArgs()[0]);
diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
index 1a8253b25d7..854cea06991 100644
--- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C
+++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
@@ -172,8 +172,10 @@ int main(int argc, char *argv[])
 
     argList::validArgs.clear();
     argList::validArgs.append("surface file");
-    argList::validOptions.insert("checkSelfIntersection", "");
-    argList::validOptions.insert("verbose", "");
+
+    argList::addBoolOption("checkSelfIntersection");
+    argList::addBoolOption("verbose");
+
     argList args(argc, argv);
 
     bool checkSelfIntersection = args.optionFound("checkSelfIntersection");
diff --git a/applications/utilities/surface/surfaceConvert/surfaceConvert.C b/applications/utilities/surface/surfaceConvert/surfaceConvert.C
index f7df57d1e18..8481addc031 100644
--- a/applications/utilities/surface/surfaceConvert/surfaceConvert.C
+++ b/applications/utilities/surface/surfaceConvert/surfaceConvert.C
@@ -63,9 +63,10 @@ int main(int argc, char *argv[])
     argList::validArgs.clear();
     argList::validArgs.append("inputFile");
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("group", "");
+
+    argList::addBoolOption("clean");
+    argList::addBoolOption("group");
+    argList::addOption("scale", "scale");
 
     argList args(argc, argv);
     const stringList& params = args.additionalArgs();
diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
index c3a7e5a26dd..307edd85685 100644
--- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
+++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
@@ -101,13 +101,13 @@ int main(int argc, char *argv[])
     argList::validArgs.append("surface");
     argList::validArgs.append("output set");
 
-    argList::validOptions.insert("includedAngle", "included angle [0..180]");
-    argList::validOptions.insert("set", "input feature set");
+    argList::addOption("includedAngle", "included angle [0..180]");
+    argList::addOption("set", "input feature set");
 
-    argList::validOptions.insert("minLen", "cumulative length of feature");
-    argList::validOptions.insert("minElem", "number of edges in feature");
-    argList::validOptions.insert("subsetBox", "((x0 y0 z0)(x1 y1 z1))");
-    argList::validOptions.insert("deleteBox", "((x0 y0 z0)(x1 y1 z1))");
+    argList::addOption("minLen", "cumulative length of feature");
+    argList::addOption("minElem", "number of edges in feature");
+    argList::addOption("subsetBox", "((x0 y0 z0)(x1 y1 z1))");
+    argList::addOption("deleteBox", "((x0 y0 z0)(x1 y1 z1))");
     argList args(argc, argv);
 
     Pout<< "Feature line extraction is only valid on closed manifold surfaces."
diff --git a/applications/utilities/surface/surfaceFind/surfaceFind.C b/applications/utilities/surface/surfaceFind/surfaceFind.C
index b710a52493e..dcaccc04c29 100644
--- a/applications/utilities/surface/surfaceFind/surfaceFind.C
+++ b/applications/utilities/surface/surfaceFind/surfaceFind.C
@@ -44,9 +44,9 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.clear();
-    argList::validOptions.insert("x", "X");
-    argList::validOptions.insert("y", "Y");
-    argList::validOptions.insert("z", "Z");
+    argList::addOption("x", "X");
+    argList::addOption("y", "Y");
+    argList::addOption("z", "Z");
 
     argList::validArgs.append("surface file");
 
diff --git a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
index 6e730cc60ab..bf98b2673b6 100644
--- a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
+++ b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
@@ -73,12 +73,14 @@ int main(int argc, char *argv[])
     argList::noParallel();
     argList::validArgs.append("inputFile");
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scaleIn",  "scale");
-    argList::validOptions.insert("scaleOut", "scale");
-    argList::validOptions.insert("dict", "coordinateSystemsDict");
-    argList::validOptions.insert("from", "sourceCoordinateSystem");
-    argList::validOptions.insert("to",   "targetCoordinateSystem");
+
+    argList::addBoolOption("clean");
+
+    argList::addOption("scaleIn",  "scale");
+    argList::addOption("scaleOut", "scale");
+    argList::addOption("dict", "coordinateSystemsDict");
+    argList::addOption("from", "sourceCoordinateSystem");
+    argList::addOption("to",   "targetCoordinateSystem");
 
     argList args(argc, argv);
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C b/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C
index e53a8616d82..22c37c2379e 100644
--- a/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C
+++ b/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C
@@ -75,13 +75,16 @@ int main(int argc, char *argv[])
     argList::noParallel();
     argList::validArgs.append("inputFile");
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("orient", "");
-    argList::validOptions.insert("surfMesh", "");
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("triSurface", "");
-    argList::validOptions.insert("unsorted", "");
-    argList::validOptions.insert("triFace", "");
+
+    argList::addBoolOption("clean");
+    argList::addBoolOption("orient");
+    argList::addBoolOption("surfMesh");
+    argList::addBoolOption("triSurface");
+    argList::addBoolOption("unsorted");
+    argList::addBoolOption("triFace");
+
+    argList::addOption("scale", "scale");
+
 #   include "setRootCase.H"
     const stringList& params = args.additionalArgs();
 
diff --git a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
index 40a1a398206..98445dde2b1 100644
--- a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
+++ b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
@@ -75,13 +75,15 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("name",  "name");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scaleIn",  "scale");
-    argList::validOptions.insert("scaleOut", "scale");
-    argList::validOptions.insert("dict", "coordinateSystemsDict");
-    argList::validOptions.insert("from", "sourceCoordinateSystem");
-    argList::validOptions.insert("to",   "targetCoordinateSystem");
+
+    argList::addBoolOption("clean");
+
+    argList::addOption("name",  "name");
+    argList::addOption("scaleIn",  "scale");
+    argList::addOption("scaleOut", "scale");
+    argList::addOption("dict", "coordinateSystemsDict");
+    argList::addOption("from", "sourceCoordinateSystem");
+    argList::addOption("to",   "targetCoordinateSystem");
 
     argList args(argc, argv);
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
index 808eefcd76c..a8552bbb05b 100644
--- a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
+++ b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
@@ -75,13 +75,15 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("inputFile");
-    argList::validOptions.insert("name",  "name");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scaleIn",  "scale");
-    argList::validOptions.insert("scaleOut", "scale");
-    argList::validOptions.insert("dict", "coordinateSystemsDict");
-    argList::validOptions.insert("from", "sourceCoordinateSystem");
-    argList::validOptions.insert("to",   "targetCoordinateSystem");
+
+    argList::addBoolOption("clean");
+
+    argList::addOption("name",  "name");
+    argList::addOption("scaleIn",  "scale");
+    argList::addOption("scaleOut", "scale");
+    argList::addOption("dict", "coordinateSystemsDict");
+    argList::addOption("from", "sourceCoordinateSystem");
+    argList::addOption("to",   "targetCoordinateSystem");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C
index 132fca6c342..51c8425d665 100644
--- a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C
+++ b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C
@@ -51,8 +51,8 @@ int main(int argc, char *argv[])
 {
     argList::validArgs.append("output file");
 #   include "addRegionOption.H"
-    argList::validOptions.insert("excludeProcPatches", "");
-    argList::validOptions.insert("patches", "(patch0 .. patchN)");
+    argList::addBoolOption("excludeProcPatches");
+    argList::addOption("patches", "(patch0 .. patchN)");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/surface/surfaceOrient/surfaceOrient.C b/applications/utilities/surface/surfaceOrient/surfaceOrient.C
index c6fd31c0294..39620435b16 100644
--- a/applications/utilities/surface/surfaceOrient/surfaceOrient.C
+++ b/applications/utilities/surface/surfaceOrient/surfaceOrient.C
@@ -45,7 +45,7 @@ int main(int argc, char *argv[])
     argList::validArgs.append("Foam surface file");
     argList::validArgs.append("visiblePoint");
     argList::validArgs.append("output file");
-    argList::validOptions.insert("inside", "");
+    argList::addBoolOption("inside");
     argList args(argc, argv);
 
     fileName surfFileName(args.additionalArgs()[0]);
diff --git a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
index 8b37f70fe44..24a6facb0f4 100644
--- a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
+++ b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
@@ -103,7 +103,7 @@ int main(int argc, char *argv[])
     argList::validArgs.append("triSurfaceMesh");
     argList::validArgs.append("distributionType");
 
-    argList::validOptions.insert("keepNonMapped", "");
+    argList::addBoolOption("keepNonMapped");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
@@ -213,7 +213,7 @@ int main(int argc, char *argv[])
         (
             IOstream::ASCII,
             IOstream::currentVersion,
-            ioDict.time().writeCompression()        
+            ioDict.time().writeCompression()
         );
     }
 
diff --git a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C
index 09d13cb2a89..3e8500bee4e 100644
--- a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C
+++ b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C
@@ -688,7 +688,7 @@ int main(int argc, char *argv[])
 
     argList::validArgs.append("surface file");
     argList::validArgs.append("output surface file");
-    argList::validOptions.insert("debug", "");
+    argList::addBoolOption("debug");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
index dd5a2e2edf7..c4adb969a36 100644
--- a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
+++ b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
@@ -166,8 +166,8 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("surface file");
-    argList::validOptions.insert("faceSet", "faceSet name");
-    argList::validOptions.insert("tol", "fraction of mesh size");
+    argList::addOption("faceSet", "faceSet name");
+    argList::addOption("tol", "fraction of mesh size");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C
index be4449c6ae4..85e3cc11723 100644
--- a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C
+++ b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C
@@ -59,11 +59,11 @@ int main(int argc, char *argv[])
 
     argList::validArgs.append("surface file");
     argList::validArgs.append("output surface file");
-    argList::validOptions.insert("translate", "vector");
-    argList::validOptions.insert("rotate", "(vector vector)");
-    argList::validOptions.insert("scale", "vector");
-    argList::validOptions.insert("rollPitchYaw", "(roll pitch yaw)");
-    argList::validOptions.insert("yawPitchRoll", "(yaw pitch roll)");
+    argList::addOption("translate", "vector");
+    argList::addOption("rotate", "(vector vector)");
+    argList::addOption("scale", "vector");
+    argList::addOption("rollPitchYaw", "(roll pitch yaw)");
+    argList::addOption("yawPitchRoll", "(yaw pitch roll)");
     argList args(argc, argv);
 
     fileName surfFileName(args.additionalArgs()[0]);
diff --git a/src/OpenFOAM/db/Time/timeSelector.C b/src/OpenFOAM/db/Time/timeSelector.C
index caf8c4f3a0f..bb12d0d7da2 100644
--- a/src/OpenFOAM/db/Time/timeSelector.C
+++ b/src/OpenFOAM/db/Time/timeSelector.C
@@ -124,15 +124,37 @@ void Foam::timeSelector::addOptions
 {
     if (constant)
     {
-        argList::validOptions.insert("constant", "");
+        argList::addBoolOption
+        (
+            "constant",
+            "include the 'constant/' dir in the times list"
+        );
     }
     if (zeroTime)
     {
-        argList::validOptions.insert("zeroTime", "");
+        argList::addBoolOption
+        (
+            "zeroTime",
+            "include the '0/' dir in the times list"
+        );
     }
-    argList::validOptions.insert("noZero", "");
-    argList::validOptions.insert("time", "ranges");
-    argList::validOptions.insert("latestTime", "");
+    argList::addBoolOption
+    (
+        "noZero",
+        "exclude the '0/' dir from the times list, "
+        "has precedence over the -zeroTime option"
+    );
+    argList::addBoolOption
+    (
+        "latestTime",
+        "select the latest time"
+    );
+    argList::addOption
+    (
+        "time",
+        "ranges",
+        "comma-separated time ranges - eg, ':10,20,40-70,1000:'"
+    );
 }
 
 
diff --git a/src/OpenFOAM/include/addRegionOption.H b/src/OpenFOAM/include/addRegionOption.H
index 4ece251a172..d801dd0de60 100644
--- a/src/OpenFOAM/include/addRegionOption.H
+++ b/src/OpenFOAM/include/addRegionOption.H
@@ -2,4 +2,10 @@
 // addRegionOption.H
 // ~~~~~~~~~~~~~~~~~
 
-    Foam::argList::validOptions.insert("region", "name");
+    Foam::argList::addOption
+    (
+        "region",
+        "name",
+        "specify alternative mesh region"
+    );
+
diff --git a/src/OpenFOAM/include/addTimeOptions.H b/src/OpenFOAM/include/addTimeOptions.H
index ec57beec07a..6110015c70f 100644
--- a/src/OpenFOAM/include/addTimeOptions.H
+++ b/src/OpenFOAM/include/addTimeOptions.H
@@ -2,7 +2,28 @@
 // addTimeOptions.H
 // ~~~~~~~~~~~~~~~~
 
-    Foam::argList::validOptions.insert("constant", "");
-    Foam::argList::validOptions.insert("latestTime", "");
-    Foam::argList::validOptions.insert("noZero", "");
-    Foam::argList::validOptions.insert("time", "time");
+    Foam::argList::addBoolOption
+    (
+        "constant",
+        "include the 'constant/' dir in the times list"
+    );
+
+    Foam::argList::addBoolOption
+    (
+        "latestTime",
+        "select the latest time"
+    );
+
+    Foam::argList::addBoolOption
+    (
+        "noZero",
+        "exclude the '0/' dir from the times list"
+    );
+
+    Foam::argList::addOption
+    (
+        "time",
+        "time",
+        "specify a single time value to select"
+    );
+
diff --git a/src/postProcessing/postCalc/postCalc.C b/src/postProcessing/postCalc/postCalc.C
index fd3b29ed5dd..9f03a51960e 100644
--- a/src/postProcessing/postCalc/postCalc.C
+++ b/src/postProcessing/postCalc/postCalc.C
@@ -58,8 +58,16 @@ namespace Foam
 int main(int argc, char *argv[])
 {
     Foam::timeSelector::addOptions();
-    Foam::argList::validOptions.insert("noWrite", "");
-    Foam::argList::validOptions.insert("dict", "dictionary name");
+    Foam::argList::addBoolOption
+    (
+        "noWrite",
+        "suppress writing results"
+    );
+    Foam::argList::addOption
+    (
+        "dict",
+        "dictionary name"
+    );
 
 #   include "setRootCase.H"
 #   include "createTime.H"
-- 
GitLab