如何提取张量的某一个值
-
看源代码
https://cpp.openfoam.org/v8/volFieldsFwd_8H_source.html
这里62行有 volTensorField 的定义,和 GeometricField 有关https://cpp.openfoam.org/v8/GeometricField_8H_source.html
这里是 GeometricField 的定义,80行有三个形式参数的名字,对着上一个链接 volTensorField 的定义搜,vol 作为特征词搜到的结果最少,在538行,看起来是你要的。如果不是这个,那就在这里搜 return,找成员函数。或者猛啃C++,接着挖
-
-
@bestucan 前辈您好!很抱歉再次打扰您,针对您之前的回复,我认真研读了一下,但还是存在一些困难,还希望您能够指点一个思路,感激不尽!
我现在在用非线性SGS模型,为了防止计算崩掉,就要限制SGS模型计算的Tij,可是Tij是一个类型为
volTensorField
的张量,我现在无法提取出来这个Tij的每一个分量,进行限制。我刚刚简单试验了一下如下代码:
const volSymmTensorField S = symm(gradU); const volScalarField Z = S.zz();
,报错如下:
DNM.C: In member function ‘Foam::dimensionedVector Foam::compressible::LESNonlinearModels::DCNM::C(const volTensorField&) const’: DNM.C:83:28: error: ‘const volSymmTensorField’ has no member named ‘zz’ const volScalarField Z = S.zz();
我目前的思路是参考tensor的定义成员xx xy xz的思路,将volTensorField中也定义一个xx xy xz等9个分量,,但不知道这样可行否,,同时由于这个原始的湍流模型代码比较老(是2.4版本的),我如何能快速找到tensor 和 volTensorField的定义和代码呢?
希望前辈百忙之中再指点一下,谢谢!
-
不忙不忙,就是不太懂
但是探索不懂的东西的方法都是相通的。你要解决的问题我没解决过,所以要解决花费的时间比较多。思路就是看代码。你也在看,但我们看的版本对不上,开源软件有个特点,太自由了,所以版本间的差距特别大。在你的代码中找相关定义的方法:
grep -R 'volTensorField' ./
先用 cd 命令 切换到源代码所在的目录
~/OpenFOAM/OpenFOAM-version/
然后运行上面的那条命令。-R
是递归查找,包括子文件夹,'volTensorField'
是查找的内容,区别大小写,./
代表当前路径。另外,在
~/OpenFOAM/OpenFOAM-version/
里查,查的太多。可以分别去这个文件夹下的src
或者applications
下面查。如果还是太多,就把输出重定向到一个文件再看。不过没颜色不太好看。grep -R 'volTensorField' ./ > grep.log