OpenFOAM 后自定义functionObject来进行后处理的编译与使用
需要自定义一个物理场的后处理。
在用的教新的版本,postProcess
主要通过solver来调用。
调用命令如下所示
pimpleFoam -postProcess -func xxxfunc
扒其源码,
主要执行的函数是
void executeFunctionObjects
(
const argList& args,
const Time& runTime,
fvMesh& mesh,
const wordHashSet& selectedFields,
functionObjectList& functions,
bool lastTime
);
在该函数内执行了 functions.exucute()
因此需要调研 functionObjectList.execute()
函数,其中最重要的是
ok = funcObj.execute() && ok;
ok = funcObj.write() && ok;
其中funcObj
是functionObjects
类的对象。因此最主要的调用的是自己定义的后处理库有这样几个要求(除去本身C++ 的语言特性要求)
- 需要派生自
Foam::functionObjects
- 需要定义
execute()
和write()
写好库内容后之前按照OpenFOAM自定义库编译步骤即可。
与其他库编译后就能使用不同,postProcess
的程序流机制类似boost库的options功能。需要额外添加输入定义参数,在OF 中路径为~/OpenFOAM-v2106/etc/caseDicts/postProcessing/fields
需要在此路径给出options
的参数定义。文件名与类名同名。如下所示,以输出壁面法矢为例。
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Version: v2106
\\ / A nd | Website: www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Description
Calculates the norms at wall patches, outputting the data as a
volVectorField.
\*---------------------------------------------------------------------------*/
type wallNorm;
libs (fieldFunctionObjects);
executeControl writeTime;
writeControl writeTime;
// ************************************************************************* //