栏目分类
你的位置:青铜峡市肯名催化剂有限公司 > 新闻资讯 > 无需显式衔接到应用要领
无需显式衔接到应用要领
发布日期:2024-07-03 16:01 点击次数:130
本文面孔OpenFOAM中的functionObject。
1 先容OpenFOAM求解蓄意经由中,不错使用functionObject实践数据的索要与料理。functionObject是按指定终止实践的小段代码,无需显式衔接到应用要领,当在使用的经由中,不错将特定的数据写入到文献中以便捷图形绘画及后料理。
functionObject在controlDict字典文献中进行指定,且在预界说的技艺点上实践操作。
functionObject在OpenFOAM求解蓄意的经由中不错及时修改。在OpenFOAM蓄意杀青后也不错实践functionObject,举例,不错使用functionObjects蓄意马赫数,涡量场,并在给定点或沿直线的速率进行弃取。
在文献夹$FOAM_SRC/functionObjects中不错找到functionObject的源代码。该文献夹中包含一些子文献夹(field、forces、lagrangian、solver、utilities等),分辨对应着不同的使用类型,在子文献夹下存放多样不同类型的functionObject,如courantNo、forceCoeffs等。如下图所示。
图片客服
除了functionObjects外,在旅途$FOAM_SRC\sampling中不错找到弃取器具的通盘源代码。
functionObject在字典文献controlDict中界说。如底下界说了一个fieldMinMax的对象,该对象用于在指定技艺点上输出蓄意区域中的压力、速率等物理量的最大最小值:
// 对象称呼,由用户给定minmaxdomain{ // 对象类型,与上图中相对应的子文献夹称呼一致 type fieldMinMax; // 使用库 functionObjectLibs ("libfieldFunctionObjects.so"); // 绽放或关闭functionObject enabled true; // 指定输出的物理量形状,这是子字典 mode component; // 指定数据保存频率 writeControl timeStep; writeInterval 1; // 指定是否在屏幕上领略输出信息 log true; // 指定输出的物理场,这是子字典 fields (p U nuTilda nut k omega);}
OpenFOAM中包含了好多functionObject,青铜峡市洁达蚕丝有限公司一些特定的functionObject使用起来较为复杂。另外,青铜峡市洁达蚕丝有限公司functionObjects不错具有好多选项和一些死心,青铜峡市洁达蚕丝有限公司最佳的忽视是阅读doxygen文档或源代码,以学习奈何使用functionObjects。
注:functionObjects源代码旅途:$WM_PROJECT_DIR/src/postProcessing/functionObjects;sampling器具源代码旅途:$WM_PROJECT_DIR/src/sampling;functionObject所需的数据库源代码旅途$FOAM_SRC/OpenFOAM/db/functionObjects。
”2 算例底下以一个使用了functionObject的算例来进行面孔。该算例蓄意的是一个三段翼外流场,如下图所示。
图片
通过使用functionObject在蓄意经由中输出物理量(如yplus、涡量、物理场的平均值、力、力统共、物理场的最大最下周、收支口流量等)。
functionObject在controlDict字典文献中界说,绽放controlDict文献:
首页-微平政门窗有限公司FoamFile{ version 2.0; format ascii; class dictionary; object controlDict;}// * * * * * * * * * * * * * * * * // application simpleFoam;startFrom startTime;startTime 0;stopAt endTime;endTime 2000;deltaT 1;writeControl runTime;writeInterval 50;purgeWrite 100;writeFormat binary; writePrecision 8;writeCompression off;timeFormat general;timePrecision 6;runTimeModifiable yes; //底下为functionObject的界说functions{// 界说第一个functionObject,定名为forces_object// 输出的数据将保存在文献夹postProcessing/forces_object中// 刺眼不同的functionObjects需要界说的条件是不同的forces_object{ // 指定类型为forces,必须项 type forces; // 加载functionObject库 functionObjectLibs ("libforces.so"); // 指定数据输出频率 writeControl timeStep; writetInterval 1; // 激活functionObject对象 enabled true; // 指定参与蓄意的限制,必须项 patches ("wall_slat" "wall_airfoil" "wall_flap"); //// 指定压力场与速率场的变量称呼 pName p; Uname U; // 参考密度值。它仅需要针对不行压缩的流进行界说。 // 对于可压缩流,将使用蓄意的密度代替 rho rhoInf; rhoInf 1.0; //// 指定力矩蓄意所需的旋转中心 CofR (0 0 0);}// 对于forces的写法,客服可参阅文档:/* https://cpp.openfoam.org/v8/classFoam_1_1functionObjects_1_1forces.html*/////////////////////////////////////////////forceCoeffs_object{ // 指定类型为力统共,该项为必选项 type forceCoeffs; functionObjectLibs ("libforces.so"); // 激活此对象 enabled true; // 指定参与蓄意的限制称呼,此项为必选项 patches ("wall_slat" "wall_airfoil" "wall_flap"); // 指定变量称呼 pName p; Uname U; // 仅用于不行压缩流动 rho rhoInf; rhoInf 1.0; // 将数据写入到文献中 log true; // 指定旋转中心坐标 CofR (0.0 0 0); // 用于蓄意统共的参考值,4个均为必选项 pitchAxis (0 0 1); // 俯仰轴 magUInf 1.0; // 参考速率 lRef 1; // 用于力矩蓄意的参考长度 Aref 1; // 用于统共蓄意的参考面积 // 指定数据的写入频率 writeControl timeStep; writeInterval 1; // 指定升力标的与阻力标的,必选项 // 对于升力来讲,其值为攻角的三角函数(-sin,cos,0) // 对于阻力,其值为攻角的三角函数(cos,sin,0) // 刺眼角度换算为弧度 liftDir (0 1 0); dragDir (1 0 0); } ////////////////////////////////// minmaxdomain{ // 指定类型为fieldMinMax,必选项 // 用于输出蓄意域内指定物理量的最大最小值 type fieldMinMax; functionObjectLibs ("libfieldFunctionObjects.so"); enabled true; // 指定蓄意物理场的重量,这里还不错指定magnitude mode component; // 指定数据写入频率 writeControl timeStep; writeInterval 1; log true; // 指定需要输出的物理场 fields (p U nuTilda nut k omega);} ///////////////////////////////////////////yplus{ // 指定类型为yplus,用于输出y+值 type yPlus; functionObjectLibs ("libutilityFunctionObjects.so"); enabled true; log true; writeControl outputTime; }/////////////////////////////////////// fieldAverage1{ // 指定类型fieldAverage,输出物理场的平均值 type fieldAverage; libs ( "libfieldFunctionObjects.so" ); writeControl writeTime; enabled true; log true; timeStart 100; // 底下指定需要输出的物理场,包括U,p及nut fields ( U { mean on; prime2Mean on; base time; } p { mean on; prime2Mean on; base time; } nut { mean on; prime2Mean on; base time; } );} // 径直包含外部界说的functionObject#include "externalFunctionObject"};
这里使用了externalFunctionObject文献,该文献实验如下所示。
{ version 2.0; format ascii; class dictionary; object functionObject;} //functions//{// 界说了监测点数据索要probes_online{ type probes; functionObjectLibs ("libfieldFunctionObjects.so"); enabled true; writeControl timeStep; writeInterval 1; probeLocations ( (1 0 0) (2 0 0) (2 0.25 0) (2 -0.25 0) ); fields ( U p ); } // 界说了涡量索要vorticity{ type vorticity; functionObjectLibs ("libfieldFunctionObjects.so"); enabled true; log true; writeControl outputTime; } //}
这里的functionObject不错在开动时随求解器沿途实践。
但巧合可能预先健忘了在controlDict字典中界说functionObject,导致蓄意杀青后数据并未索要出来。OpenFOAM允许用户在求解蓄意杀青后实践functionObject,此时不错在controlDict文献中添加functionObject,然后诈欺号召:
name_of_the_solver -postProcess –dict dictionary_location
也不错将functionObject写入到一个安适的文献中,然后实践上头的操作号召。一个肤浅的调用例子:
simpleFoam -postProcess -dict system/externalFunctionObject –noZerosimpleFoam -postProcess -dict system/externalFunctionObject –time 500:20003 稽查成果
蓄意杀青后,算例旅途下多出了一个名为postProcessing的文献夹。
图片
该文献夹中的文献组织形状如下所示。
图片
此时不错gnuplot绘画监控获取的数据图。
如稽查力统共文献(旅途postProcessing/forceCoeffs_object/0/forceCoeffs.dat),其实验如下图所示。
图片
不错使用gnuplot稽查阻力统共变化弧线:
set xlabel 'iter'set ylabel 'cd'plot [10:][] 'postProcessing/forceCoeffs_object/0/forceCoeffs.dat' u 1:3 w l title 'cd' lw 2
获取的阻力统共随迭代经由的变化弧线如下图所示:
图片
访佛方式不错稽查升力统共:
set xlabel 'iter'set ylabel 'cl'plot [10:][] 'postProcessing/forceCoeffs_object/0/forceCoeffs.dat' u 1:4 w l title 'cl'
图形领略如图所示。
图片
本站仅提供存储干事,通盘实验均由用户发布,如发现存害或侵权实验,请点击举报。上一篇:11 9+3小复式保举: 01
下一篇:没有了