软件开发公司 OpenFOAM编程案例|01 文献读写
在OpenFOAM应用经由中,需要频频的读写文献软件开发公司,如在联想之前需要读写多样字典文献以及范围要求数据,以及在联想经由中需要及时将联想遵守数据写出到文献中。本案例演示编写时势读取指定文献中的相应实质以及将数据写入到文献的思要位置。
OpenFOAM中的文献读写,运用到IOdictionary类以及文献操作有关的类。
先看代码再评释注解。
1 准备文献运用底下的大叫准备文献。
cd $FOAM_RUNmkdir demo1mkdir demo1/Makecd demo1touch demo1.C Make/files Make/options
如下图所示。
app开发图片
百位:2024177期-2024181期出号:45092,振幅为9点,分布比较分散,本期预计百位走大,参考8。
福彩3D历年第182期同期分别开出奖号:092、938、190、433、949、518、865、288、266、353、861、944、804、417、489、148、329、351、845、472、351、702,详细统计见下表:
裁剪files文献demo1.CEXE = demo1裁剪options文献
EXE_INC = \ -I$(FOAM_SRC)/finiteVolume/lnInclude \ -I$(FOAM_SRC)/meshTools/lnInclude EXE_LIBS = \ -lfiniteVolume \ -lmeshTools3 读取文献裁剪源文献demo1.C,编写底下的代码:
#include "fvCFD.H" int main(int argc, char *argv[]){ // 开动化案例 #include "setRootCase.H" // 创建runTime时辰对象与fvMesh网格对象 #include "createTime.H" #include "createMesh.H" // 界说一个word对象dicName,用来舍弃文献称号 // word类接收自string类,其即是一个字符串 const word dicName("customProperties"); // 界说一个IO对象,其包含了文献旅途等信息 // mesh.time().constant()示意此文献在constant文献夹下 // 还不错运用mesh.time().controlDict()及mesh.time().system()散播参加control及system目次 IOobject dictIO(dicName, mesh.time().constant(), mesh, IOobject::MUST_READ); // 创建一个字典对象 dictionary customDict = IOdictionary(dictIO); // 从文献中查找关节字someWord并存放到someWord中 word someWord; customDict.lookup("someWord") >> someWord; // 查找一个名为someScalar的标量值 scalar someScalar(customDict.lookupOrDefault<scalar>("someScalar", 1.0)); //查找一个名为someList的列表 List<scalar> someList(customDict.lookup("someList")); // 查找一个名为someHashTable的表格 HashTable<vector, word> someHashTable(customDict.lookup("someHashTable")); // 查找一个名为someBool的值 bool someBool(customDict.lookupOrDefault<Switch>("someBool", true)); // 输出读取的信息 Info << nl << "读取的数据为:" << nl << "someWord: " << someWord << nl << "someScalar: " << someScalar << nl << "someList: " << someList << nl << "someHashTable: " << someHashTable << nl << "someBool: " << someBool << nl << nl << endl; return 0;}
运用大叫wmake编译时势demo1.C,如下图所示。
图片
不错看到时势大要得胜编译。不外还不成运行,运行后如下图所示。
图片
因为还莫得准备好测试案例。
代码中需要用到一个名为customProperties的字典文献。该文献中位于constant文献夹下,软件开发公司这里准备的测试实质为:
FoamFile{ version 2.0; format ascii; class dictionary; location "constant"; object transportProperties;}// * * * * * * * * * * * * * * * * * * //someWord myWord;someScalar 0.01;someBool on;someList(0 1 2);someHashTable( key0 (0 0 0) key1 (1 0 0));
运用底下的大叫从tutorials中拷贝一个案例文献到现时旅途(如拷贝cavity)。
cp $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .
在cavity/constant文献夹中添加文献customProperties文献,并复制上头的实质。此时文献组织时势如下图所示。
图片
运行底下的大叫:
cd cavityblockMesh../demo1
运行遵守如下图所示。
图片
不错看到,时势胜利地读取到了数据。
需要防范的是,凭据时势中的代码示意,该时势应该在OpenFOAM的案例目次中运行。
4 写入文献往文献中写入数据要更简便一些,这里不错使用文献指针来完了。
如修改demo1.C文献代码如下所示:
#include "fvCFD.H" int main(int argc, char *argv[]){ // 开动化案例 #include "setRootCase.H" // 创建runTime时辰对象与fvMesh网格对象 #include "createTime.H" #include "createMesh.H" //创建一个文献夹 fileName outputDir = mesh.time().path()/"postProcessing"; mkDir(outputDir); //界说一个文献指针 autoPtr<OFstream> outputFilePtr; // 创建一个输出文献并翻开该文献 outputFilePtr.reset(new OFstream(outputDir/"customOutputFile.txt")); // 向文献中写入数据 outputFilePtr() << "------This is a header-----" << endl; outputFilePtr() << "0 1 2 3 4 5" << endl; // 准备一个HashTable数据,并将其写入到文献中 HashTable<vector, word> someHashTable; someHashTable.insert("row 1", vector(1.0, 0, 0)); someHashTable.insert("row 2", vector(0, 1.0, 0)); someHashTable.insert("row 3", vector(0, 0, 1.0)); outputFilePtr() << someHashTable << endl; Info << "---End---" << endl; return 0;}
编译并运行,如下图所示。
图片
文献结构如下图所示。
图片
翻开customOutputFile.txt文献,稽查其实质,如下图所示,不错看到数据胜利地写入到了文献中。
图片
总体上来说,运用OpenFOAM进行文献读写依然相比容易的。
注:本系列的实质素材来自github,热烈提议手撸代码而非拷贝代码!仓库地址:https://github.com/UnnamedMoose/BasicOpenFOAMProgrammingTutorials。仓库通盘者:Artur K Lidtke。
”(完)
本站仅提供存储就业,通盘实质均由用户发布,如发现存害或侵权实质,请点击举报。