functionObjects导出数据没有内部值只有边界是caculated
-
各位好,我想在运行算例的时候输出LES的delta大小以及一些其他的SGS数据(最简单的就是Uprime=U-Umean)
我在cfdonline上找个帖子,但是代码看起来是2.X版本的,我将它放到CreateFields.H里面volScalarField LESdelta ( IOobject ( "LESdelta", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionedScalar("LESdelta", dimLength, SMALL) ); if (mesh.objectRegistry::foundObject<volScalarField>("delta")) { const volScalarField& delta = mesh.objectRegistry::lookupObject<volScalarField>("delta"); //LESdelta.internalField() = delta.internalField();原代码,4.0以后internalField这个功能被ref()取代了 LESdelta.ref()=delta;//修改的,感觉不太合适,至少编译不报错 }
导出的delta文件只有一个很小的内部值,边界是caculated,很明显数据没提出来
其次是Uprime,也是看这个帖子https://github.com/syavash20/TurbLab/tree/master/LESpimpleFoam
在creatFields设置了该量之后,Info<< "Reading field UMean\n" << endl; volVectorField UMean ( IOobject ( "UMean", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ), mesh );
去.C文件加一句
UPrime = (U-UMean);
这个导出文件是内部场直接没有,直接uniform 0,边界条件是一堆caculated(已经按照文档所说先算一会给个初始的Umean场了)
所以为什么会没有数据呢? -
自我发这个帖子后我发现了几种可能的原因,供后来的Foamer参考吧
1、最一般的情况就是在自己的求解器(一般是修改过后的------这样才容易出这种问题),里面createFields.H文件未将值初始化,可以看到我在代码中以及给出了初始值,但是系统未识别,后将“SMALL”改成“VSMALL”才能适应v2012以后的版本。
当然你也可以在0文件中新建一个相关变量的文件,然后给它一个初始条件就行————简而言之,变量需要初始值。2、在加代码的时候声明了变量比如volVectorFields,
volVectorFields Uprime = ( U - Umean);
但是没有赋值这一步,所以系统没输出这个变量,要想输出的话在后面加一段Uprime111 = Uprime
,你就会在结果中得到一个Uprime111了。3、如果你的变量是通过运算得来的,那么有可能系统无法完成你的计算所以没结果,首先可以通过Debug的方法检查是哪一步计算算不出来,然后根据自己的情况进行更改吧,我这里报错还是SMALL在2012无法识别的问题。
祝好