如何使用lookupObject寻找SRC库内的场变量
-
各位老师,我目前在使用MPPICFoam求解器时,需要在主函数中对壁面粘附的massStick这个场进行处理,但是现在无法寻找到这一场变量,尝试两种写法,虽都能通过编译,但运行均会报错,代码及报错信息如下1,2。具体需要寻找的场变量定义如下图,希望各位老师,朋友加以指点,不胜感激,卡在这地方好几天了
1、const volScalarField stick = mesh.time().lookupObject<volScalarField>("massStick"); //报错信息是 request for volScalarField massStick from objectRegistry shiyan3 failed available objects of type volScalarField are 0()
2、
const volScalarField stick = mesh.lookupObject<volScalarField>("massStick"); //报错信息是 request for volScalarField massStick from objectRegistry region0 failed available objects of type volScalarField are 8 ( alpha.air_0 deltaH2 nu mu.air p alpha.air rho.air deltaH1 )
-
前后调用关系正确么。还有你那个if执行了么。另外你那个定义放在别个位置可以么,另外你那个不需要
this->owner().name() + ...
,直接massStkck
就行 -
@李东岳 感谢东岳老师的回答,第一张图内代码定义的massStick()不是我写的,是src库内定义的场变量,我目前想在求解器主程序内寻找到这一变量,于是在求解器程序内写了如代码1,2两种方式,发现都无法寻找到massStick这个场变量,老师您看代码1,2写的是不是有啥问题?谢谢东岳老师!
-
@upc_ngh 试试在这两句lookup之前显式调用下massStick()呢?
-
@马乔 谢谢马乔老师的回答,这个问题我通过其他方法绕过去解决了。我在求解器外定义了一个场,然后传输进SRC中,把我想获取的值传递到这个场内,然后就可以在求解器调用massStick()的数值了,谢谢前辈的点拨,我后面试试先调用这个方法是否可行,再次感谢!
-
@upc_ngh 您好,我刚好最近也遇到这个问题,想要把src文件夹下的值传递到application中,请问您具体是怎么实现和解决的呢,望赐教,感激不尽
-
@四季之中的隐星 你好,我的方法比较笨。首先在application定义一个场变量(和你要传回来的场值最好一样);然后把这个量传递进SRC中,在SRC里面把场的const性质强行转换为非const,这样就可以赋值,传递出来了
-
@upc_ngh 从const转换到非const是怎么做的
,我现在只能通过mesh.lookupObject<volScalarField>获得场值。
-
@四季之中的隐星
我自己写的求解器场变量是XX,传进去之后使用const volatile进行转换,你看看是否有帮助const fvMesh& mesh = this->owner().mesh(); const volatile volScalarField& zhan = mesh.objectRegistry::lookupObject<volScalarField>("XX"); const volatile volScalarField& Tsur = mesh.objectRegistry::lookupObject<volScalarField>("Tcell"); volScalarField* modifier = (volScalarField*)(&zhan); volScalarField& XXX = *modifier; volScalarField* modifierTsur = (volScalarField*)(&Tsur); volScalarField& Tsurface = *modifierTsur;
-
@upc_ngh 好的,非常感谢
-
@upc_ngh 有一个更简单的方法,我最近发现的,你索引的时候不要用
···lookupObject···
用
···lookupObjectRef···
用这个函数查找的结果可以直接修改并传值回去