想在程序中调用UMean这个值,应该如何实现?
-
2.3.x里面没看到channelFoam,2.1.x里面没看到输出UMean: https://github.com/OpenFOAM/OpenFOAM-2.1.x/blob/master/applications/solvers/incompressible/channelFoam/channelFoam.C
把你的log输出用代码的形式输出一下?
虽然在计算过程中会输出UMean这个值,但是不知应该如何调用这个值?
如果程序本身会输出UMean,应该是在程序内部定义了
volVectorField
的一个场,你直接用就可以了不用自己计算。 -
同有这个问题:crying: 困扰了好几天了都.
大家好,我最近在计算一个翼型空化流动算例,用的是interphaseChangeFoam求解器,用fieldAverage函数计算得出了一个时均速度场 UMean 文件,可是当我试图用singleGraph工具提取一条线上的Umean, 却发现会出现以下错误?是不是因为 interPhaseChangeFoam中没有定义UMean场?如果是这样的话,那该怎样才能对UMean这个场进行操作呢:crying:
这是我用singleGraph时输入的命令:
这是错误提示:
-
OpenFOAM里面有后处理程序可以提取mean值,核心的代码如下:
template<class Type> void Foam::functionObjects::fieldAverage::calculateMeanFieldType ( const label fieldi ) const { const word& fieldName = faItems_[fieldi].fieldName(); if (obr_.foundObject<Type>(fieldName)) { const Type& baseField = obr_.lookupObject<Type>(fieldName); Type& meanField = obr_.lookupObjectRef<Type>(faItems_[fieldi].meanFieldName()); scalar dt = obr_.time().deltaTValue(); scalar Dt = totalTime_[fieldi]; if (faItems_[fieldi].iterBase()) { dt = 1; Dt = scalar(totalIter_[fieldi]); } scalar beta = dt/Dt; if (faItems_[fieldi].window() > 0) { const scalar w = faItems_[fieldi].window(); if (Dt - dt >= w) { beta = dt/w; } } meanField = (1 - beta)*meanField + beta*baseField; } }
其位于fieldAverageTemplates.C中.因此你需要把上面的代码转移到solver里面,类似:
- 创立一个UMean场;
- 在代码里面进行下面的计算:
UMean = (1 - deltaT/currentT)*UMean + deltaT/currentT*U;
-
@zhengshu930 解决了,不过我是在修改湍流模型的时候添加的,你是想在哪里添加吗?
-
@东岳 谢谢老师 的回答,受益匪浅
-
@zhengshu930 我是在湍流模型里实现的,以kepsilon模型为例的话,在C文件中存在correct函数,这个是一个每一步都会调用的函数,因此我直接在这里面添加了一下代码
j_=j_+1.0; Ui_=Ui_+U(); umean_=Ui_/j_;
其中j是一个累加的过程,返回当前迭代步数;Ui是j个时间步前面的速度的总和,初值为0,U()是每个时间步计算的值,umean就是j个时间步的平均速度