找回密码
 注册
查看: 6328|回复: 4

怎样利用fluent输出流场中某一个点的速度值?

[复制链接]
发表于 2009-9-30 21:58:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
怎样在fluent计算过程中,利用udf,输出流场中某一个点的速度值?这个点在每步迭代时都会更新。此点不是网格中心,也不是节点,是由外面的文件不断更新给定的。
 楼主| 发表于 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 编辑 ]
 楼主| 发表于 2009-10-2 15:21:15 | 显示全部楼层
我发现问题出在F_U(t,tf)和F_V(t,tf)上。坐标x1,y1都没问题。如果读出单元边界线上的压力可以,但读出单元边界线上的速度就有问题。
 楼主| 发表于 2009-10-2 22:55:53 | 显示全部楼层
我用节点循环代替了单元线循环,替代程序如下。但为什么fluent不能认出NODE_GX()宏,编译没办法通过呢?输出的节点坐标都是正确的。
Node *node;
c_node_loop(c,t,n)
{
node=C_NODE(c,t,n);
fprintf(fp1,"%d %e %e %e \n",i,NODE_X(node),NODE_Y(node),NODE_GX(node));
}
发表于 2011-5-22 11:11:07 | 显示全部楼层
同样在此处困惑不解……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表