Please refresh the page if equations are not rendered correctly.
---------------------------------------------------------------
Command Line Arguments And Options
1. 求解器帮助界面的结构
OpenFOAM中已有的求解器,在终端中输入求解器名称 + -help
后我们可以得到如下图所示的帮助信息。这些信息可以分为执行功能选项的Options
信息和用于添加笔记的Notes
信息:
2. 添加帮助信息(笔记Notes)
添加笔记(Notes)信息可以采用argList::addNote()
实现:
#include "fvCFD.H"
int main(int argc, char *argv[])
{
// Define the help message for this application
argList::addNote
(
"Demonstrates how to handle command line options.\n"
"\n"
"Input arguments:\n"
"----------------\n"
" someWord - does stuff\n"
" someScalar - does more things\n"
);
3. 添加执行选项(Options)
当所编写程序不支持并行计算时,可以使用argList::noParallel();
隐藏所有与并行相关的选项(如-parallel
)。
// prepare argument list
argList::noParallel();
argList::validArgs.append("someWord");
argList::validArgs.append("someScalar");
// prepare options
argList::addOption // string variable
(
"dict",
"word",
"Path to an additional dictionary (not really used now)"
); // 输出效果: -dict <word> Path to an additional dictionary (not really used now)
argList::addBoolOption // on/off depending on whether option is given or not
(
"someSwitch",
"Switches from A to B"
); // 输出效果: -someSwitch Switches from A to B
argList::addOption // integer variable
(
"someInt",
"label",
"Optional integer"
); // 输出效果: -someInt <label> Optional integer
注意,仅仅执行以上初始化帮助信息(Notes)和选项(Options)的代码,以上内容并未添加进-help
信息中,还需要执行以下代码:
Foam::argList args(argc, argv);
if (!args.checkRootCase())
{
Foam::FatalError.exit();
}
实际上,以上5行代码已经包含在setRootCase.H
头文件中,因此,只需要引用该头文件即可:
// create argument list
// This is normally defined inside setRootCase.H
#include "setRootCase.H"
以上代码都是旨在丰富求解器的帮助信息(-help
)。以下代码则确定了该求解器运行时需要两个参数,第一个是一个字符串,第二个是一个标量。
// read arguments
const word someWord = args[1];
// NOTE: the built-in method for converting strings to other data types
const scalar someScalar = args.argRead<scalar>(2);
Info << "Got argument word " << someWord << " and scalar " << someScalar << endl;
将以上代码进行编译(wmake
)后,在终端中执行:
cmdArgsAndOptions someWordIPassed 5.
应该能在终端中获得以下输出:
Got argument word someWordIPassed and scalar 5
如果没有给出两个参数,运行cmdArgsAndOptions
后会得到以下错误信息:
--> FOAM FATAL ERROR:
Wrong number of arguments, expected 2 found 0
FOAM exiting
4. 选项信息读取
如果执行时,对-dict
参数给出了值(文件路径),则该文件路径会被赋值给变量dictPath
,否则,该变量的值为./system/defaultDict
(默认值)。
// default path to some dictionary
fileName dictPath("./system/defaultDict");
// conditional execution based on an option being passed
if (args.optionFound("dict"))
{
args.optionReadIfPresent("dict", dictPath);
Info << "Got an override flag for dictionary path" << endl;
}
Info << "Would read dict from " << dictPath << endl;
下面的代码则分别设置了-someSwitch
和-someInt
两个选项的功能。
// switch option, 出现为1,没有出现则为0
const bool someConstBool = args.optionFound("someSwitch");
Info << "Boolean switch set to " << someConstBool << endl;
// numeric value option - same as string variables really
label someInt(0);
args.optionReadIfPresent("someInt", someInt);
Info << "Integer option value " << someInt << endl;
Info<< "End\n" << endl;
return 0;
}
最后,运行
cmdArgsAndOptions someWordIPassed 5. -someSwitch -someInt 2 -dict path_to_nowhere_in_particular
若得到以下输出,恭喜完成本节的学习。
Got argument word someWordIPassed and scalar 5
Would read dict from "./system/defaultDict"
Boolean switch set to 1
Integer option value 2
End
5. 案例文件下载
点击下载
Comments NOTHING