栏目分类
热点资讯
你的位置:软件软件开发要多少钱 > 联系我们 > 联系我们 OpenFOAM编程案例|06 自界说类

联系我们

联系我们 OpenFOAM编程案例|06 自界说类

发布日期:2024-08-09 07:21    点击次数:113

联系我们

本案例演示自界说类并哄骗自界说的类把握OpenFOAM数据。

类是面向对象编程的基础结构,哄骗类不错很浅近地末端代码复用和封装。本案例通过两个类的界说来演示C++中类的界说与调用经由。

1 文献结构

和前边的案例同样,咱们先创建基础的文献结构,后头需要新的文献时再往内部添加。

哄骗底下的号召在run文献夹下创建案例文献。

上期前区三区比为3:2:0,相较于前几期有所调整,本期推荐三区比为:1:2:2,保持相对平衡。

cd $FOAM_RUNmkdir demo6 && cd demo6mkdir Maketouch demo6.C Make/files Make/options

号召本质收场后,文献结构如下所示。

图片

2 创建customClass类

为了顺应大型C++体式的特征,这里类界说时将其头文献与源文献分开。

创建头文献customClass.H,其骨子为:
#include "fvCFD.H" class customClass{private:    label myInt_; // 成员变量public:    customClass(); // 构造函数    ~customClass(); // 析构函数      // 界说一个get函数,用于获得成员变量的值    inline label get() const {return myInt_;}         // 界说set函数教悔成员变量的值    inline void set(label newInt){myInt_= newInt;}     // 界说函数,软件软件开发要多少钱const示意此函数不会对成员变量进行修改    label basicFunction() const;    // 大结构动作参数时频繁使用援用,这么后果更高    void meshOpFunction(fvMesh& mesh);}; 
创建源文献customClass.C
#include "customClass.H" // 构造函数,启动化customClass::customClass(){     myInt_ = 0;} // 析构函数用于开释内存,这里不错保捏为空customClass::~customClass(){}// 末端basicFunction函数label customClass::basicFunction() const{     Info << "调用函数basicFunction()" << endl;     return myInt_ * 2;}// 末端meshOpFunction函数// 此函数使用了fvMesh类,因此在使用此函数之前谨记先包含头文献createMesh.Hvoid customClass::meshOpFunction(fvMesh& mesh){     Info << "Custom类得到的网格数目为:" << mesh.C().size() << endl;     myInt_ = mesh.C().size();}
3 创建新类

创建一个秉承自IOdictionary类的新类myDict。

创建头文献derivedClass.H
#include "fvCFD.H"#include <sstream>// 领受public秉承样貌class myDict : public IOdictionary{     public:         myDict(const IOobject & ioObj);         ~myDict();            void printTokensInTheDict() const; };
创建源文献derivedClass.C
#include "derivedClass.H" myDict::myDict(const IOobject &ioObj) : IOdictionary(ioObj) //哄骗基类进行启动化{}myDict::~myDict(){}// 末端printTokensInTheDict函数// 这个函数输出字典要道字中的一些字符串void myDict::printTokensInTheDict() const{     // 哄骗基类的tokens()函数     List<token> characters(this->tokens());      std::stringstream ss;     ss << "Tokens in the file:";      forAll(characters,i)     {         if(characters[i].isWord())         {             ss << "\n" << tab << characters[i].wordToken();         }     }     Info << ss.str().c_str() << endl;}
4 源文献

在源文献demo6.C中输入代码。

#include "fvCFD.H"#include "customClass.H"#include "derivedClass.H" int main(int argc, char *argv[]){ #include "setRootCase.H" #include "createTime.H" #include "createMesh.H"     customClass customInstance;    Info << "默许值为:" << customInstance.get() << endl;    customInstance.set(20);    Info << "新值为:" << customInstance.get() << endl;     customInstance.basicFunction();    customInstance.meshOpFunction(mesh);    Info << "当今新值为:" << customInstance.get() << endl;     myDict myTransportProperties(        IOobject(            "transportProperties",            runTime.constant(),            mesh,            IOobject::MUST_READ_IF_MODIFIED,            IOobject::NO_WRITE));     dimensionedScalar nu(        "nu",        dimViscosity,        myTransportProperties);     Info << "创建粘度标量:" << nu << endl;     myTransportProperties.printTokensInTheDict();    Info << "End" << endl         << endl;     runTime.printExecutionTime(Info);     return 0;} 
5 编译体式

修改Make文献夹中的文献。

修改files文献,风雅源文献的甩掉限定
customClass.CderivedClass.Cdemo6.C EXE = demo6
修改options文献
EXE_INC = \    -I$(LIB_SRC)/finiteVolume/lnInclude \    -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \    -lfiniteVolume \    -lmeshTools

编译体式。

图片

5 测试体式

案例仅仅哄骗了网格,因此松懈找个测试案例即可。

cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .cd cavityblockMesh../demo6

本质截至如下图所示。

图片

app

(本文收场)

本站仅提供存储职业,扫数骨子均由用户发布,如发现存害或侵权骨子,请点击举报。