岳阳逗巢电子商务有限公司-OpenFOAM编程案例|02 纪律参数
你的位置:岳阳逗巢电子商务有限公司 > 扬声器 > OpenFOAM编程案例|02 纪律参数
OpenFOAM编程案例|02 纪律参数
发布日期:2024-07-01 00:04    点击次数:149

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版块下需要进行小幅修改。热烈提议手撸代码,因此文中的源代码就不提供了。)

(竣事)

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