马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
[这个贴子最后由ybb在 2006/01/02 11:36pm 第 1 次编辑]
我的udf文件(emp1.c)如下:
#include "udf.h"
#define ZERO_C273//摄氏零度对应的K
#define C114//C1 ID
#define C212//C2 ID
#define C310//C3 ID
#define C48//C4 ID
#define C55//C5 ID
#define MAX_VALVE_DATA_NUM160//阀门配置数据的最大个数
#define TIME_SPAN3600//时间段,s
DEFINE_PROFILE(wd,thread,index)//即函数:void name(Thread *thread, int i)
{
//本函数对于每个边界都会调用一次
////定义变量:
double fTime=RP_Get_Real("flow-time");//总的模拟时间,秒
////阀门开关状态数据:
double fV[MAX_VALVE_DATA_NUM + 1][6];
//vv[1]~vv[5]:储存C1~C5的阀门开度;
//时间坐标:
float fT[MAX_VALVE_DATA_NUM + 1];
int nL0 = 0;
for(nL0 = 1 ; nL0 <= MAX_VALVE_DATA_NUM ; nL0 ++)
{fT[nL0] = (float)nL0 * TIME_SPAN;}//单位:s
//vv数据:(这里省略了若干fv[][]数组的赋值语句。这些语句都没问题)
179 int nCurVVID,nL1,nOpen,nWallID;
180 for(nL1=1 ; nL1 < MAX_VALVE_DATA_NUM ; nL1=nL1 + 1)
181 {
182 if((fTime > fT[nL1]) && (fTime <= fT[nL1+1]))
183 {
184 nCurVVID = nL1;
185 nL1 = MAX_VALVE_DATA_NUM + 1;
186 }
187 }
188
189 double fResidualTime=fTime - fT[nCurVVID];
190 nWallID=THREAD_ID(thread)
191 double fRatio=fResidualTime / TIME_SPAN;
192 if(fRatio < fV[nCurVVID][nWallID] / 100.0 ){nOpen=1;}
193 else{nOpen=0;}
194
195 face_t f;
196 if(bOpen)
197 {
198 begin_f_loop (f,thread)
199 {
200 F_PROFILE(f,thread,index) = -6;
201 }
202 end_f_loop (f,thread)
203 }
204 }
//注:以上179...为方便阅读添加,实际代码中没有
============================
用compile方法进行编译,输出结果为:
Make sure that UDF source files are in the directory
that contains your case and data files. If you have an
existing C:\udf\libudf directory, please remove this directory
to ensure that the latest files are used.已复制 1 个文件。
(system "move user_nt.udf C:\udf\libudf\ntx86\2d")0
(system "copy C:\Fluent.Inc\fluent6.1\src\makefile_nt.udf C:\udf\libudf\ntx86\2d\makefile")已复制 1 个文件。
0
(chdir "C:\udf\libudf")()
(chdir "ntx86\2d")()
emp1.c
..\..\src\emp1.c(179) : error C2143: syntax error : missing ';;'; before ';type';
..\..\src\emp1.c(180) : error C2065: ';nL1'; : undeclared identifier
..\..\src\emp1.c(184) : error C2065: ';nCurVVID'; : undeclared identifier
..\..\src\emp1.c(189) : error C2143: syntax error : missing ';;'; before ';type';
..\..\src\emp1.c(190) : error C2065: ';nWallID'; : undeclared identifier
..\..\src\emp1.c(191) : error C2143: syntax error : missing ';;'; before ';type';
..\..\src\emp1.c(192) : error C2065: ';fRatio'; : undeclared identifier
..\..\src\emp1.c(192) : error C2065: ';nCurVVID'; : undeclared identifier
..\..\src\emp1.c(192) : error C2065: ';nOpen'; : undeclared identifier
..\..\src\emp1.c(193) : error C2065: ';nOpen'; : undeclared identifier
..\..\src\emp1.c(195) : error C2275: ';face_t'; : illegal use of this type as an expression
C:\Fluent.Inc\fluent6.1\src\mem.h(126) : see declaration of ';face_t';
..\..\src\emp1.c(195) : error C2146: syntax error : missing ';;'; before identifier ';f';
..\..\src\emp1.c(195) : error C2065: ';f'; : undeclared identifier
..\..\src\emp1.c(196) : error C2065: ';bOpen'; : undeclared identifier
Done.
我觉得这些错误简直就是莫名其妙!
179行:这句前面根本就没少“;”
180行:前面刚刚定义了nL1,却说没定义;
....
其余大概都是这样的错误。真是冤枉啊!我在VC 6.0下面编译没有任何问题。
看了一些资料,我怀疑是这些原因:
1、编译器问题(版本不一样);
2、fluent对语句有特殊的要求;
3、有关参数设置正确;
4、文件的格式问题(ANSI格式?DOS格式?OEM格式?)
怀疑fluent的编译器不认编码为“0D 0A”的回车符。但前面的语句又为什么没问题?
5、fluent的编译器不支持for语句。
以上纯属我个人猜测。别笑哦!
哪位能指点迷津?多谢啦!
|