volScalarField的函数计算
-
我想把Clausius-Clapeyron 方程引入,里面有一项 ln(p/pSat_),编写为log(max((p/pSat_),1E-8))之后,编译成功,但是跑算例的时候就会显示下面的错误。同理,在对(p/pSat_)进行pow函数,甚至直接多次相乘时,都会报类似的错误。如果定义一个常数的volscalarField变量one,进行log(one)计算就是可以正常运行的。
请问是这些函数对volscalarField变量有特殊规定吗。#0 Foam::error::printStack(Foam::Ostream&) at ??:? #1 Foam::sigFpe::sigHandler(int) at ??:? #2 ? in /lib/x86_64-linux-gnu/libpthread.so.0 #3 ? in /lib/x86_64-linux-gnu/libm.so.6 #4 Foam::log(Foam::Field<double>&, Foam::UList<double> const&) at ??:? #5 void Foam::log<Foam::fvPatchField, Foam::volMesh>(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>&, Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&) at ??:?
-
@hongjiewang 代码什么样的
-
@李东岳
老师,代码如下:const volScalarField& p = mixture_.alpha1().db().lookupObject<volScalarField>("p"); volScalarField B = p/pSat_; volScalarField C = log(max(B,1e-8)); volScalarField oneByT = one/TSat_ - R_/L_*C; volScalarField a = 1.0/oneByT+deltaT;
我把p输出之后发现第一步输出的压力都是负数,而且达到6次方级。我的压力边界条件和内部场设置的都是fixValue=1e5,不是很清楚为什么会输出这样的数。不过可以在fvsolution中设置最大最小值进行限定,具体原因还没有找到。
-
@hongjiewang 请问你是在这步Clapeyron方程用局部压力计算饱和温度吗?还有这里的饱和压力pSat是个变量吗?