argList - specializations for optionRead<string> etc.

- new optionLookupOrDefault and additional form of optionReadIfPresent
  with a default value
This commit is contained in:
Mark Olesen
2009-12-02 13:45:11 +01:00
parent 6b9534c9ce
commit c3457b5152
15 changed files with 263 additions and 174 deletions

View File

@ -74,9 +74,9 @@ int main(int argc, char *argv[])
args.printUsage(); args.printUsage();
} }
if (args.optionFound("case")) fileName pathName;
if (args.optionReadIfPresent("case", pathName))
{ {
fileName pathName = args.option("case");
Info<< nl Info<< nl
<< "-case" << nl << "-case" << nl
<< "path = " << args.path() << nl << "path = " << args.path() << nl
@ -91,7 +91,7 @@ int main(int argc, char *argv[])
forAll(args.additionalArgs(), argI) forAll(args.additionalArgs(), argI)
{ {
fileName pathName = args.additionalArgs()[argI]; pathName = args.additionalArgs()[argI];
printCleaning(pathName); printCleaning(pathName);
} }

View File

@ -49,11 +49,9 @@ int main(int argc, char *argv[])
argList args(argc, argv, false, true); argList args(argc, argv, false, true);
label repeat = 1; const label repeat = args.optionLookupOrDefault<label>("repeat", 1);
args.optionReadIfPresent<label>("repeat", repeat);
cpuTime timer; cpuTime timer;
for (label count = 0; count < repeat; ++count) for (label count = 0; count < repeat; ++count)
{ {
forAll(args.additionalArgs(), argI) forAll(args.additionalArgs(), argI)

View File

@ -59,10 +59,6 @@ using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Sin of angle between two consecutive edges on a face. If sin(angle) larger
// than this the face will be considered concave.
const scalar defaultConcaveAngle = 30;
// Same check as snapMesh // Same check as snapMesh
void checkSnapMesh void checkSnapMesh
@ -447,8 +443,9 @@ int main(int argc, char *argv[])
scalar minCos = Foam::cos(degToRad(featureAngle)); scalar minCos = Foam::cos(degToRad(featureAngle));
scalar concaveAngle = defaultConcaveAngle; // Sin of angle between two consecutive edges on a face.
args.optionReadIfPresent("concaveAngle", concaveAngle); // If sin(angle) larger than this the face will be considered concave.
scalar concaveAngle = args.optionLookupOrDefault("concaveAngle", 30.0);
scalar concaveSin = Foam::sin(degToRad(concaveAngle)); scalar concaveSin = Foam::sin(degToRad(concaveAngle));
@ -483,8 +480,8 @@ int main(int argc, char *argv[])
// Merge points on straight edges and remove unused points // Merge points on straight edges and remove unused points
if (snapMeshDict) if (snapMeshDict)
{ {
Info<< "Merging all 'loose' points on surface edges" Info<< "Merging all 'loose' points on surface edges, "
<< ", regardless of the angle they make." << endl; << "regardless of the angle they make." << endl;
// Surface bnound to be used to extrude. Merge all loose points. // Surface bnound to be used to extrude. Merge all loose points.
nChanged += mergeEdges(-1, mesh); nChanged += mergeEdges(-1, mesh);
@ -510,7 +507,7 @@ int main(int argc, char *argv[])
Info<< "Mesh unchanged." << endl; Info<< "Mesh unchanged." << endl;
} }
Info<< "End\n" << endl; Info<< "\nEnd\n" << endl;
return 0; return 0;
} }

View File

@ -546,8 +546,7 @@ int main(int argc, char *argv[])
bool geometry = args.optionFound("geometry"); bool geometry = args.optionFound("geometry");
bool overwrite = args.optionFound("overwrite"); bool overwrite = args.optionFound("overwrite");
scalar edgeTol = 0.2; scalar edgeTol = args.optionLookupOrDefault("tol", 0.2);
args.optionReadIfPresent("tol", edgeTol);
Info<< "Trying to split cells with internal angles > feature angle\n" << nl Info<< "Trying to split cells with internal angles > feature angle\n" << nl
<< "featureAngle : " << featureAngle << nl << "featureAngle : " << featureAngle << nl

View File

@ -776,17 +776,11 @@ int main(int argc, char *argv[])
args.optionReadIfPresent("scale", scaleFactor); args.optionReadIfPresent("scale", scaleFactor);
HashSet<word> ignoreCellGroups; wordHashSet ignoreCellGroups;
if (args.optionFound("ignoreCellGroups")) wordHashSet ignoreFaceGroups;
{
args.optionLookup("ignoreCellGroups")() >> ignoreCellGroups;
}
HashSet<word> ignoreFaceGroups; args.optionReadIfPresent("ignoreCellGroups", ignoreCellGroups);
if (args.optionFound("ignoreFaceGroups")) args.optionReadIfPresent("ignoreFaceGroups", ignoreFaceGroups);
{
args.optionLookup("ignoreFaceGroups")() >> ignoreFaceGroups;
}
cubitFile = args.options().found("cubit"); cubitFile = args.options().found("cubit");

View File

@ -50,8 +50,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
# include "createTime.H" # include "createTime.H"

View File

@ -71,19 +71,13 @@ int main(int argc, char *argv[])
const stringList& params = args.additionalArgs(); const stringList& params = args.additionalArgs();
// default rescale from [mm] to [m] // default rescale from [mm] to [m]
scalar scaleFactor = 0.001; scalar scaleFactor = args.optionLookupOrDefault("scale", 0.001);
if (args.optionReadIfPresent("scale", scaleFactor)) if (scaleFactor <= 0)
{ {
if (scaleFactor <= 0) scaleFactor = 1;
{
scaleFactor = 1;
}
} }
if (args.optionFound("solids")) meshReaders::STARCD::keepSolids = args.optionFound("solids");
{
meshReaders::STARCD::keepSolids = true;
}
// default to binary output, unless otherwise specified // default to binary output, unless otherwise specified
IOstream::streamFormat format = IOstream::BINARY; IOstream::streamFormat format = IOstream::BINARY;

View File

@ -50,8 +50,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
# include "createTime.H" # include "createTime.H"

View File

@ -83,10 +83,9 @@ int main(int argc, char *argv[])
word regionName; word regionName;
fileName polyMeshDir; fileName polyMeshDir;
if (args.optionFound("region")) if (args.optionReadIfPresent("region", regionName, polyMesh::defaultRegion))
{ {
// constant/<region>/polyMesh/blockMeshDict // constant/<region>/polyMesh/blockMeshDict
regionName = args.option("region");
polyMeshDir = regionName/polyMesh::meshSubDir; polyMeshDir = regionName/polyMesh::meshSubDir;
Info<< nl << "Generating mesh for region " << regionName << endl; Info<< nl << "Generating mesh for region " << regionName << endl;
@ -94,7 +93,6 @@ int main(int argc, char *argv[])
else else
{ {
// constant/polyMesh/blockMeshDict // constant/polyMesh/blockMeshDict
regionName = polyMesh::defaultRegion;
polyMeshDir = polyMesh::meshSubDir; polyMeshDir = polyMesh::meshSubDir;
} }

View File

@ -301,7 +301,7 @@ int main(int argc, char *argv[])
} }
word cellSetName; word cellSetName;
string vtkName; string vtkName = runTime.caseName();
if (args.optionFound("cellSet")) if (args.optionFound("cellSet"))
{ {
@ -311,8 +311,6 @@ int main(int argc, char *argv[])
else if (Pstream::parRun()) else if (Pstream::parRun())
{ {
// Strip off leading casename, leaving just processor_DDD ending. // Strip off leading casename, leaving just processor_DDD ending.
vtkName = runTime.caseName();
string::size_type i = vtkName.rfind("processor"); string::size_type i = vtkName.rfind("processor");
if (i != string::npos) if (i != string::npos)
@ -320,10 +318,6 @@ int main(int argc, char *argv[])
vtkName = vtkName.substr(i); vtkName = vtkName.substr(i);
} }
} }
else
{
vtkName = runTime.caseName();
}
instantList timeDirs = timeSelector::select0(runTime, args); instantList timeDirs = timeSelector::select0(runTime, args);

View File

@ -88,8 +88,7 @@ int main(int argc, char *argv[])
const stringList& params = args.additionalArgs(); const stringList& params = args.additionalArgs();
fileName exportName(params[0]); fileName exportName(params[0]);
word importName("default"); word importName = args.optionLookupOrDefault<word>("name", "default");
args.optionReadIfPresent("name", importName);
// check that writing is supported // check that writing is supported
if (!MeshedSurface<face>::canWriteType(exportName.ext(), true)) if (!MeshedSurface<face>::canWriteType(exportName.ext(), true))

View File

@ -177,13 +177,11 @@ int main(int argc, char *argv[])
Info<< "Reading surface from " << surfName << " ..." << endl; Info<< "Reading surface from " << surfName << " ..." << endl;
bool readSet = args.optionFound("faceSet");
word setName; word setName;
bool readSet = args.optionReadIfPresent("faceSet", setName);
if (readSet) if (readSet)
{ {
setName = args.option("faceSet");
Info<< "Repatching only the faces in faceSet " << setName Info<< "Repatching only the faces in faceSet " << setName
<< " according to nearest surface triangle ..." << endl; << " according to nearest surface triangle ..." << endl;
} }
@ -193,8 +191,7 @@ int main(int argc, char *argv[])
<< " triangle ..." << endl; << " triangle ..." << endl;
} }
scalar searchTol = 1E-3; scalar searchTol = args.optionLookupOrDefault("tol", 1e-3);
args.optionReadIfPresent("tol", searchTol);
// Get search box. Anything not within this box will not be considered. // Get search box. Anything not within this box will not be considered.
const boundBox& meshBb = mesh.globalData().bb(); const boundBox& meshBb = mesh.globalData().bb();
@ -211,7 +208,7 @@ int main(int argc, char *argv[])
forAll(mesh.boundaryMesh(), patchI) forAll(mesh.boundaryMesh(), patchI)
{ {
Info<< " " << mesh.boundaryMesh()[patchI].name() << '\t' Info<< " " << mesh.boundaryMesh()[patchI].name() << '\t'
<< mesh.boundaryMesh()[patchI].size() << endl; << mesh.boundaryMesh()[patchI].size() << nl;
} }
Info<< endl; Info<< endl;

View File

@ -159,8 +159,7 @@ public:
); );
// Destructor //- Destructor
virtual ~argList(); virtual ~argList();
@ -169,81 +168,75 @@ public:
// Access // Access
//- Name of executable //- Name of executable
const word& executable() const inline const word& executable() const;
{
return executable_;
}
//- Return root path //- Return root path
const fileName& rootPath() const inline const fileName& rootPath() const;
{
return rootPath_;
}
//- Return case name
const fileName& globalCaseName() const
{
return globalCase_;
}
//- Return case name (parallel run) or global case (serial run) //- Return case name (parallel run) or global case (serial run)
const fileName& caseName() const inline const fileName& caseName() const;
{
return case_;
}
//- Return the path //- Return case name
fileName path() const inline const fileName& globalCaseName() const;
{
return rootPath()/caseName(); //- Return the path to the caseName
} inline fileName path() const;
//- Return arguments //- Return arguments
const stringList& args() const inline const stringList& args() const;
{
return args_;
}
//- Return additionl arguments, //- Return additionl arguments,
// i.e. those additional to the executable itself // i.e. those additional to the executable itself
stringList::subList additionalArgs() const; stringList::subList additionalArgs() const;
//- Return options //- Return options
const Foam::HashTable<string>& options() const inline const Foam::HashTable<string>& options() const;
{
return options_;
}
//- Return the argument string associated with the named option //- Return the argument string associated with the named option
const string& option(const word& opt) const inline const string& option(const word& opt) const;
{
return options_.operator[](opt);
}
//- Return true if the named option is found //- Return true if the named option is found
bool optionFound(const word& opt) const inline bool optionFound(const word& opt) const;
{
return options_.found(opt);
}
//- Return an IStringStream to the named option //- Return an IStringStream from the named option
IStringStream optionLookup(const word& opt) const inline IStringStream optionLookup(const word& opt) const;
{
return IStringStream(option(opt));
}
//- Read a value from the named option //- Read a value from the named option
template<class T> template<class T>
T optionRead(const word& opt) const; inline T optionRead(const word& opt) const;
//- Read a value from the named option if present. //- Read a value from the named option if present.
// Return true if the named option was found. // Return true if the named option was found.
template<class T> template<class T>
bool optionReadIfPresent(const word& opt, T& val) const; inline bool optionReadIfPresent(const word& opt, T&) const;
//- Read a value from the named option if present.
// Return true if the named option was found, otherwise
// use the supplied default and return false.
template<class T>
inline bool optionReadIfPresent
(
const word& opt,
T&,
const T& deflt
) const;
//- Read a value from the named option if present.
// Return true if the named option was found.
template<class T>
inline T optionLookupOrDefault
(
const word& opt,
const T& deflt
) const;
//- Read a List of values from the named option //- Read a List of values from the named option
template<class T> template<class T>
List<T> optionReadList(const word& opt) const; List<T> optionReadList(const word& opt) const
{
return readList<T>(optionLookup(opt)());
}
// Edit // Edit
@ -281,9 +274,7 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository #include "argListI.H"
# include "argListTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -0,0 +1,193 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "argList.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline const Foam::word& Foam::argList::executable() const
{
return executable_;
}
inline const Foam::fileName& Foam::argList::rootPath() const
{
return rootPath_;
}
inline const Foam::fileName& Foam::argList::caseName() const
{
return case_;
}
inline const Foam::fileName& Foam::argList::globalCaseName() const
{
return globalCase_;
}
inline Foam::fileName Foam::argList::path() const
{
return rootPath()/caseName();
}
inline const Foam::stringList& Foam::argList::args() const
{
return args_;
}
inline const Foam::HashTable<Foam::string>& Foam::argList::options() const
{
return options_;
}
inline const Foam::string& Foam::argList::option(const word& opt) const
{
return options_.operator[](opt);
}
inline bool Foam::argList::optionFound(const word& opt) const
{
return options_.found(opt);
}
inline Foam::IStringStream Foam::argList::optionLookup(const word& opt) const
{
return IStringStream(option(opt));
}
// * * * * * * * * * * * * Template Specializations * * * * * * * * * * * * //
namespace Foam
{
// Template specialization for string
template<>
inline Foam::string
Foam::argList::optionRead<Foam::string>(const word& opt) const
{
return option(opt);
}
// Template specialization for word
template<>
inline Foam::word
Foam::argList::optionRead<Foam::word>(const word& opt) const
{
return option(opt);
}
// Template specialization for fileName
template<>
inline Foam::fileName
Foam::argList::optionRead<Foam::fileName>(const word& opt) const
{
return option(opt);
}
} // End namespace Foam
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class T>
inline T Foam::argList::optionRead(const word& opt) const
{
T val;
optionLookup(opt)() >> val;
return val;
}
template<class T>
inline bool Foam::argList::optionReadIfPresent
(
const word& opt,
T& val
) const
{
if (optionFound(opt))
{
val = optionRead<T>(opt);
return true;
}
else
{
return false;
}
}
template<class T>
inline bool Foam::argList::optionReadIfPresent
(
const word& opt,
T& val,
const T& deflt
) const
{
if (optionReadIfPresent<T>(opt, val))
{
return true;
}
else
{
val = deflt;
return false;
}
}
template<class T>
inline T Foam::argList::optionLookupOrDefault
(
const word& opt,
const T& deflt
) const
{
if (optionFound(opt))
{
return optionRead<T>(opt);
}
else
{
return deflt;
}
}
// ************************************************************************* //

View File

@ -1,63 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "argList.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class T>
T Foam::argList::optionRead(const word& opt) const
{
T val;
optionLookup(opt)() >> val;
return val;
}
template<class T>
bool Foam::argList::optionReadIfPresent(const word& opt, T& val) const
{
if (optionFound(opt))
{
val = optionRead<T>(opt);
return true;
}
else
{
return false;
}
}
template<class T>
Foam::List<T> Foam::argList::optionReadList(const word& opt) const
{
return readList<T>(optionLookup(opt)());
}
// ************************************************************************* //