一、问题背景
下面这个是设置温度边界的UDF代码。
#include "udf.h"
DEFINE_PROFILE(Inlet_Temp, t, i)
{
face_t f;
begin_f_loop(f, t)
{
real time=RP_Get_Real("flow-time");
if(time<7200 || time==7200)
{
F_PROFILE(f, t, i) = 288+0.025*time;
}
else if(time>7200 && time<18000 && time==18000)
{
F_PROFILE(f, t, i) = 468;
}
else if(time>18000 && time<28800 && time==28800)
{
F_PR0FILE(f, t, i) = 468 - (time-18000)/60;
}
else
F_PROFILE(f, t, i) = 288;
}
end_f_loop(f, t)
}
在使用2022的内置fluent编译器编译时,出现了下面的错误【F_PR0FILE(f, t, i) expression is not assignable】
D:\PROGRA~2\ANSYSI~1\v221\fluent\ntbin\clang\10\Include\10.0.18362.0\shared\basetsd.h(322,12): warning: cast to 'void * __ptr32' from smaller integer type 'unsigned long' [-Wint-to-void-pointer-cast]
return((void * POINTER_32) (unsigned long) (ULONG_PTR) p);
^
temp_inlet.c(21,36): error: expression is not assignable
F_PR0FILE(f, t, i) = 468 - (time-18000)/60;
~~~~~~~~~~~~~~~~~~ ^
1 warning and 1 error generated.
scons: *** [temp_inlet.obj] Error 1
二、解决办法
(赋值)表达式不能赋值。
一般有两种原因。
第一种是赋值表达式不是一个变量;
第二种是因为表达式含糊不清,这往往是因为编程人员不熟悉语言运算符的运算顺序,而导致无法构成有效赋值表达式的错误。
显然我这里的代码不存在第二种错误,因为等号右边太简单了。
如果仔细观察,我们可以发现F_PR0FILE这里是一个数字0,而不是字母O,显然拼写有误。
改成F_PROFILE,就编译正确了。只有警报,没有错误。