岳阳逗巢电子商务有限公司-OpenFOAM编程案例|02 步伐参数
你的位置:岳阳逗巢电子商务有限公司 > 扬声器 > OpenFOAM编程案例|02 步伐参数
OpenFOAM编程案例|02 步伐参数
发布日期:2024-06-30 22:54    点击次数:66

OpenFOAM编程案例|02 步伐参数

本文演示期骗OpenFOAM中的argList类为创建的步伐构造呐喊参数。

从提供的argc和argv参数中索求呐喊参数和选项。如底下的呐喊实践神情:

program -listFiles \(*.txt\)

呐喊中,program为呐喊的称呼,listFiles及\(*.txt\)均为呐喊的参数。本案例的标的即为构造大致捎带参数的应用步伐。

1 文献准备

本案例的文献结构如前边的案例交流。

聘请底下的呐喊创建文献与文献夹。

cd $FOAM_RUNmkdir demo2cd demo2touch demo2.Cmkdir Makecd Maketouch files optionscd ..

文献组织结构如下图所示。

图片

修改files文献的实践
demo2.CEXE = demo2
修改options文献的实践
EXE_INC = \        -I$(FOAM_SRC)/finiteVolume/lnInclude \        -I$(FOAM_SRC)/meshTools/lnInclude EXE_LIBS = \        -lfiniteVolume \        -lmeshTools
2 添加参数

剪辑源代码deom2.C,如下所示。

#include <fvCFD.H> int main(int argc, char *argv[]){    // 界说步伐的使用讲明    argList::addNote(        "输入参数:\n"        "---------------------\n"        "参数1:someWord\n"        "参数2:someScalar\n");    // 构建参数    Foam::argList args(argc, argv);    return 0;}

这段代码很简便,编译启动如下图所示。

图片

不错看到上头的简便代码为步伐添加了匡助文档,不错通过步伐名背面带参数-help来检察。

底下赓续完善代码,为步伐添加两个参数。

#include <fvCFD.H> int main(int argc, char *argv[]){    // 界说步伐的使用讲明    argList::addNote(        "输入参数:\n"        "---------------------\n"        "参数1:someWord\n"        "参数2:someScalar\n");     // 准备参数列表    argList::noParallel();    argList::validArgs.append("someWord");    argList::validArgs.append("someScalar");     Foam::argList args(argc, argv);     // 读取参数    const word someWord = args[1];                     //第一个参数    //原始步伐,新版块将argRead函数烧毁了,改用get函数    // const scalar someScalar = args.argRead<scalar>(2);    const scalar someScalar = args.get<scalar>(2); //第二个参数     Info << "获得参数:" << endl        << "someWord:" << someWord << endl        << "someScalar:" << someScalar << endl;     return 0;}

编译启动如下图所示。

图片

提醒需要输入两个参数。将启动呐喊改成./demo2 hello 2,如下图所示,不错看到步伐获胜启动。

图片

3 添加选项

不错为步伐添加可选参数。如下代码。

    #include <fvCFD.H> int main(int argc, char *argv[]){        // 界说步伐的使用讲明    argList::addNote(                "输入参数:\n"                "---------------------\n"                "参数1:someWord\n"                "参数2:someScalar\n");         // 准备参数列表    argList::noParallel();    argList::validArgs.append("someWord");    argList::validArgs.append("someScalar");         // 加多一个选项参数,调用神情为-dict word        // 参数轮番为:选项名、参数、使用讲明    argList::addOption(                "dict",                "word",                "很是的字典旅途(非刻下旅途):");         // 加多一个布尔选项,调用体式为-someSwitch    argList::addBoolOption(                    "someSwitch",                    "从A切换到B");         // 加多一个整数选项,调用体式为-someInt label    argList::addOption(                    "someInt",                    "label"                    "可选整数");         // 创建一个参数对象args        Foam::argList args(argc, argv);         // 读取参数someWord及someScalar        const word someWord = args[1];                 //第一个参数        const scalar someScalar = args.get<scalar>(2); //第二个参数             // 输出参数信息    Info << "获得参数:" << endl         << "someWord:" << someWord << endl         << "someScalar:" << someScalar << endl;         // 读取选项-dict的信息        fileName dictPath("defaultDict");        if (args.found("dict"))    {        args.readIfPresent("dict", dictPath);        Info << "获得一个字典旅途" << nl;    }    Info << "从字典文献:[" << dictPath << "]中读取字典" << endl;         // 读取布尔选项信息,并输出信息        const bool someConstBool = args.found("someSwitch");    Info << "开关拓荒为:" << someConstBool << endl;         // 读取整x选项参数并输出参数值        label someInt(0);    args.readIfPresent("someInt", someInt);    Info << "整数选项值:" << someInt << endl;    Info << "-------End-------" << endl;         return 0;}

精通参数是必选的,可选参数不错不选。

编译后输入底下的呐喊./demo2 hello 2 -dict defaultDict1 -someSwitch -someInt 2,启动如下图所示。这里呐喊参数是随性输入的,仅为演示。

图片

精通可选参数不错不选,如底下的呐喊./demo2 hello 2 -dict defaultDict1 -someSwitch。

图片

况兼可选参数的位置不错大肆调度,如下图为呐喊./demo2 hello 2 -dict defaultDict1 -someInt 3 -someSwitch的启动成果。

图片

可选参数还不错放到必选参数的前边,如启动呐喊./demo2 -someInt 3 hello 3,成果如下图所示。

图片

精通,源文献中读参数函数仍是修改为最新OpenFOAM所搭救的函数,被替换的函数如下表所示。

老版块函数(被烧毁)新版块函数optionFoundfoundoptionReadIfPresentreadIfPresent

被烧毁的函数现在依然不错使用,仅仅在编译进程中会有教学信息,不提出使用老版块函数,除了更复杂之外,还很有可能在将来更高的版块中被透顶放弃。

(本文步伐在OpenFOAM 2112下启动通过。在V9版块下需要进行小幅修改。浓烈提脱手撸代码,因此文中的源代码就不提供了。)

(达成)

本站仅提供存储处事,通盘实践均由用户发布,如发现存害或侵权实践,请点击举报。