From f38190213c8f4fd6abdc81656abec50670a6474a Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 12 Dec 2018 11:58:56 +0100 Subject: [PATCH] ENH: support usage descriptions for command arguments --- .../combinePatchFaces/combinePatchFaces.C | 10 +++- .../refineWallLayer/refineWallLayer.C | 18 ++++-- .../mesh/advanced/splitCells/splitCells.C | 6 +- .../mesh/conversion/ccm/ccmToFoam/ccmToFoam.C | 2 +- .../mesh/conversion/fireToFoam/fireToFoam.C | 2 +- .../conversion/foamToSurface/foamToSurface.C | 3 +- .../mesh/conversion/star4ToFoam/star4ToFoam.C | 2 +- .../conversion/tetgenToFoam/tetgenToFoam.C | 2 +- .../vtkUnstructuredToFoam.C | 2 +- .../foamyHexMeshSurfaceSimplify.C | 2 +- .../foamyHexMeshSurfaceSimplify_non_octree.C | 4 +- .../mesh/manipulation/autoPatch/autoPatch.C | 2 +- .../manipulation/deformedGeom/deformedGeom.C | 2 +- .../mesh/manipulation/objToVTK/objToVTK.C | 4 +- .../orientFaceZone/orientFaceZone.C | 4 +- .../polyDualMesh/polyDualMeshApp.C | 7 ++- .../mesh/manipulation/rotateMesh/rotateMesh.C | 6 +- .../mesh/manipulation/splitMesh/splitMesh.C | 6 +- .../mesh/manipulation/stitchMesh/stitchMesh.C | 12 +++- .../foamDictionary/foamDictionary.C | 2 +- .../utilities/surface/surfaceAdd/surfaceAdd.C | 6 +- .../surfaceBooleanFeatures.C | 18 +++--- .../surface/surfaceCheck/surfaceCheck.C | 3 +- .../surface/surfaceClean/surfaceClean.C | 9 +-- .../surface/surfaceCoarsen/surfaceCoarsen.C | 6 +- .../surface/surfaceConvert/surfaceConvert.C | 4 +- .../surfaceFeatureConvert.C | 4 +- .../surface/surfaceFind/surfaceFind.C | 2 +- .../surface/surfaceHookUp/surfaceHookUp.C | 2 +- .../surface/surfaceInertia/surfaceInertia.C | 3 +- .../surface/surfaceInflate/surfaceInflate.C | 6 +- .../surfaceLambdaMuSmooth.C | 11 ++-- .../surfaceMeshConvert/surfaceMeshConvert.C | 4 +- .../surfaceMeshExport/surfaceMeshExport.C | 2 +- .../surfaceMeshImport/surfaceMeshImport.C | 2 +- .../surface/surfaceMeshInfo/surfaceMeshInfo.C | 2 +- .../surfaceMeshTriangulate.C | 3 +- .../surface/surfaceOrient/surfaceOrient.C | 7 ++- .../surfacePointMerge/surfacePointMerge.C | 6 +- .../surfaceRefineRedGreen.C | 4 +- .../surfaceSplitByPatch/surfaceSplitByPatch.C | 2 +- .../surfaceSplitByTopology.C | 4 +- .../surfaceSplitNonManifolds.C | 4 +- .../surface/surfaceSubset/surfaceSubset.C | 6 +- .../surfaceTransformPoints.C | 4 +- src/OpenFOAM/global/argList/argList.C | 48 +++++++++++++--- src/OpenFOAM/global/argList/argList.H | 27 ++++++--- src/OpenFOAM/global/argList/argListHelp.C | 57 +++++++++++++++++++ src/OpenFOAM/global/argList/argListI.H | 12 ++++ 49 files changed, 256 insertions(+), 110 deletions(-) diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C index 0b276b24b0..1f99e7a44f 100644 --- a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C +++ b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C @@ -350,7 +350,11 @@ int main(int argc, char *argv[]) #include "addOverwriteOption.H" - argList::addArgument("featureAngle [0..180]"); + argList::addArgument + ( + "featureAngle", + "in degrees [0-180]" + ); argList::addOption ( "concaveAngle", @@ -360,7 +364,7 @@ int main(int argc, char *argv[]) argList::addBoolOption ( "meshQuality", - "Read user-defined mesh quality criterions from system/meshQualityDict" + "Read user-defined mesh quality criteria from system/meshQualityDict" ); argList::noFunctionObjects(); // Never use function objects @@ -411,7 +415,7 @@ int main(int argc, char *argv[]) IOobject::MUST_READ, IOobject::NO_WRITE ) - ) + ) ); } diff --git a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C index 9c094f67bf..c7f88394cc 100644 --- a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C +++ b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C @@ -31,7 +31,7 @@ Description Refine cells next to specified patches. Arguments: - 1: List of patch name regular expressions + 1: List of patch names or regular expressions 2: The size of the refined cells as a fraction of the edge-length. Examples: @@ -63,13 +63,21 @@ int main(int argc, char *argv[]) { argList::addNote ( - "Refine cells next to specified patches.\n" - "The list of patches may contain regular expressions.\n" + "Refine cells next to specified patches." ); #include "addOverwriteOption.H" - argList::addArgument("patches"); - argList::addArgument("edgeFraction"); + argList::addArgument + ( + "patches", + "The list of patch names or regex - Eg, '(top \"Wall.\")'" + ); + argList::addArgument + ( + "edgeFraction", + "The size of the refined cells as a fraction of the edge-length" + " on a (0,1) interval" + ); argList::addOption ( diff --git a/applications/utilities/mesh/advanced/splitCells/splitCells.C b/applications/utilities/mesh/advanced/splitCells/splitCells.C index ea6f01a8ef..068fedefbc 100644 --- a/applications/utilities/mesh/advanced/splitCells/splitCells.C +++ b/applications/utilities/mesh/advanced/splitCells/splitCells.C @@ -526,7 +526,11 @@ int main(int argc, char *argv[]) ); #include "addOverwriteOption.H" argList::noParallel(); - argList::addArgument("edgeAngle [0..360]"); + argList::addArgument + ( + "edgeAngle", + "in degrees [0-360]" + ); argList::addOption ( diff --git a/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C b/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C index dc98e24c84..e4a98f81a2 100644 --- a/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C +++ b/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C @@ -99,7 +99,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("ccmMesh"); + argList::addArgument("ccm-file", "The input .ccm or .ccmg file"); argList::addBoolOption ( "ascii", diff --git a/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C b/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C index 80b6a66f37..d9186830e8 100644 --- a/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C +++ b/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("firePolyMesh"); + argList::addArgument("firePolyMesh", "The input FIRE mesh"); argList::addBoolOption ( "ascii", diff --git a/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C b/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C index d54a389546..eea517725c 100644 --- a/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C +++ b/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C @@ -61,7 +61,8 @@ int main(int argc, char *argv[]) "Extract boundaries from an OpenFOAM mesh and write in a surface format" ); argList::noParallel(); - argList::addArgument("outputFile.ext"); + argList::addArgument("output", "The output surface file"); + timeSelector::addOptions(); argList::addOption diff --git a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C index 1a18f874ab..ae79053150 100644 --- a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C +++ b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C @@ -70,7 +70,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("PROSTAR prefix"); + argList::addArgument("prefix", "The prefix for the input PROSTAR files"); argList::addBoolOption ( "ascii", diff --git a/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C b/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C index 8b11cdf887..e16f1bb225 100644 --- a/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C +++ b/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C @@ -106,7 +106,7 @@ int main(int argc, char *argv[]) "Convert tetgen .ele and .node and .face files to an OpenFOAM mesh" ); - argList::addArgument("file prefix"); + argList::addArgument("prefix", "The prefix for the input tetgen files"); argList::addBoolOption ( "noFaceFile", diff --git a/applications/utilities/mesh/conversion/vtkUnstructuredToFoam/vtkUnstructuredToFoam.C b/applications/utilities/mesh/conversion/vtkUnstructuredToFoam/vtkUnstructuredToFoam.C index 1d1fc344f1..fec6081279 100644 --- a/applications/utilities/mesh/conversion/vtkUnstructuredToFoam/vtkUnstructuredToFoam.C +++ b/applications/utilities/mesh/conversion/vtkUnstructuredToFoam/vtkUnstructuredToFoam.C @@ -58,7 +58,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument(".vtk ascii file"); + argList::addArgument("vtk-file", "The input legacy ascii vtk file"); #include "setRootCase.H" #include "createTime.H" diff --git a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify.C b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify.C index e75a349a7a..94f7b4879f 100644 --- a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify.C +++ b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify.C @@ -369,7 +369,7 @@ int main(int argc, char *argv[]) "Re-sample surfaces used in foamyHexMesh operation" ); - argList::addArgument("outputName"); + argList::addArgument("output", "The output triSurface/ file"); argList::noFunctionObjects(); // Never use function objects diff --git a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify_non_octree.C b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify_non_octree.C index 9607b1be26..851ec67336 100644 --- a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify_non_octree.C +++ b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/foamyHexMeshSurfaceSimplify_non_octree.C @@ -53,8 +53,8 @@ int main(int argc, char *argv[]) ( "Re-sample surfaces used in foamyHexMesh operation" ); - argList::addArgument("(nx ny nz)"); - argList::addArgument("outputName"); + argList::addArgument("(nx ny nz)", "The resampling interval"); + argList::addArgument("output", "The output triSurface/ file"); argList::noFunctionObjects(); // Never use function objects diff --git a/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C b/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C index 216f0b1f78..2bc2a0e10f 100644 --- a/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C +++ b/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C @@ -83,7 +83,7 @@ int main(int argc, char *argv[]) argList::noParallel(); argList::noFunctionObjects(); // Never use function objects - argList::addArgument("feature angle[0-180]"); + argList::addArgument("featureAngle", "in degrees [0-180]"); #include "setRootCase.H" #include "createTime.H" diff --git a/applications/utilities/mesh/manipulation/deformedGeom/deformedGeom.C b/applications/utilities/mesh/manipulation/deformedGeom/deformedGeom.C index 673990720e..9b62d9b3cf 100644 --- a/applications/utilities/mesh/manipulation/deformedGeom/deformedGeom.C +++ b/applications/utilities/mesh/manipulation/deformedGeom/deformedGeom.C @@ -50,7 +50,7 @@ int main(int argc, char *argv[]) " supplied as an argument" ); - argList::addArgument("scaling factor"); + argList::addArgument("factor", "The deformation scaling factor"); #include "setRootCase.H" diff --git a/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C b/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C index 145add013b..db8e637390 100644 --- a/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C +++ b/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C @@ -116,8 +116,8 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("OBJ file"); - argList::addArgument("output VTK file"); + argList::addArgument("obj-file", "The input obj line file"); + argList::addArgument("vtk-file", "The output vtk file"); argList args(argc, argv); const fileName objName = args[1]; diff --git a/applications/utilities/mesh/manipulation/orientFaceZone/orientFaceZone.C b/applications/utilities/mesh/manipulation/orientFaceZone/orientFaceZone.C index dd7cbb1dc2..71b4edddc5 100644 --- a/applications/utilities/mesh/manipulation/orientFaceZone/orientFaceZone.C +++ b/applications/utilities/mesh/manipulation/orientFaceZone/orientFaceZone.C @@ -28,7 +28,7 @@ Group grpMeshManipulationUtilities Description - Corrects teh orientation of faceZone. + Corrects the orientation of faceZone. - correct in parallel - excludes coupled faceZones from walk - correct for non-manifold faceZones - restarts walk @@ -55,7 +55,7 @@ int main(int argc, char *argv[]) ); #include "addRegionOption.H" argList::addArgument("faceZone"); - argList::addArgument("outsidePoint"); + argList::addArgument("point", "A point outside of the mesh"); #include "setRootCase.H" #include "createTime.H" diff --git a/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C b/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C index ade2e37574..96108a38e3 100644 --- a/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C +++ b/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C @@ -368,7 +368,12 @@ int main(int argc, char *argv[]) #include "addOverwriteOption.H" argList::noParallel(); - argList::addArgument("featureAngle [0-180]"); + argList::addArgument + ( + "featureAngle", + "in degrees [0-180]" + ); + argList::addBoolOption ( "splitAllFaces", diff --git a/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C b/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C index 4634356a68..1109a77092 100644 --- a/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C +++ b/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C @@ -72,13 +72,13 @@ int main(int argc, char *argv[]) argList::addNote ( "Rotate mesh points and vector/tensor fields\n" - "Rotation from the vector to the vector" + "Rotation from the vector to the vector" ); timeSelector::addOptions(); - argList::addArgument("n1"); - argList::addArgument("n2"); + argList::addArgument("from", "The vector to rotate from"); + argList::addArgument("to", "The vector to rotate to"); #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 5626b4367c..1e09c8a201 100644 --- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C +++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C @@ -123,9 +123,9 @@ int main(int argc, char *argv[]) #include "addOverwriteOption.H" - argList::addArgument("faceSet"); - argList::addArgument("masterPatch"); - argList::addArgument("slavePatch"); + argList::addArgument("faceSet", "The faces used for splitting"); + argList::addArgument("master", "The master patch name"); + argList::addArgument("slave", "The slave patch name"); #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 104753bc4c..a8c241fa0c 100644 --- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C +++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C @@ -145,8 +145,16 @@ int main(int argc, char *argv[]) ); // The arguments are non-mandatory when using dictionary mode - argList::addArgument("masterPatch"); - argList::addArgument("slavePatch"); + argList::addArgument + ( + "master", + "The master patch name (non-dictionary mode)" + ); + argList::addArgument + ( + "slave", + "The slave patch name (non-dictionary mode)" + ); #include "setRootCaseNonMandatoryArgs.H" diff --git a/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C b/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C index 509b8cd999..7844b57033 100644 --- a/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C +++ b/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C @@ -269,7 +269,7 @@ int main(int argc, char *argv[]) argList::noBanner(); argList::noJobInfo(); - argList::addArgument("dictionary"); + argList::addArgument("dict", "The dictionary file to process"); argList::addBoolOption("keywords", "List keywords"); argList::addOption("entry", "name", "Report/select the named entry"); argList::addBoolOption diff --git a/applications/utilities/surface/surfaceAdd/surfaceAdd.C b/applications/utilities/surface/surfaceAdd/surfaceAdd.C index 1b76e56ca8..c63d01cbbc 100644 --- a/applications/utilities/surface/surfaceAdd/surfaceAdd.C +++ b/applications/utilities/surface/surfaceAdd/surfaceAdd.C @@ -56,9 +56,9 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("surfaceFile"); - argList::addArgument("output surfaceFile"); + argList::addArgument("surface1", "The input surface file 1"); + argList::addArgument("surface2", "The input surface file 2"); + argList::addArgument("output", "The output surface file"); argList::addOption ( diff --git a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C index 2d8099236e..c958d686fd 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C +++ b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C @@ -1509,14 +1509,18 @@ int main(int argc, char *argv[]) { argList::addNote ( - "Generates the extendedFeatureEdgeMesh for the interface between" + "Generates the extendedFeatureEdgeMesh for the interface created by" " a boolean operation on two surfaces." ); argList::noParallel(); - argList::addArgument("action"); - argList::addArgument("surfaceFile1"); - argList::addArgument("surfaceFile2"); + argList::addArgument + ( + "action", + "One of (intersection | union | difference)" + ); + argList::addArgument("surface1", "The input surface file 1"); + argList::addArgument("surface2", "The input surface file 2"); argList::addOption ( @@ -1560,12 +1564,6 @@ int main(int argc, char *argv[]) " 'mixed' (keep all)" ); - argList::addNote - ( - "Valid actions: \"intersection\", \"union\", \"difference\"" - ); - - #include "setRootCase.H" #include "createTime.H" diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index f648c8a962..af3fa2c6ce 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -323,7 +323,8 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addBoolOption ( "checkSelfIntersection", diff --git a/applications/utilities/surface/surfaceClean/surfaceClean.C b/applications/utilities/surface/surfaceClean/surfaceClean.C index c6e725ff69..c4cca5fb6f 100644 --- a/applications/utilities/surface/surfaceClean/surfaceClean.C +++ b/applications/utilities/surface/surfaceClean/surfaceClean.C @@ -59,10 +59,11 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("min length"); - argList::addArgument("min quality"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("length", "The min length"); + argList::addArgument("quality", "The min quality"); + argList::addArgument("output", "The output surface file"); + argList::addBoolOption ( "noClean", diff --git a/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C b/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C index 754c0be069..45dc24cfab 100644 --- a/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C +++ b/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C @@ -77,9 +77,9 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("reductionFactor"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("factor", "The reduction factor [0,1)"); + argList::addArgument("output", "The output surface file"); argList::addOption ( "scale", diff --git a/applications/utilities/surface/surfaceConvert/surfaceConvert.C b/applications/utilities/surface/surfaceConvert/surfaceConvert.C index a9f6a4c6b9..c7dfe7e93b 100644 --- a/applications/utilities/surface/surfaceConvert/surfaceConvert.C +++ b/applications/utilities/surface/surfaceConvert/surfaceConvert.C @@ -68,8 +68,8 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("inputFile"); - argList::addArgument("outputFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList::addBoolOption ( diff --git a/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C b/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C index 66ed0564bd..7f0dc558cb 100644 --- a/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C +++ b/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C @@ -49,8 +49,8 @@ int main(int argc, char *argv[]) "Convert between edgeMesh formats" ); argList::noParallel(); - argList::addArgument("inputFile"); - argList::addArgument("outputFile"); + argList::addArgument("input", "The input edge file"); + argList::addArgument("output", "The output edge file"); argList::addOption ( "scale", diff --git a/applications/utilities/surface/surfaceFind/surfaceFind.C b/applications/utilities/surface/surfaceFind/surfaceFind.C index 709481d5b7..0a48bcf707 100644 --- a/applications/utilities/surface/surfaceFind/surfaceFind.C +++ b/applications/utilities/surface/surfaceFind/surfaceFind.C @@ -52,7 +52,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); + argList::addArgument("input", "The input surface file"); argList::addOption("x", "X", "The point x-coordinate (if non-zero)"); argList::addOption("y", "Y", "The point y-coordinate (if non-zero)"); argList::addOption("z", "Z", "The point y-coordinate (if non-zero)"); diff --git a/applications/utilities/surface/surfaceHookUp/surfaceHookUp.C b/applications/utilities/surface/surfaceHookUp/surfaceHookUp.C index 5f83dfe06f..8f86b60246 100644 --- a/applications/utilities/surface/surfaceHookUp/surfaceHookUp.C +++ b/applications/utilities/surface/surfaceHookUp/surfaceHookUp.C @@ -273,7 +273,7 @@ int main(int argc, char *argv[]) " boundary edges to match other surface boundary edges" ); argList::noParallel(); - argList::addArgument("hookTolerance"); + argList::addArgument("hookTolerance", "The point merge tolerance"); #include "addDictOption.H" diff --git a/applications/utilities/surface/surfaceInertia/surfaceInertia.C b/applications/utilities/surface/surfaceInertia/surfaceInertia.C index 88a977c5c3..cb1d5a583d 100644 --- a/applications/utilities/surface/surfaceInertia/surfaceInertia.C +++ b/applications/utilities/surface/surfaceInertia/surfaceInertia.C @@ -60,7 +60,8 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addBoolOption ( "shellProperties", diff --git a/applications/utilities/surface/surfaceInflate/surfaceInflate.C b/applications/utilities/surface/surfaceInflate/surfaceInflate.C index 82d104ed2f..0b1cfff730 100644 --- a/applications/utilities/surface/surfaceInflate/surfaceInflate.C +++ b/applications/utilities/surface/surfaceInflate/surfaceInflate.C @@ -597,9 +597,9 @@ int main(int argc, char *argv[]) "Switch on additional debug information" ); - argList::addArgument("inputFile"); - argList::addArgument("distance"); - argList::addArgument("safety factor [1..]"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("distance", "The inflate distance"); + argList::addArgument("factor", "The extend safety factor [1,10]"); argList::noFunctionObjects(); // Never use function objects diff --git a/applications/utilities/surface/surfaceLambdaMuSmooth/surfaceLambdaMuSmooth.C b/applications/utilities/surface/surfaceLambdaMuSmooth/surfaceLambdaMuSmooth.C index abe37f073b..12d047e61a 100644 --- a/applications/utilities/surface/surfaceLambdaMuSmooth/surfaceLambdaMuSmooth.C +++ b/applications/utilities/surface/surfaceLambdaMuSmooth/surfaceLambdaMuSmooth.C @@ -140,11 +140,12 @@ int main(int argc, char *argv[]) argList::noParallel(); argList::validOptions.clear(); - argList::addArgument("surfaceFile"); - argList::addArgument("lambda (0..1)"); - argList::addArgument("mu (0..1)"); - argList::addArgument("iterations"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("lambda", "On the interval [0,1]"); + argList::addArgument("mu", "On the interval [0,1]"); + argList::addArgument("iterations", "The number of iterations to perform"); + argList::addArgument("output", "The output surface file"); + argList::addOption ( "featureFile", diff --git a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C index 5a44082175..8c16582efe 100644 --- a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C +++ b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C @@ -80,8 +80,8 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("inputFile"); - argList::addArgument("outputFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList::addBoolOption ( diff --git a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C index 62e515e2eb..378c67ab98 100644 --- a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C +++ b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("outputFile"); + argList::addArgument("output", "The output surface file"); argList::addBoolOption ( diff --git a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C index eb233b30e3..5852281030 100644 --- a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C +++ b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("inputFile"); + argList::addArgument("surface", "The input surface file"); argList::addBoolOption ( diff --git a/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C index 6d6d0fc8d1..8ec2662ad3 100644 --- a/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C +++ b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) argList::noBanner(); argList::noParallel(); - argList::addArgument("surfaceFile"); + argList::addArgument("surface", "The input surface file"); argList::addOption ( diff --git a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C index a3eedaa734..9c2d94aaa7 100644 --- a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C +++ b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C @@ -66,7 +66,8 @@ int main(int argc, char *argv[]) ); timeSelector::addOptions(); - argList::addArgument("output file"); + argList::addArgument("output", "The output surface file"); + #include "addRegionOption.H" argList::addBoolOption ( diff --git a/applications/utilities/surface/surfaceOrient/surfaceOrient.C b/applications/utilities/surface/surfaceOrient/surfaceOrient.C index cb1ca6a09e..edb096802d 100644 --- a/applications/utilities/surface/surfaceOrient/surfaceOrient.C +++ b/applications/utilities/surface/surfaceOrient/surfaceOrient.C @@ -50,9 +50,10 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("visiblePoint"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("point", "The visible 'outside' point"); + argList::addArgument("output", "The output surface file"); + argList::addBoolOption ( "inside", diff --git a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C index e84ed8e5c1..5e7dfdd87e 100644 --- a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C +++ b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C @@ -51,9 +51,9 @@ int main(int argc, char *argv[]) "Merge points on surface if they are within absolute distance [m]." ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("merge distance"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("distance", "The merge distance"); + argList::addArgument("output", "The output surface file"); argList::addOption ( diff --git a/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C b/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C index d7ec473afb..e47dbfede9 100644 --- a/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C +++ b/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C @@ -59,8 +59,8 @@ int main(int argc, char *argv[]) "Refine by splitting all three edges of triangle" ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList args(argc, argv); const fileName surfFileName = args[1]; diff --git a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C index ca86126263..b3cf0c5c67 100644 --- a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C +++ b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("input surfaceFile"); + argList::addArgument("input", "The input surface file"); argList args(argc, argv); const fileName surfName = args[1]; diff --git a/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C b/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C index 9c930f85e6..3cbe6a84e6 100644 --- a/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C +++ b/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C @@ -53,8 +53,8 @@ int main(int argc, char *argv[]) argList::noParallel(); argList::validOptions.clear(); - argList::addArgument("input surface file"); - argList::addArgument("output surface file"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList args(argc, argv); fileName surfFileName(args[1]); diff --git a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C index 1ea1c8a175..5d51bb38ae 100644 --- a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C +++ b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C @@ -681,8 +681,8 @@ int main(int argc, char *argv[]) "Split multiply connected surface edges by duplicating points" ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList::addBoolOption ( "debug", diff --git a/applications/utilities/surface/surfaceSubset/surfaceSubset.C b/applications/utilities/surface/surfaceSubset/surfaceSubset.C index 5e41538818..0098f80747 100644 --- a/applications/utilities/surface/surfaceSubset/surfaceSubset.C +++ b/applications/utilities/surface/surfaceSubset/surfaceSubset.C @@ -58,9 +58,9 @@ int main(int argc, char *argv[]) ); argList::noParallel(); - argList::addArgument("surfaceSubsetDict"); - argList::addArgument("surfaceFile"); - argList::addArgument("output surfaceFile"); + argList::addArgument("dict", "The surfaceSubsetDict"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList args(argc, argv); Info<< "Reading dictionary " << args[1] << " ..." << endl; diff --git a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C index 51499c59ec..11785105c6 100644 --- a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C +++ b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C @@ -66,8 +66,8 @@ int main(int argc, char *argv[]) "Note: roll=rotate about x, pitch=rotate about y, yaw=rotate about z" ); argList::noParallel(); - argList::addArgument("surfaceFile"); - argList::addArgument("output surfaceFile"); + argList::addArgument("input", "The input surface file"); + argList::addArgument("output", "The output surface file"); argList::addOption ( "translate", diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index cfda839e66..5a52ddc22b 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -55,6 +55,8 @@ Foam::SLList Foam::argList::validArgs; Foam::HashSet Foam::argList::advancedOptions; Foam::HashTable Foam::argList::validOptions; Foam::HashTable Foam::argList::validParOptions; +Foam::HashTable> + Foam::argList::argUsage; Foam::HashTable Foam::argList::optionUsage; Foam::HashTable> Foam::argList::validOptionsCompat; Foam::HashTable> Foam::argList::ignoreOptionsCompat; @@ -68,32 +70,44 @@ Foam::argList::initValidTables::initValidTables() { argList::addOption ( - "case", "dir", + "case", + "dir", "Specify case directory to use (instead of the cwd)" ); argList::addBoolOption("parallel", "Run in parallel"); validParOptions.set("parallel", ""); argList::addOption ( - "roots", "(dir1 .. dirN)", + "roots", + "(dir1 .. dirN)", "Slave root directories for distributed running", true // advanced option ); - validParOptions.set("roots", "(dir1 .. dirN)"); + validParOptions.set + ( + "roots", + "(dir1 .. dirN)" + ); argList::addOption ( - "decomposeParDict", "file", + "decomposeParDict", + "file", "Use specified file for decomposePar dictionary" ); argList::addOption ( - "hostRoots", "(((host1 dir1) .. (hostN dirN))", + "hostRoots", + "(((host1 dir1) .. (hostN dirN))", "slave root directories (per host) for distributed running. " "The host specification can use a regex.", true // advanced option ); - validParOptions.set("hostRoots", "((host1 dir1) .. (hostN dirN))"); + validParOptions.set + ( + "hostRoots", + "((host1 dir1) .. (hostN dirN))" + ); argList::addBoolOption ( @@ -103,7 +117,8 @@ Foam::argList::initValidTables::initValidTables() argList::addOption ( - "fileHandler", "handler", + "fileHandler", + "handler", "Override the file handler type", true // advanced option ); @@ -229,9 +244,26 @@ void Foam::argList::checkITstream(const ITstream& is, const word& optName) } -void Foam::argList::addArgument(const string& argName) +void Foam::argList::addArgument +( + const string& argName, + const string& usage +) { validArgs.append(argName); + + // The first program argument starts at 1 - obtain index after the append + + const label index = validArgs.size(); + + if (usage.empty()) + { + argUsage.erase(index); + } + else + { + argUsage.set(index, usage); + } } diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H index 18cc39417a..89ad3afc8c 100644 --- a/src/OpenFOAM/global/argList/argList.H +++ b/src/OpenFOAM/global/argList/argList.H @@ -212,16 +212,19 @@ public: // Stored as (option = bool, version) static HashTable> ignoreOptionsCompat; - //- Short usage information for validOptions + //- Short description for program arguments + static HashTable> argUsage; + + //- Short description for validOptions static HashTable optionUsage; - //- Additional notes for usage + //- General usage notes static SLList notes; - //- Min offset for displaying usage (default: 20) + //- Min indentation when displaying usage (default: 20) static std::string::size_type usageMin; - //- Max screen width for displaying usage (default: 80) + //- Max screen width when displaying usage (default: 80) static std::string::size_type usageMax; //- Standard name for the post-processing option @@ -341,11 +344,16 @@ public: //- Return an input stream from the named option inline ITstream lookup(const word& optName) const; - //- Read a value from the named option + //- Get a value from the named option // The default template parameter is string (ie, no conversion). template inline T opt(const word& optName) const; + //- Get a value from the named option if present, or return default. + // Identical to lookupOrDefault(). + template + inline T opt(const word& optName, const T& deflt) const; + //- Read a value from the named option if present. // \return true if the named option was found. template @@ -362,8 +370,7 @@ public: const T& deflt ) const; - //- Read a value from the named option if present. - // Return supplied default otherwise. + //- Get a value from the named option if present, or return default. template inline T lookupOrDefault ( @@ -389,7 +396,11 @@ public: // Edit //- Append a (mandatory) argument to validArgs - static void addArgument(const string& argName); + static void addArgument + ( + const string& argName, + const string& usage = "" + ); //- Add a bool option to validOptions with usage information static void addBoolOption diff --git a/src/OpenFOAM/global/argList/argListHelp.C b/src/OpenFOAM/global/argList/argListHelp.C index f585afa225..463bb2599b 100644 --- a/src/OpenFOAM/global/argList/argListHelp.C +++ b/src/OpenFOAM/global/argList/argListHelp.C @@ -240,6 +240,35 @@ void Foam::argList::printMan() const } + // Arguments output + if (validArgs.size()) + { + // .SH "ARGUMENTS" + Info<< ".SH \"ARGUMENTS\"" << nl; + + label argIndex = 0; + for (const std::string& argName : validArgs) + { + ++argIndex; + + Info<< ".TP\n\\fI" << argName.c_str() << "\\fR"; + Info<< nl; + + // Arg has usage information? + + const auto usageIter = argList::argUsage.cfind(argIndex); + if (usageIter.found()) + { + stringOps::writeWrapped(Info, *usageIter, usageMax, 0, true); + } + else + { + Info<< nl; + } + } + } + + // .SH "OPTIONS" Info<< ".SH \"OPTIONS\"" << nl; @@ -320,6 +349,34 @@ void Foam::argList::printUsage(bool full) const } Info<< nl; + // Arguments output + // Currently only if there is also usage information, but may wish to + // change this to remind developers to add some description. + if (validArgs.size() && argUsage.size()) + { + Info<< "Arguments:\n"; + + label argIndex = 0; + for (const std::string& argName : validArgs) + { + ++argIndex; + + Info<< " <" << argName.c_str() << '>'; + + const auto usageIter = argList::argUsage.cfind(argIndex); + if (usageIter.found()) + { + const label len = argName.size() + 4; + + printOptionUsage(len, usageIter()); + } + else + { + Info<< nl; + } + } + } + Info<< "Options:\n"; for (const word& optName : validOptions.sortedToc()) diff --git a/src/OpenFOAM/global/argList/argListI.H b/src/OpenFOAM/global/argList/argListI.H index 9d7dca7639..b7e3915b47 100644 --- a/src/OpenFOAM/global/argList/argListI.H +++ b/src/OpenFOAM/global/argList/argListI.H @@ -256,6 +256,18 @@ inline T Foam::argList::opt(const word& optName) const } +template +inline T Foam::argList::opt(const word& optName, const T& deflt) const +{ + if (found(optName)) + { + return opt(optName); + } + + return deflt; +} + + template inline bool Foam::argList::readIfPresent (