如何提取张量的某一个值



  • 各位前辈们好!

    我现在定义了一个张量 volTensorField S,现在想输出其中的 S.xx()这个分量的值,查看了一些前辈之前的讨论帖子:链接文本

    请问对于 类型为volTensorField的张量S怎样输出它的分量S.xx()呢?


  • Linux讲师 OpenFOAM讲师

    看源代码
    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++,接着挖
    :xiezuoye:


  • Linux讲师 OpenFOAM讲师

    https://cfd-china.com/topic/4128/修改湍流模型-定义表达式的问题

    他这个帖子刚好用到那个internal那个函数。

    两个示例用法

    ./utilities/postProcessing/postProcess/postProcess.C:    ReadFields(volTensorField);
    ./utilities/postProcessing/postProcess/postProcess.C:    ReadFields(volTensorField::Internal);
    


  • 哇,感谢前辈回复,我仔细去学习一下



  • @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的定义和代码呢?

    希望前辈百忙之中再指点一下,谢谢!


  • Linux讲师 OpenFOAM讲师

    @小考拉

    不忙不忙,就是不太懂:mihu:
    但是探索不懂的东西的方法都是相通的。你要解决的问题我没解决过,所以要解决花费的时间比较多。思路就是看代码。你也在看,但我们看的版本对不上,开源软件有个特点,太自由了,所以版本间的差距特别大。

    在你的代码中找相关定义的方法:

    grep -R 'volTensorField' ./
    

    先用 cd 命令 切换到源代码所在的目录 ~/OpenFOAM/OpenFOAM-version/
    然后运行上面的那条命令。-R 是递归查找,包括子文件夹,'volTensorField' 是查找的内容,区别大小写, ./代表当前路径。

    另外,在 ~/OpenFOAM/OpenFOAM-version/里查,查的太多。可以分别去这个文件夹下的src或者applications下面查。如果还是太多,就把输出重定向到一个文件再看。不过没颜色不太好看。

    grep -R 'volTensorField' ./ > grep.log
    

Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2