// 淌若文献被修改
发布日期:2024-07-03 17:31 点击次数:130
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 .
文献结构如下图所示。
首页-盈盈玉壁纸有限公司图片空调清洗
这里的cavity文献夹用于秩序测试。
修改files文献与options文献。
files文献的骨子demo4.CEXE = demo4options文献的骨子
EXE_INC = \ -I$(FOAM_SRC)/finiteVolume/lnInclude \ -I$(FOAM_SRC)/meshTools/lnInclude EXE_LIBS = \ -lfiniteVolume \ -lmeshTools2 源文献
本案例演示从文献中赢得场数据,然后再对读取的数据进行操作。
秩序代码如下。
#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稽查数据。
图片
本站仅提供存储管事,所有骨子均由用户发布,如发现存害或侵权骨子,请点击举报。