|
|

楼主 |
发表于 2009-10-1 23:26:47
|
显示全部楼层
我想到一个解决的办法,就是在整个流畅面(2D,domain=2)循环每个网格单元,然后找到距离给定点最近网格中心的网格,然后利用网格的单元线上的速度差值得到给定点的速度大小。我编了一个简单的udf如下,利用C_FACE和C_FACE_THREAD在一个单元网格内搜索单元线,但当只用C_FACE(程序里tf要改成t)给出的的单元线的坐标结果并不是构成单元的三根线,如果C_FACE和C_FACE_THREAD同时使用,则输出结果出错,请问出现这个结果的原因是什么?如何解决?
#include <stdio.h>
#include "udf.h"
#include "mem.h"
#define UDF_FILE "maye_out.dat"
DEFINE_ADJUST(timemean,domain)
{
Thread *t = Lookup_Thread(domain, 2);
cell_t c;
face_t f;
Thread *tf;
real xf[ND_ND];
float velx,vely,x1,y1;
int m;
FILE *fp1=fopen(UDF_FILE, "w");
i=1;
{
begin_c_loop(c,t)
{
c_face_loop(c,t,m)
{
f=C_FACE(c,t,m);
tf=C_FACE_THREAD(c,t,m);
F_CENTROID(xf,f,tf);
x1=xf[0];
y1=xf[1];
velx=F_U(f,tf);
vely=F_V(f,tf);
fprintf(fp1,"%d %e %e %e %e\n",i,x1,y1,velx,vely);
}
}
end_c_loop(c,t)
}
fclose(fp1);
}
}
[ 本帖最后由 maye761 于 2009-10-2 05:40 编辑 ] |
|