软件软件开发多少钱 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 \ -lmeshTools2 添加参数
裁剪源代码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,开动如下图所示。这里号召参数是敷衍输入的,仅为演示。
山东泰山入籍国脚费南多“三停”的事情有了最新进展,软件开发价格有消息称“小摩托”续约的条件是大幅上涨薪资,没有得到泰山俱乐部的回应,他有意转投上海申花。
[扫码下载app,中过数字彩1千万以上的专家都在这儿!]
图片
着重可选参数不错不选,如底下的号召./demo2 hello 2 -dict defaultDict1 -someSwitch。
图片
况兼可选参数的位置不错松驰挪动,如下图为号召./demo2 hello 2 -dict defaultDict1 -someInt 3 -someSwitch的开动成果。
图片
小程序开发可选参数还不错放到必选参数的前边,如开动号召./demo2 -someInt 3 hello 3,成果如下图所示。
图片
着重,源文献中读参数函数也曾修改为最新OpenFOAM所接济的函数,被替换的函数如下表所示。
老版块函数(被毁灭)新版块函数optionFoundfoundoptionReadIfPresentreadIfPresent被毁灭的函数现在依然不错使用,仅仅在编译流程中会有申饬信息,不淡薄使用老版块函数,除了更复杂之外,还很有可能在将来更高的版块中被澈底死一火。
(本文方法在OpenFOAM 2112下开动通过。在V9版块下需要进行小幅修改。厉害淡薄手撸代码,因此文中的源代码就不提供了。)
(结束)
本站仅提供存储事业,通盘本体均由用户发布,如发现存害或侵权本体,请点击举报。