想在程序中调用UMean这个值,应该如何实现?
-
在做湍流模型相关的工作,需要在程序中实现调用“时间平均的速度”--UMean,这个应该如何实现呢?
虽然在计算过程中会输出UMean这个值,但是不知应该如何调用这个值?还是需要重新写程序,自己计算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
的一个场,你直接用就可以了不用自己计算。 -
-
-
@benqing 请问您解决了吗?我最近也在进行这个工作,如果解决了,可不可以说一下方法?
-
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 解决了,不过我是在修改湍流模型的时候添加的,你是想在哪里添加吗?
-
@东岳 谢谢老师 的回答,受益匪浅
-
@benqing 我想要直接使用umean进行其他计算,所以需要提取出来,如果复杂的话,可不可以把你邮箱给我,想看一下具体代码,372660640@qq.com,这是我的邮箱
-
@zhengshu930 我是在湍流模型里实现的,以kepsilon模型为例的话,在C文件中存在correct函数,这个是一个每一步都会调用的函数,因此我直接在这里面添加了一下代码
j_=j_+1.0; Ui_=Ui_+U(); umean_=Ui_/j_;
其中j是一个累加的过程,返回当前迭代步数;Ui是j个时间步前面的速度的总和,初值为0,U()是每个时间步计算的值,umean就是j个时间步的平均速度
-
@benqing 谢谢,等我研究研究,不懂的再向您请教。
4/16