找回密码
 注册
查看: 2513|回复: 8

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

[复制链接]
发表于 2005-10-25 11:22:16 | 显示全部楼层 |阅读模式

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

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

x
我是菜鸟,UDF刚刚接触,请教大家,UDF可以实现下面的功能么?
边界条件:WALL,设置二类边界条件——热流,热流随空间某一点的温度t阶跃变化:
       500       t<24
   q=  0        25=<t      
       500       t<24
   在UDF里可以实现这样的功能么?此空间某一点温度t随着计算的进行是变化的,在UDF编写时可以调用这点的温度么么?如何调用?用什么函数调用(比方我可以给定这一点的坐标),能否给一点启示?
为这个问题帮助反复看了两遍,但是还是不得要领,极度郁闷,请高手们不吝赐教!
再次拜谢!

 楼主| 发表于 2005-10-26 12:24:16 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

请高手们帮帮忙吧
发表于 2005-10-26 19:55:53 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

用这个方法可能可以:
  (1)找到这个点所在的cell(如果实在面上可以取面上的温度):可以用等体积法,loop 所有的cell,每一个cell的各个面与已知的坐标的点构成N个几何体,N个(考虑到四面体五面体网格的不同,N = 4 5 6)几何体的体积和如果根所loop到的cell的体积相等,则点在该cell内(如果有一个几何体的体积为0则点再该面上),取温度值
  (2)给边界条件
发表于 2005-10-26 23:04:35 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

[这个贴子最后由hp270388026在 2005/10/26 11:07pm 第 1 次编辑]

这个问题比较复杂。我研究过。
看一看文章把
发表于 2005-10-26 23:11:00 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

要求一点的温度,中的思路是:
判断点在哪个单元内,
点和单元的中心距离矢量是多少。
根据单元的温度,和温度梯度,和距离矢量,就可以插补出点的温度。
满复杂的。
在我上面的文章中有描述
 楼主| 发表于 2005-10-28 11:42:49 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

二位的意思我都看明白了
查了一遍帮助
不知道用什么样的函数来调用该点的温度,这是我最挠头的地方
能否在这个地方给点提示?
 楼主| 发表于 2005-10-28 11:50:47 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

在此之前编译过一个相对较简单的例子,是对时间来变动的
源代码如下
&#35;include"udf.h"
DEFINE_PROFILE(heat_flux_profile,thread,i)
{
int x[ND_ND];
float q,r;
int current_time;
face_t f;
begin_f_loop(f,thread)
{
current_time=RP_Get_Real("time-step");
F_PROFILE(f,thread,i)=q;
F_CENTROID(x,f,thread);
r=x[0];
if(current_time<=600)
q=1000;
else if(601<=current_time&current_time<=1000)
q=100;
else
q=1000;
}
end_f_loop(f,thread)
}
在这里,二类边界q的变化与时间有关
为了更进一步考虑,如上所述,q的变化与空间某点温度有关
根据我的理解,在上面程序的基础上,我调用一个该点的位置函数就可以了(汗!窃以为)
但是我查了一下帮助文件,不知道如何调用是好,感觉没有这方面的合适的函数。
这些都是自己的个人理解,不知对错
请高手们讨论讨论
发表于 2005-10-28 15:52:30 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

1 上面的程序有点问题。可改为:
&#35;include"udf.h"
DEFINE_PROFILE(heat_flux_profile,thread,i)
{
int x[ND_ND];
float q,r;
int current_time;
face_t f;
begin_f_loop(f,thread)
{
current_time=RP_Get_Real("time-step");
F_CENTROID(x,f,thread);
r=x[0];
if(current_time<=600)
q=1000;
else if(601<=current_time&current_time<=1000)
q=100;
else q=1000;
F_PROFILE(f,thread,i)=q;
}
end_f_loop(f,thread)
}
可能好些
发表于 2005-10-28 16:00:59 | 显示全部楼层

[求助]UDF编译问题——一直解决不了,愁死我了,请前辈们给点思路吧!

2 求某一格cell的温度。可用C_T(c,t)宏。温度梯度为:C_T_RG(c,t)
求一点的温度,你要先找出这点在那个单元中,和单元的距离矢量,用查补方法求的点的温度。
所以,你要在initalize函数中,查找点在那个单元中的信息。
为此,你又要写出查找点在单元中的函数。具体的,我前面的文章中有。
对于这样复杂的问题,用才c++面向对象的方法开发更有利。
你可以参考:http://219.232.54.3/cgi-bin/LB5000/topic.cgi?forum=51&topic=78&show=0
其他的,就靠你自己了。

哈。。。。。英雄救美人。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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