青铜峡市肯名催化剂有限公司
新闻资讯

你的位置:青铜峡市肯名催化剂有限公司 > 新闻资讯 > 无需显式衔接到应用要领

无需显式衔接到应用要领

发布日期: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:2000
3 稽查成果

蓄意杀青后,算例旅途下多出了一个名为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

下一篇:没有了