想在程序中调用UMean这个值,应该如何实现?
-
-
@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 谢谢,等我研究研究,不懂的再向您请教。
2018年3月30日 10:34
16/16
2018年12月30日 13:40