1 准备文献期骗底下的高唱准备文献
在OpenFOAM应用经由中,需要平凡的读写文献,如在盘算推算之前需要读写各式字典文献以及限制要求数据,以及在盘算推算经由中需要及时将盘算推算效用数据写出到文献中。本案例演示编写递次读取指定文献中的相应本色以及将数据写入到文献的念念要位置。
OpenFOAM中的文献读写,期骗到IOdictionary类以及文献操作联系的类。
先看代码再阐述。
1 准备文献期骗底下的高唱准备文献。
cd $FOAM_RUNmkdir demo1mkdir demo1/Makecd demo1touch demo1.C Make/files Make/options
如下图所示。
图片
裁剪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)。
房产 0, 0.55) 0px 2px 10px;">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。
”(完)
本站仅提供存储职业,通盘本色均由用户发布,如发现存害或侵权本色,请点击举报。