岳阳逗巢电子商务有限公司-OpenFOAM编程案例|01 文献读写
你的位置:岳阳逗巢电子商务有限公司 > 压电(晶体)扬声器 > OpenFOAM编程案例|01 文献读写
OpenFOAM编程案例|01 文献读写
发布日期:2024-06-30 23:39    点击次数:56

OpenFOAM编程案例|01 文献读写

在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 \    -lmeshTools
3 读取文献裁剪源文献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。

(完)

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

相关资讯