栏目分类
热点资讯
你的位置:软件软件开发要多少钱 > 软件开发价格 > 软件软件开发要多少钱 OpenFOAM编程案例|04 场操作

软件开发价格

软件软件开发要多少钱 OpenFOAM编程案例|04 场操作

发布日期:2024-08-09 06:39    点击次数:84

Open FOAM是Open Source Field Operation and Manipulation的英文缩写,从其名字就不错看出,其是一个用来主宰和照顾场数据的开源措施库。CFD中也包含深广的物理场,如压力场、速率场、组分场等,这些物理场有的是标量场,有的是向量场。运用OpenFOAM很容易竣事对此类物理场的操作。

本案例演示运用OpenFOAM操作场数据。1 准备文献

本演示案例只需要一个源文献。运用底下的敕令创建案例文献结构。

cd  $FOAM_RUNmkdir demo4 && cd demo4mkdir Maketouch demo4.C Make/files Make/optionscp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

文献结构如下图所示。

软件开发

图片软件软件开发要多少钱

福彩快乐8第2024175期(上周三)开奖回顾:07 09 12 15 17 19 32 33 40 47 48 49 55 58 62 65 66 69 70 73,其中奖号四区比为6:3:5:6奇偶比为12:8。

这里的cavity文献夹用于措施测试。

修改files文献与options文献。

files文献的推行
demo4.CEXE = demo4
options文献的推行
EXE_INC = \        -I$(FOAM_SRC)/finiteVolume/lnInclude \        -I$(FOAM_SRC)/meshTools/lnInclude EXE_LIBS = \        -lfiniteVolume \        -lmeshTools
2 源文献

本案例演示从文献中得到场数据,然后再对读取的数据进行操作。

措施代码如下。

#include "fvCFD.H" // 声明一个函数,背面有该函数的具体竣事经由// 输入时期t,空间坐标x,参考点x0以及缩放因子scalescalar calculatedPressure(scalar t, vector x, vector x0, scalar scale); int main(int argc, char *argv[]){#include "setRootCase.H"#include "createTime.H"#include "createMesh.H"     Info << "读取transportProperties文献数据" << endl;    // 从transportProperties文献中读取数据    // 先界说一个IOdictionary对象,其构造函数参数为一个IOobject对象    IOdictionary transportProperties(        IOobject(            "transportProperties",           // 字典文献名            runTime.constant(),              // 字典文献场地旅途,这里为constant文献夹下            mesh,                            // 一个objectRegistry类对象,这里没什么用            IOobject::MUST_READ_IF_MODIFIED, // 若是文献被修改,则必须再行读取            IOobject::NO_WRITE               //暗示文献为只读            ));     // 界说一个dimensionedScalar变量nu    // nu有量纲,联系我们其量纲dimViscosity等同于(0,2,-1,0,0,0,0),单元为m2/s    dimensionedScalar nu(        "nu",         //指命称号        dimViscosity, //指定scalar的量纲        // 旧版块或org版块的写法:transportProperties.lookup("nu")        transportProperties // com新版块写法,自动左证称号在字典中搜索    );    Info << "读取到的nu为:" << nu << endl;     //-------------从p文献中读取压力场p--------    // 不需要查找关键字,因为通盘文献齐是对于压力场的数据    Info << "读取压力场数据" << endl;    // 界说一个标量场p,无需指定量纲,因为其量纲照旧在相应的文献中指定了    volScalarField p(        IOobject(            "p",                //指命称号            runTime.timeName(), // 得到现时常期            mesh,            IOobject::MUST_READ,            IOobject::AUTO_WRITE),        mesh);     // -------从U文献中读取速率场---------    Info << "读取速率场数据" << endl;    // 界说一个向量场U    volVectorField U(        IOobject(            "U",            runTime.timeName(),            mesh,            IOobject::MUST_READ,            IOobject::AUTO_WRITE),        mesh);     // 界说一个场向量    const vector originVector(0.05, 0.05, 0.005);     // 计算向量originVector与各网格中心的距离中的最大值    // 运用dimensionedVector将vector调理为具有长度量纲的向量    // mag函数计算向量的模    // value函数将数值调理为无量纲标量值    const scalar rFarCell = max(                                mag(dimensionedVector(                                        "x0",                                        dimLength,                                        originVector) -                                    mesh.C()))                                .value();     // 在案例迭代经由中进行场变量计算    while (runTime.loop())    {        Info << "Time = " << runTime.timeName() << nl << endl;        // 在通盘的网格上轮回        for (label cellI = 0; cellI < mesh.C().size(); cellI++)        {            // 左证自界说的函数计算压力值            p[cellI] = calculatedPressure(runTime.time().value(), mesh.C()[cellI],                                          originVector, rFarCell);        }         // 计算压力梯度,并调理为速率,由于量纲不一致,是以需要乘以一个时期量纲进行调理        // 谨防在弗成压缩求解器中,压力的量纲为[0 2 -2 0 0 0 0],压力梯度量纲[0 1 -2 0 0 0 0]        // 因此压力梯度乘上时期得到速率量纲[0 1 -1 0 0 0 0]        U = fvc::grad(p) * dimensionedScalar("tmp", dimTime, 1.0);         // 将数据写入到文献中,标记为AUTO_WRITE的场数据才可被写入        runTime.write();    }     Info << "计算完成";     return 0;} scalar calculatedPressure(scalar t, vector x, vector x0, scalar scale){    scalar r(mag(x - x0) / scale);    // 分母加1e-12是为了在意除以零    scalar rR(1.0 / (r + 1e-12));    scalar f(1.0);    // 复返一个以x0为中心的正弦散布的压力    return Foam::sin(2.0 * Foam::constant::mathematical::pi * f * t) * rR*100;} 

在demo4旅途运用wmake编译措施。

图片

3 测试措施

措施需要协作OpenFOAM案例运转。本案例照旧事前准备了cavity案例,运用底下的敕令运转措施:

cd  $FOAM_RUN/demo4/cavityblockMesh../demo4

运转恶果如下图所示。

图片

不错插足ParaView搜检数据。

图片

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