找回密码
 注册
查看: 5030|回复: 15

【求助】关于温度变化的UDF

[复制链接]
发表于 2010-4-27 16:10:03 | 显示全部楼层 |阅读模式

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

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

x
二维计算域内,有两个边界。随着计算的进行(或者时间的推移),边界1上的温度发生变化,要想让边界2的温度,在与边界1保持7℃温差的条件下,随之发生改变,这样的UDF怎么编?(也就是先获取边界1的温度平均值,减去7K后的值返回到边界2上)。

高人指点一下吧,万分感谢啊!
发表于 2010-4-27 20:14:02 | 显示全部楼层
可以取一个边界的ID对其边界网格进行循环,计算其平均温度,然后赋给相应的另一个边界
 楼主| 发表于 2010-4-28 11:10:23 | 显示全部楼层

回复 2# swimming02 的帖子

谢谢!ID是Fluent里Define——Boundary Define里显示的ID吗?

我编的这个您帮我看一下吧~谢谢了!
#include "udf.h"

face_t f;
Thread *f_thread;
int ID,i,count;
real temp[100];
real avgtemp;
Domain *domain;
real x[ND_ND];

DEFINE_PROFILE(T,thread,position)
{
        ID=1;
        count=0;
        domain = Get_Domain(1);
        f_thread = Lookup_Thread(domain, ID);
       
        begin_f_loop(f, f_thread)
        {
                temp[count]=F_T(f,f_thread);
                F_CENTROID(x,f,f_thread);
                count+=1;
        }
        end_f_loop(f, f_thread)
       
       
        avgtemp=0.0;
        for(i=0;i<=count-1;i++)
        {
                avgtemp=avgtemp+temp[count];               
        }
        avgtemp=avgtemp/count;

       
        F_PROFILE(f,thread,position)=avgtemp;
}
发表于 2010-4-28 12:08:44 | 显示全部楼层
是边界条件里面的id。不过你这计算的应该不是平均温度,如果是固体壁面的话平均温度一般是用面积平均计算的吧,当然如果你的网格大小都完全一样的话得出的数值是一样的。
 楼主| 发表于 2010-4-28 12:34:18 | 显示全部楼层

回复 4# swimming02 的帖子

谢谢!
我的是二维的,固体壁面就是一个圆。
我这总体思路是对的吗?我不明白你说的面积平均是什么意思?能帮我改改吗?
发表于 2010-4-28 14:12:12 | 显示全部楼层
我觉得这样的思路应该是可以实现的,面积平均就是将温度在面上积分,然后除以总面积。
 楼主| 发表于 2010-4-28 14:25:27 | 显示全部楼层
万分感谢!我基本明白您的意思了,应该是类似于这样的吧:
begin_f_loop(f, thread)
        {               
                F_CENTROID(pos, f, thread);                                
                F_AREA(A, f, thread);
                area = NV_MAG(A);
                z = pos[2];
                T = C_T(cell, t0);               
                hf_fluent = BOUNDARY_HEAT_FLUX(f, thread)/area;
这样三维的需要面平均,可是我的是二维的,边界只是线,也需要面平均吗?
发表于 2010-4-28 14:35:58 | 显示全部楼层
就是这个意思,实际上二维的也是按三维来计算的,fluent中默认垂直二维平面的长度为单位1。
发表于 2010-4-28 15:08:19 | 显示全部楼层
原帖由 yuzhuchen1504 于 2010-4-28 03:10 发表
谢谢!ID是Fluent里Define——Boundary Define里显示的ID吗?

我编的这个您帮我看一下吧~谢谢了!
#include "udf.h"

face_t f;
Thread *f_thread;
int ID,i,count;
real temp[100];
real avgtemp;
Domai ...

#include "udf.h"
#define WALL1_ID 3  //根据壁面1的实际id修改
real avg_temp=300.0;

DEFINE_ADJUST(wall1_avg_temp, domain)
{
        real NV_VEC(A);
        real sum_T_A=0.0,sum_A=0.0;
        face_t f;
        Thread*f_thread;
        f_thread = Lookup_Thread(domain, WALL1_ID);
        begin_f_loop(f, f_thread)
        {
                F_AREA(A,f,f_thread);
                sum_A+=NV_MAG(A);               
                sum_T_A+=NV_MAG(A)*F_T(f, f_thread);
        }
        end_f_loop(f, f_thread)

        avg_temp=sum_T_A/sum_A;
}

DEFINE_PROFILE(Wall2_T,t,position)
{
        face_t f;
        begin_f_loop(f,t)
        {
                F_PROFILE(f,t,position) = avg_temp;
        }
        end_f_loop(f,t)
}
将计算平均温度放在DEFINE_PROFILE里面也是可以的,但是会空耗很多计算量,因为对于壁面2上的每一个面都会计算一遍,有多少个面就重复计算多少遍,毫无意思,所以放在DEFINE_ADJUST比较好,每次迭代前算一次就够了。记得hook。

[ 本帖最后由 gearboy78 于 2010-4-28 07:11 编辑 ]
 楼主| 发表于 2010-4-28 19:50:58 | 显示全部楼层

回复 8# swimming02 的帖子

谢谢!
 楼主| 发表于 2010-4-28 19:51:43 | 显示全部楼层

回复 9# gearboy78 的帖子

万分感谢啊!好心人中的高手,高手中的好心人!
发表于 2011-9-1 08:39:33 | 显示全部楼层
DEFINE_ADJUST函数每进行一次迭代就执行一次,因此即使是非定常问题也可以动态的修改边界条件
DEFINE_PROFILE可以自定义边界条件,可以定义边界随时间和空间变化,因此也能动态的修改边界条件。对于动态问题,此函数只在每个时间步后修改边界条件。
发表于 2011-9-1 14:53:48 | 显示全部楼层
末学碰到了同样的问题,要把一个面的温度传给另一个面,仿照前辈们的改了改,通过了编译,但是初始化报错Error:
Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: ()
怎么办啊?
发表于 2011-9-1 15:10:06 | 显示全部楼层
发表于 2013-1-18 19:35:38 | 显示全部楼层

回复 12# sdudxg 的帖子

这个怎么弄?2D模型,其中一个边(模型中为线)的边界是一个随时间变化的温度荷载,函数为T=20+1080(1-0.325e-0.167t-0.675e-2.5t)即HC升温曲线。怎么编辑UDF,小弟没学过C语言,看了n的n次方的时间 搞不定啊!求版主及各位大神给予本屌丝解答!不胜感激。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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