求问如何给标量场赋值为实数?
-
@浪迹天大 您的意思是通过这样定义一个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 假设你要算一个log(t), 编译肯定是通过不了的,因为t在openfoam里是有单位的,单位是秒,那么你可以定义一个常数1
dimensionedScalar oneSecond ( "oneSecond", dimTime, // 和变量t具有相同dimension 1 );
然后计算log(t/oneSecond),这个oneSecond没有任何物理意义,只是帮助你把变量t的单位去掉好通过编译,你要计算的log(p)也是同理
第二种方法:直接把openfoam的单位检查关掉,这个我没有研究过,你可以求助谷歌
-
@hongjiewang 我直接好家伙,这都两年了居然还回复我。
由于种种原因我现在已经不怎么玩OF了,只能给你一些比较通用的建议。首先看这一堆问号大概是segment fault错误,那么我首先猜是产生了异常值导致求解器爆炸,log函数最容易出现的问题就是传入0值和负值,建议你首先检查数值问题。如果不是数值问题,那就单步调试之类的慢慢debug看看怎么回事,你的两个变量是否正确初始化了等等