求问如何给标量场赋值为实数?
-
各位前辈
forAll(sens,i) { if(~) sens[i]=1.2; }
sens
类型为volScalarField
,这样的操作该怎么实现?
-
@东岳 求问大神
-
看起来你已经实现了?
-
@东岳 对,谢谢大神,之前有个变量类型写错了。 不过我还有2个问题:
1、为何 volScalarField 在声明的时候必须进行初始化?
2、怎样把 scalar 赋值给 volScalarField 的变量?
-
对于第二个问题,我的解决方法是 volScalarField 1=scalar * volScalarField 2
volScalarField 2 是值为1 的单位向量。 但有没有更专业的处理方法?
-
为何 volScalarField 在声明的时候必须进行初始化?
这像是一个规则,目前OpenFOAM不允许这样。
怎样把 scalar 赋值给 volScalarField 的变量?
要内部场:
T.primitiveFieldRef() = 0.0;
要边界场:
T.BoundaryFieldRef() = 0.0;
-
请问,是不是不能对标量场进行对数log运算?需要把标量场的值转化为实数才可以取对数?
比如volscalarField p ,想求得log(p)应该如何操作?
-
@ars
Foam::log(p)
可以吗?
-
@浪迹天大 您的意思是通过这样定义一个scalar?如果是这样的话,试了一下,不行。
我是在functionObjects中想计算一个物理量C。
所以在里面定义了volscalarField C。而这个物理量的表达式是通过物理量A,B,D所构成的表达式来进行计算的。
A,B也是自己定义的volscalarField,D是volvectorField;
表达式大概为C=A/(log(mag(D)/B)。编译时没有问题,但计算这个物理量C时,却报错:
Argument of trancendental function not dimensionless
把log去掉就完全ok。
-
@ars Openfoam有dimension检查, log是超越函数,要求里面的数必须是无量纲的,因此你只能用这种形式log(p/pInf) 把p的单位消掉。
-
@Zephyr 您是指这个吗?这样能去单位?
pInf()——Return the pressure at infinity.
但是我需要取对数的不是压力这个物理量。
按这个做法,编译没法通过。
请问,openFoam 里面如何去单位?希望详述一下。
-
@ars 假设你要算一个log(t), 编译肯定是通过不了的,因为t在openfoam里是有单位的,单位是秒,那么你可以定义一个常数1
dimensionedScalar oneSecond ( "oneSecond", dimTime, // 和变量t具有相同dimension 1 );
然后计算log(t/oneSecond),这个oneSecond没有任何物理意义,只是帮助你把变量t的单位去掉好通过编译,你要计算的log(p)也是同理
第二种方法:直接把openfoam的单位检查关掉,这个我没有研究过,你可以求助谷歌